diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9122b0e2b9..94570742f4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -153,7 +153,7 @@ jobs: integration-tests: name: Integration tests - timeout-minutes: 30 + timeout-minutes: 40 strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] diff --git a/.gitignore b/.gitignore index 4152db4f62..f1899e4400 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ __pycache__/ .idea/ *.so samples/scratch/ +*.pyd diff --git a/Cargo.lock b/Cargo.lock index 92cd169d12..069dcabf19 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,19 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "getrandom 0.3.3", + "once_cell", + "version_check", + "zerocopy 0.8.27", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -26,6 +39,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "aligned-vec" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" +dependencies = [ + "equator", +] + [[package]] name = "allocator" version = "0.0.0" @@ -33,6 +55,15 @@ dependencies = [ "mimalloc-sys", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anes" version = "0.1.6" @@ -103,6 +134,21 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + [[package]] name = "async-trait" version = "0.1.81" @@ -144,11 +190,47 @@ dependencies = [ "backtrace", ] +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bitflags" -version = "2.6.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "bumpalo" @@ -158,9 +240,23 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.17.1" +version = "1.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" +checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "byteorder" @@ -191,6 +287,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "ciborium" version = "0.2.2" @@ -258,12 +360,59 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +[[package]] +name = "codespan-reporting" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + [[package]] name = "colorchoice" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.9.4", + "core-foundation", + "libc", +] + +[[package]] +name = "cpp_demangle" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96e58d342ad113c2b878f16d5d034c03be492ae460cdbc02b7f0f2284d310c7d" +dependencies = [ + "cfg-if", +] + [[package]] name = "criterion" version = "0.5.1" @@ -274,12 +423,14 @@ dependencies = [ "cast", "ciborium", "clap", - "criterion-plot", + "criterion-plot 0.5.0", "is-terminal", - "itertools", + "itertools 0.10.5", "num-traits", "once_cell", "oorandom", + "plotters", + "rayon", "regex", "serde", "serde_derive", @@ -288,6 +439,27 @@ dependencies = [ "walkdir", ] +[[package]] +name = "criterion" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1c047a62b0cc3e145fa84415a3191f628e980b194c2755aa12300a4e6cbd928" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot 0.6.0", + "itertools 0.13.0", + "num-traits", + "oorandom", + "regex", + "serde", + "serde_json", + "tinytemplate", + "walkdir", +] + [[package]] name = "criterion-plot" version = "0.5.0" @@ -295,15 +467,79 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ "cast", - "itertools", + "itertools 0.10.5", ] +[[package]] +name = "criterion-plot" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b1bcc0dc7dfae599d84ad0b1a55f80cde8af3725da8313b528da95ef783e338" +dependencies = [ + "cast", + "itertools 0.13.0", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + [[package]] name = "crunchy" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +[[package]] +name = "debugid" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "uuid", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "difference" version = "2.0.0" @@ -316,6 +552,15 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59f8e79d1fbf76bdfbde321e902714bf6c49df88a7dda6fc682fc2979226962d" +[[package]] +name = "document-features" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +dependencies = [ + "litrs", +] + [[package]] name = "either" version = "1.13.0" @@ -365,6 +610,32 @@ dependencies = [ "log", ] +[[package]] +name = "equator" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" +dependencies = [ + "equator-macro", +] + +[[package]] +name = "equator-macro" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + [[package]] name = "errno" version = "0.3.9" @@ -391,6 +662,69 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f4cdac9e4065d7c48e30770f8665b8cef9a3a73a63a4056a33a5f395bc7cf75" +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "findshlibs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40b9e59cd0f7e0806cca4be089683ecb6434e602038df21fe6bf6711b2f07f64" +dependencies = [ + "cc", + "lazy_static", + "libc", + "winapi", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "futures" version = "0.3.30" @@ -498,24 +832,138 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.5+wasi-0.2.4", +] + [[package]] name = "gimli" version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glow" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.9.4", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "gpu-allocator" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" +dependencies = [ + "log", + "presser", + "thiserror 1.0.63", + "windows", +] + +[[package]] +name = "gpu-descriptor" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" +dependencies = [ + "bitflags 2.9.4", + "gpu-descriptor-types", + "hashbrown 0.15.5", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.9.4", +] + [[package]] name = "half" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", + "num-traits", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "foldhash 0.2.0", ] [[package]] @@ -530,24 +978,94 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + [[package]] name = "humantime" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "iai-callgrind" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b1e4910d3a9137442723dfb772c32dc10674c4181ca078d2fd227cd5dce9db0" +dependencies = [ + "bincode", + "derive_more", + "iai-callgrind-macros", + "iai-callgrind-runner", +] + +[[package]] +name = "iai-callgrind-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d03775318d3f9f01b39ac6612b01464006dc397a654a89dd57df2fd34fb68c3" +dependencies = [ + "derive_more", + "proc-macro-error2", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn", +] + +[[package]] +name = "iai-callgrind-runner" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b74c9743c00c3bca4aaffc69c87cae56837796cd362438daf354a3f785788c68" +dependencies = [ + "serde", +] + [[package]] name = "indenter" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" +[[package]] +name = "indexmap" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" +dependencies = [ + "equivalent", + "hashbrown 0.15.5", +] + [[package]] name = "indoc" version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +[[package]] +name = "inferno" +version = "0.11.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "232929e1d75fe899576a3d5c7416ad0d88dbfbb3c3d6aa00873a7408a50ddb88" +dependencies = [ + "ahash", + "indexmap", + "is-terminal", + "itoa", + "log", + "num-format", + "once_cell", + "quick-xml", + "rgb", + "str_stack", +] + [[package]] name = "is-terminal" version = "0.4.13" @@ -580,12 +1098,27 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + [[package]] name = "jobserver" version = "0.1.32" @@ -597,10 +1130,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -611,11 +1145,34 @@ dependencies = [ "qsc", ] +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading", + "pkg-config", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "libc" -version = "0.2.158" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libfuzzer-sys" @@ -628,6 +1185,16 @@ dependencies = [ "once_cell", ] +[[package]] +name = "libloading" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + [[package]] name = "libm" version = "0.2.8" @@ -650,12 +1217,37 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litrs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + +[[package]] +name = "lock_api" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "log" version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "matrixmultiply" version = "0.3.9" @@ -672,6 +1264,15 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "memmap2" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" +dependencies = [ + "libc", +] + [[package]] name = "memoffset" version = "0.9.1" @@ -681,6 +1282,21 @@ dependencies = [ "autocfg", ] +[[package]] +name = "metal" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" +dependencies = [ + "bitflags 2.9.4", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + [[package]] name = "miette" version = "7.2.0" @@ -697,7 +1313,7 @@ dependencies = [ "supports-unicode", "terminal_size", "textwrap", - "thiserror", + "thiserror 1.0.63", "unicode-width", ] @@ -728,6 +1344,32 @@ dependencies = [ "adler", ] +[[package]] +name = "naga" +version = "27.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags 2.9.4", + "cfg-if", + "cfg_aliases", + "codespan-reporting", + "half", + "hashbrown 0.16.1", + "hexf-parse", + "indexmap", + "libm", + "log", + "num-traits", + "once_cell", + "rustc-hash", + "spirv", + "thiserror 2.0.16", + "unicode-ident", +] + [[package]] name = "nalgebra" version = "0.33.0" @@ -768,15 +1410,35 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + [[package]] name = "noisy_simulator" version = "0.0.0" dependencies = [ - "criterion", + "criterion 0.7.0", "nalgebra", "num-complex", - "rand", - "thiserror", + "rand 0.8.5", + "thiserror 1.0.63", ] [[package]] @@ -798,6 +1460,27 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec", + "itoa", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -825,6 +1508,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", ] [[package]] @@ -848,18 +1541,66 @@ version = "11.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" +[[package]] +name = "ordered-float" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" +dependencies = [ + "num-traits", +] + [[package]] name = "owo-colors" version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caff54706df99d2a78a5a4e3455ff45448d81ef1bb63c22cd14052ca0e993a3f" +[[package]] +name = "parking_lot" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "paulimer" +version = "0.0.1" +dependencies = [ + "criterion 0.7.0", + "getrandom 0.2.15", + "num-derive", + "num-traits", + "pprof", + "proptest", + "rand 0.8.5", + "rustc-hash", + "sorted-iter", + "sorted-vec", +] + [[package]] name = "pin-project-lite" version = "0.2.14" @@ -872,11 +1613,77 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "plotters" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" + +[[package]] +name = "plotters-svg" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" +dependencies = [ + "plotters-backend", +] + [[package]] name = "portable-atomic" -version = "1.7.0" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "pprof" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" +checksum = "afad4d4df7b31280028245f152d5a575083e2abb822d05736f5e47653e77689f" +dependencies = [ + "aligned-vec", + "backtrace", + "cfg-if", + "criterion 0.5.1", + "findshlibs", + "inferno", + "libc", + "log", + "nix", + "once_cell", + "smallvec", + "spin", + "symbolic-demangle", + "tempfile", + "thiserror 1.0.63", +] [[package]] name = "ppv-lite86" @@ -884,9 +1691,15 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + [[package]] name = "probability" version = "0.20.3" @@ -897,6 +1710,28 @@ dependencies = [ "special", ] +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "proc-macro2" version = "1.0.86" @@ -906,6 +1741,32 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "profiling" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" + +[[package]] +name = "proptest" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.9.4", + "lazy_static", + "num-traits", + "rand 0.9.2", + "rand_chacha 0.9.0", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", +] + [[package]] name = "pyo3" version = "0.27.2" @@ -984,7 +1845,22 @@ dependencies = [ name = "qdk_simulators" version = "0.0.0" dependencies = [ + "bytemuck", + "criterion 0.7.0", + "expect-test", + "futures", + "iai-callgrind", + "nalgebra", + "noisy_simulator", + "num-bigint", + "num-complex", + "num-traits", + "paulimer", "quantum-sparse-sim", + "rand 0.8.5", + "regex-lite", + "rustc-hash", + "wgpu", ] [[package]] @@ -992,7 +1868,7 @@ name = "qsc" version = "0.0.0" dependencies = [ "allocator", - "criterion", + "criterion 0.7.0", "env_logger", "expect-test", "indoc", @@ -1020,7 +1896,7 @@ dependencies = [ "qsc_project", "qsc_rca", "rustc-hash", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -1055,7 +1931,7 @@ dependencies = [ "rustc-hash", "serde", "serde_json", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -1086,12 +1962,12 @@ dependencies = [ name = "qsc_data_structures" version = "0.0.0" dependencies = [ - "bitflags", + "bitflags 2.9.4", "expect-test", "miette", "rustc-hash", "serde", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -1125,9 +2001,9 @@ dependencies = [ "qsc_hir", "qsc_lowerer", "qsc_passes", - "rand", + "rand 0.8.5", "rustc-hash", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -1164,7 +2040,7 @@ dependencies = [ "qsc_hir", "qsc_parse", "rustc-hash", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -1195,7 +2071,7 @@ dependencies = [ "rustc-hash", "serde", "serde_json", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -1211,7 +2087,7 @@ dependencies = [ name = "qsc_openqasm_compiler" version = "0.0.0" dependencies = [ - "criterion", + "criterion 0.7.0", "difference", "expect-test", "indenter", @@ -1226,14 +2102,14 @@ dependencies = [ "qsc_openqasm_parser", "qsc_passes", "rustc-hash", - "thiserror", + "thiserror 1.0.63", ] [[package]] name = "qsc_openqasm_parser" version = "0.0.0" dependencies = [ - "bitflags", + "bitflags 2.9.4", "enum-iterator", "expect-test", "indenter", @@ -1242,14 +2118,14 @@ dependencies = [ "num-traits", "qsc_data_structures", "rustc-hash", - "thiserror", + "thiserror 1.0.63", ] [[package]] name = "qsc_parse" version = "0.0.0" dependencies = [ - "bitflags", + "bitflags 2.9.4", "enum-iterator", "expect-test", "indoc", @@ -1258,7 +2134,7 @@ dependencies = [ "num-traits", "qsc_ast", "qsc_data_structures", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -1279,7 +2155,7 @@ dependencies = [ "qsc_rca", "qsc_rir", "rustc-hash", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -1298,7 +2174,7 @@ dependencies = [ "qsc_lowerer", "qsc_rca", "rustc-hash", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -1320,14 +2196,14 @@ dependencies = [ "rustc-hash", "serde", "serde_json", - "thiserror", + "thiserror 1.0.63", ] [[package]] name = "qsc_rca" version = "0.0.0" dependencies = [ - "bitflags", + "bitflags 2.9.4", "expect-test", "indenter", "miette", @@ -1338,7 +2214,7 @@ dependencies = [ "qsc_lowerer", "qsc_passes", "rustc-hash", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -1358,7 +2234,7 @@ dependencies = [ "async-trait", "expect-test", "futures-util", - "getrandom", + "getrandom 0.2.15", "indoc", "js-sys", "katas", @@ -1390,8 +2266,12 @@ dependencies = [ "noisy_simulator", "num-bigint", "num-complex", + "num-traits", "pyo3", + "qdk_simulators", "qsc", + "rand 0.8.5", + "rayon", "resource_estimator", "rustc-hash", "serde", @@ -1415,7 +2295,7 @@ dependencies = [ "rustc-hash", "serde", "serde_json", - "thiserror", + "thiserror 1.0.63", "tokio", ] @@ -1428,10 +2308,25 @@ dependencies = [ "num-bigint", "num-complex", "num-traits", - "rand", + "rand 0.8.5", "rustc-hash", ] +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-xml" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "1.0.37" @@ -1441,6 +2336,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "rand" version = "0.8.5" @@ -1448,8 +2349,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", ] [[package]] @@ -1459,7 +2370,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", ] [[package]] @@ -1468,7 +2389,25 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", +] + +[[package]] +name = "rand_xorshift" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" +dependencies = [ + "rand_core 0.9.3", ] [[package]] @@ -1477,12 +2416,53 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "474c42c904f04dfe2a595a02f71e1a0e5e92ffb5761cc9a4c02140b93b8dd504" +[[package]] +name = "range-alloc" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + [[package]] name = "rawpointer" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +dependencies = [ + "bitflags 2.9.4", +] + [[package]] name = "regex" version = "1.10.6" @@ -1518,6 +2498,12 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + [[package]] name = "resource_estimator" version = "0.0.0" @@ -1530,12 +2516,21 @@ dependencies = [ "num-complex", "probability", "qsc", - "rand", + "rand 0.8.5", "regex-lite", "rustc-hash", "serde", "serde_json", - "thiserror", + "thiserror 1.0.63", +] + +[[package]] +name = "rgb" +version = "0.8.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" +dependencies = [ + "bytemuck", ] [[package]] @@ -1552,11 +2547,11 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.38.35" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ - "bitflags", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys", @@ -1569,6 +2564,18 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + [[package]] name = "ryu" version = "1.0.18" @@ -1602,6 +2609,12 @@ dependencies = [ "qsc_project", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "serde" version = "1.0.217" @@ -1673,12 +2686,39 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + [[package]] name = "smawk" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" +[[package]] +name = "sorted-iter" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bceb57dc07c92cdae60f5b27b3fa92ecaaa42fe36c55e22dbfb0b44893e0b1f7" + +[[package]] +name = "sorted-vec" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f58d7b0190c7f12df7e8be6b79767a0836059159811b869d5ab55721fe14d0" + [[package]] name = "special" version = "0.10.3" @@ -1688,6 +2728,42 @@ dependencies = [ "libm", ] +[[package]] +name = "spin" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "str_stack" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb" + [[package]] name = "strsim" version = "0.11.1" @@ -1715,6 +2791,29 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" +[[package]] +name = "symbolic-common" +version = "12.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9da12f8fecbbeaa1ee62c1d50dc656407e007c3ee7b2a41afce4b5089eaef15e" +dependencies = [ + "debugid", + "memmap2", + "stable_deref_trait", + "uuid", +] + +[[package]] +name = "symbolic-demangle" +version = "12.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fd35afe0ef9d35d3dcd41c67ddf882fc832a387221338153b7cd685a105495c" +dependencies = [ + "cpp_demangle", + "rustc-demangle", + "symbolic-common", +] + [[package]] name = "syn" version = "2.0.87" @@ -1732,6 +2831,28 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" +[[package]] +name = "tempfile" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +dependencies = [ + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + [[package]] name = "terminal_size" version = "0.3.0" @@ -1759,7 +2880,16 @@ version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.63", +] + +[[package]] +name = "thiserror" +version = "2.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +dependencies = [ + "thiserror-impl 2.0.16", ] [[package]] @@ -1773,6 +2903,17 @@ dependencies = [ "syn", ] +[[package]] +name = "thiserror-impl" +version = "2.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tinytemplate" version = "1.2.1" @@ -1811,6 +2952,12 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unicode-ident" version = "1.0.12" @@ -1841,6 +2988,27 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + [[package]] name = "walkdir" version = "2.5.0" @@ -1857,6 +3025,24 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.14.5+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.0+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.100" @@ -1929,12 +3115,163 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wgpu" +version = "27.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" +dependencies = [ + "arrayvec", + "bitflags 2.9.4", + "cfg-if", + "cfg_aliases", + "document-features", + "hashbrown 0.16.1", + "js-sys", + "log", + "naga", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "27.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27a75de515543b1897b26119f93731b385a19aea165a1ec5f0e3acecc229cae7" +dependencies = [ + "arrayvec", + "bit-set", + "bit-vec", + "bitflags 2.9.4", + "bytemuck", + "cfg_aliases", + "document-features", + "hashbrown 0.16.1", + "indexmap", + "log", + "naga", + "once_cell", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "rustc-hash", + "smallvec", + "thiserror 2.0.16", + "wgpu-core-deps-apple", + "wgpu-core-deps-emscripten", + "wgpu-core-deps-windows-linux-android", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core-deps-apple" +version = "27.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0772ae958e9be0c729561d5e3fd9a19679bcdfb945b8b1a1969d9bfe8056d233" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-emscripten" +version = "27.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b06ac3444a95b0813ecfd81ddb2774b66220b264b3e2031152a4a29fda4da6b5" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-windows-linux-android" +version = "27.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-hal" +version = "27.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce" dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.9.4", + "block", + "bytemuck", + "cfg-if", + "cfg_aliases", + "core-graphics-types", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hashbrown 0.16.1", "js-sys", + "khronos-egl", + "libc", + "libloading", + "log", + "metal", + "naga", + "ndk-sys", + "objc", + "once_cell", + "ordered-float", + "parking_lot", + "portable-atomic", + "portable-atomic-util", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "smallvec", + "thiserror 2.0.16", "wasm-bindgen", + "web-sys", + "wgpu-types", + "windows", + "windows-core", +] + +[[package]] +name = "wgpu-types" +version = "27.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" +dependencies = [ + "bitflags 2.9.4", + "bytemuck", + "js-sys", + "log", + "thiserror 2.0.16", + "web-sys", ] [[package]] @@ -1947,6 +3284,22 @@ dependencies = [ "safe_arch", ] +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + [[package]] name = "winapi-util" version = "0.1.9" @@ -1956,6 +3309,76 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -2104,6 +3527,18 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "wit-bindgen" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" + +[[package]] +name = "xml-rs" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" + [[package]] name = "zerocopy" version = "0.7.35" @@ -2111,7 +3546,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive 0.8.27", ] [[package]] @@ -2124,3 +3568,14 @@ dependencies = [ "quote", "syn", ] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index 792ac42834..23b0187950 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,7 +44,7 @@ version = "0.0.0" [workspace.dependencies] bitflags = "2.4" clap = "4.4" -criterion = { version = "0.5", default-features = false } +criterion = { version = "0.7", default-features = false } difference = "2.0" enum-iterator = "2.1" env_logger = "0.11" @@ -53,6 +53,7 @@ futures = "0.3" futures-util = "0.3" fasteval = "0.2" getrandom = "0.2" +iai-callgrind = "0.16.1" indoc = "2.0" js-sys = "0.3" libfuzzer-sys = "0.4" @@ -63,13 +64,18 @@ nalgebra = { version = "0.33" } ndarray = "0.15.4" num-bigint = "0.4" num-complex = "0.4" +num-derive = "0.4" num-traits = "0.2" +pprof = { version = "0.14", features = ["criterion", "flamegraph"] } probability = "0.20" +proptest = "1.0" indenter = "0.3" regex-lite = "0.1" rustc-hash = "1" serde = { version = "1.0", features = ["derive"] } serde-wasm-bindgen = "0.6" +sorted-vec = "0.8" +sorted-iter = "0.1" wasm-bindgen = "0.2.100" wasm-bindgen-futures = "0.4" rand = "0.8" @@ -78,6 +84,9 @@ pyo3 = "0.27.2" quantum-sparse-sim = { git = "https://github.com/qir-alliance/qir-runner", rev = "8cd6fa698521ecf96d459f88254e53dd6e5d6877" } async-trait = "0.1" tokio = { version = "1.44", features = ["macros", "rt"] } +rayon = "1.11.0" +bytemuck = "1.23.2" +wgpu = { version = "27.0.1" } [workspace.lints.clippy] mod_module_files = "warn" @@ -99,3 +108,9 @@ codegen-units = 1 [profile.release.package.fuzz] codegen-units = 16 + +[profile.bench] +debug = true +strip = false +lto = "fat" +codegen-units = 1 diff --git a/build.py b/build.py index 028e6f6fd8..adb4a35b87 100755 --- a/build.py +++ b/build.py @@ -528,8 +528,10 @@ def run_ci_historic_benchmark(): "install", "--force-reinstall", "--no-index", + "--no-deps", "--find-links=" + wheels_dir, "qdk", + "qsharp", ] subprocess.run(install_args, check=True, text=True, cwd=qdk_python_src) @@ -705,6 +707,9 @@ def run_ci_historic_benchmark(): or f.startswith("submit_qiskit_circuit_to_azure.") or f.startswith("cirq_submission_to_azure.") or f.startswith("pennylane_submission_to_azure.") + or f.startswith("benzene.") + or f.startswith("parallel_teleport.") + or f.startswith("carbon.") ) ] python_bin = use_python_env(samples_src) @@ -771,7 +776,7 @@ def _run_notebooks(files): "--to", "notebook", "--stdout", - "--ExecutePreprocessor.timeout=60", + "--ExecutePreprocessor.timeout=90", "--sanitize-html", "--execute", notebook, diff --git a/package-lock.json b/package-lock.json index c10a4c5f50..0f82a48119 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "@vscode/extension-telemetry": "^0.9.8", "@vscode/markdown-it-katex": "^1.0.0", "@vscode/test-web": "^0.0.78", + "3dmol": "^2.5.3", "chai": "^4.3.10", "dompurify": "^3.2.5", "esbuild": "^0.25.0", @@ -2130,6 +2131,30 @@ "node": ">=20" } }, + "node_modules/3dmol": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/3dmol/-/3dmol-2.5.3.tgz", + "integrity": "sha512-/rVirGSwU4HmqAm7GqDz6AUnrKB6Gv95QsjR/q6ig4VCs45mqGOaM7njageLgDjHnyJZBEd0GBEY1HeI/4MW2g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "iobuffer": "^5.0.0", + "netcdfjs": "^3.0.0", + "pako": "^2.1.0", + "upng-js": "^2.1.0" + }, + "engines": { + "node": ">=16.16.0", + "npm": ">=8.11" + } + }, + "node_modules/3dmol/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "dev": true, + "license": "(MIT AND Zlib)" + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -4208,6 +4233,13 @@ "optional": true, "peer": true }, + "node_modules/iobuffer": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/iobuffer/-/iobuffer-5.4.0.tgz", + "integrity": "sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA==", + "dev": true, + "license": "MIT" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -5129,6 +5161,16 @@ "node": ">= 0.6" } }, + "node_modules/netcdfjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/netcdfjs/-/netcdfjs-3.0.0.tgz", + "integrity": "sha512-LOvT8KkC308qtpUkcBPiCMBtii7ZQCN6LxcVheWgyUeZ6DQWcpSRFV9dcVXLj/2eHZ/bre9tV5HTH4Sf93vrFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "iobuffer": "^5.3.2" + } + }, "node_modules/node-abi": { "version": "3.78.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.78.0.tgz", @@ -6681,6 +6723,23 @@ "dev": true, "license": "MIT" }, + "node_modules/upng-js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/upng-js/-/upng-js-2.1.0.tgz", + "integrity": "sha512-d3xzZzpMP64YkjP5pr8gNyvBt7dLk/uGI67EctzDuVp4lCZyVMo0aJO6l/VDlgbInJYDY6cnClLoBp29eKWI6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^1.0.5" + } + }, + "node_modules/upng-js/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", diff --git a/package.json b/package.json index 52d5ce4185..54bd2645d2 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@vscode/extension-telemetry": "^0.9.8", "@vscode/markdown-it-katex": "^1.0.0", "@vscode/test-web": "^0.0.78", + "3dmol": "^2.5.3", "chai": "^4.3.10", "dompurify": "^3.2.5", "esbuild": "^0.25.0", diff --git a/pyrightconfig.json b/pyrightconfig.json new file mode 100644 index 0000000000..18db637af3 --- /dev/null +++ b/pyrightconfig.json @@ -0,0 +1,5 @@ +{ + "pythonVersion": "3.10", + "extraPaths": ["source/pip", "source/widgets/src", "source/qdk_package/src"], + "typeCheckingMode": "basic" +} diff --git a/samples/notebooks/benzene_molecule/MO_alpha_18.cube b/samples/notebooks/benzene_molecule/MO_alpha_18.cube new file mode 100644 index 0000000000..44fc3bc897 --- /dev/null +++ b/samples/notebooks/benzene_molecule/MO_alpha_18.cube @@ -0,0 +1,11216 @@ +MO_alpha_18 +PySCF Version: 2.11.0 Date: Fri Oct 31 21:22:46 2025 + 10 -14.064801 -12.638058 -10.000000 + 40 0.721272 0.000000 0.000000 + 40 0.000000 0.648106 0.000000 + 40 0.000000 0.000000 0.512821 + 6 0.000000 0.000000 2.638058 0.000000 + 6 0.000000 2.284824 1.319029 0.000000 + 6 0.000000 2.284824 -1.319029 0.000000 + 6 0.000000 0.000000 -2.638058 0.000000 + 6 0.000000 -2.284824 -1.319029 0.000000 + 6 0.000000 -2.284824 1.319029 0.000000 + 1 0.000000 4.064801 2.347040 0.000000 + 1 0.000000 4.064801 -2.347040 0.000000 + 1 0.000000 -4.064801 -2.347040 0.000000 + 1 0.000000 -4.064801 2.347040 0.000000 + -1.97936E-25 -8.55174E-25 -3.40142E-24 -1.24507E-23 -4.19253E-23 -1.29806E-22 + -3.69310E-22 -9.64819E-22 -2.31238E-21 -5.07839E-21 -1.02043E-20 -1.87218E-20 + -3.12757E-20 -4.73832E-20 -6.47123E-20 -7.89037E-20 -8.44426E-20 -7.66285E-20 + -5.39319E-20 -1.94705E-20 1.94705E-20 5.39319E-20 7.66285E-20 8.44426E-20 + 7.89037E-20 6.47123E-20 4.73832E-20 3.12757E-20 1.87218E-20 1.02043E-20 + 5.07839E-21 2.31238E-21 9.64819E-22 3.69310E-22 1.29806E-22 4.19253E-23 + 1.24507E-23 3.40142E-24 8.55174E-25 1.97936E-25 + -1.71982E-24 -7.43037E-24 -2.95540E-23 -1.08181E-22 -3.64277E-22 -1.12785E-21 + -3.20884E-21 -8.38306E-21 -2.00917E-20 -4.41247E-20 -8.86621E-20 -1.62668E-19 + -2.71746E-19 -4.11700E-19 -5.62267E-19 -6.85573E-19 -7.33699E-19 -6.65804E-19 + -4.68600E-19 -1.69174E-19 1.69174E-19 4.68600E-19 6.65804E-19 7.33699E-19 + 6.85573E-19 5.62267E-19 4.11700E-19 2.71746E-19 1.62668E-19 8.86621E-20 + 4.41247E-20 2.00917E-20 8.38306E-21 3.20884E-21 1.12785E-21 3.64277E-22 + 1.08181E-22 2.95540E-23 7.43037E-24 1.71982E-24 + -1.31553E-23 -5.68367E-23 -2.26065E-22 -8.27499E-22 -2.78644E-21 -8.62719E-21 + -2.45451E-20 -6.41240E-20 -1.53686E-19 -3.37520E-19 -6.78197E-19 -1.24429E-18 + -2.07865E-18 -3.14919E-18 -4.30091E-18 -5.24411E-18 -5.61224E-18 -5.09289E-18 + -3.58443E-18 -1.29405E-18 1.29405E-18 3.58443E-18 5.09289E-18 5.61224E-18 + 5.24411E-18 4.30091E-18 3.14919E-18 2.07865E-18 1.24429E-18 6.78197E-19 + 3.37520E-19 1.53686E-19 6.41240E-20 2.45451E-20 8.62719E-21 2.78644E-21 + 8.27499E-22 2.26065E-22 5.68367E-23 1.31553E-23 + -8.85900E-23 -3.82748E-22 -1.52237E-21 -5.57253E-21 -1.87644E-20 -5.80970E-20 + -1.65291E-19 -4.31822E-19 -1.03495E-18 -2.27292E-18 -4.56710E-18 -8.37927E-18 + -1.39980E-17 -2.12072E-17 -2.89631E-17 -3.53148E-17 -3.77938E-17 -3.42965E-17 + -2.41382E-17 -8.71437E-18 8.71437E-18 2.41382E-17 3.42965E-17 3.77938E-17 + 3.53148E-17 2.89631E-17 2.12072E-17 1.39980E-17 8.37927E-18 4.56710E-18 + 2.27292E-18 1.03495E-18 4.31822E-19 1.65291E-19 5.80970E-20 1.87644E-20 + 5.57253E-21 1.52237E-21 3.82748E-22 8.85900E-23 + -5.25225E-22 -2.26921E-21 -9.02569E-21 -3.30380E-20 -1.11249E-19 -3.44441E-19 + -9.79967E-19 -2.56015E-18 -6.13593E-18 -1.34755E-17 -2.70771E-17 -4.96783E-17 + -8.29902E-17 -1.25732E-16 -1.71714E-16 -2.09371E-16 -2.24069E-16 -2.03334E-16 + -1.43109E-16 -5.16651E-17 5.16651E-17 1.43109E-16 2.03334E-16 2.24069E-16 + 2.09371E-16 1.71714E-16 1.25732E-16 8.29902E-17 4.96783E-17 2.70771E-17 + 1.34755E-17 6.13593E-18 2.56015E-18 9.79967E-19 3.44441E-19 1.11249E-19 + 3.30380E-20 9.02569E-21 2.26921E-21 5.25225E-22 + -2.74157E-21 -1.18448E-20 -4.71122E-20 -1.72451E-19 -5.80696E-19 -1.79791E-18 + -5.11522E-18 -1.33635E-17 -3.20283E-17 -7.03394E-17 -1.41337E-16 -2.59310E-16 + -4.33191E-16 -6.56292E-16 -8.96313E-16 -1.09288E-15 -1.16959E-15 -1.06136E-15 + -7.46997E-16 -2.69681E-16 2.69681E-16 7.46997E-16 1.06136E-15 1.16959E-15 + 1.09288E-15 8.96313E-16 6.56292E-16 4.33191E-16 2.59310E-16 1.41337E-16 + 7.03394E-17 3.20283E-17 1.33635E-17 5.11522E-18 1.79791E-18 5.80696E-19 + 1.72451E-19 4.71122E-20 1.18448E-20 2.74157E-21 + -1.26000E-20 -5.44375E-20 -2.16523E-19 -7.92569E-19 -2.66882E-18 -8.26302E-18 + -2.35091E-17 -6.14172E-17 -1.47199E-16 -3.23273E-16 -6.49570E-16 -1.19177E-15 + -1.99091E-15 -3.01626E-15 -4.11937E-15 -5.02275E-15 -5.37534E-15 -4.87791E-15 + -3.43313E-15 -1.23943E-15 1.23943E-15 3.43313E-15 4.87791E-15 5.37534E-15 + 5.02275E-15 4.11937E-15 3.01626E-15 1.99091E-15 1.19177E-15 6.49570E-16 + 3.23273E-16 1.47199E-16 6.14172E-17 2.35091E-17 8.26302E-18 2.66882E-18 + 7.92569E-19 2.16523E-19 5.44375E-20 1.26000E-20 + -5.09920E-20 -2.20308E-19 -8.76268E-19 -3.20752E-18 -1.08007E-17 -3.34404E-17 + -9.51411E-17 -2.48555E-16 -5.95713E-16 -1.30829E-15 -2.62881E-15 -4.82307E-15 + -8.05719E-15 -1.22068E-14 -1.66711E-14 -2.03270E-14 -2.17540E-14 -1.97409E-14 + -1.38938E-14 -5.01595E-15 5.01595E-15 1.38938E-14 1.97409E-14 2.17540E-14 + 2.03270E-14 1.66711E-14 1.22068E-14 8.05719E-15 4.82307E-15 2.62881E-15 + 1.30829E-15 5.95713E-16 2.48555E-16 9.51411E-17 3.34404E-17 1.08007E-17 + 3.20752E-18 8.76268E-19 2.20308E-19 5.09920E-20 + -1.81748E-19 -7.85234E-19 -3.12324E-18 -1.14324E-17 -3.84964E-17 -1.19190E-16 + -3.39106E-16 -8.85912E-16 -2.12327E-15 -4.66305E-15 -9.36972E-15 -1.71906E-14 + -2.87178E-14 -4.35080E-14 -5.94198E-14 -7.24506E-14 -7.75365E-14 -7.03615E-14 + -4.95211E-14 -1.78781E-14 1.78781E-14 4.95211E-14 7.03615E-14 7.75365E-14 + 7.24506E-14 5.94198E-14 4.35080E-14 2.87178E-14 1.71906E-14 9.36972E-15 + 4.66305E-15 2.12327E-15 8.85912E-16 3.39106E-16 1.19190E-16 3.84964E-17 + 1.14324E-17 3.12324E-18 7.85234E-19 1.81748E-19 + -5.70685E-19 -2.46562E-18 -9.80688E-18 -3.58975E-17 -1.20878E-16 -3.74254E-16 + -1.06479E-15 -2.78174E-15 -6.66701E-15 -1.46419E-14 -2.94207E-14 -5.39781E-14 + -9.01733E-14 -1.36614E-13 -1.86577E-13 -2.27493E-13 -2.43463E-13 -2.20933E-13 + -1.55495E-13 -5.61368E-14 5.61368E-14 1.55495E-13 2.20933E-13 2.43463E-13 + 2.27493E-13 1.86577E-13 1.36614E-13 9.01733E-14 5.39781E-14 2.94207E-14 + 1.46419E-14 6.66701E-15 2.78174E-15 1.06479E-15 3.74254E-16 1.20878E-16 + 3.58975E-17 9.80688E-18 2.46562E-18 5.70685E-19 + -1.57938E-18 -6.82363E-18 -2.71407E-17 -9.93469E-17 -3.34531E-16 -1.03575E-15 + -2.94681E-15 -7.69852E-15 -1.84511E-14 -4.05216E-14 -8.14222E-14 -1.49385E-13 + -2.49556E-13 -3.78081E-13 -5.16354E-13 -6.29591E-13 -6.73787E-13 -6.11436E-13 + -4.30335E-13 -1.55360E-13 1.55360E-13 4.30335E-13 6.11436E-13 6.73787E-13 + 6.29591E-13 5.16354E-13 3.78081E-13 2.49556E-13 1.49385E-13 8.14222E-14 + 4.05216E-14 1.84511E-14 7.69852E-15 2.94681E-15 1.03575E-15 3.34531E-16 + 9.93469E-17 2.71407E-17 6.82363E-18 1.57938E-18 + -3.85551E-18 -1.66575E-17 -6.62547E-17 -2.42521E-16 -8.16643E-16 -2.52843E-15 + -7.19363E-15 -1.87933E-14 -4.50419E-14 -9.89196E-14 -1.98764E-13 -3.64673E-13 + -6.09205E-13 -9.22956E-13 -1.26050E-12 -1.53693E-12 -1.64482E-12 -1.49261E-12 + -1.05052E-12 -3.79257E-13 3.79257E-13 1.05052E-12 1.49261E-12 1.64482E-12 + 1.53693E-12 1.26050E-12 9.22956E-13 6.09205E-13 3.64673E-13 1.98764E-13 + 9.89196E-14 4.50419E-14 1.87933E-14 7.19363E-15 2.52843E-15 8.16643E-16 + 2.42521E-16 6.62547E-17 1.66575E-17 3.85551E-18 + -8.31281E-18 -3.59151E-17 -1.42851E-16 -5.22896E-16 -1.76075E-15 -5.45151E-15 + -1.55101E-14 -4.05199E-14 -9.71141E-14 -2.13279E-13 -4.28553E-13 -7.86265E-13 + -1.31350E-12 -1.98997E-12 -2.71775E-12 -3.31375E-12 -3.54637E-12 -3.21820E-12 + -2.26500E-12 -8.17709E-13 8.17709E-13 2.26500E-12 3.21820E-12 3.54637E-12 + 3.31375E-12 2.71775E-12 1.98997E-12 1.31350E-12 7.86265E-13 4.28553E-13 + 2.13279E-13 9.71141E-14 4.05199E-14 1.55101E-14 5.45151E-15 1.76075E-15 + 5.22896E-16 1.42851E-16 3.59151E-17 8.31281E-18 + -1.58637E-17 -6.85385E-17 -2.72609E-16 -9.97868E-16 -3.36013E-15 -1.04034E-14 + -2.95986E-14 -7.73261E-14 -1.85328E-13 -4.07011E-13 -8.17828E-13 -1.50047E-12 + -2.50661E-12 -3.79756E-12 -5.18641E-12 -6.32379E-12 -6.76771E-12 -6.14144E-12 + -4.32241E-12 -1.56048E-12 1.56048E-12 4.32241E-12 6.14144E-12 6.76771E-12 + 6.32379E-12 5.18641E-12 3.79756E-12 2.50661E-12 1.50047E-12 8.17828E-13 + 4.07011E-13 1.85328E-13 7.73261E-14 2.95986E-14 1.04034E-14 3.36013E-15 + 9.97868E-16 2.72609E-16 6.85385E-17 1.58637E-17 + -2.68865E-17 -1.16162E-16 -4.62029E-16 -1.69123E-15 -5.69489E-15 -1.76321E-14 + -5.01650E-14 -1.31056E-13 -3.14101E-13 -6.89819E-13 -1.38609E-12 -2.54306E-12 + -4.24831E-12 -6.43626E-12 -8.79014E-12 -1.07178E-11 -1.14702E-11 -1.04088E-11 + -7.32580E-12 -2.64476E-12 2.64476E-12 7.32580E-12 1.04088E-11 1.14702E-11 + 1.07178E-11 8.79014E-12 6.43626E-12 4.24831E-12 2.54306E-12 1.38609E-12 + 6.89819E-13 3.14101E-13 1.31056E-13 5.01650E-14 1.76321E-14 5.69489E-15 + 1.69123E-15 4.62029E-16 1.16162E-16 2.68865E-17 + -4.06850E-17 -1.75778E-16 -6.99148E-16 -2.55919E-15 -8.61757E-15 -2.66811E-14 + -7.59103E-14 -1.98315E-13 -4.75302E-13 -1.04384E-12 -2.09745E-12 -3.84819E-12 + -6.42859E-12 -9.73942E-12 -1.33013E-11 -1.62183E-11 -1.73568E-11 -1.57507E-11 + -1.10855E-11 -4.00208E-12 4.00208E-12 1.10855E-11 1.57507E-11 1.73568E-11 + 1.62183E-11 1.33013E-11 9.73942E-12 6.42859E-12 3.84819E-12 2.09745E-12 + 1.04384E-12 4.75302E-13 1.98315E-13 7.59103E-14 2.66811E-14 8.61757E-15 + 2.55919E-15 6.99148E-16 1.75778E-16 4.06850E-17 + -5.53995E-17 -2.39350E-16 -9.52007E-16 -3.48476E-15 -1.17343E-14 -3.63308E-14 + -1.03365E-13 -2.70039E-13 -6.47203E-13 -1.42137E-12 -2.85602E-12 -5.23995E-12 + -8.75360E-12 -1.32619E-11 -1.81120E-11 -2.20840E-11 -2.36342E-11 -2.14472E-11 + -1.50947E-11 -5.44950E-12 5.44950E-12 1.50947E-11 2.14472E-11 2.36342E-11 + 2.20840E-11 1.81120E-11 1.32619E-11 8.75360E-12 5.23995E-12 2.85602E-12 + 1.42137E-12 6.47203E-13 2.70039E-13 1.03365E-13 3.63308E-14 1.17343E-14 + 3.48476E-15 9.52007E-16 2.39350E-16 5.53995E-17 + -6.86092E-17 -2.96422E-16 -1.17901E-15 -4.31569E-15 -1.45322E-14 -4.49937E-14 + -1.28011E-13 -3.34428E-13 -8.01525E-13 -1.76028E-12 -3.53703E-12 -6.48939E-12 + -1.08409E-11 -1.64241E-11 -2.24307E-11 -2.73498E-11 -2.92697E-11 -2.65612E-11 + -1.86940E-11 -6.74891E-12 6.74891E-12 1.86940E-11 2.65612E-11 2.92697E-11 + 2.73498E-11 2.24307E-11 1.64241E-11 1.08409E-11 6.48939E-12 3.53703E-12 + 1.76028E-12 8.01525E-13 3.34428E-13 1.28011E-13 4.49937E-14 1.45322E-14 + 4.31569E-15 1.17901E-15 2.96422E-16 6.86092E-17 + -7.82723E-17 -3.38172E-16 -1.34506E-15 -4.92352E-15 -1.65790E-14 -5.13308E-14 + -1.46041E-13 -3.81530E-13 -9.14414E-13 -2.00821E-12 -4.03520E-12 -7.40337E-12 + -1.23677E-11 -1.87373E-11 -2.55899E-11 -3.12018E-11 -3.33922E-11 -3.03021E-11 + -2.13269E-11 -7.69945E-12 7.69945E-12 2.13269E-11 3.03021E-11 3.33922E-11 + 3.12018E-11 2.55899E-11 1.87373E-11 1.23677E-11 7.40337E-12 4.03520E-12 + 2.00821E-12 9.14414E-13 3.81530E-13 1.46041E-13 5.13308E-14 1.65790E-14 + 4.92352E-15 1.34506E-15 3.38172E-16 7.82723E-17 + -8.32772E-17 -3.59795E-16 -1.43107E-15 -5.23834E-15 -1.76391E-14 -5.46130E-14 + -1.55379E-13 -4.05926E-13 -9.72884E-13 -2.13662E-12 -4.29321E-12 -7.87676E-12 + -1.31585E-11 -1.99354E-11 -2.72262E-11 -3.31969E-11 -3.55273E-11 -3.22397E-11 + -2.26906E-11 -8.19177E-12 8.19177E-12 2.26906E-11 3.22397E-11 3.55273E-11 + 3.31969E-11 2.72262E-11 1.99354E-11 1.31585E-11 7.87676E-12 4.29321E-12 + 2.13662E-12 9.72884E-13 4.05926E-13 1.55379E-13 5.46130E-14 1.76391E-14 + 5.23834E-15 1.43107E-15 3.59795E-16 8.32772E-17 + -8.32772E-17 -3.59795E-16 -1.43107E-15 -5.23834E-15 -1.76391E-14 -5.46130E-14 + -1.55379E-13 -4.05926E-13 -9.72884E-13 -2.13662E-12 -4.29321E-12 -7.87676E-12 + -1.31585E-11 -1.99354E-11 -2.72262E-11 -3.31969E-11 -3.55273E-11 -3.22397E-11 + -2.26906E-11 -8.19177E-12 8.19177E-12 2.26906E-11 3.22397E-11 3.55273E-11 + 3.31969E-11 2.72262E-11 1.99354E-11 1.31585E-11 7.87676E-12 4.29321E-12 + 2.13662E-12 9.72884E-13 4.05926E-13 1.55379E-13 5.46130E-14 1.76391E-14 + 5.23834E-15 1.43107E-15 3.59795E-16 8.32772E-17 + -7.82723E-17 -3.38172E-16 -1.34506E-15 -4.92352E-15 -1.65790E-14 -5.13308E-14 + -1.46041E-13 -3.81530E-13 -9.14414E-13 -2.00821E-12 -4.03520E-12 -7.40337E-12 + -1.23677E-11 -1.87373E-11 -2.55899E-11 -3.12018E-11 -3.33922E-11 -3.03021E-11 + -2.13269E-11 -7.69945E-12 7.69945E-12 2.13269E-11 3.03021E-11 3.33922E-11 + 3.12018E-11 2.55899E-11 1.87373E-11 1.23677E-11 7.40337E-12 4.03520E-12 + 2.00821E-12 9.14414E-13 3.81530E-13 1.46041E-13 5.13308E-14 1.65790E-14 + 4.92352E-15 1.34506E-15 3.38172E-16 7.82723E-17 + -6.86092E-17 -2.96422E-16 -1.17901E-15 -4.31569E-15 -1.45322E-14 -4.49937E-14 + -1.28011E-13 -3.34428E-13 -8.01525E-13 -1.76028E-12 -3.53703E-12 -6.48939E-12 + -1.08409E-11 -1.64241E-11 -2.24307E-11 -2.73498E-11 -2.92697E-11 -2.65612E-11 + -1.86940E-11 -6.74891E-12 6.74891E-12 1.86940E-11 2.65612E-11 2.92697E-11 + 2.73498E-11 2.24307E-11 1.64241E-11 1.08409E-11 6.48939E-12 3.53703E-12 + 1.76028E-12 8.01525E-13 3.34428E-13 1.28011E-13 4.49937E-14 1.45322E-14 + 4.31569E-15 1.17901E-15 2.96422E-16 6.86092E-17 + -5.53995E-17 -2.39350E-16 -9.52007E-16 -3.48476E-15 -1.17343E-14 -3.63308E-14 + -1.03365E-13 -2.70039E-13 -6.47203E-13 -1.42137E-12 -2.85602E-12 -5.23995E-12 + -8.75360E-12 -1.32619E-11 -1.81120E-11 -2.20840E-11 -2.36342E-11 -2.14472E-11 + -1.50947E-11 -5.44950E-12 5.44950E-12 1.50947E-11 2.14472E-11 2.36342E-11 + 2.20840E-11 1.81120E-11 1.32619E-11 8.75360E-12 5.23995E-12 2.85602E-12 + 1.42137E-12 6.47203E-13 2.70039E-13 1.03365E-13 3.63308E-14 1.17343E-14 + 3.48476E-15 9.52007E-16 2.39350E-16 5.53995E-17 + -4.06850E-17 -1.75778E-16 -6.99148E-16 -2.55919E-15 -8.61757E-15 -2.66811E-14 + -7.59103E-14 -1.98315E-13 -4.75302E-13 -1.04384E-12 -2.09745E-12 -3.84819E-12 + -6.42859E-12 -9.73942E-12 -1.33013E-11 -1.62183E-11 -1.73568E-11 -1.57507E-11 + -1.10855E-11 -4.00208E-12 4.00208E-12 1.10855E-11 1.57507E-11 1.73568E-11 + 1.62183E-11 1.33013E-11 9.73942E-12 6.42859E-12 3.84819E-12 2.09745E-12 + 1.04384E-12 4.75302E-13 1.98315E-13 7.59103E-14 2.66811E-14 8.61757E-15 + 2.55919E-15 6.99148E-16 1.75778E-16 4.06850E-17 + -2.68865E-17 -1.16162E-16 -4.62029E-16 -1.69123E-15 -5.69489E-15 -1.76321E-14 + -5.01650E-14 -1.31056E-13 -3.14101E-13 -6.89819E-13 -1.38609E-12 -2.54306E-12 + -4.24831E-12 -6.43626E-12 -8.79014E-12 -1.07178E-11 -1.14702E-11 -1.04088E-11 + -7.32580E-12 -2.64476E-12 2.64476E-12 7.32580E-12 1.04088E-11 1.14702E-11 + 1.07178E-11 8.79014E-12 6.43626E-12 4.24831E-12 2.54306E-12 1.38609E-12 + 6.89819E-13 3.14101E-13 1.31056E-13 5.01650E-14 1.76321E-14 5.69489E-15 + 1.69123E-15 4.62029E-16 1.16162E-16 2.68865E-17 + -1.58637E-17 -6.85385E-17 -2.72609E-16 -9.97868E-16 -3.36013E-15 -1.04034E-14 + -2.95986E-14 -7.73261E-14 -1.85328E-13 -4.07011E-13 -8.17828E-13 -1.50047E-12 + -2.50661E-12 -3.79756E-12 -5.18641E-12 -6.32379E-12 -6.76771E-12 -6.14144E-12 + -4.32241E-12 -1.56048E-12 1.56048E-12 4.32241E-12 6.14144E-12 6.76771E-12 + 6.32379E-12 5.18641E-12 3.79756E-12 2.50661E-12 1.50047E-12 8.17828E-13 + 4.07011E-13 1.85328E-13 7.73261E-14 2.95986E-14 1.04034E-14 3.36013E-15 + 9.97868E-16 2.72609E-16 6.85385E-17 1.58637E-17 + -8.31281E-18 -3.59151E-17 -1.42851E-16 -5.22896E-16 -1.76075E-15 -5.45151E-15 + -1.55101E-14 -4.05199E-14 -9.71141E-14 -2.13279E-13 -4.28553E-13 -7.86265E-13 + -1.31350E-12 -1.98997E-12 -2.71775E-12 -3.31375E-12 -3.54637E-12 -3.21820E-12 + -2.26500E-12 -8.17709E-13 8.17709E-13 2.26500E-12 3.21820E-12 3.54637E-12 + 3.31375E-12 2.71775E-12 1.98997E-12 1.31350E-12 7.86265E-13 4.28553E-13 + 2.13279E-13 9.71141E-14 4.05199E-14 1.55101E-14 5.45151E-15 1.76075E-15 + 5.22896E-16 1.42851E-16 3.59151E-17 8.31281E-18 + -3.85551E-18 -1.66575E-17 -6.62547E-17 -2.42521E-16 -8.16643E-16 -2.52843E-15 + -7.19363E-15 -1.87933E-14 -4.50419E-14 -9.89196E-14 -1.98764E-13 -3.64673E-13 + -6.09205E-13 -9.22956E-13 -1.26050E-12 -1.53693E-12 -1.64482E-12 -1.49261E-12 + -1.05052E-12 -3.79257E-13 3.79257E-13 1.05052E-12 1.49261E-12 1.64482E-12 + 1.53693E-12 1.26050E-12 9.22956E-13 6.09205E-13 3.64673E-13 1.98764E-13 + 9.89196E-14 4.50419E-14 1.87933E-14 7.19363E-15 2.52843E-15 8.16643E-16 + 2.42521E-16 6.62547E-17 1.66575E-17 3.85551E-18 + -1.57938E-18 -6.82363E-18 -2.71407E-17 -9.93469E-17 -3.34531E-16 -1.03575E-15 + -2.94681E-15 -7.69852E-15 -1.84511E-14 -4.05216E-14 -8.14222E-14 -1.49385E-13 + -2.49556E-13 -3.78081E-13 -5.16354E-13 -6.29591E-13 -6.73787E-13 -6.11436E-13 + -4.30335E-13 -1.55360E-13 1.55360E-13 4.30335E-13 6.11436E-13 6.73787E-13 + 6.29591E-13 5.16354E-13 3.78081E-13 2.49556E-13 1.49385E-13 8.14222E-14 + 4.05216E-14 1.84511E-14 7.69852E-15 2.94681E-15 1.03575E-15 3.34531E-16 + 9.93469E-17 2.71407E-17 6.82363E-18 1.57938E-18 + -5.70685E-19 -2.46562E-18 -9.80688E-18 -3.58975E-17 -1.20878E-16 -3.74254E-16 + -1.06479E-15 -2.78174E-15 -6.66701E-15 -1.46419E-14 -2.94207E-14 -5.39781E-14 + -9.01733E-14 -1.36614E-13 -1.86577E-13 -2.27493E-13 -2.43463E-13 -2.20933E-13 + -1.55495E-13 -5.61368E-14 5.61368E-14 1.55495E-13 2.20933E-13 2.43463E-13 + 2.27493E-13 1.86577E-13 1.36614E-13 9.01733E-14 5.39781E-14 2.94207E-14 + 1.46419E-14 6.66701E-15 2.78174E-15 1.06479E-15 3.74254E-16 1.20878E-16 + 3.58975E-17 9.80688E-18 2.46562E-18 5.70685E-19 + -1.81748E-19 -7.85234E-19 -3.12324E-18 -1.14324E-17 -3.84964E-17 -1.19190E-16 + -3.39106E-16 -8.85912E-16 -2.12327E-15 -4.66305E-15 -9.36972E-15 -1.71906E-14 + -2.87178E-14 -4.35080E-14 -5.94198E-14 -7.24506E-14 -7.75365E-14 -7.03615E-14 + -4.95211E-14 -1.78781E-14 1.78781E-14 4.95211E-14 7.03615E-14 7.75365E-14 + 7.24506E-14 5.94198E-14 4.35080E-14 2.87178E-14 1.71906E-14 9.36972E-15 + 4.66305E-15 2.12327E-15 8.85912E-16 3.39106E-16 1.19190E-16 3.84964E-17 + 1.14324E-17 3.12324E-18 7.85234E-19 1.81748E-19 + -5.09920E-20 -2.20308E-19 -8.76268E-19 -3.20752E-18 -1.08007E-17 -3.34404E-17 + -9.51411E-17 -2.48555E-16 -5.95713E-16 -1.30829E-15 -2.62881E-15 -4.82307E-15 + -8.05719E-15 -1.22068E-14 -1.66711E-14 -2.03270E-14 -2.17540E-14 -1.97409E-14 + -1.38938E-14 -5.01595E-15 5.01595E-15 1.38938E-14 1.97409E-14 2.17540E-14 + 2.03270E-14 1.66711E-14 1.22068E-14 8.05719E-15 4.82307E-15 2.62881E-15 + 1.30829E-15 5.95713E-16 2.48555E-16 9.51411E-17 3.34404E-17 1.08007E-17 + 3.20752E-18 8.76268E-19 2.20308E-19 5.09920E-20 + -1.26000E-20 -5.44375E-20 -2.16523E-19 -7.92569E-19 -2.66882E-18 -8.26302E-18 + -2.35091E-17 -6.14172E-17 -1.47199E-16 -3.23273E-16 -6.49570E-16 -1.19177E-15 + -1.99091E-15 -3.01626E-15 -4.11937E-15 -5.02275E-15 -5.37534E-15 -4.87791E-15 + -3.43313E-15 -1.23943E-15 1.23943E-15 3.43313E-15 4.87791E-15 5.37534E-15 + 5.02275E-15 4.11937E-15 3.01626E-15 1.99091E-15 1.19177E-15 6.49570E-16 + 3.23273E-16 1.47199E-16 6.14172E-17 2.35091E-17 8.26302E-18 2.66882E-18 + 7.92569E-19 2.16523E-19 5.44375E-20 1.26000E-20 + -2.74157E-21 -1.18448E-20 -4.71122E-20 -1.72451E-19 -5.80696E-19 -1.79791E-18 + -5.11522E-18 -1.33635E-17 -3.20283E-17 -7.03394E-17 -1.41337E-16 -2.59310E-16 + -4.33191E-16 -6.56292E-16 -8.96313E-16 -1.09288E-15 -1.16959E-15 -1.06136E-15 + -7.46997E-16 -2.69681E-16 2.69681E-16 7.46997E-16 1.06136E-15 1.16959E-15 + 1.09288E-15 8.96313E-16 6.56292E-16 4.33191E-16 2.59310E-16 1.41337E-16 + 7.03394E-17 3.20283E-17 1.33635E-17 5.11522E-18 1.79791E-18 5.80696E-19 + 1.72451E-19 4.71122E-20 1.18448E-20 2.74157E-21 + -5.25225E-22 -2.26921E-21 -9.02568E-21 -3.30380E-20 -1.11249E-19 -3.44441E-19 + -9.79967E-19 -2.56015E-18 -6.13593E-18 -1.34755E-17 -2.70771E-17 -4.96783E-17 + -8.29902E-17 -1.25732E-16 -1.71714E-16 -2.09371E-16 -2.24069E-16 -2.03334E-16 + -1.43109E-16 -5.16651E-17 5.16651E-17 1.43109E-16 2.03334E-16 2.24069E-16 + 2.09371E-16 1.71714E-16 1.25732E-16 8.29902E-17 4.96783E-17 2.70771E-17 + 1.34755E-17 6.13593E-18 2.56015E-18 9.79967E-19 3.44441E-19 1.11249E-19 + 3.30380E-20 9.02569E-21 2.26921E-21 5.25225E-22 + -8.85900E-23 -3.82748E-22 -1.52237E-21 -5.57253E-21 -1.87644E-20 -5.80970E-20 + -1.65291E-19 -4.31822E-19 -1.03495E-18 -2.27292E-18 -4.56710E-18 -8.37927E-18 + -1.39980E-17 -2.12072E-17 -2.89631E-17 -3.53148E-17 -3.77938E-17 -3.42965E-17 + -2.41382E-17 -8.71437E-18 8.71437E-18 2.41382E-17 3.42965E-17 3.77938E-17 + 3.53148E-17 2.89631E-17 2.12072E-17 1.39980E-17 8.37927E-18 4.56710E-18 + 2.27292E-18 1.03495E-18 4.31822E-19 1.65291E-19 5.80970E-20 1.87644E-20 + 5.57253E-21 1.52237E-21 3.82748E-22 8.85900E-23 + -1.31553E-23 -5.68367E-23 -2.26065E-22 -8.27499E-22 -2.78644E-21 -8.62719E-21 + -2.45451E-20 -6.41240E-20 -1.53686E-19 -3.37520E-19 -6.78197E-19 -1.24429E-18 + -2.07865E-18 -3.14919E-18 -4.30091E-18 -5.24411E-18 -5.61224E-18 -5.09289E-18 + -3.58443E-18 -1.29405E-18 1.29405E-18 3.58443E-18 5.09289E-18 5.61224E-18 + 5.24411E-18 4.30091E-18 3.14919E-18 2.07865E-18 1.24429E-18 6.78197E-19 + 3.37520E-19 1.53686E-19 6.41240E-20 2.45451E-20 8.62719E-21 2.78644E-21 + 8.27499E-22 2.26065E-22 5.68367E-23 1.31553E-23 + -1.71982E-24 -7.43037E-24 -2.95540E-23 -1.08181E-22 -3.64277E-22 -1.12785E-21 + -3.20884E-21 -8.38306E-21 -2.00917E-20 -4.41247E-20 -8.86621E-20 -1.62668E-19 + -2.71746E-19 -4.11700E-19 -5.62267E-19 -6.85573E-19 -7.33699E-19 -6.65804E-19 + -4.68600E-19 -1.69174E-19 1.69174E-19 4.68600E-19 6.65804E-19 7.33699E-19 + 6.85573E-19 5.62267E-19 4.11700E-19 2.71746E-19 1.62668E-19 8.86621E-20 + 4.41247E-20 2.00917E-20 8.38306E-21 3.20884E-21 1.12785E-21 3.64277E-22 + 1.08181E-22 2.95540E-23 7.43037E-24 1.71982E-24 + -1.97936E-25 -8.55173E-25 -3.40142E-24 -1.24507E-23 -4.19253E-23 -1.29806E-22 + -3.69310E-22 -9.64819E-22 -2.31238E-21 -5.07839E-21 -1.02043E-20 -1.87218E-20 + -3.12757E-20 -4.73832E-20 -6.47123E-20 -7.89037E-20 -8.44426E-20 -7.66285E-20 + -5.39319E-20 -1.94705E-20 1.94705E-20 5.39319E-20 7.66285E-20 8.44426E-20 + 7.89037E-20 6.47123E-20 4.73832E-20 3.12757E-20 1.87218E-20 1.02043E-20 + 5.07839E-21 2.31238E-21 9.64819E-22 3.69310E-22 1.29806E-22 4.19253E-23 + 1.24507E-23 3.40142E-24 8.55174E-25 1.97936E-25 + -2.40880E-24 -1.04071E-23 -4.13938E-23 -1.51519E-22 -5.10212E-22 -1.57968E-21 + -4.49435E-21 -1.17414E-20 -2.81407E-20 -6.18018E-20 -1.24182E-19 -2.27836E-19 + -3.80612E-19 -5.76633E-19 -7.87520E-19 -9.60224E-19 -1.02763E-18 -9.32535E-19 + -6.56328E-19 -2.36947E-19 2.36947E-19 6.56328E-19 9.32535E-19 1.02763E-18 + 9.60224E-19 7.87520E-19 5.76633E-19 3.80612E-19 2.27836E-19 1.24182E-19 + 6.18018E-20 2.81407E-20 1.17414E-20 4.49435E-21 1.57968E-21 5.10212E-22 + 1.51519E-22 4.13938E-23 1.04071E-23 2.40880E-24 + -2.09294E-23 -9.04244E-23 -3.59660E-22 -1.31651E-21 -4.43310E-21 -1.37254E-20 + -3.90502E-20 -1.02018E-19 -2.44507E-19 -5.36979E-19 -1.07898E-18 -1.97960E-18 + -3.30703E-18 -5.01021E-18 -6.84255E-18 -8.34313E-18 -8.92880E-18 -8.10255E-18 + -5.70266E-18 -2.05877E-18 2.05877E-18 5.70266E-18 8.10255E-18 8.92880E-18 + 8.34313E-18 6.84255E-18 5.01021E-18 3.30703E-18 1.97960E-18 1.07898E-18 + 5.36979E-19 2.44507E-19 1.02018E-19 3.90502E-20 1.37254E-20 4.43310E-21 + 1.31651E-21 3.59660E-22 9.04244E-23 2.09294E-23 + -1.60094E-22 -6.91678E-22 -2.75112E-21 -1.00703E-20 -3.39098E-20 -1.04989E-19 + -2.98704E-19 -7.80361E-19 -1.87029E-18 -4.10748E-18 -8.25337E-18 -1.51425E-17 + -2.52963E-17 -3.83242E-17 -5.23403E-17 -6.38185E-17 -6.82985E-17 -6.19783E-17 + -4.36210E-17 -1.57480E-17 1.57480E-17 4.36210E-17 6.19783E-17 6.82985E-17 + 6.38185E-17 5.23403E-17 3.83242E-17 2.52963E-17 1.51425E-17 8.25337E-18 + 4.10748E-18 1.87029E-18 7.80361E-19 2.98704E-19 1.04989E-19 3.39098E-20 + 1.00703E-20 2.75112E-21 6.91678E-22 1.60094E-22 + -1.07810E-21 -4.65788E-21 -1.85265E-20 -6.78153E-20 -2.28355E-19 -7.07016E-19 + -2.01153E-18 -5.25509E-18 -1.25949E-17 -2.76605E-17 -5.55797E-17 -1.01972E-16 + -1.70350E-16 -2.58082E-16 -3.52469E-16 -4.29766E-16 -4.59934E-16 -4.17373E-16 + -2.93752E-16 -1.06050E-16 1.06050E-16 2.93752E-16 4.17373E-16 4.59934E-16 + 4.29766E-16 3.52469E-16 2.58082E-16 1.70350E-16 1.01972E-16 5.55797E-17 + 2.76605E-17 1.25949E-17 5.25509E-18 2.01153E-18 7.07016E-19 2.28355E-19 + 6.78153E-20 1.85265E-20 4.65788E-21 1.07810E-21 + -6.39177E-21 -2.76153E-20 -1.09839E-19 -4.02058E-19 -1.35385E-18 -4.19170E-18 + -1.19258E-17 -3.11560E-17 -7.46716E-17 -1.63991E-16 -3.29517E-16 -6.04564E-16 + -1.00996E-15 -1.53010E-15 -2.08969E-15 -2.54796E-15 -2.72682E-15 -2.47449E-15 + -1.74157E-15 -6.28742E-16 6.28742E-16 1.74157E-15 2.47449E-15 2.72682E-15 + 2.54796E-15 2.08969E-15 1.53010E-15 1.00996E-15 6.04564E-16 3.29517E-16 + 1.63991E-16 7.46716E-17 3.11560E-17 1.19258E-17 4.19170E-18 1.35385E-18 + 4.02058E-19 1.09839E-19 2.76153E-20 6.39177E-21 + -3.33637E-20 -1.44146E-19 -5.73335E-19 -2.09866E-18 -7.06682E-18 -2.18798E-17 + -6.22501E-17 -1.62628E-16 -3.89770E-16 -8.56001E-16 -1.72001E-15 -3.15570E-15 + -5.27175E-15 -7.98679E-15 -1.09077E-14 -1.32998E-14 -1.42334E-14 -1.29163E-14 + -9.09063E-15 -3.28190E-15 3.28190E-15 9.09063E-15 1.29163E-14 1.42334E-14 + 1.32998E-14 1.09077E-14 7.98679E-15 5.27175E-15 3.15570E-15 1.72001E-15 + 8.56001E-16 3.89770E-16 1.62628E-16 6.22501E-17 2.18798E-17 7.06682E-18 + 2.09866E-18 5.73335E-19 1.44146E-19 3.33637E-20 + -1.53336E-19 -6.62481E-19 -2.63499E-18 -9.64522E-18 -3.24784E-17 -1.00557E-16 + -2.86095E-16 -7.47421E-16 -1.79135E-15 -3.93410E-15 -7.90499E-15 -1.45033E-14 + -2.42285E-14 -3.67065E-14 -5.01309E-14 -6.11247E-14 -6.54155E-14 -5.93621E-14 + -4.17797E-14 -1.50833E-14 1.50833E-14 4.17797E-14 5.93621E-14 6.54155E-14 + 6.11247E-14 5.01309E-14 3.67065E-14 2.42285E-14 1.45033E-14 7.90499E-15 + 3.93410E-15 1.79135E-15 7.47421E-16 2.86095E-16 1.00557E-16 3.24784E-17 + 9.64522E-18 2.63499E-18 6.62481E-19 1.53336E-19 + -6.20551E-19 -2.68106E-18 -1.06638E-17 -3.90342E-17 -1.31440E-16 -4.06956E-16 + -1.15783E-15 -3.02481E-15 -7.24957E-15 -1.59213E-14 -3.19914E-14 -5.86947E-14 + -9.80525E-14 -1.48551E-13 -2.02880E-13 -2.47371E-13 -2.64736E-13 -2.40238E-13 + -1.69082E-13 -6.10420E-14 6.10420E-14 1.69082E-13 2.40238E-13 2.64736E-13 + 2.47371E-13 2.02880E-13 1.48551E-13 9.80525E-14 5.86947E-14 3.19914E-14 + 1.59213E-14 7.24957E-15 3.02481E-15 1.15783E-15 4.06956E-16 1.31440E-16 + 3.90342E-17 1.06638E-17 2.68106E-18 6.20551E-19 + -2.21180E-18 -9.55596E-18 -3.80084E-17 -1.39128E-16 -4.68485E-16 -1.45049E-15 + -4.12678E-15 -1.07812E-14 -2.58393E-14 -5.67474E-14 -1.14025E-13 -2.09202E-13 + -3.49484E-13 -5.29473E-13 -7.23114E-13 -8.81693E-13 -9.43586E-13 -8.56269E-13 + -6.02651E-13 -2.17569E-13 2.17569E-13 6.02651E-13 8.56269E-13 9.43586E-13 + 8.81693E-13 7.23114E-13 5.29473E-13 3.49484E-13 2.09202E-13 1.14025E-13 + 5.67474E-14 2.58393E-14 1.07812E-14 4.12678E-15 1.45049E-15 4.68485E-16 + 1.39128E-16 3.80084E-17 9.55596E-18 2.21180E-18 + -6.94499E-18 -3.00055E-17 -1.19346E-16 -4.36857E-16 -1.47103E-15 -4.55451E-15 + -1.29580E-14 -3.38526E-14 -8.11347E-14 -1.78185E-13 -3.58037E-13 -6.56891E-13 + -1.09737E-12 -1.66253E-12 -2.27056E-12 -2.76849E-12 -2.96284E-12 -2.68866E-12 + -1.89231E-12 -6.83161E-13 6.83161E-13 1.89231E-12 2.68866E-12 2.96284E-12 + 2.76849E-12 2.27056E-12 1.66253E-12 1.09737E-12 6.56891E-13 3.58037E-13 + 1.78185E-13 8.11347E-14 3.38526E-14 1.29580E-14 4.55451E-15 1.47103E-15 + 4.36857E-16 1.19346E-16 3.00055E-17 6.94499E-18 + -1.92204E-17 -8.30406E-17 -3.30291E-16 -1.20901E-15 -4.07110E-15 -1.26047E-14 + -3.58614E-14 -9.36877E-14 -2.24541E-13 -4.93131E-13 -9.90873E-13 -1.81796E-12 + -3.03699E-12 -4.60109E-12 -6.28381E-12 -7.66185E-12 -8.19970E-12 -7.44092E-12 + -5.23699E-12 -1.89066E-12 1.89066E-12 5.23699E-12 7.44092E-12 8.19970E-12 + 7.66185E-12 6.28381E-12 4.60109E-12 3.03699E-12 1.81796E-12 9.90873E-13 + 4.93131E-13 2.24541E-13 9.36877E-14 3.58614E-14 1.26047E-14 4.07110E-15 + 1.20901E-15 3.30291E-16 8.30406E-17 1.92204E-17 + -4.69199E-17 -2.02715E-16 -8.06291E-16 -2.95138E-15 -9.93820E-15 -3.07700E-14 + -8.75434E-14 -2.28706E-13 -5.48141E-13 -1.20381E-12 -2.41888E-12 -4.43791E-12 + -7.41376E-12 -1.12320E-11 -1.53398E-11 -1.87038E-11 -2.00167E-11 -1.81644E-11 + -1.27843E-11 -4.61539E-12 4.61539E-12 1.27843E-11 1.81644E-11 2.00167E-11 + 1.87038E-11 1.53398E-11 1.12320E-11 7.41376E-12 4.43791E-12 2.41888E-12 + 1.20381E-12 5.48141E-13 2.28706E-13 8.75434E-14 3.07700E-14 9.93820E-15 + 2.95138E-15 8.06291E-16 2.02715E-16 4.69199E-17 + -1.01163E-16 -4.37071E-16 -1.73843E-15 -6.36342E-15 -2.14276E-14 -6.63426E-14 + -1.88751E-13 -4.93110E-13 -1.18184E-12 -2.59551E-12 -5.21530E-12 -9.56851E-12 + -1.59847E-11 -2.42171E-11 -3.30738E-11 -4.03269E-11 -4.31578E-11 -3.91641E-11 + -2.75641E-11 -9.95117E-12 9.95117E-12 2.75641E-11 3.91641E-11 4.31578E-11 + 4.03269E-11 3.30738E-11 2.42171E-11 1.59847E-11 9.56851E-12 5.21530E-12 + 2.59551E-12 1.18184E-12 4.93110E-13 1.88751E-13 6.63426E-14 2.14276E-14 + 6.36342E-15 1.73843E-15 4.37071E-16 1.01163E-16 + -1.93055E-16 -8.34084E-16 -3.31753E-15 -1.21436E-14 -4.08913E-14 -1.26605E-13 + -3.60202E-13 -9.41026E-13 -2.25536E-12 -4.95314E-12 -9.95262E-12 -1.82601E-11 + -3.05044E-11 -4.62146E-11 -6.31164E-11 -7.69578E-11 -8.23601E-11 -7.47387E-11 + -5.26019E-11 -1.89903E-11 1.89903E-11 5.26019E-11 7.47387E-11 8.23601E-11 + 7.69578E-11 6.31164E-11 4.62146E-11 3.05044E-11 1.82601E-11 9.95262E-12 + 4.95314E-12 2.25536E-12 9.41026E-13 3.60202E-13 1.26605E-13 4.08913E-14 + 1.21436E-14 3.31753E-15 8.34084E-16 1.93055E-16 + -3.27198E-16 -1.41364E-15 -5.62269E-15 -2.05815E-14 -6.93043E-14 -2.14575E-13 + -6.10486E-13 -1.59489E-12 -3.82247E-12 -8.39480E-12 -1.68681E-11 -3.09479E-11 + -5.17001E-11 -7.83265E-11 -1.06972E-10 -1.30431E-10 -1.39587E-10 -1.26670E-10 + -8.91518E-11 -3.21856E-11 3.21856E-11 8.91518E-11 1.26670E-10 1.39587E-10 + 1.30431E-10 1.06972E-10 7.83265E-11 5.17001E-11 3.09479E-11 1.68681E-11 + 8.39480E-12 3.82247E-12 1.59489E-12 6.10486E-13 2.14575E-13 6.93043E-14 + 2.05815E-14 5.62269E-15 1.41364E-15 3.27198E-16 + -4.95119E-16 -2.13914E-15 -8.50833E-15 -3.11442E-14 -1.04872E-13 -3.24698E-13 + -9.23795E-13 -2.41341E-12 -5.78422E-12 -1.27031E-11 -2.55250E-11 -4.68308E-11 + -7.82332E-11 -1.18525E-10 -1.61872E-10 -1.97370E-10 -2.11225E-10 -1.91679E-10 + -1.34906E-10 -4.87036E-11 4.87036E-11 1.34906E-10 1.91679E-10 2.11225E-10 + 1.97370E-10 1.61872E-10 1.18525E-10 7.82332E-11 4.68308E-11 2.55250E-11 + 1.27031E-11 5.78422E-12 2.41341E-12 9.23795E-13 3.24698E-13 1.04872E-13 + 3.11442E-14 8.50833E-15 2.13914E-15 4.95119E-16 + -6.74188E-16 -2.91279E-15 -1.15855E-14 -4.24081E-14 -1.42801E-13 -4.42130E-13 + -1.25790E-12 -3.28626E-12 -7.87618E-12 -1.72974E-11 -3.47566E-11 -6.37679E-11 + -1.06528E-10 -1.61391E-10 -2.20415E-10 -2.68753E-10 -2.87619E-10 -2.61003E-10 + -1.83697E-10 -6.63181E-11 6.63181E-11 1.83697E-10 2.61003E-10 2.87619E-10 + 2.68753E-10 2.20415E-10 1.61391E-10 1.06528E-10 6.37679E-11 3.47566E-11 + 1.72974E-11 7.87618E-12 3.28626E-12 1.25790E-12 4.42130E-13 1.42801E-13 + 4.24081E-14 1.15855E-14 2.91279E-15 6.74188E-16 + -8.34945E-16 -3.60733E-15 -1.43480E-14 -5.25201E-14 -1.76851E-13 -5.47554E-13 + -1.55784E-12 -4.06985E-12 -9.75421E-12 -2.14219E-11 -4.30441E-11 -7.89731E-11 + -1.31929E-10 -1.99874E-10 -2.72972E-10 -3.32835E-10 -3.56200E-10 -3.23238E-10 + -2.27498E-10 -8.21313E-11 8.21313E-11 2.27498E-10 3.23238E-10 3.56200E-10 + 3.32835E-10 2.72972E-10 1.99874E-10 1.31929E-10 7.89731E-11 4.30441E-11 + 2.14219E-11 9.75421E-12 4.06985E-12 1.55784E-12 5.47554E-13 1.76851E-13 + 5.25201E-14 1.43480E-14 3.60733E-15 8.34945E-16 + -9.52541E-16 -4.11540E-15 -1.63688E-14 -5.99171E-14 -2.01759E-13 -6.24673E-13 + -1.77725E-12 -4.64306E-12 -1.11280E-11 -2.44390E-11 -4.91066E-11 -9.00959E-11 + -1.50510E-10 -2.28025E-10 -3.11419E-10 -3.79713E-10 -4.06368E-10 -3.68764E-10 + -2.59540E-10 -9.36990E-11 9.36990E-11 2.59540E-10 3.68764E-10 4.06368E-10 + 3.79713E-10 3.11419E-10 2.28025E-10 1.50510E-10 9.00959E-11 4.91066E-11 + 2.44390E-11 1.11280E-11 4.64306E-12 1.77725E-12 6.24673E-13 2.01759E-13 + 5.99171E-14 1.63688E-14 4.11540E-15 9.52541E-16 + -1.01345E-15 -4.37855E-15 -1.74155E-14 -6.37484E-14 -2.14660E-13 -6.64616E-13 + -1.89089E-12 -4.93994E-12 -1.18396E-11 -2.60017E-11 -5.22466E-11 -9.58568E-11 + -1.60134E-10 -2.42605E-10 -3.31331E-10 -4.03993E-10 -4.32352E-10 -3.92343E-10 + -2.76135E-10 -9.96903E-11 9.96903E-11 2.76135E-10 3.92343E-10 4.32352E-10 + 4.03993E-10 3.31331E-10 2.42605E-10 1.60134E-10 9.58568E-11 5.22466E-11 + 2.60017E-11 1.18396E-11 4.93994E-12 1.89089E-12 6.64616E-13 2.14660E-13 + 6.37484E-14 1.74155E-14 4.37855E-15 1.01345E-15 + -1.01345E-15 -4.37855E-15 -1.74155E-14 -6.37484E-14 -2.14660E-13 -6.64616E-13 + -1.89089E-12 -4.93994E-12 -1.18396E-11 -2.60017E-11 -5.22466E-11 -9.58568E-11 + -1.60134E-10 -2.42605E-10 -3.31331E-10 -4.03993E-10 -4.32352E-10 -3.92343E-10 + -2.76135E-10 -9.96903E-11 9.96903E-11 2.76135E-10 3.92343E-10 4.32352E-10 + 4.03993E-10 3.31331E-10 2.42605E-10 1.60134E-10 9.58568E-11 5.22466E-11 + 2.60017E-11 1.18396E-11 4.93994E-12 1.89089E-12 6.64616E-13 2.14660E-13 + 6.37484E-14 1.74155E-14 4.37855E-15 1.01345E-15 + -9.52541E-16 -4.11540E-15 -1.63688E-14 -5.99171E-14 -2.01759E-13 -6.24673E-13 + -1.77725E-12 -4.64306E-12 -1.11280E-11 -2.44390E-11 -4.91066E-11 -9.00959E-11 + -1.50510E-10 -2.28025E-10 -3.11419E-10 -3.79713E-10 -4.06368E-10 -3.68764E-10 + -2.59540E-10 -9.36990E-11 9.36990E-11 2.59540E-10 3.68764E-10 4.06368E-10 + 3.79713E-10 3.11419E-10 2.28025E-10 1.50510E-10 9.00959E-11 4.91066E-11 + 2.44390E-11 1.11280E-11 4.64306E-12 1.77725E-12 6.24673E-13 2.01759E-13 + 5.99171E-14 1.63688E-14 4.11540E-15 9.52541E-16 + -8.34945E-16 -3.60733E-15 -1.43480E-14 -5.25201E-14 -1.76851E-13 -5.47554E-13 + -1.55784E-12 -4.06985E-12 -9.75421E-12 -2.14219E-11 -4.30441E-11 -7.89731E-11 + -1.31929E-10 -1.99874E-10 -2.72972E-10 -3.32835E-10 -3.56200E-10 -3.23238E-10 + -2.27498E-10 -8.21313E-11 8.21313E-11 2.27498E-10 3.23238E-10 3.56200E-10 + 3.32835E-10 2.72972E-10 1.99874E-10 1.31929E-10 7.89731E-11 4.30441E-11 + 2.14219E-11 9.75421E-12 4.06985E-12 1.55784E-12 5.47554E-13 1.76851E-13 + 5.25201E-14 1.43480E-14 3.60733E-15 8.34945E-16 + -6.74188E-16 -2.91279E-15 -1.15855E-14 -4.24081E-14 -1.42801E-13 -4.42130E-13 + -1.25790E-12 -3.28626E-12 -7.87618E-12 -1.72974E-11 -3.47566E-11 -6.37679E-11 + -1.06528E-10 -1.61391E-10 -2.20415E-10 -2.68753E-10 -2.87619E-10 -2.61003E-10 + -1.83697E-10 -6.63181E-11 6.63181E-11 1.83697E-10 2.61003E-10 2.87619E-10 + 2.68753E-10 2.20415E-10 1.61391E-10 1.06528E-10 6.37679E-11 3.47566E-11 + 1.72974E-11 7.87618E-12 3.28626E-12 1.25790E-12 4.42130E-13 1.42801E-13 + 4.24081E-14 1.15855E-14 2.91279E-15 6.74188E-16 + -4.95119E-16 -2.13914E-15 -8.50833E-15 -3.11442E-14 -1.04872E-13 -3.24698E-13 + -9.23795E-13 -2.41341E-12 -5.78422E-12 -1.27031E-11 -2.55250E-11 -4.68308E-11 + -7.82332E-11 -1.18525E-10 -1.61872E-10 -1.97370E-10 -2.11225E-10 -1.91679E-10 + -1.34906E-10 -4.87036E-11 4.87036E-11 1.34906E-10 1.91679E-10 2.11225E-10 + 1.97370E-10 1.61872E-10 1.18525E-10 7.82332E-11 4.68308E-11 2.55250E-11 + 1.27031E-11 5.78422E-12 2.41341E-12 9.23795E-13 3.24698E-13 1.04872E-13 + 3.11442E-14 8.50833E-15 2.13914E-15 4.95119E-16 + -3.27198E-16 -1.41364E-15 -5.62269E-15 -2.05815E-14 -6.93043E-14 -2.14575E-13 + -6.10486E-13 -1.59489E-12 -3.82247E-12 -8.39480E-12 -1.68681E-11 -3.09479E-11 + -5.17001E-11 -7.83265E-11 -1.06972E-10 -1.30431E-10 -1.39587E-10 -1.26670E-10 + -8.91518E-11 -3.21856E-11 3.21856E-11 8.91518E-11 1.26670E-10 1.39587E-10 + 1.30431E-10 1.06972E-10 7.83265E-11 5.17001E-11 3.09479E-11 1.68681E-11 + 8.39480E-12 3.82247E-12 1.59489E-12 6.10486E-13 2.14575E-13 6.93043E-14 + 2.05815E-14 5.62269E-15 1.41364E-15 3.27198E-16 + -1.93055E-16 -8.34084E-16 -3.31753E-15 -1.21436E-14 -4.08913E-14 -1.26605E-13 + -3.60202E-13 -9.41026E-13 -2.25536E-12 -4.95314E-12 -9.95262E-12 -1.82601E-11 + -3.05044E-11 -4.62146E-11 -6.31164E-11 -7.69578E-11 -8.23601E-11 -7.47387E-11 + -5.26019E-11 -1.89903E-11 1.89903E-11 5.26019E-11 7.47387E-11 8.23601E-11 + 7.69578E-11 6.31164E-11 4.62146E-11 3.05044E-11 1.82601E-11 9.95262E-12 + 4.95314E-12 2.25536E-12 9.41026E-13 3.60202E-13 1.26605E-13 4.08913E-14 + 1.21436E-14 3.31753E-15 8.34084E-16 1.93055E-16 + -1.01163E-16 -4.37071E-16 -1.73843E-15 -6.36342E-15 -2.14276E-14 -6.63426E-14 + -1.88751E-13 -4.93110E-13 -1.18184E-12 -2.59551E-12 -5.21530E-12 -9.56851E-12 + -1.59847E-11 -2.42171E-11 -3.30738E-11 -4.03269E-11 -4.31578E-11 -3.91641E-11 + -2.75641E-11 -9.95117E-12 9.95117E-12 2.75641E-11 3.91641E-11 4.31578E-11 + 4.03269E-11 3.30738E-11 2.42171E-11 1.59847E-11 9.56851E-12 5.21530E-12 + 2.59551E-12 1.18184E-12 4.93110E-13 1.88751E-13 6.63426E-14 2.14276E-14 + 6.36342E-15 1.73843E-15 4.37071E-16 1.01163E-16 + -4.69199E-17 -2.02715E-16 -8.06291E-16 -2.95138E-15 -9.93820E-15 -3.07700E-14 + -8.75434E-14 -2.28706E-13 -5.48141E-13 -1.20381E-12 -2.41888E-12 -4.43791E-12 + -7.41376E-12 -1.12320E-11 -1.53398E-11 -1.87038E-11 -2.00167E-11 -1.81644E-11 + -1.27843E-11 -4.61539E-12 4.61539E-12 1.27843E-11 1.81644E-11 2.00167E-11 + 1.87038E-11 1.53398E-11 1.12320E-11 7.41376E-12 4.43791E-12 2.41888E-12 + 1.20381E-12 5.48141E-13 2.28706E-13 8.75434E-14 3.07700E-14 9.93820E-15 + 2.95138E-15 8.06291E-16 2.02715E-16 4.69199E-17 + -1.92204E-17 -8.30406E-17 -3.30291E-16 -1.20901E-15 -4.07110E-15 -1.26047E-14 + -3.58614E-14 -9.36877E-14 -2.24541E-13 -4.93131E-13 -9.90873E-13 -1.81796E-12 + -3.03699E-12 -4.60109E-12 -6.28381E-12 -7.66185E-12 -8.19970E-12 -7.44092E-12 + -5.23699E-12 -1.89066E-12 1.89066E-12 5.23699E-12 7.44092E-12 8.19970E-12 + 7.66185E-12 6.28381E-12 4.60109E-12 3.03699E-12 1.81796E-12 9.90873E-13 + 4.93131E-13 2.24541E-13 9.36877E-14 3.58614E-14 1.26047E-14 4.07110E-15 + 1.20901E-15 3.30291E-16 8.30406E-17 1.92204E-17 + -6.94499E-18 -3.00055E-17 -1.19346E-16 -4.36857E-16 -1.47103E-15 -4.55451E-15 + -1.29580E-14 -3.38526E-14 -8.11347E-14 -1.78185E-13 -3.58037E-13 -6.56891E-13 + -1.09737E-12 -1.66253E-12 -2.27056E-12 -2.76849E-12 -2.96284E-12 -2.68866E-12 + -1.89231E-12 -6.83161E-13 6.83161E-13 1.89231E-12 2.68866E-12 2.96284E-12 + 2.76849E-12 2.27056E-12 1.66253E-12 1.09737E-12 6.56891E-13 3.58037E-13 + 1.78185E-13 8.11347E-14 3.38526E-14 1.29580E-14 4.55451E-15 1.47103E-15 + 4.36857E-16 1.19346E-16 3.00055E-17 6.94499E-18 + -2.21180E-18 -9.55596E-18 -3.80084E-17 -1.39128E-16 -4.68485E-16 -1.45049E-15 + -4.12678E-15 -1.07812E-14 -2.58393E-14 -5.67474E-14 -1.14025E-13 -2.09202E-13 + -3.49484E-13 -5.29473E-13 -7.23114E-13 -8.81693E-13 -9.43586E-13 -8.56269E-13 + -6.02651E-13 -2.17569E-13 2.17569E-13 6.02651E-13 8.56269E-13 9.43586E-13 + 8.81693E-13 7.23114E-13 5.29473E-13 3.49484E-13 2.09202E-13 1.14025E-13 + 5.67474E-14 2.58393E-14 1.07812E-14 4.12678E-15 1.45049E-15 4.68485E-16 + 1.39128E-16 3.80084E-17 9.55596E-18 2.21180E-18 + -6.20551E-19 -2.68106E-18 -1.06638E-17 -3.90342E-17 -1.31440E-16 -4.06956E-16 + -1.15783E-15 -3.02481E-15 -7.24957E-15 -1.59213E-14 -3.19914E-14 -5.86947E-14 + -9.80525E-14 -1.48551E-13 -2.02880E-13 -2.47371E-13 -2.64736E-13 -2.40238E-13 + -1.69082E-13 -6.10420E-14 6.10420E-14 1.69082E-13 2.40238E-13 2.64736E-13 + 2.47371E-13 2.02880E-13 1.48551E-13 9.80525E-14 5.86947E-14 3.19914E-14 + 1.59213E-14 7.24957E-15 3.02481E-15 1.15783E-15 4.06956E-16 1.31440E-16 + 3.90342E-17 1.06638E-17 2.68106E-18 6.20551E-19 + -1.53336E-19 -6.62481E-19 -2.63499E-18 -9.64522E-18 -3.24784E-17 -1.00557E-16 + -2.86095E-16 -7.47421E-16 -1.79135E-15 -3.93410E-15 -7.90499E-15 -1.45033E-14 + -2.42285E-14 -3.67065E-14 -5.01309E-14 -6.11247E-14 -6.54155E-14 -5.93621E-14 + -4.17797E-14 -1.50833E-14 1.50833E-14 4.17797E-14 5.93621E-14 6.54155E-14 + 6.11247E-14 5.01309E-14 3.67065E-14 2.42285E-14 1.45033E-14 7.90499E-15 + 3.93410E-15 1.79135E-15 7.47421E-16 2.86095E-16 1.00557E-16 3.24784E-17 + 9.64522E-18 2.63499E-18 6.62481E-19 1.53336E-19 + -3.33637E-20 -1.44146E-19 -5.73335E-19 -2.09866E-18 -7.06682E-18 -2.18798E-17 + -6.22501E-17 -1.62628E-16 -3.89770E-16 -8.56001E-16 -1.72001E-15 -3.15570E-15 + -5.27175E-15 -7.98679E-15 -1.09077E-14 -1.32998E-14 -1.42334E-14 -1.29163E-14 + -9.09063E-15 -3.28190E-15 3.28190E-15 9.09063E-15 1.29163E-14 1.42334E-14 + 1.32998E-14 1.09077E-14 7.98679E-15 5.27175E-15 3.15570E-15 1.72001E-15 + 8.56001E-16 3.89770E-16 1.62628E-16 6.22501E-17 2.18798E-17 7.06682E-18 + 2.09866E-18 5.73335E-19 1.44146E-19 3.33637E-20 + -6.39177E-21 -2.76153E-20 -1.09839E-19 -4.02058E-19 -1.35385E-18 -4.19170E-18 + -1.19258E-17 -3.11560E-17 -7.46716E-17 -1.63991E-16 -3.29517E-16 -6.04564E-16 + -1.00996E-15 -1.53010E-15 -2.08969E-15 -2.54796E-15 -2.72682E-15 -2.47449E-15 + -1.74157E-15 -6.28742E-16 6.28742E-16 1.74157E-15 2.47449E-15 2.72682E-15 + 2.54796E-15 2.08969E-15 1.53010E-15 1.00996E-15 6.04564E-16 3.29517E-16 + 1.63991E-16 7.46716E-17 3.11560E-17 1.19258E-17 4.19170E-18 1.35385E-18 + 4.02058E-19 1.09839E-19 2.76153E-20 6.39177E-21 + -1.07810E-21 -4.65788E-21 -1.85265E-20 -6.78153E-20 -2.28355E-19 -7.07016E-19 + -2.01153E-18 -5.25509E-18 -1.25949E-17 -2.76605E-17 -5.55797E-17 -1.01972E-16 + -1.70350E-16 -2.58082E-16 -3.52469E-16 -4.29766E-16 -4.59934E-16 -4.17373E-16 + -2.93752E-16 -1.06050E-16 1.06050E-16 2.93752E-16 4.17373E-16 4.59934E-16 + 4.29766E-16 3.52469E-16 2.58082E-16 1.70350E-16 1.01972E-16 5.55797E-17 + 2.76605E-17 1.25949E-17 5.25509E-18 2.01153E-18 7.07016E-19 2.28355E-19 + 6.78153E-20 1.85265E-20 4.65788E-21 1.07810E-21 + -1.60094E-22 -6.91678E-22 -2.75112E-21 -1.00703E-20 -3.39098E-20 -1.04989E-19 + -2.98704E-19 -7.80361E-19 -1.87029E-18 -4.10748E-18 -8.25337E-18 -1.51425E-17 + -2.52963E-17 -3.83242E-17 -5.23403E-17 -6.38185E-17 -6.82985E-17 -6.19783E-17 + -4.36210E-17 -1.57480E-17 1.57480E-17 4.36210E-17 6.19783E-17 6.82985E-17 + 6.38185E-17 5.23403E-17 3.83242E-17 2.52963E-17 1.51425E-17 8.25337E-18 + 4.10748E-18 1.87029E-18 7.80361E-19 2.98704E-19 1.04989E-19 3.39098E-20 + 1.00703E-20 2.75112E-21 6.91678E-22 1.60094E-22 + -2.09294E-23 -9.04244E-23 -3.59660E-22 -1.31651E-21 -4.43310E-21 -1.37254E-20 + -3.90502E-20 -1.02018E-19 -2.44507E-19 -5.36979E-19 -1.07898E-18 -1.97960E-18 + -3.30703E-18 -5.01021E-18 -6.84255E-18 -8.34313E-18 -8.92880E-18 -8.10255E-18 + -5.70266E-18 -2.05877E-18 2.05877E-18 5.70266E-18 8.10255E-18 8.92880E-18 + 8.34313E-18 6.84255E-18 5.01021E-18 3.30703E-18 1.97960E-18 1.07898E-18 + 5.36979E-19 2.44507E-19 1.02018E-19 3.90502E-20 1.37254E-20 4.43310E-21 + 1.31651E-21 3.59660E-22 9.04244E-23 2.09294E-23 + -2.40880E-24 -1.04071E-23 -4.13938E-23 -1.51519E-22 -5.10212E-22 -1.57968E-21 + -4.49435E-21 -1.17414E-20 -2.81407E-20 -6.18018E-20 -1.24182E-19 -2.27836E-19 + -3.80612E-19 -5.76633E-19 -7.87520E-19 -9.60224E-19 -1.02763E-18 -9.32535E-19 + -6.56328E-19 -2.36947E-19 2.36947E-19 6.56328E-19 9.32536E-19 1.02763E-18 + 9.60224E-19 7.87520E-19 5.76633E-19 3.80612E-19 2.27836E-19 1.24182E-19 + 6.18018E-20 2.81407E-20 1.17414E-20 4.49435E-21 1.57968E-21 5.10212E-22 + 1.51519E-22 4.13938E-23 1.04071E-23 2.40880E-24 + -2.50338E-23 -1.08157E-22 -4.30192E-22 -1.57469E-21 -5.30246E-21 -1.64171E-20 + -4.67082E-20 -1.22025E-19 -2.92457E-19 -6.42285E-19 -1.29058E-18 -2.36782E-18 + -3.95557E-18 -5.99275E-18 -8.18443E-18 -9.97928E-18 -1.06798E-17 -9.69152E-18 + -6.82100E-18 -2.46251E-18 2.46251E-18 6.82100E-18 9.69152E-18 1.06798E-17 + 9.97928E-18 8.18443E-18 5.99275E-18 3.95557E-18 2.36782E-18 1.29058E-18 + 6.42285E-19 2.92457E-19 1.22025E-19 4.67082E-20 1.64171E-20 5.30246E-21 + 1.57469E-21 4.30192E-22 1.08157E-22 2.50338E-23 + -2.17512E-22 -9.39751E-22 -3.73782E-21 -1.36821E-20 -4.60717E-20 -1.42644E-19 + -4.05835E-19 -1.06024E-18 -2.54108E-18 -5.58064E-18 -1.12135E-17 -2.05734E-17 + -3.43689E-17 -5.20694E-17 -7.11123E-17 -8.67073E-17 -9.27940E-17 -8.42071E-17 + -5.92658E-17 -2.13961E-17 2.13961E-17 5.92658E-17 8.42071E-17 9.27940E-17 + 8.67073E-17 7.11123E-17 5.20694E-17 3.43689E-17 2.05734E-17 1.12135E-17 + 5.58064E-18 2.54108E-18 1.06024E-18 4.05835E-19 1.42644E-19 4.60717E-20 + 1.36821E-20 3.73782E-21 9.39751E-22 2.17512E-22 + -1.66380E-21 -7.18837E-21 -2.85914E-20 -1.04657E-19 -3.52413E-19 -1.09112E-18 + -3.10433E-18 -8.11003E-18 -1.94373E-17 -4.26876E-17 -8.57745E-17 -1.57370E-16 + -2.62895E-16 -3.98291E-16 -5.43955E-16 -6.63244E-16 -7.09803E-16 -6.44119E-16 + -4.53338E-16 -1.63664E-16 1.63664E-16 4.53338E-16 6.44119E-16 7.09803E-16 + 6.63244E-16 5.43955E-16 3.98291E-16 2.62895E-16 1.57370E-16 8.57745E-17 + 4.26876E-17 1.94373E-17 8.11003E-18 3.10433E-18 1.09112E-18 3.52413E-19 + 1.04657E-19 2.85914E-20 7.18837E-21 1.66380E-21 + -1.12043E-20 -4.84078E-20 -1.92540E-19 -7.04781E-19 -2.37321E-18 -7.34778E-18 + -2.09051E-17 -5.46144E-17 -1.30894E-16 -2.87466E-16 -5.77621E-16 -1.05976E-15 + -1.77039E-15 -2.68216E-15 -3.66309E-15 -4.46641E-15 -4.77994E-15 -4.33762E-15 + -3.05286E-15 -1.10214E-15 1.10214E-15 3.05286E-15 4.33762E-15 4.77994E-15 + 4.46641E-15 3.66309E-15 2.68216E-15 1.77039E-15 1.05976E-15 5.77621E-16 + 2.87466E-16 1.30894E-16 5.46144E-17 2.09051E-17 7.34778E-18 2.37321E-18 + 7.04781E-19 1.92540E-19 4.84078E-20 1.12043E-20 + -6.64275E-20 -2.86996E-19 -1.14152E-18 -4.17845E-18 -1.40701E-17 -4.35629E-17 + -1.23941E-16 -3.23794E-16 -7.76037E-16 -1.70431E-15 -3.42455E-15 -6.28303E-15 + -1.04961E-14 -1.59018E-14 -2.17174E-14 -2.64801E-14 -2.83390E-14 -2.57165E-14 + -1.80996E-14 -6.53430E-15 6.53430E-15 1.80996E-14 2.57165E-14 2.83390E-14 + 2.64801E-14 2.17174E-14 1.59018E-14 1.04961E-14 6.28303E-15 3.42455E-15 + 1.70431E-15 7.76037E-16 3.23794E-16 1.23941E-16 4.35629E-17 1.40701E-17 + 4.17845E-18 1.14152E-18 2.86996E-19 6.64275E-20 + -3.46737E-19 -1.49806E-18 -5.95847E-18 -2.18106E-17 -7.34431E-17 -2.27389E-16 + -6.46944E-16 -1.69013E-15 -4.05075E-15 -8.89612E-15 -1.78754E-14 -3.27961E-14 + -5.47875E-14 -8.30040E-14 -1.13360E-13 -1.38221E-13 -1.47923E-13 -1.34235E-13 + -9.44759E-14 -3.41077E-14 3.41077E-14 9.44759E-14 1.34235E-13 1.47923E-13 + 1.38221E-13 1.13360E-13 8.30040E-14 5.47875E-14 3.27961E-14 1.78754E-14 + 8.89612E-15 4.05075E-15 1.69013E-15 6.46944E-16 2.27389E-16 7.34431E-17 + 2.18106E-17 5.95847E-18 1.49806E-18 3.46737E-19 + -1.59357E-18 -6.88494E-18 -2.73846E-17 -1.00240E-16 -3.37537E-16 -1.04506E-15 + -2.97329E-15 -7.76769E-15 -1.86168E-14 -4.08857E-14 -8.21538E-14 -1.50728E-13 + -2.51798E-13 -3.81479E-13 -5.20994E-13 -6.35248E-13 -6.79841E-13 -6.16930E-13 + -4.34202E-13 -1.56755E-13 1.56755E-13 4.34202E-13 6.16930E-13 6.79841E-13 + 6.35248E-13 5.20994E-13 3.81479E-13 2.51798E-13 1.50728E-13 8.21538E-14 + 4.08857E-14 1.86168E-14 7.76769E-15 2.97329E-15 1.04506E-15 3.37537E-16 + 1.00240E-16 2.73846E-17 6.88494E-18 1.59357E-18 + -6.44918E-18 -2.78633E-17 -1.10825E-16 -4.05669E-16 -1.36601E-15 -4.22935E-15 + -1.20329E-14 -3.14358E-14 -7.53423E-14 -1.65464E-13 -3.32476E-13 -6.09994E-13 + -1.01903E-12 -1.54384E-12 -2.10846E-12 -2.57085E-12 -2.75132E-12 -2.49671E-12 + -1.75721E-12 -6.34389E-13 6.34389E-13 1.75721E-12 2.49671E-12 2.75132E-12 + 2.57085E-12 2.10846E-12 1.54384E-12 1.01903E-12 6.09994E-13 3.32476E-13 + 1.65464E-13 7.53423E-14 3.14358E-14 1.20329E-14 4.22935E-15 1.36601E-15 + 4.05669E-16 1.10825E-16 2.78633E-17 6.44918E-18 + -2.29865E-17 -9.93118E-17 -3.95009E-16 -1.44591E-15 -4.86881E-15 -1.50745E-14 + -4.28882E-14 -1.12045E-13 -2.68539E-13 -5.89756E-13 -1.18503E-12 -2.17417E-12 + -3.63206E-12 -5.50264E-12 -7.51507E-12 -9.16313E-12 -9.80637E-12 -8.89891E-12 + -6.26315E-12 -2.26112E-12 2.26112E-12 6.26315E-12 8.89891E-12 9.80637E-12 + 9.16313E-12 7.51507E-12 5.50264E-12 3.63206E-12 2.17417E-12 1.18503E-12 + 5.89756E-13 2.68539E-13 1.12045E-13 4.28882E-14 1.50745E-14 4.86881E-15 + 1.44591E-15 3.95009E-16 9.93118E-17 2.29865E-17 + -7.21770E-17 -3.11837E-16 -1.24032E-15 -4.54011E-15 -1.52879E-14 -4.73334E-14 + -1.34668E-13 -3.51819E-13 -8.43205E-13 -1.85182E-12 -3.72096E-12 -6.82684E-12 + -1.14046E-11 -1.72781E-11 -2.35972E-11 -2.87720E-11 -3.07918E-11 -2.79424E-11 + -1.96661E-11 -7.09986E-12 7.09986E-12 1.96661E-11 2.79424E-11 3.07918E-11 + 2.87720E-11 2.35972E-11 1.72781E-11 1.14046E-11 6.82684E-12 3.72096E-12 + 1.85182E-12 8.43205E-13 3.51819E-13 1.34668E-13 4.73334E-14 1.52879E-14 + 4.54011E-15 1.24032E-15 3.11837E-16 7.21770E-17 + -1.99751E-16 -8.63013E-16 -3.43260E-15 -1.25648E-14 -4.23096E-14 -1.30996E-13 + -3.72696E-13 -9.73664E-13 -2.33358E-12 -5.12494E-12 -1.02978E-11 -1.88934E-11 + -3.15624E-11 -4.78175E-11 -6.53055E-11 -7.96270E-11 -8.52167E-11 -7.73309E-11 + -5.44263E-11 -1.96490E-11 1.96490E-11 5.44263E-11 7.73309E-11 8.52167E-11 + 7.96270E-11 6.53055E-11 4.78175E-11 3.15624E-11 1.88934E-11 1.02978E-11 + 5.12494E-12 2.33358E-12 9.73664E-13 3.72696E-13 1.30996E-13 4.23096E-14 + 1.25648E-14 3.43260E-15 8.63013E-16 1.99751E-16 + -4.87623E-16 -2.10675E-15 -8.37951E-15 -3.06727E-14 -1.03284E-13 -3.19782E-13 + -9.09809E-13 -2.37687E-12 -5.69664E-12 -1.25108E-11 -2.51386E-11 -4.61217E-11 + -7.70487E-11 -1.16730E-10 -1.59421E-10 -1.94382E-10 -2.08027E-10 -1.88777E-10 + -1.32863E-10 -4.79662E-11 4.79662E-11 1.32863E-10 1.88777E-10 2.08027E-10 + 1.94382E-10 1.59421E-10 1.16730E-10 7.70487E-11 4.61217E-11 2.51386E-11 + 1.25108E-11 5.69664E-12 2.37687E-12 9.09809E-13 3.19782E-13 1.03284E-13 + 3.06727E-14 8.37951E-15 2.10675E-15 4.87623E-16 + -1.05136E-15 -4.54233E-15 -1.80669E-14 -6.61329E-14 -2.22690E-13 -6.89476E-13 + -1.96162E-12 -5.12472E-12 -1.22824E-11 -2.69743E-11 -5.42008E-11 -9.94423E-11 + -1.66123E-10 -2.51680E-10 -3.43725E-10 -4.19104E-10 -4.48524E-10 -4.07019E-10 + -2.86464E-10 -1.03419E-10 1.03419E-10 2.86464E-10 4.07019E-10 4.48524E-10 + 4.19104E-10 3.43725E-10 2.51680E-10 1.66123E-10 9.94423E-11 5.42008E-11 + 2.69743E-11 1.22824E-11 5.12472E-12 1.96162E-12 6.89476E-13 2.22690E-13 + 6.61329E-14 1.80669E-14 4.54233E-15 1.05136E-15 + -2.00635E-15 -8.66835E-15 -3.44780E-14 -1.26205E-13 -4.24970E-13 -1.31576E-12 + -3.74346E-12 -9.77976E-12 -2.34392E-11 -5.14764E-11 -1.03434E-10 -1.89771E-10 + -3.17022E-10 -4.80293E-10 -6.55947E-10 -7.99796E-10 -8.55941E-10 -7.76734E-10 + -5.46673E-10 -1.97360E-10 1.97360E-10 5.46673E-10 7.76734E-10 8.55941E-10 + 7.99796E-10 6.55947E-10 4.80293E-10 3.17022E-10 1.89771E-10 1.03434E-10 + 5.14764E-11 2.34392E-11 9.77976E-12 3.74346E-12 1.31576E-12 4.24970E-13 + 1.26205E-13 3.44780E-14 8.66835E-15 2.00635E-15 + -3.40045E-15 -1.46915E-14 -5.84347E-14 -2.13897E-13 -7.20256E-13 -2.23001E-12 + -6.34458E-12 -1.65751E-11 -3.97257E-11 -8.72443E-11 -1.75304E-10 -3.21631E-10 + -5.37301E-10 -8.14020E-10 -1.11173E-09 -1.35553E-09 -1.45068E-09 -1.31644E-09 + -9.26525E-10 -3.34494E-10 3.34494E-10 9.26525E-10 1.31644E-09 1.45068E-09 + 1.35553E-09 1.11173E-09 8.14020E-10 5.37301E-10 3.21631E-10 1.75304E-10 + 8.72443E-11 3.97257E-11 1.65751E-11 6.34458E-12 2.23001E-12 7.20256E-13 + 2.13897E-13 5.84347E-14 1.46915E-14 3.40045E-15 + -5.14561E-15 -2.22313E-14 -8.84242E-14 -3.23671E-13 -1.08990E-12 -3.37447E-12 + -9.60069E-12 -2.50817E-11 -6.01134E-11 -1.32019E-10 -2.65273E-10 -4.86696E-10 + -8.13051E-10 -1.23179E-09 -1.68228E-09 -2.05120E-09 -2.19519E-09 -1.99205E-09 + -1.40203E-09 -5.06160E-10 5.06160E-10 1.40203E-09 1.99205E-09 2.19519E-09 + 2.05120E-09 1.68228E-09 1.23179E-09 8.13051E-10 4.86696E-10 2.65273E-10 + 1.32019E-10 6.01134E-11 2.50817E-11 9.60069E-12 3.37447E-12 1.08990E-12 + 3.23671E-13 8.84242E-14 2.22313E-14 5.14561E-15 + -7.00660E-15 -3.02717E-14 -1.20404E-13 -4.40733E-13 -1.48408E-12 -4.59491E-12 + -1.30729E-11 -3.41529E-11 -8.18544E-11 -1.79766E-10 -3.61213E-10 -6.62718E-10 + -1.10710E-09 -1.67728E-09 -2.29070E-09 -2.79305E-09 -2.98912E-09 -2.71252E-09 + -1.90910E-09 -6.89221E-10 6.89221E-10 1.90910E-09 2.71252E-09 2.98912E-09 + 2.79305E-09 2.29070E-09 1.67728E-09 1.10710E-09 6.62718E-10 3.61213E-10 + 1.79766E-10 8.18544E-11 3.41529E-11 1.30729E-11 4.59491E-12 1.48408E-12 + 4.40733E-13 1.20404E-13 3.02717E-14 7.00660E-15 + -8.67730E-15 -3.74898E-14 -1.49114E-13 -5.45823E-13 -1.83795E-12 -5.69054E-12 + -1.61901E-11 -4.22965E-11 -1.01372E-10 -2.22630E-10 -4.47343E-10 -8.20740E-10 + -1.37109E-09 -2.07722E-09 -2.83691E-09 -3.45905E-09 -3.70186E-09 -3.35930E-09 + -2.36431E-09 -8.53563E-10 8.53563E-10 2.36431E-09 3.35930E-09 3.70186E-09 + 3.45905E-09 2.83691E-09 2.07722E-09 1.37109E-09 8.20740E-10 4.47343E-10 + 2.22630E-10 1.01372E-10 4.22965E-11 1.61901E-11 5.69054E-12 1.83795E-12 + 5.45823E-13 1.49114E-13 3.74898E-14 8.67730E-15 + -9.89943E-15 -4.27700E-14 -1.70116E-13 -6.22699E-13 -2.09682E-12 -6.49202E-12 + -1.84704E-11 -4.82537E-11 -1.15650E-10 -2.53986E-10 -5.10348E-10 -9.36336E-10 + -1.56420E-09 -2.36978E-09 -3.23647E-09 -3.94623E-09 -4.22325E-09 -3.83244E-09 + -2.69731E-09 -9.73781E-10 9.73781E-10 2.69731E-09 3.83244E-09 4.22325E-09 + 3.94623E-09 3.23647E-09 2.36978E-09 1.56420E-09 9.36336E-10 5.10348E-10 + 2.53986E-10 1.15650E-10 4.82537E-11 1.84704E-11 6.49202E-12 2.09682E-12 + 6.22699E-13 1.70116E-13 4.27700E-14 9.89943E-15 + -1.05324E-14 -4.55048E-14 -1.80993E-13 -6.62515E-13 -2.23089E-12 -6.90713E-12 + -1.96514E-11 -5.13392E-11 -1.23045E-10 -2.70227E-10 -5.42981E-10 -9.96207E-10 + -1.66422E-09 -2.52131E-09 -3.44341E-09 -4.19856E-09 -4.49329E-09 -4.07749E-09 + -2.86978E-09 -1.03605E-09 1.03605E-09 2.86978E-09 4.07749E-09 4.49329E-09 + 4.19856E-09 3.44341E-09 2.52131E-09 1.66422E-09 9.96207E-10 5.42981E-10 + 2.70227E-10 1.23045E-10 5.13392E-11 1.96514E-11 6.90713E-12 2.23089E-12 + 6.62515E-13 1.80993E-13 4.55048E-14 1.05324E-14 + -1.05324E-14 -4.55048E-14 -1.80993E-13 -6.62515E-13 -2.23089E-12 -6.90713E-12 + -1.96514E-11 -5.13392E-11 -1.23045E-10 -2.70227E-10 -5.42981E-10 -9.96207E-10 + -1.66422E-09 -2.52131E-09 -3.44341E-09 -4.19856E-09 -4.49329E-09 -4.07749E-09 + -2.86978E-09 -1.03605E-09 1.03605E-09 2.86978E-09 4.07749E-09 4.49329E-09 + 4.19856E-09 3.44341E-09 2.52131E-09 1.66422E-09 9.96207E-10 5.42981E-10 + 2.70227E-10 1.23045E-10 5.13392E-11 1.96514E-11 6.90713E-12 2.23089E-12 + 6.62515E-13 1.80993E-13 4.55048E-14 1.05324E-14 + -9.89943E-15 -4.27700E-14 -1.70116E-13 -6.22699E-13 -2.09682E-12 -6.49202E-12 + -1.84704E-11 -4.82537E-11 -1.15650E-10 -2.53986E-10 -5.10348E-10 -9.36336E-10 + -1.56420E-09 -2.36978E-09 -3.23647E-09 -3.94623E-09 -4.22325E-09 -3.83244E-09 + -2.69731E-09 -9.73781E-10 9.73781E-10 2.69731E-09 3.83244E-09 4.22325E-09 + 3.94623E-09 3.23647E-09 2.36978E-09 1.56420E-09 9.36336E-10 5.10348E-10 + 2.53986E-10 1.15650E-10 4.82537E-11 1.84704E-11 6.49202E-12 2.09682E-12 + 6.22699E-13 1.70116E-13 4.27700E-14 9.89943E-15 + -8.67730E-15 -3.74898E-14 -1.49114E-13 -5.45823E-13 -1.83795E-12 -5.69054E-12 + -1.61901E-11 -4.22965E-11 -1.01372E-10 -2.22630E-10 -4.47343E-10 -8.20740E-10 + -1.37109E-09 -2.07722E-09 -2.83691E-09 -3.45905E-09 -3.70186E-09 -3.35930E-09 + -2.36431E-09 -8.53563E-10 8.53563E-10 2.36431E-09 3.35930E-09 3.70186E-09 + 3.45905E-09 2.83691E-09 2.07722E-09 1.37109E-09 8.20740E-10 4.47343E-10 + 2.22630E-10 1.01372E-10 4.22965E-11 1.61901E-11 5.69054E-12 1.83795E-12 + 5.45823E-13 1.49114E-13 3.74898E-14 8.67730E-15 + -7.00660E-15 -3.02717E-14 -1.20404E-13 -4.40733E-13 -1.48408E-12 -4.59491E-12 + -1.30729E-11 -3.41529E-11 -8.18544E-11 -1.79766E-10 -3.61213E-10 -6.62718E-10 + -1.10710E-09 -1.67728E-09 -2.29070E-09 -2.79305E-09 -2.98912E-09 -2.71252E-09 + -1.90910E-09 -6.89221E-10 6.89221E-10 1.90910E-09 2.71252E-09 2.98912E-09 + 2.79305E-09 2.29070E-09 1.67728E-09 1.10710E-09 6.62718E-10 3.61213E-10 + 1.79766E-10 8.18544E-11 3.41529E-11 1.30729E-11 4.59491E-12 1.48408E-12 + 4.40733E-13 1.20404E-13 3.02717E-14 7.00660E-15 + -5.14561E-15 -2.22313E-14 -8.84242E-14 -3.23671E-13 -1.08990E-12 -3.37447E-12 + -9.60069E-12 -2.50817E-11 -6.01134E-11 -1.32019E-10 -2.65273E-10 -4.86696E-10 + -8.13051E-10 -1.23179E-09 -1.68228E-09 -2.05120E-09 -2.19519E-09 -1.99205E-09 + -1.40203E-09 -5.06160E-10 5.06160E-10 1.40203E-09 1.99205E-09 2.19519E-09 + 2.05120E-09 1.68228E-09 1.23179E-09 8.13051E-10 4.86696E-10 2.65273E-10 + 1.32019E-10 6.01134E-11 2.50817E-11 9.60069E-12 3.37447E-12 1.08990E-12 + 3.23671E-13 8.84242E-14 2.22313E-14 5.14561E-15 + -3.40045E-15 -1.46915E-14 -5.84347E-14 -2.13897E-13 -7.20256E-13 -2.23001E-12 + -6.34458E-12 -1.65751E-11 -3.97257E-11 -8.72443E-11 -1.75304E-10 -3.21631E-10 + -5.37301E-10 -8.14020E-10 -1.11173E-09 -1.35553E-09 -1.45068E-09 -1.31644E-09 + -9.26525E-10 -3.34494E-10 3.34494E-10 9.26525E-10 1.31644E-09 1.45068E-09 + 1.35553E-09 1.11173E-09 8.14020E-10 5.37301E-10 3.21631E-10 1.75304E-10 + 8.72443E-11 3.97257E-11 1.65751E-11 6.34458E-12 2.23001E-12 7.20256E-13 + 2.13897E-13 5.84347E-14 1.46915E-14 3.40045E-15 + -2.00635E-15 -8.66835E-15 -3.44780E-14 -1.26205E-13 -4.24970E-13 -1.31576E-12 + -3.74346E-12 -9.77976E-12 -2.34392E-11 -5.14764E-11 -1.03434E-10 -1.89771E-10 + -3.17022E-10 -4.80293E-10 -6.55947E-10 -7.99796E-10 -8.55941E-10 -7.76734E-10 + -5.46673E-10 -1.97360E-10 1.97360E-10 5.46673E-10 7.76734E-10 8.55941E-10 + 7.99796E-10 6.55947E-10 4.80293E-10 3.17022E-10 1.89771E-10 1.03434E-10 + 5.14764E-11 2.34392E-11 9.77976E-12 3.74346E-12 1.31576E-12 4.24970E-13 + 1.26205E-13 3.44780E-14 8.66835E-15 2.00635E-15 + -1.05136E-15 -4.54233E-15 -1.80669E-14 -6.61329E-14 -2.22690E-13 -6.89476E-13 + -1.96162E-12 -5.12472E-12 -1.22824E-11 -2.69743E-11 -5.42008E-11 -9.94423E-11 + -1.66123E-10 -2.51680E-10 -3.43725E-10 -4.19104E-10 -4.48524E-10 -4.07019E-10 + -2.86464E-10 -1.03419E-10 1.03419E-10 2.86464E-10 4.07019E-10 4.48524E-10 + 4.19104E-10 3.43725E-10 2.51680E-10 1.66123E-10 9.94423E-11 5.42008E-11 + 2.69743E-11 1.22824E-11 5.12472E-12 1.96162E-12 6.89476E-13 2.22690E-13 + 6.61329E-14 1.80669E-14 4.54233E-15 1.05136E-15 + -4.87623E-16 -2.10675E-15 -8.37951E-15 -3.06727E-14 -1.03284E-13 -3.19782E-13 + -9.09809E-13 -2.37687E-12 -5.69664E-12 -1.25108E-11 -2.51386E-11 -4.61217E-11 + -7.70487E-11 -1.16730E-10 -1.59421E-10 -1.94382E-10 -2.08027E-10 -1.88777E-10 + -1.32863E-10 -4.79662E-11 4.79662E-11 1.32863E-10 1.88777E-10 2.08027E-10 + 1.94382E-10 1.59421E-10 1.16730E-10 7.70487E-11 4.61217E-11 2.51386E-11 + 1.25108E-11 5.69664E-12 2.37687E-12 9.09809E-13 3.19782E-13 1.03284E-13 + 3.06727E-14 8.37951E-15 2.10675E-15 4.87623E-16 + -1.99751E-16 -8.63013E-16 -3.43260E-15 -1.25648E-14 -4.23096E-14 -1.30996E-13 + -3.72696E-13 -9.73664E-13 -2.33358E-12 -5.12494E-12 -1.02978E-11 -1.88934E-11 + -3.15624E-11 -4.78175E-11 -6.53055E-11 -7.96270E-11 -8.52167E-11 -7.73309E-11 + -5.44263E-11 -1.96490E-11 1.96490E-11 5.44263E-11 7.73309E-11 8.52167E-11 + 7.96270E-11 6.53055E-11 4.78175E-11 3.15624E-11 1.88934E-11 1.02978E-11 + 5.12494E-12 2.33358E-12 9.73664E-13 3.72696E-13 1.30996E-13 4.23096E-14 + 1.25648E-14 3.43260E-15 8.63013E-16 1.99751E-16 + -7.21770E-17 -3.11837E-16 -1.24032E-15 -4.54011E-15 -1.52879E-14 -4.73334E-14 + -1.34668E-13 -3.51819E-13 -8.43205E-13 -1.85182E-12 -3.72096E-12 -6.82684E-12 + -1.14046E-11 -1.72781E-11 -2.35972E-11 -2.87720E-11 -3.07918E-11 -2.79424E-11 + -1.96661E-11 -7.09986E-12 7.09986E-12 1.96661E-11 2.79424E-11 3.07918E-11 + 2.87720E-11 2.35972E-11 1.72781E-11 1.14046E-11 6.82684E-12 3.72096E-12 + 1.85182E-12 8.43205E-13 3.51819E-13 1.34668E-13 4.73334E-14 1.52879E-14 + 4.54011E-15 1.24032E-15 3.11837E-16 7.21770E-17 + -2.29865E-17 -9.93118E-17 -3.95009E-16 -1.44591E-15 -4.86881E-15 -1.50745E-14 + -4.28882E-14 -1.12045E-13 -2.68539E-13 -5.89756E-13 -1.18503E-12 -2.17417E-12 + -3.63206E-12 -5.50264E-12 -7.51507E-12 -9.16313E-12 -9.80637E-12 -8.89891E-12 + -6.26315E-12 -2.26112E-12 2.26112E-12 6.26315E-12 8.89891E-12 9.80637E-12 + 9.16313E-12 7.51507E-12 5.50264E-12 3.63206E-12 2.17417E-12 1.18503E-12 + 5.89756E-13 2.68539E-13 1.12045E-13 4.28882E-14 1.50745E-14 4.86881E-15 + 1.44591E-15 3.95009E-16 9.93118E-17 2.29865E-17 + -6.44918E-18 -2.78633E-17 -1.10825E-16 -4.05669E-16 -1.36601E-15 -4.22935E-15 + -1.20329E-14 -3.14358E-14 -7.53423E-14 -1.65464E-13 -3.32476E-13 -6.09994E-13 + -1.01903E-12 -1.54384E-12 -2.10846E-12 -2.57085E-12 -2.75132E-12 -2.49671E-12 + -1.75721E-12 -6.34389E-13 6.34389E-13 1.75721E-12 2.49671E-12 2.75132E-12 + 2.57085E-12 2.10846E-12 1.54384E-12 1.01903E-12 6.09994E-13 3.32476E-13 + 1.65464E-13 7.53423E-14 3.14358E-14 1.20329E-14 4.22935E-15 1.36601E-15 + 4.05669E-16 1.10825E-16 2.78633E-17 6.44918E-18 + -1.59357E-18 -6.88494E-18 -2.73846E-17 -1.00240E-16 -3.37537E-16 -1.04506E-15 + -2.97329E-15 -7.76769E-15 -1.86168E-14 -4.08857E-14 -8.21538E-14 -1.50728E-13 + -2.51798E-13 -3.81479E-13 -5.20994E-13 -6.35248E-13 -6.79841E-13 -6.16930E-13 + -4.34202E-13 -1.56755E-13 1.56755E-13 4.34202E-13 6.16930E-13 6.79841E-13 + 6.35248E-13 5.20994E-13 3.81479E-13 2.51798E-13 1.50728E-13 8.21538E-14 + 4.08857E-14 1.86168E-14 7.76769E-15 2.97329E-15 1.04506E-15 3.37537E-16 + 1.00240E-16 2.73846E-17 6.88494E-18 1.59357E-18 + -3.46737E-19 -1.49806E-18 -5.95847E-18 -2.18106E-17 -7.34431E-17 -2.27389E-16 + -6.46944E-16 -1.69013E-15 -4.05075E-15 -8.89612E-15 -1.78754E-14 -3.27961E-14 + -5.47875E-14 -8.30040E-14 -1.13360E-13 -1.38221E-13 -1.47923E-13 -1.34235E-13 + -9.44759E-14 -3.41077E-14 3.41077E-14 9.44759E-14 1.34235E-13 1.47923E-13 + 1.38221E-13 1.13360E-13 8.30040E-14 5.47875E-14 3.27961E-14 1.78754E-14 + 8.89612E-15 4.05075E-15 1.69013E-15 6.46944E-16 2.27389E-16 7.34431E-17 + 2.18106E-17 5.95847E-18 1.49806E-18 3.46737E-19 + -6.64275E-20 -2.86996E-19 -1.14152E-18 -4.17845E-18 -1.40701E-17 -4.35629E-17 + -1.23941E-16 -3.23794E-16 -7.76037E-16 -1.70431E-15 -3.42455E-15 -6.28303E-15 + -1.04961E-14 -1.59018E-14 -2.17174E-14 -2.64801E-14 -2.83390E-14 -2.57165E-14 + -1.80996E-14 -6.53430E-15 6.53430E-15 1.80996E-14 2.57165E-14 2.83390E-14 + 2.64801E-14 2.17174E-14 1.59018E-14 1.04961E-14 6.28303E-15 3.42455E-15 + 1.70431E-15 7.76037E-16 3.23794E-16 1.23941E-16 4.35629E-17 1.40701E-17 + 4.17845E-18 1.14152E-18 2.86996E-19 6.64275E-20 + -1.12043E-20 -4.84078E-20 -1.92540E-19 -7.04781E-19 -2.37321E-18 -7.34778E-18 + -2.09051E-17 -5.46144E-17 -1.30894E-16 -2.87466E-16 -5.77621E-16 -1.05976E-15 + -1.77039E-15 -2.68216E-15 -3.66309E-15 -4.46641E-15 -4.77994E-15 -4.33762E-15 + -3.05286E-15 -1.10214E-15 1.10214E-15 3.05286E-15 4.33762E-15 4.77994E-15 + 4.46641E-15 3.66309E-15 2.68216E-15 1.77039E-15 1.05976E-15 5.77621E-16 + 2.87466E-16 1.30894E-16 5.46144E-17 2.09051E-17 7.34778E-18 2.37321E-18 + 7.04781E-19 1.92540E-19 4.84078E-20 1.12043E-20 + -1.66380E-21 -7.18837E-21 -2.85914E-20 -1.04657E-19 -3.52413E-19 -1.09112E-18 + -3.10433E-18 -8.11003E-18 -1.94373E-17 -4.26876E-17 -8.57745E-17 -1.57370E-16 + -2.62895E-16 -3.98291E-16 -5.43955E-16 -6.63244E-16 -7.09803E-16 -6.44119E-16 + -4.53338E-16 -1.63664E-16 1.63664E-16 4.53338E-16 6.44119E-16 7.09803E-16 + 6.63244E-16 5.43955E-16 3.98291E-16 2.62895E-16 1.57370E-16 8.57745E-17 + 4.26876E-17 1.94373E-17 8.11003E-18 3.10433E-18 1.09112E-18 3.52413E-19 + 1.04657E-19 2.85914E-20 7.18837E-21 1.66380E-21 + -2.17512E-22 -9.39751E-22 -3.73782E-21 -1.36821E-20 -4.60717E-20 -1.42644E-19 + -4.05835E-19 -1.06024E-18 -2.54108E-18 -5.58064E-18 -1.12135E-17 -2.05734E-17 + -3.43689E-17 -5.20694E-17 -7.11123E-17 -8.67073E-17 -9.27940E-17 -8.42071E-17 + -5.92658E-17 -2.13961E-17 2.13961E-17 5.92658E-17 8.42071E-17 9.27940E-17 + 8.67073E-17 7.11123E-17 5.20694E-17 3.43689E-17 2.05734E-17 1.12135E-17 + 5.58064E-18 2.54108E-18 1.06024E-18 4.05835E-19 1.42644E-19 4.60717E-20 + 1.36821E-20 3.73782E-21 9.39751E-22 2.17512E-22 + -2.50338E-23 -1.08157E-22 -4.30192E-22 -1.57469E-21 -5.30246E-21 -1.64171E-20 + -4.67082E-20 -1.22025E-19 -2.92457E-19 -6.42285E-19 -1.29058E-18 -2.36782E-18 + -3.95557E-18 -5.99275E-18 -8.18443E-18 -9.97928E-18 -1.06798E-17 -9.69152E-18 + -6.82100E-18 -2.46251E-18 2.46251E-18 6.82100E-18 9.69152E-18 1.06798E-17 + 9.97928E-18 8.18443E-18 5.99275E-18 3.95557E-18 2.36782E-18 1.29058E-18 + 6.42285E-19 2.92457E-19 1.22025E-19 4.67082E-20 1.64171E-20 5.30246E-21 + 1.57469E-21 4.30192E-22 1.08157E-22 2.50338E-23 + -2.22180E-22 -9.59919E-22 -3.81804E-21 -1.39757E-20 -4.70604E-20 -1.45705E-19 + -4.14545E-19 -1.08299E-18 -2.59562E-18 -5.70041E-18 -1.14541E-17 -2.10149E-17 + -3.51064E-17 -5.31869E-17 -7.26385E-17 -8.85681E-17 -9.47855E-17 -8.60142E-17 + -6.05377E-17 -2.18553E-17 2.18553E-17 6.05377E-17 8.60142E-17 9.47855E-17 + 8.85681E-17 7.26385E-17 5.31869E-17 3.51064E-17 2.10149E-17 1.14541E-17 + 5.70041E-18 2.59562E-18 1.08299E-18 4.14545E-19 1.45705E-19 4.70604E-20 + 1.39757E-20 3.81804E-21 9.59919E-22 2.22180E-22 + -1.93047E-21 -8.34048E-21 -3.31739E-20 -1.21431E-19 -4.08896E-19 -1.26599E-18 + -3.60187E-18 -9.40985E-18 -2.25526E-17 -4.95293E-17 -9.95219E-17 -1.82593E-16 + -3.05031E-16 -4.62126E-16 -6.31136E-16 -7.69545E-16 -8.23566E-16 -7.47355E-16 + -5.25996E-16 -1.89895E-16 1.89895E-16 5.25996E-16 7.47355E-16 8.23566E-16 + 7.69545E-16 6.31136E-16 4.62126E-16 3.05031E-16 1.82593E-16 9.95219E-17 + 4.95293E-17 2.25526E-17 9.40985E-18 3.60187E-18 1.26599E-18 4.08896E-19 + 1.21431E-19 3.31739E-20 8.34048E-21 1.93047E-21 + -1.47666E-20 -6.37982E-20 -2.53755E-19 -9.28854E-19 -3.12774E-18 -9.68388E-18 + -2.75515E-17 -7.19781E-17 -1.72510E-16 -3.78861E-16 -7.61266E-16 -1.39669E-15 + -2.33325E-15 -3.53491E-15 -4.82771E-15 -5.88643E-15 -6.29965E-15 -5.71669E-15 + -4.02347E-15 -1.45255E-15 1.45255E-15 4.02347E-15 5.71669E-15 6.29965E-15 + 5.88643E-15 4.82771E-15 3.53491E-15 2.33325E-15 1.39669E-15 7.61266E-16 + 3.78861E-16 1.72510E-16 7.19781E-17 2.75515E-17 9.68388E-18 3.12774E-18 + 9.28854E-19 2.53755E-19 6.37982E-20 1.47666E-20 + -9.94409E-20 -4.29629E-19 -1.70883E-18 -6.25507E-18 -2.10628E-17 -6.52130E-17 + -1.85537E-16 -4.84714E-16 -1.16171E-15 -2.55132E-15 -5.12650E-15 -9.40559E-15 + -1.57125E-14 -2.38047E-14 -3.25107E-14 -3.96403E-14 -4.24230E-14 -3.84972E-14 + -2.70947E-14 -9.78174E-15 9.78174E-15 2.70947E-14 3.84972E-14 4.24230E-14 + 3.96403E-14 3.25107E-14 2.38047E-14 1.57125E-14 9.40559E-15 5.12650E-15 + 2.55132E-15 1.16171E-15 4.84714E-16 1.85537E-16 6.52130E-17 2.10628E-17 + 6.25507E-18 1.70883E-18 4.29629E-19 9.94409E-20 + -5.89557E-19 -2.54715E-18 -1.01312E-17 -3.70846E-17 -1.24875E-16 -3.86630E-16 + -1.10000E-15 -2.87373E-15 -6.88748E-15 -1.51261E-14 -3.03936E-14 -5.57631E-14 + -9.31552E-14 -1.41132E-13 -1.92747E-13 -2.35016E-13 -2.51514E-13 -2.28239E-13 + -1.60637E-13 -5.79932E-14 5.79932E-14 1.60637E-13 2.28239E-13 2.51514E-13 + 2.35016E-13 1.92747E-13 1.41132E-13 9.31552E-14 5.57631E-14 3.03936E-14 + 1.51261E-14 6.88748E-15 2.87373E-15 1.10000E-15 3.86630E-16 1.24875E-16 + 3.70846E-17 1.01312E-17 2.54715E-18 5.89557E-19 + -3.07736E-18 -1.32956E-17 -5.28827E-17 -1.93574E-16 -6.51822E-16 -2.01813E-15 + -5.74176E-15 -1.50003E-14 -3.59512E-14 -7.89549E-14 -1.58648E-13 -2.91072E-13 + -4.86251E-13 -7.36678E-13 -1.00610E-12 -1.22673E-12 -1.31285E-12 -1.19136E-12 + -8.38492E-13 -3.02712E-13 3.02712E-13 8.38492E-13 1.19136E-12 1.31285E-12 + 1.22673E-12 1.00610E-12 7.36678E-13 4.86251E-13 2.91072E-13 1.58648E-13 + 7.89549E-14 3.59512E-14 1.50003E-14 5.74176E-15 2.01813E-15 6.51822E-16 + 1.93574E-16 5.28827E-17 1.32956E-17 3.07736E-18 + -1.41433E-17 -6.11052E-17 -2.43044E-16 -8.89646E-16 -2.99571E-15 -9.27511E-15 + -2.63886E-14 -6.89398E-14 -1.65228E-13 -3.62869E-13 -7.29132E-13 -1.33774E-12 + -2.23476E-12 -3.38570E-12 -4.62393E-12 -5.63796E-12 -6.03373E-12 -5.47538E-12 + -3.85363E-12 -1.39124E-12 1.39124E-12 3.85363E-12 5.47538E-12 6.03373E-12 + 5.63796E-12 4.62393E-12 3.38570E-12 2.23476E-12 1.33774E-12 7.29132E-13 + 3.62869E-13 1.65228E-13 6.89398E-14 2.63886E-14 9.27511E-15 2.99571E-15 + 8.89646E-16 2.43044E-16 6.11052E-17 1.41433E-17 + -5.72377E-17 -2.47293E-16 -9.83596E-16 -3.60039E-15 -1.21236E-14 -3.75363E-14 + -1.06794E-13 -2.78999E-13 -6.68678E-13 -1.46853E-12 -2.95079E-12 -5.41382E-12 + -9.04407E-12 -1.37019E-11 -1.87130E-11 -2.28168E-11 -2.44185E-11 -2.21588E-11 + -1.55956E-11 -5.63033E-12 5.63033E-12 1.55956E-11 2.21588E-11 2.44185E-11 + 2.28168E-11 1.87130E-11 1.37019E-11 9.04407E-12 5.41382E-12 2.95079E-12 + 1.46853E-12 6.68678E-13 2.78999E-13 1.06794E-13 3.75363E-14 1.21236E-14 + 3.60039E-15 9.83596E-16 2.47293E-16 5.72377E-17 + -2.04010E-16 -8.81413E-16 -3.50578E-15 -1.28327E-14 -4.32116E-14 -1.33789E-13 + -3.80642E-13 -9.94423E-13 -2.38334E-12 -5.23420E-12 -1.05174E-11 -1.92962E-11 + -3.22353E-11 -4.88370E-11 -6.66978E-11 -8.13247E-11 -8.70335E-11 -7.89796E-11 + -5.55867E-11 -2.00679E-11 2.00679E-11 5.55867E-11 7.89796E-11 8.70335E-11 + 8.13247E-11 6.66978E-11 4.88370E-11 3.22353E-11 1.92962E-11 1.05174E-11 + 5.23420E-12 2.38334E-12 9.94423E-13 3.80642E-13 1.33789E-13 4.32116E-14 + 1.28327E-14 3.50578E-15 8.81413E-16 2.04010E-16 + -6.40585E-16 -2.76761E-15 -1.10081E-14 -4.02944E-14 -1.35684E-13 -4.20094E-13 + -1.19521E-12 -3.12246E-12 -7.48361E-12 -1.64353E-11 -3.30243E-11 -6.05896E-11 + -1.01218E-10 -1.53347E-10 -2.09429E-10 -2.55357E-10 -2.73283E-10 -2.47994E-10 + -1.74541E-10 -6.30127E-11 6.30127E-11 1.74541E-10 2.47994E-10 2.73283E-10 + 2.55357E-10 2.09429E-10 1.53347E-10 1.01218E-10 6.05896E-11 3.30243E-11 + 1.64353E-11 7.48361E-12 3.12246E-12 1.19521E-12 4.20094E-13 1.35684E-13 + 4.02944E-14 1.10081E-14 2.76761E-15 6.40585E-16 + -1.77283E-15 -7.65941E-15 -3.04650E-14 -1.11515E-13 -3.75506E-13 -1.16262E-12 + -3.30775E-12 -8.64147E-12 -2.07110E-11 -4.54849E-11 -9.13952E-11 -1.67683E-10 + -2.80123E-10 -4.24390E-10 -5.79599E-10 -7.06706E-10 -7.56315E-10 -6.86328E-10 + -4.83044E-10 -1.74389E-10 1.74389E-10 4.83044E-10 6.86328E-10 7.56315E-10 + 7.06706E-10 5.79599E-10 4.24390E-10 2.80123E-10 1.67683E-10 9.13952E-11 + 4.54849E-11 2.07110E-11 8.64147E-12 3.30775E-12 1.16262E-12 3.75506E-13 + 1.11515E-13 3.04650E-14 7.65941E-15 1.77283E-15 + -4.32775E-15 -1.86978E-14 -7.43698E-14 -2.72226E-13 -9.16669E-13 -2.83813E-12 + -8.07473E-12 -2.10952E-11 -5.05588E-11 -1.11036E-10 -2.23110E-10 -4.09340E-10 + -6.83823E-10 -1.03600E-09 -1.41489E-09 -1.72518E-09 -1.84628E-09 -1.67543E-09 + -1.17919E-09 -4.25710E-10 4.25710E-10 1.17919E-09 1.67543E-09 1.84628E-09 + 1.72518E-09 1.41489E-09 1.03600E-09 6.83823E-10 4.09340E-10 2.23110E-10 + 1.11036E-10 5.05588E-11 2.10952E-11 8.07473E-12 2.83813E-12 9.16669E-13 + 2.72226E-13 7.43698E-14 1.86978E-14 4.32775E-15 + -9.33100E-15 -4.03141E-14 -1.60348E-13 -5.86942E-13 -1.97642E-12 -6.11924E-12 + -1.74098E-11 -4.54829E-11 -1.09009E-10 -2.39402E-10 -4.81043E-10 -8.82570E-10 + -1.47438E-09 -2.23371E-09 -3.05063E-09 -3.71963E-09 -3.98074E-09 -3.61237E-09 + -2.54243E-09 -9.17866E-10 9.17866E-10 2.54243E-09 3.61237E-09 3.98074E-09 + 3.71963E-09 3.05063E-09 2.23371E-09 1.47438E-09 8.82570E-10 4.81043E-10 + 2.39402E-10 1.09009E-10 4.54829E-11 1.74098E-11 6.11924E-12 1.97642E-12 + 5.86942E-13 1.60348E-13 4.03141E-14 9.33100E-15 + -1.78068E-14 -7.69333E-14 -3.05999E-13 -1.12009E-12 -3.77169E-12 -1.16776E-11 + -3.32240E-11 -8.67973E-11 -2.08027E-10 -4.56863E-10 -9.17999E-10 -1.68425E-09 + -2.81363E-09 -4.26270E-09 -5.82166E-09 -7.09835E-09 -7.59665E-09 -6.89367E-09 + -4.85184E-09 -1.75161E-09 1.75161E-09 4.85184E-09 6.89367E-09 7.59665E-09 + 7.09835E-09 5.82166E-09 4.26270E-09 2.81363E-09 1.68425E-09 9.17999E-10 + 4.56863E-10 2.08027E-10 8.67973E-11 3.32240E-11 1.16776E-11 3.77169E-12 + 1.12009E-12 3.05999E-13 7.69333E-14 1.78068E-14 + -3.01797E-14 -1.30390E-13 -5.18620E-13 -1.89838E-12 -6.39242E-12 -1.97918E-11 + -5.63094E-11 -1.47108E-10 -3.52573E-10 -7.74310E-10 -1.55586E-09 -2.85454E-09 + -4.76866E-09 -7.22460E-09 -9.86679E-09 -1.20306E-08 -1.28751E-08 -1.16837E-08 + -8.22309E-09 -2.96870E-09 2.96870E-09 8.22309E-09 1.16837E-08 1.28751E-08 + 1.20306E-08 9.86679E-09 7.22460E-09 4.76866E-09 2.85454E-09 1.55586E-09 + 7.74310E-10 3.52573E-10 1.47108E-10 5.63094E-11 1.97918E-11 6.39242E-12 + 1.89838E-12 5.18620E-13 1.30390E-13 3.01797E-14 + -4.56683E-14 -1.97308E-13 -7.84782E-13 -2.87265E-12 -9.67309E-12 -2.99491E-11 + -8.52081E-11 -2.22605E-10 -5.33518E-10 -1.17170E-09 -2.35435E-09 -4.31953E-09 + -7.21599E-09 -1.09323E-08 -1.49306E-08 -1.82048E-08 -1.94828E-08 -1.76799E-08 + -1.24433E-08 -4.49227E-09 4.49227E-09 1.24433E-08 1.76799E-08 1.94828E-08 + 1.82048E-08 1.49306E-08 1.09323E-08 7.21599E-09 4.31953E-09 2.35435E-09 + 1.17170E-09 5.33518E-10 2.22605E-10 8.52081E-11 2.99491E-11 9.67309E-12 + 2.87265E-12 7.84782E-13 1.97308E-13 4.56683E-14 + -6.21850E-14 -2.68667E-13 -1.06861E-12 -3.91159E-12 -1.31715E-11 -4.07808E-11 + -1.16025E-10 -3.03114E-10 -7.26475E-10 -1.59546E-09 -3.20584E-09 -5.88176E-09 + -9.82578E-09 -1.48862E-08 -2.03304E-08 -2.47889E-08 -2.65291E-08 -2.40741E-08 + -1.69436E-08 -6.11698E-09 6.11698E-09 1.69436E-08 2.40741E-08 2.65291E-08 + 2.47889E-08 2.03304E-08 1.48862E-08 9.82578E-09 5.88176E-09 3.20584E-09 + 1.59546E-09 7.26475E-10 3.03114E-10 1.16025E-10 4.07808E-11 1.31715E-11 + 3.91159E-12 1.06861E-12 2.68667E-13 6.21850E-14 + -7.70128E-14 -3.32730E-13 -1.32342E-12 -4.84429E-12 -1.63122E-11 -5.05047E-11 + -1.43691E-10 -3.75390E-10 -8.99699E-10 -1.97589E-09 -3.97026E-09 -7.28424E-09 + -1.21687E-08 -1.84358E-08 -2.51781E-08 -3.06997E-08 -3.28548E-08 -2.98145E-08 + -2.09837E-08 -7.57554E-09 7.57554E-09 2.09837E-08 2.98145E-08 3.28548E-08 + 3.06997E-08 2.51781E-08 1.84358E-08 1.21687E-08 7.28424E-09 3.97026E-09 + 1.97589E-09 8.99699E-10 3.75390E-10 1.43691E-10 5.05047E-11 1.63122E-11 + 4.84429E-12 1.32342E-12 3.32730E-13 7.70128E-14 + -8.78595E-14 -3.79592E-13 -1.50981E-12 -5.52658E-12 -1.86097E-11 -5.76180E-11 + -1.63928E-10 -4.28262E-10 -1.02642E-09 -2.25418E-09 -4.52944E-09 -8.31017E-09 + -1.38826E-08 -2.10323E-08 -2.87243E-08 -3.50236E-08 -3.74822E-08 -3.40136E-08 + -2.39392E-08 -8.64251E-09 8.64251E-09 2.39392E-08 3.40136E-08 3.74822E-08 + 3.50236E-08 2.87243E-08 2.10323E-08 1.38826E-08 8.31017E-09 4.52944E-09 + 2.25418E-09 1.02642E-09 4.28262E-10 1.63928E-10 5.76180E-11 1.86097E-11 + 5.52658E-12 1.50981E-12 3.79592E-13 8.78595E-14 + -9.34774E-14 -4.03864E-13 -1.60635E-12 -5.87996E-12 -1.97996E-11 -6.13022E-11 + -1.74410E-10 -4.55645E-10 -1.09205E-09 -2.39832E-09 -4.81907E-09 -8.84154E-09 + -1.47702E-08 -2.23772E-08 -3.05610E-08 -3.72630E-08 -3.98788E-08 -3.61885E-08 + -2.54699E-08 -9.19513E-09 9.19513E-09 2.54699E-08 3.61885E-08 3.98788E-08 + 3.72630E-08 3.05610E-08 2.23772E-08 1.47702E-08 8.84154E-09 4.81907E-09 + 2.39832E-09 1.09205E-09 4.55645E-10 1.74410E-10 6.13022E-11 1.97996E-11 + 5.87996E-12 1.60635E-12 4.03864E-13 9.34774E-14 + -9.34774E-14 -4.03864E-13 -1.60635E-12 -5.87996E-12 -1.97996E-11 -6.13022E-11 + -1.74410E-10 -4.55645E-10 -1.09205E-09 -2.39832E-09 -4.81907E-09 -8.84154E-09 + -1.47702E-08 -2.23772E-08 -3.05610E-08 -3.72630E-08 -3.98788E-08 -3.61885E-08 + -2.54699E-08 -9.19513E-09 9.19513E-09 2.54699E-08 3.61885E-08 3.98788E-08 + 3.72630E-08 3.05610E-08 2.23772E-08 1.47702E-08 8.84154E-09 4.81907E-09 + 2.39832E-09 1.09205E-09 4.55645E-10 1.74410E-10 6.13022E-11 1.97996E-11 + 5.87996E-12 1.60635E-12 4.03864E-13 9.34774E-14 + -8.78595E-14 -3.79592E-13 -1.50981E-12 -5.52658E-12 -1.86097E-11 -5.76180E-11 + -1.63928E-10 -4.28262E-10 -1.02642E-09 -2.25418E-09 -4.52944E-09 -8.31017E-09 + -1.38826E-08 -2.10323E-08 -2.87243E-08 -3.50236E-08 -3.74822E-08 -3.40136E-08 + -2.39392E-08 -8.64251E-09 8.64251E-09 2.39392E-08 3.40136E-08 3.74822E-08 + 3.50236E-08 2.87243E-08 2.10323E-08 1.38826E-08 8.31017E-09 4.52944E-09 + 2.25418E-09 1.02642E-09 4.28262E-10 1.63928E-10 5.76180E-11 1.86097E-11 + 5.52658E-12 1.50981E-12 3.79592E-13 8.78595E-14 + -7.70128E-14 -3.32730E-13 -1.32342E-12 -4.84429E-12 -1.63122E-11 -5.05047E-11 + -1.43691E-10 -3.75390E-10 -8.99699E-10 -1.97589E-09 -3.97026E-09 -7.28424E-09 + -1.21687E-08 -1.84358E-08 -2.51781E-08 -3.06997E-08 -3.28548E-08 -2.98145E-08 + -2.09837E-08 -7.57554E-09 7.57554E-09 2.09837E-08 2.98145E-08 3.28548E-08 + 3.06997E-08 2.51781E-08 1.84358E-08 1.21687E-08 7.28424E-09 3.97026E-09 + 1.97589E-09 8.99699E-10 3.75390E-10 1.43691E-10 5.05047E-11 1.63122E-11 + 4.84429E-12 1.32342E-12 3.32730E-13 7.70128E-14 + -6.21850E-14 -2.68667E-13 -1.06861E-12 -3.91159E-12 -1.31715E-11 -4.07808E-11 + -1.16025E-10 -3.03114E-10 -7.26475E-10 -1.59546E-09 -3.20584E-09 -5.88176E-09 + -9.82578E-09 -1.48862E-08 -2.03304E-08 -2.47889E-08 -2.65291E-08 -2.40741E-08 + -1.69436E-08 -6.11698E-09 6.11698E-09 1.69436E-08 2.40741E-08 2.65291E-08 + 2.47889E-08 2.03304E-08 1.48862E-08 9.82578E-09 5.88176E-09 3.20584E-09 + 1.59546E-09 7.26475E-10 3.03114E-10 1.16025E-10 4.07808E-11 1.31715E-11 + 3.91159E-12 1.06861E-12 2.68667E-13 6.21850E-14 + -4.56683E-14 -1.97308E-13 -7.84782E-13 -2.87265E-12 -9.67309E-12 -2.99491E-11 + -8.52081E-11 -2.22605E-10 -5.33518E-10 -1.17170E-09 -2.35435E-09 -4.31953E-09 + -7.21599E-09 -1.09323E-08 -1.49306E-08 -1.82048E-08 -1.94828E-08 -1.76799E-08 + -1.24433E-08 -4.49227E-09 4.49227E-09 1.24433E-08 1.76799E-08 1.94828E-08 + 1.82048E-08 1.49306E-08 1.09323E-08 7.21599E-09 4.31953E-09 2.35435E-09 + 1.17170E-09 5.33518E-10 2.22605E-10 8.52081E-11 2.99491E-11 9.67309E-12 + 2.87265E-12 7.84782E-13 1.97308E-13 4.56683E-14 + -3.01797E-14 -1.30390E-13 -5.18620E-13 -1.89838E-12 -6.39242E-12 -1.97918E-11 + -5.63094E-11 -1.47108E-10 -3.52573E-10 -7.74310E-10 -1.55586E-09 -2.85454E-09 + -4.76866E-09 -7.22460E-09 -9.86679E-09 -1.20306E-08 -1.28751E-08 -1.16837E-08 + -8.22309E-09 -2.96870E-09 2.96870E-09 8.22309E-09 1.16837E-08 1.28751E-08 + 1.20306E-08 9.86679E-09 7.22460E-09 4.76866E-09 2.85454E-09 1.55586E-09 + 7.74310E-10 3.52573E-10 1.47108E-10 5.63094E-11 1.97918E-11 6.39242E-12 + 1.89838E-12 5.18620E-13 1.30390E-13 3.01797E-14 + -1.78068E-14 -7.69333E-14 -3.05999E-13 -1.12009E-12 -3.77169E-12 -1.16776E-11 + -3.32240E-11 -8.67973E-11 -2.08027E-10 -4.56863E-10 -9.17999E-10 -1.68425E-09 + -2.81363E-09 -4.26270E-09 -5.82166E-09 -7.09835E-09 -7.59665E-09 -6.89367E-09 + -4.85184E-09 -1.75161E-09 1.75161E-09 4.85184E-09 6.89367E-09 7.59665E-09 + 7.09835E-09 5.82166E-09 4.26270E-09 2.81363E-09 1.68425E-09 9.17999E-10 + 4.56863E-10 2.08027E-10 8.67973E-11 3.32240E-11 1.16776E-11 3.77169E-12 + 1.12009E-12 3.05999E-13 7.69333E-14 1.78068E-14 + -9.33100E-15 -4.03141E-14 -1.60348E-13 -5.86942E-13 -1.97642E-12 -6.11924E-12 + -1.74098E-11 -4.54829E-11 -1.09009E-10 -2.39402E-10 -4.81043E-10 -8.82570E-10 + -1.47438E-09 -2.23371E-09 -3.05063E-09 -3.71963E-09 -3.98074E-09 -3.61237E-09 + -2.54243E-09 -9.17866E-10 9.17866E-10 2.54243E-09 3.61237E-09 3.98074E-09 + 3.71963E-09 3.05063E-09 2.23371E-09 1.47438E-09 8.82570E-10 4.81043E-10 + 2.39402E-10 1.09009E-10 4.54829E-11 1.74098E-11 6.11924E-12 1.97642E-12 + 5.86942E-13 1.60348E-13 4.03141E-14 9.33100E-15 + -4.32775E-15 -1.86978E-14 -7.43698E-14 -2.72226E-13 -9.16669E-13 -2.83813E-12 + -8.07473E-12 -2.10952E-11 -5.05588E-11 -1.11036E-10 -2.23110E-10 -4.09340E-10 + -6.83823E-10 -1.03600E-09 -1.41489E-09 -1.72518E-09 -1.84628E-09 -1.67543E-09 + -1.17919E-09 -4.25710E-10 4.25710E-10 1.17919E-09 1.67543E-09 1.84628E-09 + 1.72518E-09 1.41489E-09 1.03600E-09 6.83823E-10 4.09340E-10 2.23110E-10 + 1.11036E-10 5.05588E-11 2.10952E-11 8.07473E-12 2.83813E-12 9.16669E-13 + 2.72226E-13 7.43698E-14 1.86978E-14 4.32775E-15 + -1.77283E-15 -7.65941E-15 -3.04650E-14 -1.11515E-13 -3.75506E-13 -1.16262E-12 + -3.30775E-12 -8.64147E-12 -2.07110E-11 -4.54849E-11 -9.13952E-11 -1.67683E-10 + -2.80123E-10 -4.24390E-10 -5.79599E-10 -7.06706E-10 -7.56315E-10 -6.86328E-10 + -4.83044E-10 -1.74389E-10 1.74389E-10 4.83044E-10 6.86328E-10 7.56315E-10 + 7.06706E-10 5.79599E-10 4.24390E-10 2.80123E-10 1.67683E-10 9.13952E-11 + 4.54849E-11 2.07110E-11 8.64147E-12 3.30775E-12 1.16262E-12 3.75506E-13 + 1.11515E-13 3.04650E-14 7.65941E-15 1.77283E-15 + -6.40585E-16 -2.76761E-15 -1.10081E-14 -4.02944E-14 -1.35684E-13 -4.20094E-13 + -1.19521E-12 -3.12246E-12 -7.48361E-12 -1.64353E-11 -3.30243E-11 -6.05896E-11 + -1.01218E-10 -1.53347E-10 -2.09429E-10 -2.55357E-10 -2.73283E-10 -2.47994E-10 + -1.74541E-10 -6.30127E-11 6.30127E-11 1.74541E-10 2.47994E-10 2.73283E-10 + 2.55357E-10 2.09429E-10 1.53347E-10 1.01218E-10 6.05896E-11 3.30243E-11 + 1.64353E-11 7.48361E-12 3.12246E-12 1.19521E-12 4.20094E-13 1.35684E-13 + 4.02944E-14 1.10081E-14 2.76761E-15 6.40585E-16 + -2.04010E-16 -8.81413E-16 -3.50578E-15 -1.28327E-14 -4.32116E-14 -1.33789E-13 + -3.80642E-13 -9.94423E-13 -2.38334E-12 -5.23420E-12 -1.05174E-11 -1.92962E-11 + -3.22353E-11 -4.88370E-11 -6.66978E-11 -8.13247E-11 -8.70335E-11 -7.89796E-11 + -5.55867E-11 -2.00679E-11 2.00679E-11 5.55867E-11 7.89796E-11 8.70335E-11 + 8.13247E-11 6.66978E-11 4.88370E-11 3.22353E-11 1.92962E-11 1.05174E-11 + 5.23420E-12 2.38334E-12 9.94423E-13 3.80642E-13 1.33789E-13 4.32116E-14 + 1.28327E-14 3.50578E-15 8.81413E-16 2.04010E-16 + -5.72377E-17 -2.47293E-16 -9.83596E-16 -3.60039E-15 -1.21236E-14 -3.75363E-14 + -1.06794E-13 -2.78999E-13 -6.68678E-13 -1.46853E-12 -2.95079E-12 -5.41382E-12 + -9.04407E-12 -1.37019E-11 -1.87130E-11 -2.28168E-11 -2.44185E-11 -2.21588E-11 + -1.55956E-11 -5.63033E-12 5.63033E-12 1.55956E-11 2.21588E-11 2.44185E-11 + 2.28168E-11 1.87130E-11 1.37019E-11 9.04407E-12 5.41382E-12 2.95079E-12 + 1.46853E-12 6.68678E-13 2.78999E-13 1.06794E-13 3.75363E-14 1.21236E-14 + 3.60039E-15 9.83596E-16 2.47293E-16 5.72377E-17 + -1.41433E-17 -6.11052E-17 -2.43044E-16 -8.89646E-16 -2.99571E-15 -9.27511E-15 + -2.63886E-14 -6.89398E-14 -1.65228E-13 -3.62869E-13 -7.29132E-13 -1.33774E-12 + -2.23476E-12 -3.38570E-12 -4.62393E-12 -5.63796E-12 -6.03373E-12 -5.47538E-12 + -3.85363E-12 -1.39124E-12 1.39124E-12 3.85363E-12 5.47538E-12 6.03373E-12 + 5.63796E-12 4.62393E-12 3.38570E-12 2.23476E-12 1.33774E-12 7.29132E-13 + 3.62869E-13 1.65228E-13 6.89398E-14 2.63886E-14 9.27511E-15 2.99571E-15 + 8.89646E-16 2.43044E-16 6.11052E-17 1.41433E-17 + -3.07736E-18 -1.32956E-17 -5.28827E-17 -1.93574E-16 -6.51822E-16 -2.01813E-15 + -5.74176E-15 -1.50003E-14 -3.59512E-14 -7.89549E-14 -1.58648E-13 -2.91072E-13 + -4.86251E-13 -7.36678E-13 -1.00610E-12 -1.22673E-12 -1.31285E-12 -1.19136E-12 + -8.38492E-13 -3.02712E-13 3.02712E-13 8.38492E-13 1.19136E-12 1.31285E-12 + 1.22673E-12 1.00610E-12 7.36678E-13 4.86251E-13 2.91072E-13 1.58648E-13 + 7.89549E-14 3.59512E-14 1.50003E-14 5.74176E-15 2.01813E-15 6.51822E-16 + 1.93574E-16 5.28827E-17 1.32956E-17 3.07736E-18 + -5.89557E-19 -2.54715E-18 -1.01312E-17 -3.70846E-17 -1.24875E-16 -3.86630E-16 + -1.10000E-15 -2.87373E-15 -6.88748E-15 -1.51261E-14 -3.03936E-14 -5.57631E-14 + -9.31552E-14 -1.41132E-13 -1.92747E-13 -2.35016E-13 -2.51514E-13 -2.28239E-13 + -1.60637E-13 -5.79932E-14 5.79932E-14 1.60637E-13 2.28239E-13 2.51514E-13 + 2.35016E-13 1.92747E-13 1.41132E-13 9.31552E-14 5.57631E-14 3.03936E-14 + 1.51261E-14 6.88748E-15 2.87373E-15 1.10000E-15 3.86630E-16 1.24875E-16 + 3.70846E-17 1.01312E-17 2.54715E-18 5.89557E-19 + -9.94409E-20 -4.29629E-19 -1.70883E-18 -6.25507E-18 -2.10628E-17 -6.52130E-17 + -1.85537E-16 -4.84714E-16 -1.16171E-15 -2.55132E-15 -5.12650E-15 -9.40559E-15 + -1.57125E-14 -2.38047E-14 -3.25107E-14 -3.96403E-14 -4.24230E-14 -3.84972E-14 + -2.70947E-14 -9.78174E-15 9.78174E-15 2.70947E-14 3.84972E-14 4.24230E-14 + 3.96403E-14 3.25107E-14 2.38047E-14 1.57125E-14 9.40559E-15 5.12650E-15 + 2.55132E-15 1.16171E-15 4.84714E-16 1.85537E-16 6.52130E-17 2.10628E-17 + 6.25507E-18 1.70883E-18 4.29629E-19 9.94409E-20 + -1.47666E-20 -6.37982E-20 -2.53755E-19 -9.28854E-19 -3.12774E-18 -9.68388E-18 + -2.75515E-17 -7.19781E-17 -1.72510E-16 -3.78861E-16 -7.61266E-16 -1.39669E-15 + -2.33325E-15 -3.53491E-15 -4.82771E-15 -5.88643E-15 -6.29965E-15 -5.71669E-15 + -4.02347E-15 -1.45255E-15 1.45255E-15 4.02347E-15 5.71669E-15 6.29965E-15 + 5.88643E-15 4.82771E-15 3.53491E-15 2.33325E-15 1.39669E-15 7.61266E-16 + 3.78861E-16 1.72510E-16 7.19781E-17 2.75515E-17 9.68388E-18 3.12774E-18 + 9.28854E-19 2.53755E-19 6.37982E-20 1.47666E-20 + -1.93047E-21 -8.34048E-21 -3.31739E-20 -1.21431E-19 -4.08896E-19 -1.26599E-18 + -3.60187E-18 -9.40985E-18 -2.25526E-17 -4.95293E-17 -9.95219E-17 -1.82593E-16 + -3.05031E-16 -4.62126E-16 -6.31136E-16 -7.69545E-16 -8.23566E-16 -7.47355E-16 + -5.25996E-16 -1.89895E-16 1.89895E-16 5.25996E-16 7.47355E-16 8.23566E-16 + 7.69545E-16 6.31136E-16 4.62126E-16 3.05031E-16 1.82593E-16 9.95219E-17 + 4.95293E-17 2.25526E-17 9.40985E-18 3.60187E-18 1.26599E-18 4.08896E-19 + 1.21431E-19 3.31739E-20 8.34048E-21 1.93047E-21 + -2.22180E-22 -9.59919E-22 -3.81804E-21 -1.39757E-20 -4.70604E-20 -1.45705E-19 + -4.14545E-19 -1.08299E-18 -2.59562E-18 -5.70041E-18 -1.14541E-17 -2.10149E-17 + -3.51064E-17 -5.31869E-17 -7.26385E-17 -8.85681E-17 -9.47855E-17 -8.60142E-17 + -6.05377E-17 -2.18553E-17 2.18553E-17 6.05377E-17 8.60142E-17 9.47855E-17 + 8.85681E-17 7.26385E-17 5.31869E-17 3.51064E-17 2.10149E-17 1.14541E-17 + 5.70041E-18 2.59562E-18 1.08299E-18 4.14545E-19 1.45705E-19 4.70604E-20 + 1.39757E-20 3.81804E-21 9.59919E-22 2.22180E-22 + -1.68397E-21 -7.27552E-21 -2.89381E-20 -1.05926E-19 -3.56686E-19 -1.10435E-18 + -3.14196E-18 -8.20835E-18 -1.96730E-17 -4.32052E-17 -8.68144E-17 -1.59278E-16 + -2.66083E-16 -4.03120E-16 -5.50550E-16 -6.71286E-16 -7.18409E-16 -6.51929E-16 + -4.58834E-16 -1.65648E-16 1.65648E-16 4.58834E-16 6.51929E-16 7.18409E-16 + 6.71286E-16 5.50550E-16 4.03120E-16 2.66083E-16 1.59278E-16 8.68144E-17 + 4.32052E-17 1.96730E-17 8.20835E-18 3.14196E-18 1.10435E-18 3.56686E-19 + 1.05926E-19 2.89381E-20 7.27552E-21 1.68397E-21 + -1.46316E-20 -6.32151E-20 -2.51435E-19 -9.20363E-19 -3.09915E-18 -9.59536E-18 + -2.72997E-17 -7.13202E-17 -1.70933E-16 -3.75398E-16 -7.54307E-16 -1.38393E-15 + -2.31192E-15 -3.50260E-15 -4.78358E-15 -5.83262E-15 -6.24206E-15 -5.66443E-15 + -3.98669E-15 -1.43927E-15 1.43927E-15 3.98669E-15 5.66443E-15 6.24206E-15 + 5.83262E-15 4.78358E-15 3.50260E-15 2.31192E-15 1.38393E-15 7.54307E-16 + 3.75398E-16 1.70933E-16 7.13202E-17 2.72997E-17 9.59536E-18 3.09915E-18 + 9.20363E-19 2.51435E-19 6.32151E-20 1.46316E-20 + -1.11921E-19 -4.83547E-19 -1.92329E-18 -7.04007E-18 -2.37061E-17 -7.33971E-17 + -2.08822E-16 -5.45545E-16 -1.30751E-15 -2.87151E-15 -5.76987E-15 -1.05860E-14 + -1.76844E-14 -2.67922E-14 -3.65907E-14 -4.46151E-14 -4.77470E-14 -4.33286E-14 + -3.04951E-14 -1.10093E-14 1.10093E-14 3.04951E-14 4.33286E-14 4.77470E-14 + 4.46151E-14 3.65907E-14 2.67922E-14 1.76844E-14 1.05860E-14 5.76987E-15 + 2.87151E-15 1.30751E-15 5.45545E-16 2.08822E-16 7.33971E-17 2.37061E-17 + 7.04007E-18 1.92329E-18 4.83547E-19 1.11921E-19 + -7.53693E-19 -3.25629E-18 -1.29518E-17 -4.74091E-17 -1.59641E-16 -4.94270E-16 + -1.40624E-15 -3.67380E-15 -8.80500E-15 -1.93372E-14 -3.88554E-14 -7.12879E-14 + -1.19090E-13 -1.80424E-13 -2.46408E-13 -3.00446E-13 -3.21537E-13 -2.91782E-13 + -2.05360E-13 -7.41388E-14 7.41388E-14 2.05360E-13 2.91782E-13 3.21537E-13 + 3.00446E-13 2.46408E-13 1.80424E-13 1.19090E-13 7.12879E-14 3.88554E-14 + 1.93372E-14 8.80500E-15 3.67380E-15 1.40624E-15 4.94270E-16 1.59641E-16 + 4.74091E-17 1.29518E-17 3.25629E-18 7.53693E-19 + -4.46844E-18 -1.93056E-17 -7.67874E-17 -2.81076E-16 -9.46468E-16 -2.93039E-15 + -8.33722E-15 -2.17809E-14 -5.22024E-14 -1.14645E-13 -2.30363E-13 -4.22646E-13 + -7.06052E-13 -1.06968E-12 -1.46089E-12 -1.78126E-12 -1.90630E-12 -1.72990E-12 + -1.21752E-12 -4.39549E-13 4.39549E-13 1.21752E-12 1.72990E-12 1.90630E-12 + 1.78126E-12 1.46089E-12 1.06968E-12 7.06052E-13 4.22646E-13 2.30363E-13 + 1.14645E-13 5.22024E-14 2.17809E-14 8.33722E-15 2.93039E-15 9.46468E-16 + 2.81076E-16 7.67874E-17 1.93056E-17 4.46844E-18 + -2.33243E-17 -1.00771E-16 -4.00814E-16 -1.46716E-15 -4.94036E-15 -1.52960E-14 + -4.35186E-14 -1.13692E-13 -2.72485E-13 -5.98424E-13 -1.20244E-12 -2.20612E-12 + -3.68544E-12 -5.58351E-12 -7.62552E-12 -9.29781E-12 -9.95050E-12 -9.02970E-12 + -6.35520E-12 -2.29435E-12 2.29435E-12 6.35520E-12 9.02970E-12 9.95050E-12 + 9.29781E-12 7.62552E-12 5.58351E-12 3.68544E-12 2.20612E-12 1.20244E-12 + 5.98424E-13 2.72485E-13 1.13692E-13 4.35186E-14 1.52960E-14 4.94036E-15 + 1.46716E-15 4.00814E-16 1.00771E-16 2.33243E-17 + -1.07196E-16 -4.63136E-16 -1.84210E-15 -6.74291E-15 -2.27054E-14 -7.02990E-14 + -2.00007E-13 -5.22517E-13 -1.25232E-12 -2.75030E-12 -5.52632E-12 -1.01391E-11 + -1.69379E-11 -2.56613E-11 -3.50462E-11 -4.27318E-11 -4.57315E-11 -4.14996E-11 + -2.92079E-11 -1.05446E-11 1.05446E-11 2.92079E-11 4.14996E-11 4.57315E-11 + 4.27318E-11 3.50462E-11 2.56613E-11 1.69379E-11 1.01391E-11 5.52632E-12 + 2.75030E-12 1.25232E-12 5.22517E-13 2.00007E-13 7.02990E-14 2.27054E-14 + 6.74291E-15 1.84210E-15 4.63136E-16 1.07196E-16 + -4.33823E-16 -1.87431E-15 -7.45498E-15 -2.72885E-14 -9.18888E-14 -2.84500E-13 + -8.09428E-13 -2.11462E-12 -5.06812E-12 -1.11304E-11 -2.23650E-11 -4.10330E-11 + -6.85478E-11 -1.03851E-10 -1.41832E-10 -1.72935E-10 -1.85075E-10 -1.67949E-10 + -1.18204E-10 -4.26740E-11 4.26740E-11 1.18204E-10 1.67949E-10 1.85075E-10 + 1.72935E-10 1.41832E-10 1.03851E-10 6.85478E-11 4.10330E-11 2.23650E-11 + 1.11304E-11 5.06812E-12 2.11462E-12 8.09428E-13 2.84500E-13 9.18888E-14 + 2.72885E-14 7.45498E-15 1.87431E-15 4.33823E-16 + -1.54625E-15 -6.68050E-15 -2.65714E-14 -9.72630E-14 -3.27514E-13 -1.01403E-12 + -2.88500E-12 -7.53704E-12 -1.80640E-11 -3.96717E-11 -7.97144E-11 -1.46252E-10 + -2.44321E-10 -3.70151E-10 -5.05523E-10 -6.16385E-10 -6.59654E-10 -5.98611E-10 + -4.21309E-10 -1.52101E-10 1.52101E-10 4.21309E-10 5.98611E-10 6.59654E-10 + 6.16385E-10 5.05523E-10 3.70151E-10 2.44321E-10 1.46252E-10 7.97144E-11 + 3.96717E-11 1.80640E-11 7.53704E-12 2.88500E-12 1.01403E-12 3.27514E-13 + 9.72630E-14 2.65714E-14 6.68050E-15 1.54625E-15 + -4.85519E-15 -2.09766E-14 -8.34336E-14 -3.05404E-13 -1.02839E-12 -3.18402E-12 + -9.05884E-12 -2.36661E-11 -5.67206E-11 -1.24568E-10 -2.50301E-10 -4.59227E-10 + -7.67163E-10 -1.16226E-09 -1.58733E-09 -1.93543E-09 -2.07130E-09 -1.87962E-09 + -1.32290E-09 -4.77593E-10 4.77593E-10 1.32290E-09 1.87962E-09 2.07130E-09 + 1.93543E-09 1.58733E-09 1.16226E-09 7.67163E-10 4.59227E-10 2.50301E-10 + 1.24568E-10 5.67206E-11 2.36661E-11 9.05884E-12 3.18402E-12 1.02839E-12 + 3.05404E-13 8.34336E-14 2.09766E-14 4.85519E-15 + -1.34368E-14 -5.80531E-14 -2.30904E-13 -8.45209E-13 -2.84608E-12 -8.81183E-12 + -2.50705E-11 -6.54964E-11 -1.56975E-10 -3.44744E-10 -6.92712E-10 -1.27092E-09 + -2.12314E-09 -3.21659E-09 -4.39296E-09 -5.35634E-09 -5.73235E-09 -5.20189E-09 + -3.66114E-09 -1.32175E-09 1.32175E-09 3.66114E-09 5.20189E-09 5.73235E-09 + 5.35634E-09 4.39296E-09 3.21659E-09 2.12314E-09 1.27092E-09 6.92712E-10 + 3.44744E-10 1.56975E-10 6.54964E-11 2.50705E-11 8.81183E-12 2.84608E-12 + 8.45209E-13 2.30904E-13 5.80531E-14 1.34368E-14 + -3.28014E-14 -1.41717E-13 -5.63672E-13 -2.06329E-12 -6.94772E-12 -2.15110E-11 + -6.12009E-11 -1.59887E-10 -3.83201E-10 -8.41574E-10 -1.69102E-09 -3.10251E-09 + -5.18291E-09 -7.85219E-09 -1.07239E-08 -1.30757E-08 -1.39936E-08 -1.26986E-08 + -8.93742E-09 -3.22659E-09 3.22659E-09 8.93742E-09 1.26986E-08 1.39936E-08 + 1.30757E-08 1.07239E-08 7.85219E-09 5.18291E-09 3.10251E-09 1.69102E-09 + 8.41574E-10 3.83201E-10 1.59887E-10 6.12009E-11 2.15110E-11 6.94772E-12 + 2.06329E-12 5.63672E-13 1.41717E-13 3.28014E-14 + -7.07225E-14 -3.05553E-13 -1.21532E-12 -4.44862E-12 -1.49799E-11 -4.63796E-11 + -1.31954E-10 -3.44729E-10 -8.26214E-10 -1.81450E-09 -3.64598E-09 -6.68928E-09 + -1.11748E-08 -1.69300E-08 -2.31216E-08 -2.81922E-08 -3.01713E-08 -2.73793E-08 + -1.92698E-08 -6.95679E-09 6.95679E-09 1.92698E-08 2.73793E-08 3.01713E-08 + 2.81922E-08 2.31216E-08 1.69300E-08 1.11748E-08 6.68928E-09 3.64598E-09 + 1.81450E-09 8.26214E-10 3.44729E-10 1.31954E-10 4.63796E-11 1.49799E-11 + 4.44862E-12 1.21532E-12 3.05553E-13 7.07225E-14 + -1.34963E-13 -5.83102E-13 -2.31926E-12 -8.48952E-12 -2.85868E-11 -8.85085E-11 + -2.51815E-10 -6.57864E-10 -1.57670E-09 -3.46271E-09 -6.95780E-09 -1.27655E-08 + -2.13254E-08 -3.23083E-08 -4.41242E-08 -5.38006E-08 -5.75774E-08 -5.22493E-08 + -3.67736E-08 -1.32760E-08 1.32760E-08 3.67736E-08 5.22493E-08 5.75774E-08 + 5.38006E-08 4.41242E-08 3.23083E-08 2.13254E-08 1.27655E-08 6.95780E-09 + 3.46271E-09 1.57670E-09 6.57864E-10 2.51815E-10 8.85085E-11 2.85868E-11 + 8.48952E-12 2.31926E-12 5.83102E-13 1.34963E-13 + -2.28741E-13 -9.88265E-13 -3.93078E-12 -1.43884E-11 -4.84501E-11 -1.50008E-10 + -4.26786E-10 -1.11498E-09 -2.67226E-09 -5.86874E-09 -1.17924E-08 -2.16355E-08 + -3.61431E-08 -5.47575E-08 -7.47835E-08 -9.11836E-08 -9.75845E-08 -8.85542E-08 + -6.23254E-08 -2.25007E-08 2.25007E-08 6.23254E-08 8.85542E-08 9.75845E-08 + 9.11836E-08 7.47835E-08 5.47575E-08 3.61431E-08 2.16355E-08 1.17924E-08 + 5.86874E-09 2.67226E-09 1.11498E-09 4.26786E-10 1.50008E-10 4.84501E-11 + 1.43884E-11 3.93078E-12 9.88265E-13 2.28741E-13 + -3.46134E-13 -1.49545E-12 -5.94811E-12 -2.17727E-11 -7.33153E-11 -2.26994E-10 + -6.45818E-10 -1.68719E-09 -4.04370E-09 -8.88065E-09 -1.78444E-08 -3.27390E-08 + -5.46922E-08 -8.28597E-08 -1.13163E-07 -1.37980E-07 -1.47666E-07 -1.34001E-07 + -9.43115E-08 -3.40483E-08 3.40483E-08 9.43115E-08 1.34001E-07 1.47666E-07 + 1.37980E-07 1.13163E-07 8.28597E-08 5.46922E-08 3.27390E-08 1.78444E-08 + 8.88065E-09 4.04370E-09 1.68719E-09 6.45818E-10 2.26994E-10 7.33153E-11 + 2.17727E-11 5.94811E-12 1.49545E-12 3.46134E-13 + -4.71320E-13 -2.03631E-12 -8.09935E-12 -2.96472E-11 -9.98311E-11 -3.09090E-10 + -8.79390E-10 -2.29740E-09 -5.50618E-09 -1.20925E-08 -2.42981E-08 -4.45797E-08 + -7.44726E-08 -1.12827E-07 -1.54091E-07 -1.87883E-07 -2.01072E-07 -1.82465E-07 + -1.28421E-07 -4.63625E-08 4.63625E-08 1.28421E-07 1.82465E-07 2.01072E-07 + 1.87883E-07 1.54091E-07 1.12827E-07 7.44726E-08 4.45797E-08 2.42981E-08 + 1.20925E-08 5.50618E-09 2.29740E-09 8.79390E-10 3.09090E-10 9.98311E-11 + 2.96472E-11 8.09935E-12 2.03631E-12 4.71320E-13 + -5.83704E-13 -2.52186E-12 -1.00306E-11 -3.67164E-11 -1.23635E-10 -3.82791E-10 + -1.08908E-09 -2.84520E-09 -6.81910E-09 -1.49759E-08 -3.00918E-08 -5.52095E-08 + -9.22303E-08 -1.39730E-07 -1.90833E-07 -2.32683E-07 -2.49017E-07 -2.25973E-07 + -1.59042E-07 -5.74174E-08 5.74174E-08 1.59042E-07 2.25973E-07 2.49017E-07 + 2.32683E-07 1.90833E-07 1.39730E-07 9.22303E-08 5.52095E-08 3.00918E-08 + 1.49759E-08 6.81910E-09 2.84520E-09 1.08908E-09 3.82791E-10 1.23635E-10 + 3.67164E-11 1.00306E-11 2.52186E-12 5.83704E-13 + -6.65914E-13 -2.87705E-12 -1.14433E-11 -4.18876E-11 -1.41049E-10 -4.36705E-10 + -1.24246E-09 -3.24593E-09 -7.77952E-09 -1.70851E-08 -3.43301E-08 -6.29854E-08 + -1.05220E-07 -1.59410E-07 -2.17710E-07 -2.65455E-07 -2.84089E-07 -2.57800E-07 + -1.81442E-07 -6.55042E-08 6.55042E-08 1.81442E-07 2.57800E-07 2.84089E-07 + 2.65455E-07 2.17710E-07 1.59410E-07 1.05220E-07 6.29854E-08 3.43301E-08 + 1.70851E-08 7.77952E-09 3.24593E-09 1.24246E-09 4.36705E-10 1.41049E-10 + 4.18876E-11 1.14433E-11 2.87705E-12 6.65914E-13 + -7.08494E-13 -3.06101E-12 -1.21750E-11 -4.45660E-11 -1.50067E-10 -4.64628E-10 + -1.32191E-09 -3.45348E-09 -8.27696E-09 -1.81776E-08 -3.65252E-08 -6.70128E-08 + -1.11948E-07 -1.69604E-07 -2.31631E-07 -2.82428E-07 -3.02254E-07 -2.74284E-07 + -1.93044E-07 -6.96927E-08 6.96927E-08 1.93044E-07 2.74284E-07 3.02254E-07 + 2.82428E-07 2.31631E-07 1.69604E-07 1.11948E-07 6.70128E-08 3.65252E-08 + 1.81776E-08 8.27696E-09 3.45348E-09 1.32191E-09 4.64628E-10 1.50067E-10 + 4.45660E-11 1.21750E-11 3.06101E-12 7.08494E-13 + -7.08494E-13 -3.06101E-12 -1.21750E-11 -4.45660E-11 -1.50067E-10 -4.64628E-10 + -1.32191E-09 -3.45348E-09 -8.27696E-09 -1.81776E-08 -3.65252E-08 -6.70128E-08 + -1.11948E-07 -1.69604E-07 -2.31631E-07 -2.82428E-07 -3.02254E-07 -2.74284E-07 + -1.93044E-07 -6.96927E-08 6.96927E-08 1.93044E-07 2.74284E-07 3.02254E-07 + 2.82428E-07 2.31631E-07 1.69604E-07 1.11948E-07 6.70128E-08 3.65252E-08 + 1.81776E-08 8.27696E-09 3.45348E-09 1.32191E-09 4.64628E-10 1.50067E-10 + 4.45660E-11 1.21750E-11 3.06101E-12 7.08494E-13 + -6.65914E-13 -2.87705E-12 -1.14433E-11 -4.18876E-11 -1.41049E-10 -4.36705E-10 + -1.24246E-09 -3.24593E-09 -7.77952E-09 -1.70851E-08 -3.43301E-08 -6.29854E-08 + -1.05220E-07 -1.59410E-07 -2.17710E-07 -2.65455E-07 -2.84089E-07 -2.57800E-07 + -1.81442E-07 -6.55042E-08 6.55042E-08 1.81442E-07 2.57800E-07 2.84089E-07 + 2.65455E-07 2.17710E-07 1.59410E-07 1.05220E-07 6.29854E-08 3.43301E-08 + 1.70851E-08 7.77952E-09 3.24593E-09 1.24246E-09 4.36705E-10 1.41049E-10 + 4.18876E-11 1.14433E-11 2.87705E-12 6.65914E-13 + -5.83704E-13 -2.52186E-12 -1.00306E-11 -3.67164E-11 -1.23635E-10 -3.82791E-10 + -1.08908E-09 -2.84520E-09 -6.81910E-09 -1.49759E-08 -3.00918E-08 -5.52095E-08 + -9.22303E-08 -1.39730E-07 -1.90833E-07 -2.32683E-07 -2.49017E-07 -2.25973E-07 + -1.59042E-07 -5.74174E-08 5.74174E-08 1.59042E-07 2.25973E-07 2.49017E-07 + 2.32683E-07 1.90833E-07 1.39730E-07 9.22303E-08 5.52095E-08 3.00918E-08 + 1.49759E-08 6.81910E-09 2.84520E-09 1.08908E-09 3.82791E-10 1.23635E-10 + 3.67164E-11 1.00306E-11 2.52186E-12 5.83704E-13 + -4.71320E-13 -2.03631E-12 -8.09935E-12 -2.96472E-11 -9.98311E-11 -3.09090E-10 + -8.79390E-10 -2.29740E-09 -5.50618E-09 -1.20925E-08 -2.42981E-08 -4.45797E-08 + -7.44726E-08 -1.12827E-07 -1.54091E-07 -1.87883E-07 -2.01072E-07 -1.82465E-07 + -1.28421E-07 -4.63625E-08 4.63625E-08 1.28421E-07 1.82465E-07 2.01072E-07 + 1.87883E-07 1.54091E-07 1.12827E-07 7.44726E-08 4.45797E-08 2.42981E-08 + 1.20925E-08 5.50618E-09 2.29740E-09 8.79390E-10 3.09090E-10 9.98311E-11 + 2.96472E-11 8.09935E-12 2.03631E-12 4.71320E-13 + -3.46134E-13 -1.49545E-12 -5.94811E-12 -2.17727E-11 -7.33153E-11 -2.26994E-10 + -6.45818E-10 -1.68719E-09 -4.04370E-09 -8.88065E-09 -1.78444E-08 -3.27390E-08 + -5.46922E-08 -8.28597E-08 -1.13163E-07 -1.37980E-07 -1.47666E-07 -1.34001E-07 + -9.43115E-08 -3.40483E-08 3.40483E-08 9.43115E-08 1.34001E-07 1.47666E-07 + 1.37980E-07 1.13163E-07 8.28597E-08 5.46922E-08 3.27390E-08 1.78444E-08 + 8.88065E-09 4.04370E-09 1.68719E-09 6.45818E-10 2.26994E-10 7.33153E-11 + 2.17727E-11 5.94811E-12 1.49545E-12 3.46134E-13 + -2.28741E-13 -9.88265E-13 -3.93078E-12 -1.43884E-11 -4.84501E-11 -1.50008E-10 + -4.26786E-10 -1.11498E-09 -2.67226E-09 -5.86874E-09 -1.17924E-08 -2.16355E-08 + -3.61431E-08 -5.47575E-08 -7.47835E-08 -9.11836E-08 -9.75845E-08 -8.85542E-08 + -6.23254E-08 -2.25007E-08 2.25007E-08 6.23254E-08 8.85542E-08 9.75845E-08 + 9.11836E-08 7.47835E-08 5.47575E-08 3.61431E-08 2.16355E-08 1.17924E-08 + 5.86874E-09 2.67226E-09 1.11498E-09 4.26786E-10 1.50008E-10 4.84501E-11 + 1.43884E-11 3.93078E-12 9.88265E-13 2.28741E-13 + -1.34963E-13 -5.83102E-13 -2.31926E-12 -8.48952E-12 -2.85868E-11 -8.85085E-11 + -2.51815E-10 -6.57864E-10 -1.57670E-09 -3.46271E-09 -6.95780E-09 -1.27655E-08 + -2.13254E-08 -3.23083E-08 -4.41242E-08 -5.38006E-08 -5.75774E-08 -5.22493E-08 + -3.67736E-08 -1.32760E-08 1.32760E-08 3.67736E-08 5.22493E-08 5.75774E-08 + 5.38006E-08 4.41242E-08 3.23083E-08 2.13254E-08 1.27655E-08 6.95780E-09 + 3.46271E-09 1.57670E-09 6.57864E-10 2.51815E-10 8.85085E-11 2.85868E-11 + 8.48952E-12 2.31926E-12 5.83102E-13 1.34963E-13 + -7.07225E-14 -3.05553E-13 -1.21532E-12 -4.44862E-12 -1.49799E-11 -4.63796E-11 + -1.31954E-10 -3.44729E-10 -8.26214E-10 -1.81450E-09 -3.64598E-09 -6.68928E-09 + -1.11748E-08 -1.69300E-08 -2.31216E-08 -2.81922E-08 -3.01713E-08 -2.73793E-08 + -1.92698E-08 -6.95679E-09 6.95679E-09 1.92698E-08 2.73793E-08 3.01713E-08 + 2.81922E-08 2.31216E-08 1.69300E-08 1.11748E-08 6.68928E-09 3.64598E-09 + 1.81450E-09 8.26214E-10 3.44729E-10 1.31954E-10 4.63796E-11 1.49799E-11 + 4.44862E-12 1.21532E-12 3.05553E-13 7.07225E-14 + -3.28014E-14 -1.41717E-13 -5.63672E-13 -2.06329E-12 -6.94772E-12 -2.15110E-11 + -6.12009E-11 -1.59887E-10 -3.83201E-10 -8.41574E-10 -1.69102E-09 -3.10251E-09 + -5.18291E-09 -7.85219E-09 -1.07239E-08 -1.30757E-08 -1.39936E-08 -1.26986E-08 + -8.93742E-09 -3.22659E-09 3.22659E-09 8.93742E-09 1.26986E-08 1.39936E-08 + 1.30757E-08 1.07239E-08 7.85219E-09 5.18291E-09 3.10251E-09 1.69102E-09 + 8.41574E-10 3.83201E-10 1.59887E-10 6.12009E-11 2.15110E-11 6.94772E-12 + 2.06329E-12 5.63672E-13 1.41717E-13 3.28014E-14 + -1.34368E-14 -5.80531E-14 -2.30904E-13 -8.45209E-13 -2.84608E-12 -8.81183E-12 + -2.50705E-11 -6.54964E-11 -1.56975E-10 -3.44744E-10 -6.92712E-10 -1.27092E-09 + -2.12314E-09 -3.21659E-09 -4.39296E-09 -5.35634E-09 -5.73235E-09 -5.20189E-09 + -3.66114E-09 -1.32175E-09 1.32175E-09 3.66114E-09 5.20189E-09 5.73235E-09 + 5.35634E-09 4.39296E-09 3.21659E-09 2.12314E-09 1.27092E-09 6.92712E-10 + 3.44744E-10 1.56975E-10 6.54964E-11 2.50705E-11 8.81183E-12 2.84608E-12 + 8.45209E-13 2.30904E-13 5.80531E-14 1.34368E-14 + -4.85519E-15 -2.09766E-14 -8.34336E-14 -3.05404E-13 -1.02839E-12 -3.18402E-12 + -9.05884E-12 -2.36661E-11 -5.67206E-11 -1.24568E-10 -2.50301E-10 -4.59227E-10 + -7.67163E-10 -1.16226E-09 -1.58733E-09 -1.93543E-09 -2.07130E-09 -1.87962E-09 + -1.32290E-09 -4.77593E-10 4.77593E-10 1.32290E-09 1.87962E-09 2.07130E-09 + 1.93543E-09 1.58733E-09 1.16226E-09 7.67163E-10 4.59227E-10 2.50301E-10 + 1.24568E-10 5.67206E-11 2.36661E-11 9.05884E-12 3.18402E-12 1.02839E-12 + 3.05404E-13 8.34336E-14 2.09766E-14 4.85519E-15 + -1.54625E-15 -6.68050E-15 -2.65714E-14 -9.72630E-14 -3.27514E-13 -1.01403E-12 + -2.88500E-12 -7.53704E-12 -1.80640E-11 -3.96717E-11 -7.97144E-11 -1.46252E-10 + -2.44321E-10 -3.70151E-10 -5.05523E-10 -6.16385E-10 -6.59654E-10 -5.98611E-10 + -4.21309E-10 -1.52101E-10 1.52101E-10 4.21309E-10 5.98611E-10 6.59654E-10 + 6.16385E-10 5.05523E-10 3.70151E-10 2.44321E-10 1.46252E-10 7.97144E-11 + 3.96717E-11 1.80640E-11 7.53704E-12 2.88500E-12 1.01403E-12 3.27514E-13 + 9.72630E-14 2.65714E-14 6.68050E-15 1.54625E-15 + -4.33823E-16 -1.87431E-15 -7.45498E-15 -2.72885E-14 -9.18888E-14 -2.84500E-13 + -8.09428E-13 -2.11462E-12 -5.06812E-12 -1.11304E-11 -2.23650E-11 -4.10330E-11 + -6.85478E-11 -1.03851E-10 -1.41832E-10 -1.72935E-10 -1.85075E-10 -1.67949E-10 + -1.18204E-10 -4.26740E-11 4.26740E-11 1.18204E-10 1.67949E-10 1.85075E-10 + 1.72935E-10 1.41832E-10 1.03851E-10 6.85478E-11 4.10330E-11 2.23650E-11 + 1.11304E-11 5.06812E-12 2.11462E-12 8.09428E-13 2.84500E-13 9.18888E-14 + 2.72885E-14 7.45498E-15 1.87431E-15 4.33823E-16 + -1.07196E-16 -4.63136E-16 -1.84210E-15 -6.74291E-15 -2.27054E-14 -7.02990E-14 + -2.00007E-13 -5.22517E-13 -1.25232E-12 -2.75030E-12 -5.52632E-12 -1.01391E-11 + -1.69379E-11 -2.56613E-11 -3.50462E-11 -4.27318E-11 -4.57315E-11 -4.14996E-11 + -2.92079E-11 -1.05446E-11 1.05446E-11 2.92079E-11 4.14996E-11 4.57315E-11 + 4.27318E-11 3.50462E-11 2.56613E-11 1.69379E-11 1.01391E-11 5.52632E-12 + 2.75030E-12 1.25232E-12 5.22517E-13 2.00007E-13 7.02990E-14 2.27054E-14 + 6.74291E-15 1.84210E-15 4.63136E-16 1.07196E-16 + -2.33243E-17 -1.00771E-16 -4.00814E-16 -1.46716E-15 -4.94036E-15 -1.52960E-14 + -4.35186E-14 -1.13692E-13 -2.72485E-13 -5.98424E-13 -1.20244E-12 -2.20612E-12 + -3.68544E-12 -5.58351E-12 -7.62552E-12 -9.29781E-12 -9.95050E-12 -9.02970E-12 + -6.35520E-12 -2.29435E-12 2.29435E-12 6.35520E-12 9.02970E-12 9.95050E-12 + 9.29781E-12 7.62552E-12 5.58351E-12 3.68544E-12 2.20612E-12 1.20244E-12 + 5.98424E-13 2.72485E-13 1.13692E-13 4.35186E-14 1.52960E-14 4.94036E-15 + 1.46716E-15 4.00814E-16 1.00771E-16 2.33243E-17 + -4.46844E-18 -1.93056E-17 -7.67874E-17 -2.81076E-16 -9.46468E-16 -2.93039E-15 + -8.33722E-15 -2.17809E-14 -5.22024E-14 -1.14645E-13 -2.30363E-13 -4.22646E-13 + -7.06052E-13 -1.06968E-12 -1.46089E-12 -1.78126E-12 -1.90630E-12 -1.72990E-12 + -1.21752E-12 -4.39549E-13 4.39549E-13 1.21752E-12 1.72990E-12 1.90630E-12 + 1.78126E-12 1.46089E-12 1.06968E-12 7.06052E-13 4.22646E-13 2.30363E-13 + 1.14645E-13 5.22024E-14 2.17809E-14 8.33722E-15 2.93039E-15 9.46468E-16 + 2.81076E-16 7.67874E-17 1.93056E-17 4.46844E-18 + -7.53693E-19 -3.25629E-18 -1.29518E-17 -4.74091E-17 -1.59641E-16 -4.94270E-16 + -1.40624E-15 -3.67380E-15 -8.80500E-15 -1.93372E-14 -3.88554E-14 -7.12879E-14 + -1.19090E-13 -1.80424E-13 -2.46408E-13 -3.00446E-13 -3.21537E-13 -2.91782E-13 + -2.05360E-13 -7.41388E-14 7.41388E-14 2.05360E-13 2.91782E-13 3.21537E-13 + 3.00446E-13 2.46408E-13 1.80424E-13 1.19090E-13 7.12879E-14 3.88554E-14 + 1.93372E-14 8.80500E-15 3.67380E-15 1.40624E-15 4.94270E-16 1.59641E-16 + 4.74091E-17 1.29518E-17 3.25629E-18 7.53693E-19 + -1.11921E-19 -4.83547E-19 -1.92329E-18 -7.04007E-18 -2.37061E-17 -7.33971E-17 + -2.08822E-16 -5.45545E-16 -1.30751E-15 -2.87151E-15 -5.76987E-15 -1.05860E-14 + -1.76844E-14 -2.67922E-14 -3.65907E-14 -4.46151E-14 -4.77470E-14 -4.33286E-14 + -3.04951E-14 -1.10093E-14 1.10093E-14 3.04951E-14 4.33286E-14 4.77470E-14 + 4.46151E-14 3.65907E-14 2.67922E-14 1.76844E-14 1.05860E-14 5.76987E-15 + 2.87151E-15 1.30751E-15 5.45545E-16 2.08822E-16 7.33971E-17 2.37061E-17 + 7.04007E-18 1.92329E-18 4.83547E-19 1.11921E-19 + -1.46316E-20 -6.32151E-20 -2.51435E-19 -9.20363E-19 -3.09915E-18 -9.59536E-18 + -2.72997E-17 -7.13202E-17 -1.70933E-16 -3.75398E-16 -7.54307E-16 -1.38393E-15 + -2.31192E-15 -3.50260E-15 -4.78358E-15 -5.83262E-15 -6.24206E-15 -5.66443E-15 + -3.98669E-15 -1.43927E-15 1.43927E-15 3.98669E-15 5.66443E-15 6.24206E-15 + 5.83262E-15 4.78358E-15 3.50260E-15 2.31192E-15 1.38393E-15 7.54307E-16 + 3.75398E-16 1.70933E-16 7.13202E-17 2.72997E-17 9.59536E-18 3.09915E-18 + 9.20363E-19 2.51435E-19 6.32151E-20 1.46316E-20 + -1.68397E-21 -7.27552E-21 -2.89381E-20 -1.05926E-19 -3.56686E-19 -1.10435E-18 + -3.14196E-18 -8.20835E-18 -1.96730E-17 -4.32052E-17 -8.68144E-17 -1.59278E-16 + -2.66083E-16 -4.03120E-16 -5.50550E-16 -6.71286E-16 -7.18409E-16 -6.51929E-16 + -4.58834E-16 -1.65648E-16 1.65648E-16 4.58834E-16 6.51929E-16 7.18409E-16 + 6.71286E-16 5.50550E-16 4.03120E-16 2.66083E-16 1.59278E-16 8.68144E-17 + 4.32052E-17 1.96730E-17 8.20835E-18 3.14196E-18 1.10435E-18 3.56686E-19 + 1.05926E-19 2.89381E-20 7.27552E-21 1.68397E-21 + -1.08998E-20 -4.70918E-20 -1.87306E-19 -6.85621E-19 -2.30870E-18 -7.14802E-18 + -2.03368E-17 -5.31297E-17 -1.27336E-16 -2.79651E-16 -5.61918E-16 -1.03095E-15 + -1.72226E-15 -2.60925E-15 -3.56351E-15 -4.34499E-15 -4.65000E-15 -4.21970E-15 + -2.96987E-15 -1.07218E-15 1.07218E-15 2.96987E-15 4.21970E-15 4.65000E-15 + 4.34499E-15 3.56351E-15 2.60925E-15 1.72226E-15 1.03095E-15 5.61918E-16 + 2.79651E-16 1.27336E-16 5.31297E-17 2.03368E-17 7.14802E-18 2.30870E-18 + 6.85621E-19 1.87306E-19 4.70918E-20 1.08998E-20 + -9.47050E-20 -4.09168E-19 -1.62745E-18 -5.95718E-18 -2.00596E-17 -6.21073E-17 + -1.76701E-16 -4.61629E-16 -1.10639E-15 -2.42981E-15 -4.88235E-15 -8.95766E-15 + -1.49642E-14 -2.26710E-14 -3.09624E-14 -3.77524E-14 -4.04026E-14 -3.66638E-14 + -2.58044E-14 -9.31589E-15 9.31589E-15 2.58044E-14 3.66638E-14 4.04026E-14 + 3.77524E-14 3.09624E-14 2.26710E-14 1.49642E-14 8.95766E-15 4.88235E-15 + 2.42981E-15 1.10639E-15 4.61629E-16 1.76701E-16 6.21073E-17 2.00596E-17 + 5.95718E-18 1.62745E-18 4.09168E-19 9.47050E-20 + -7.24421E-19 -3.12982E-18 -1.24487E-17 -4.55678E-17 -1.53441E-16 -4.75073E-16 + -1.35163E-15 -3.53111E-15 -8.46302E-15 -1.85862E-14 -3.73463E-14 -6.85192E-14 + -1.14465E-13 -1.73416E-13 -2.36838E-13 -2.88777E-13 -3.09049E-13 -2.80450E-13 + -1.97384E-13 -7.12594E-14 7.12594E-14 1.97384E-13 2.80450E-13 3.09049E-13 + 2.88777E-13 2.36838E-13 1.73416E-13 1.14465E-13 6.85192E-14 3.73463E-14 + 1.85862E-14 8.46302E-15 3.53111E-15 1.35163E-15 4.75073E-16 1.53441E-16 + 4.55678E-17 1.24487E-17 3.12982E-18 7.24421E-19 + -4.87838E-18 -2.10768E-17 -8.38321E-17 -3.06862E-16 -1.03330E-15 -3.19923E-15 + -9.10210E-15 -2.37791E-14 -5.69915E-14 -1.25163E-13 -2.51497E-13 -4.61421E-13 + -7.70827E-13 -1.16782E-12 -1.59491E-12 -1.94468E-12 -2.08119E-12 -1.88860E-12 + -1.32922E-12 -4.79874E-13 4.79874E-13 1.32922E-12 1.88860E-12 2.08119E-12 + 1.94468E-12 1.59491E-12 1.16782E-12 7.70827E-13 4.61421E-13 2.51497E-13 + 1.25163E-13 5.69915E-14 2.37791E-14 9.10210E-15 3.19923E-15 1.03330E-15 + 3.06862E-16 8.38321E-17 2.10768E-17 4.87838E-18 + -2.89226E-17 -1.24958E-16 -4.97017E-16 -1.81930E-15 -6.12614E-15 -1.89673E-14 + -5.39638E-14 -1.40980E-13 -3.37887E-13 -7.42057E-13 -1.49105E-12 -2.73564E-12 + -4.57002E-12 -6.92366E-12 -9.45579E-12 -1.15295E-11 -1.23388E-11 -1.11970E-11 + -7.88056E-12 -2.84504E-12 2.84504E-12 7.88056E-12 1.11970E-11 1.23388E-11 + 1.15295E-11 9.45579E-12 6.92366E-12 4.57002E-12 2.73564E-12 1.49105E-12 + 7.42057E-13 3.37887E-13 1.40980E-13 5.39638E-14 1.89673E-14 6.12614E-15 + 1.81930E-15 4.97017E-16 1.24958E-16 2.89226E-17 + -1.50970E-16 -6.52257E-16 -2.59432E-15 -9.49636E-15 -3.19772E-14 -9.90055E-14 + -2.81680E-13 -7.35886E-13 -1.76370E-12 -3.87338E-12 -7.78298E-12 -1.42794E-11 + -2.38545E-11 -3.61400E-11 -4.93572E-11 -6.01813E-11 -6.44059E-11 -5.84460E-11 + -4.11349E-11 -1.48505E-11 1.48505E-11 4.11349E-11 5.84460E-11 6.44059E-11 + 6.01813E-11 4.93572E-11 3.61400E-11 2.38545E-11 1.42794E-11 7.78298E-12 + 3.87338E-12 1.76370E-12 7.35886E-13 2.81680E-13 9.90055E-14 3.19772E-14 + 9.49636E-15 2.59432E-15 6.52257E-16 1.50970E-16 + -6.93842E-16 -2.99771E-15 -1.19233E-14 -4.36444E-14 -1.46964E-13 -4.55020E-13 + -1.29457E-12 -3.38206E-12 -8.10579E-12 -1.78017E-11 -3.57698E-11 -6.56269E-11 + -1.09633E-10 -1.66096E-10 -2.26841E-10 -2.76587E-10 -2.96003E-10 -2.68612E-10 + -1.89052E-10 -6.82515E-11 6.82515E-11 1.89052E-10 2.68612E-10 2.96003E-10 + 2.76587E-10 2.26841E-10 1.66096E-10 1.09633E-10 6.56269E-11 3.57698E-11 + 1.78017E-11 8.10579E-12 3.38206E-12 1.29457E-12 4.55020E-13 1.46964E-13 + 4.36444E-14 1.19233E-14 2.99771E-15 6.93842E-16 + -2.80798E-15 -1.21317E-14 -4.82534E-14 -1.76629E-13 -5.94763E-13 -1.84146E-12 + -5.23913E-12 -1.36872E-11 -3.28041E-11 -7.20433E-11 -1.44760E-10 -2.65592E-10 + -4.43685E-10 -6.72190E-10 -9.18025E-10 -1.11935E-09 -1.19792E-09 -1.08707E-09 + -7.65092E-10 -2.76213E-10 2.76213E-10 7.65092E-10 1.08707E-09 1.19792E-09 + 1.11935E-09 9.18025E-10 6.72190E-10 4.43685E-10 2.65592E-10 1.44760E-10 + 7.20433E-11 3.28041E-11 1.36872E-11 5.23913E-12 1.84146E-12 5.94763E-13 + 1.76629E-13 4.82534E-14 1.21317E-14 2.80798E-15 + -1.00083E-14 -4.32404E-14 -1.71987E-13 -6.29548E-13 -2.11988E-12 -6.56343E-12 + -1.86736E-11 -4.87845E-11 -1.16922E-10 -2.56780E-10 -5.15962E-10 -9.46635E-10 + -1.58140E-09 -2.39585E-09 -3.27207E-09 -3.98964E-09 -4.26970E-09 -3.87459E-09 + -2.72698E-09 -9.84493E-10 9.84493E-10 2.72698E-09 3.87459E-09 4.26970E-09 + 3.98964E-09 3.27207E-09 2.39585E-09 1.58140E-09 9.46635E-10 5.15962E-10 + 2.56780E-10 1.16922E-10 4.87845E-11 1.86736E-11 6.56343E-12 2.11988E-12 + 6.29548E-13 1.71987E-13 4.32404E-14 1.00083E-14 + -3.14259E-14 -1.35774E-13 -5.40035E-13 -1.97677E-12 -6.65638E-12 -2.06090E-11 + -5.86345E-11 -1.53182E-10 -3.67132E-10 -8.06284E-10 -1.62011E-09 -2.97241E-09 + -4.96557E-09 -7.52292E-09 -1.02742E-08 -1.25274E-08 -1.34068E-08 -1.21661E-08 + -8.56265E-09 -3.09128E-09 3.09128E-09 8.56265E-09 1.21661E-08 1.34068E-08 + 1.25274E-08 1.02742E-08 7.52292E-09 4.96557E-09 2.97241E-09 1.62011E-09 + 8.06284E-10 3.67132E-10 1.53182E-10 5.86345E-11 2.06090E-11 6.65638E-12 + 1.97677E-12 5.40035E-13 1.35774E-13 3.14259E-14 + -8.69717E-14 -3.75756E-13 -1.49456E-12 -5.47073E-12 -1.84216E-11 -5.70358E-11 + -1.62272E-10 -4.23934E-10 -1.01604E-09 -2.23140E-09 -4.48367E-09 -8.22620E-09 + -1.37423E-08 -2.08198E-08 -2.84341E-08 -3.46697E-08 -3.71034E-08 -3.36699E-08 + -2.36973E-08 -8.55518E-09 8.55518E-09 2.36973E-08 3.36699E-08 3.71034E-08 + 3.46697E-08 2.84341E-08 2.08198E-08 1.37423E-08 8.22620E-09 4.48367E-09 + 2.23140E-09 1.01604E-09 4.23934E-10 1.62272E-10 5.70358E-11 1.84216E-11 + 5.47073E-12 1.49456E-12 3.75756E-13 8.69717E-14 + -2.12311E-13 -9.17280E-13 -3.64844E-12 -1.33549E-11 -4.49701E-11 -1.39233E-10 + -3.96131E-10 -1.03489E-09 -2.48032E-09 -5.44720E-09 -1.09453E-08 -2.00814E-08 + -3.35471E-08 -5.08244E-08 -6.94120E-08 -8.46341E-08 -9.05752E-08 -8.21936E-08 + -5.78487E-08 -2.08845E-08 2.08845E-08 5.78487E-08 8.21936E-08 9.05752E-08 + 8.46341E-08 6.94120E-08 5.08244E-08 3.35471E-08 2.00814E-08 1.09453E-08 + 5.44720E-09 2.48032E-09 1.03489E-09 3.96131E-10 1.39233E-10 4.49701E-11 + 1.33549E-11 3.64844E-12 9.17280E-13 2.12311E-13 + -4.57761E-13 -1.97773E-12 -7.86635E-12 -2.87943E-11 -9.69592E-11 -3.00198E-10 + -8.54092E-10 -2.23131E-09 -5.34778E-09 -1.17446E-08 -2.35991E-08 -4.32972E-08 + -7.23303E-08 -1.09582E-07 -1.49658E-07 -1.82478E-07 -1.95288E-07 -1.77216E-07 + -1.24727E-07 -4.50288E-08 4.50288E-08 1.24727E-07 1.77216E-07 1.95288E-07 + 1.82478E-07 1.49658E-07 1.09582E-07 7.23303E-08 4.32972E-08 2.35991E-08 + 1.17446E-08 5.34778E-09 2.23131E-09 8.54092E-10 3.00198E-10 9.69592E-11 + 2.87943E-11 7.86635E-12 1.97773E-12 4.57761E-13 + -8.73568E-13 -3.77421E-12 -1.50117E-11 -5.49496E-11 -1.85032E-10 -5.72883E-10 + -1.62991E-09 -4.25811E-09 -1.02054E-08 -2.24128E-08 -4.50353E-08 -8.26263E-08 + -1.38031E-07 -2.09120E-07 -2.85600E-07 -3.48232E-07 -3.72677E-07 -3.38190E-07 + -2.38022E-07 -8.59306E-08 8.59306E-08 2.38022E-07 3.38190E-07 3.72677E-07 + 3.48232E-07 2.85600E-07 2.09120E-07 1.38031E-07 8.26263E-08 4.50353E-08 + 2.24128E-08 1.02054E-08 4.25811E-09 1.62991E-09 5.72883E-10 1.85032E-10 + 5.49496E-11 1.50117E-11 3.77421E-12 8.73568E-13 + -1.48056E-12 -6.39668E-12 -2.54425E-11 -9.31308E-11 -3.13600E-10 -9.70946E-10 + -2.76243E-09 -7.21683E-09 -1.72966E-08 -3.79862E-08 -7.63277E-08 -1.40038E-07 + -2.33941E-07 -3.54425E-07 -4.84046E-07 -5.90198E-07 -6.31629E-07 -5.73179E-07 + -4.03410E-07 -1.45639E-07 1.45639E-07 4.03410E-07 5.73179E-07 6.31629E-07 + 5.90198E-07 4.84046E-07 3.54425E-07 2.33941E-07 1.40038E-07 7.63277E-08 + 3.79862E-08 1.72966E-08 7.21683E-09 2.76243E-09 9.70946E-10 3.13600E-10 + 9.31308E-11 2.54425E-11 6.39668E-12 1.48056E-12 + -2.24040E-12 -9.67953E-12 -3.85000E-11 -1.40927E-10 -4.74544E-10 -1.46925E-09 + -4.18015E-09 -1.09206E-08 -2.61734E-08 -5.74812E-08 -1.15500E-07 -2.11908E-07 + -3.54003E-07 -5.36320E-07 -7.32465E-07 -8.93095E-07 -9.55789E-07 -8.67342E-07 + -6.10444E-07 -2.20382E-07 2.20382E-07 6.10444E-07 8.67342E-07 9.55789E-07 + 8.93095E-07 7.32465E-07 5.36320E-07 3.54003E-07 2.11908E-07 1.15500E-07 + 5.74812E-08 2.61734E-08 1.09206E-08 4.18015E-09 1.46925E-09 4.74544E-10 + 1.40927E-10 3.85000E-11 9.67953E-12 2.24040E-12 + -3.05068E-12 -1.31803E-11 -5.24241E-11 -1.91895E-10 -6.46170E-10 -2.00063E-09 + -5.69197E-09 -1.48702E-08 -3.56395E-08 -7.82703E-08 -1.57273E-07 -2.88548E-07 + -4.82034E-07 -7.30290E-07 -9.97373E-07 -1.21610E-06 -1.30147E-06 -1.18103E-06 + -8.31222E-07 -3.00087E-07 3.00087E-07 8.31222E-07 1.18103E-06 1.30147E-06 + 1.21610E-06 9.97373E-07 7.30290E-07 4.82034E-07 2.88548E-07 1.57273E-07 + 7.82703E-08 3.56395E-08 1.48702E-08 5.69197E-09 2.00063E-09 6.46170E-10 + 1.91895E-10 5.24241E-11 1.31803E-11 3.05068E-12 + -3.77810E-12 -1.63231E-11 -6.49244E-11 -2.37652E-10 -8.00247E-10 -2.47767E-09 + -7.04919E-09 -1.84159E-08 -4.41375E-08 -9.69335E-08 -1.94774E-07 -3.57351E-07 + -5.96973E-07 -9.04424E-07 -1.23519E-06 -1.50607E-06 -1.61179E-06 -1.46264E-06 + -1.02942E-06 -3.71642E-07 3.71642E-07 1.02942E-06 1.46264E-06 1.61179E-06 + 1.50607E-06 1.23519E-06 9.04424E-07 5.96973E-07 3.57351E-07 1.94774E-07 + 9.69335E-08 4.41375E-08 1.84159E-08 7.04919E-09 2.47767E-09 8.00247E-10 + 2.37652E-10 6.49244E-11 1.63231E-11 3.77810E-12 + -4.31022E-12 -1.86221E-11 -7.40686E-11 -2.71123E-10 -9.12956E-10 -2.82663E-09 + -8.04202E-09 -2.10097E-08 -5.03540E-08 -1.10586E-07 -2.22206E-07 -4.07681E-07 + -6.81053E-07 -1.03181E-06 -1.40916E-06 -1.71819E-06 -1.83880E-06 -1.66865E-06 + -1.17441E-06 -4.23985E-07 4.23985E-07 1.17441E-06 1.66865E-06 1.83880E-06 + 1.71819E-06 1.40916E-06 1.03181E-06 6.81053E-07 4.07681E-07 2.22206E-07 + 1.10586E-07 5.03540E-08 2.10097E-08 8.04202E-09 2.82663E-09 9.12956E-10 + 2.71123E-10 7.40686E-11 1.86221E-11 4.31022E-12 + -4.58582E-12 -1.98128E-11 -7.88046E-11 -2.88460E-10 -9.71332E-10 -3.00737E-09 + -8.55625E-09 -2.23531E-08 -5.35737E-08 -1.17657E-07 -2.36414E-07 -4.33749E-07 + -7.24600E-07 -1.09778E-06 -1.49927E-06 -1.82805E-06 -1.95638E-06 -1.77534E-06 + -1.24950E-06 -4.51096E-07 4.51096E-07 1.24950E-06 1.77534E-06 1.95638E-06 + 1.82805E-06 1.49927E-06 1.09778E-06 7.24600E-07 4.33749E-07 2.36414E-07 + 1.17657E-07 5.35737E-08 2.23531E-08 8.55625E-09 3.00737E-09 9.71332E-10 + 2.88460E-10 7.88046E-11 1.98128E-11 4.58582E-12 + -4.58582E-12 -1.98128E-11 -7.88046E-11 -2.88460E-10 -9.71332E-10 -3.00737E-09 + -8.55625E-09 -2.23531E-08 -5.35737E-08 -1.17657E-07 -2.36414E-07 -4.33749E-07 + -7.24600E-07 -1.09778E-06 -1.49927E-06 -1.82805E-06 -1.95638E-06 -1.77534E-06 + -1.24950E-06 -4.51096E-07 4.51096E-07 1.24950E-06 1.77534E-06 1.95638E-06 + 1.82805E-06 1.49927E-06 1.09778E-06 7.24600E-07 4.33749E-07 2.36414E-07 + 1.17657E-07 5.35737E-08 2.23531E-08 8.55625E-09 3.00737E-09 9.71332E-10 + 2.88460E-10 7.88046E-11 1.98128E-11 4.58582E-12 + -4.31022E-12 -1.86221E-11 -7.40686E-11 -2.71123E-10 -9.12956E-10 -2.82663E-09 + -8.04202E-09 -2.10097E-08 -5.03540E-08 -1.10586E-07 -2.22206E-07 -4.07681E-07 + -6.81053E-07 -1.03181E-06 -1.40916E-06 -1.71819E-06 -1.83880E-06 -1.66865E-06 + -1.17441E-06 -4.23985E-07 4.23985E-07 1.17441E-06 1.66865E-06 1.83880E-06 + 1.71819E-06 1.40916E-06 1.03181E-06 6.81053E-07 4.07681E-07 2.22206E-07 + 1.10586E-07 5.03540E-08 2.10097E-08 8.04202E-09 2.82663E-09 9.12956E-10 + 2.71123E-10 7.40686E-11 1.86221E-11 4.31022E-12 + -3.77810E-12 -1.63231E-11 -6.49244E-11 -2.37652E-10 -8.00247E-10 -2.47767E-09 + -7.04919E-09 -1.84159E-08 -4.41375E-08 -9.69335E-08 -1.94774E-07 -3.57351E-07 + -5.96973E-07 -9.04424E-07 -1.23519E-06 -1.50607E-06 -1.61179E-06 -1.46264E-06 + -1.02942E-06 -3.71642E-07 3.71642E-07 1.02942E-06 1.46264E-06 1.61179E-06 + 1.50607E-06 1.23519E-06 9.04424E-07 5.96973E-07 3.57351E-07 1.94774E-07 + 9.69335E-08 4.41375E-08 1.84159E-08 7.04919E-09 2.47767E-09 8.00247E-10 + 2.37652E-10 6.49244E-11 1.63231E-11 3.77810E-12 + -3.05068E-12 -1.31803E-11 -5.24241E-11 -1.91895E-10 -6.46170E-10 -2.00063E-09 + -5.69197E-09 -1.48702E-08 -3.56395E-08 -7.82703E-08 -1.57273E-07 -2.88548E-07 + -4.82034E-07 -7.30290E-07 -9.97373E-07 -1.21610E-06 -1.30147E-06 -1.18103E-06 + -8.31222E-07 -3.00087E-07 3.00087E-07 8.31222E-07 1.18103E-06 1.30147E-06 + 1.21610E-06 9.97373E-07 7.30290E-07 4.82034E-07 2.88548E-07 1.57273E-07 + 7.82703E-08 3.56395E-08 1.48702E-08 5.69197E-09 2.00063E-09 6.46170E-10 + 1.91895E-10 5.24241E-11 1.31803E-11 3.05068E-12 + -2.24040E-12 -9.67953E-12 -3.85000E-11 -1.40927E-10 -4.74544E-10 -1.46925E-09 + -4.18015E-09 -1.09206E-08 -2.61734E-08 -5.74812E-08 -1.15500E-07 -2.11908E-07 + -3.54003E-07 -5.36320E-07 -7.32465E-07 -8.93095E-07 -9.55789E-07 -8.67342E-07 + -6.10444E-07 -2.20382E-07 2.20382E-07 6.10444E-07 8.67342E-07 9.55789E-07 + 8.93095E-07 7.32465E-07 5.36320E-07 3.54003E-07 2.11908E-07 1.15500E-07 + 5.74812E-08 2.61734E-08 1.09206E-08 4.18015E-09 1.46925E-09 4.74544E-10 + 1.40927E-10 3.85000E-11 9.67953E-12 2.24040E-12 + -1.48056E-12 -6.39668E-12 -2.54425E-11 -9.31308E-11 -3.13600E-10 -9.70946E-10 + -2.76243E-09 -7.21683E-09 -1.72966E-08 -3.79862E-08 -7.63277E-08 -1.40038E-07 + -2.33941E-07 -3.54425E-07 -4.84046E-07 -5.90198E-07 -6.31629E-07 -5.73179E-07 + -4.03410E-07 -1.45639E-07 1.45639E-07 4.03410E-07 5.73179E-07 6.31629E-07 + 5.90198E-07 4.84046E-07 3.54425E-07 2.33941E-07 1.40038E-07 7.63277E-08 + 3.79862E-08 1.72966E-08 7.21683E-09 2.76243E-09 9.70946E-10 3.13600E-10 + 9.31308E-11 2.54425E-11 6.39668E-12 1.48056E-12 + -8.73568E-13 -3.77421E-12 -1.50117E-11 -5.49496E-11 -1.85032E-10 -5.72883E-10 + -1.62991E-09 -4.25811E-09 -1.02054E-08 -2.24128E-08 -4.50353E-08 -8.26263E-08 + -1.38031E-07 -2.09120E-07 -2.85600E-07 -3.48232E-07 -3.72677E-07 -3.38190E-07 + -2.38022E-07 -8.59306E-08 8.59306E-08 2.38022E-07 3.38190E-07 3.72677E-07 + 3.48232E-07 2.85600E-07 2.09120E-07 1.38031E-07 8.26263E-08 4.50353E-08 + 2.24128E-08 1.02054E-08 4.25811E-09 1.62991E-09 5.72883E-10 1.85032E-10 + 5.49496E-11 1.50117E-11 3.77421E-12 8.73568E-13 + -4.57761E-13 -1.97773E-12 -7.86635E-12 -2.87943E-11 -9.69592E-11 -3.00198E-10 + -8.54092E-10 -2.23131E-09 -5.34778E-09 -1.17446E-08 -2.35991E-08 -4.32972E-08 + -7.23303E-08 -1.09582E-07 -1.49658E-07 -1.82478E-07 -1.95288E-07 -1.77216E-07 + -1.24727E-07 -4.50288E-08 4.50288E-08 1.24727E-07 1.77216E-07 1.95288E-07 + 1.82478E-07 1.49658E-07 1.09582E-07 7.23303E-08 4.32972E-08 2.35991E-08 + 1.17446E-08 5.34778E-09 2.23131E-09 8.54092E-10 3.00198E-10 9.69592E-11 + 2.87943E-11 7.86635E-12 1.97773E-12 4.57761E-13 + -2.12311E-13 -9.17280E-13 -3.64844E-12 -1.33549E-11 -4.49701E-11 -1.39233E-10 + -3.96131E-10 -1.03489E-09 -2.48032E-09 -5.44720E-09 -1.09453E-08 -2.00814E-08 + -3.35471E-08 -5.08244E-08 -6.94120E-08 -8.46341E-08 -9.05752E-08 -8.21936E-08 + -5.78487E-08 -2.08845E-08 2.08845E-08 5.78487E-08 8.21936E-08 9.05752E-08 + 8.46341E-08 6.94120E-08 5.08244E-08 3.35471E-08 2.00814E-08 1.09453E-08 + 5.44720E-09 2.48032E-09 1.03489E-09 3.96131E-10 1.39233E-10 4.49701E-11 + 1.33549E-11 3.64844E-12 9.17280E-13 2.12311E-13 + -8.69717E-14 -3.75756E-13 -1.49456E-12 -5.47073E-12 -1.84216E-11 -5.70358E-11 + -1.62272E-10 -4.23934E-10 -1.01604E-09 -2.23140E-09 -4.48367E-09 -8.22620E-09 + -1.37423E-08 -2.08198E-08 -2.84341E-08 -3.46697E-08 -3.71034E-08 -3.36699E-08 + -2.36973E-08 -8.55518E-09 8.55518E-09 2.36973E-08 3.36699E-08 3.71034E-08 + 3.46697E-08 2.84341E-08 2.08198E-08 1.37423E-08 8.22620E-09 4.48367E-09 + 2.23140E-09 1.01604E-09 4.23934E-10 1.62272E-10 5.70358E-11 1.84216E-11 + 5.47073E-12 1.49456E-12 3.75756E-13 8.69717E-14 + -3.14259E-14 -1.35774E-13 -5.40035E-13 -1.97677E-12 -6.65638E-12 -2.06090E-11 + -5.86345E-11 -1.53182E-10 -3.67132E-10 -8.06284E-10 -1.62011E-09 -2.97241E-09 + -4.96557E-09 -7.52292E-09 -1.02742E-08 -1.25274E-08 -1.34068E-08 -1.21661E-08 + -8.56265E-09 -3.09128E-09 3.09128E-09 8.56265E-09 1.21661E-08 1.34068E-08 + 1.25274E-08 1.02742E-08 7.52292E-09 4.96557E-09 2.97241E-09 1.62011E-09 + 8.06284E-10 3.67132E-10 1.53182E-10 5.86345E-11 2.06090E-11 6.65638E-12 + 1.97677E-12 5.40035E-13 1.35774E-13 3.14259E-14 + -1.00083E-14 -4.32404E-14 -1.71987E-13 -6.29548E-13 -2.11988E-12 -6.56343E-12 + -1.86736E-11 -4.87845E-11 -1.16922E-10 -2.56780E-10 -5.15962E-10 -9.46635E-10 + -1.58140E-09 -2.39585E-09 -3.27207E-09 -3.98964E-09 -4.26970E-09 -3.87459E-09 + -2.72698E-09 -9.84493E-10 9.84493E-10 2.72698E-09 3.87459E-09 4.26970E-09 + 3.98964E-09 3.27207E-09 2.39585E-09 1.58140E-09 9.46635E-10 5.15962E-10 + 2.56780E-10 1.16922E-10 4.87845E-11 1.86736E-11 6.56343E-12 2.11988E-12 + 6.29548E-13 1.71987E-13 4.32404E-14 1.00083E-14 + -2.80798E-15 -1.21317E-14 -4.82534E-14 -1.76629E-13 -5.94763E-13 -1.84146E-12 + -5.23913E-12 -1.36872E-11 -3.28041E-11 -7.20433E-11 -1.44760E-10 -2.65592E-10 + -4.43685E-10 -6.72190E-10 -9.18025E-10 -1.11935E-09 -1.19792E-09 -1.08707E-09 + -7.65092E-10 -2.76213E-10 2.76213E-10 7.65092E-10 1.08707E-09 1.19792E-09 + 1.11935E-09 9.18025E-10 6.72190E-10 4.43685E-10 2.65592E-10 1.44760E-10 + 7.20433E-11 3.28041E-11 1.36872E-11 5.23913E-12 1.84146E-12 5.94763E-13 + 1.76629E-13 4.82534E-14 1.21317E-14 2.80798E-15 + -6.93842E-16 -2.99771E-15 -1.19233E-14 -4.36444E-14 -1.46964E-13 -4.55020E-13 + -1.29457E-12 -3.38206E-12 -8.10579E-12 -1.78017E-11 -3.57698E-11 -6.56269E-11 + -1.09633E-10 -1.66096E-10 -2.26841E-10 -2.76587E-10 -2.96003E-10 -2.68612E-10 + -1.89052E-10 -6.82515E-11 6.82515E-11 1.89052E-10 2.68612E-10 2.96003E-10 + 2.76587E-10 2.26841E-10 1.66096E-10 1.09633E-10 6.56269E-11 3.57698E-11 + 1.78017E-11 8.10579E-12 3.38206E-12 1.29457E-12 4.55020E-13 1.46964E-13 + 4.36444E-14 1.19233E-14 2.99771E-15 6.93842E-16 + -1.50970E-16 -6.52257E-16 -2.59432E-15 -9.49636E-15 -3.19772E-14 -9.90055E-14 + -2.81680E-13 -7.35886E-13 -1.76370E-12 -3.87338E-12 -7.78298E-12 -1.42794E-11 + -2.38545E-11 -3.61400E-11 -4.93572E-11 -6.01813E-11 -6.44059E-11 -5.84460E-11 + -4.11349E-11 -1.48505E-11 1.48505E-11 4.11349E-11 5.84460E-11 6.44059E-11 + 6.01813E-11 4.93572E-11 3.61400E-11 2.38545E-11 1.42794E-11 7.78298E-12 + 3.87338E-12 1.76370E-12 7.35886E-13 2.81680E-13 9.90055E-14 3.19772E-14 + 9.49636E-15 2.59432E-15 6.52257E-16 1.50970E-16 + -2.89226E-17 -1.24958E-16 -4.97017E-16 -1.81930E-15 -6.12614E-15 -1.89673E-14 + -5.39638E-14 -1.40980E-13 -3.37887E-13 -7.42057E-13 -1.49105E-12 -2.73564E-12 + -4.57002E-12 -6.92366E-12 -9.45579E-12 -1.15295E-11 -1.23388E-11 -1.11970E-11 + -7.88056E-12 -2.84504E-12 2.84504E-12 7.88056E-12 1.11970E-11 1.23388E-11 + 1.15295E-11 9.45579E-12 6.92366E-12 4.57002E-12 2.73564E-12 1.49105E-12 + 7.42057E-13 3.37887E-13 1.40980E-13 5.39638E-14 1.89673E-14 6.12614E-15 + 1.81930E-15 4.97017E-16 1.24958E-16 2.89226E-17 + -4.87838E-18 -2.10768E-17 -8.38321E-17 -3.06862E-16 -1.03330E-15 -3.19923E-15 + -9.10210E-15 -2.37791E-14 -5.69915E-14 -1.25163E-13 -2.51497E-13 -4.61421E-13 + -7.70827E-13 -1.16782E-12 -1.59491E-12 -1.94468E-12 -2.08119E-12 -1.88860E-12 + -1.32922E-12 -4.79874E-13 4.79874E-13 1.32922E-12 1.88860E-12 2.08119E-12 + 1.94468E-12 1.59491E-12 1.16782E-12 7.70827E-13 4.61421E-13 2.51497E-13 + 1.25163E-13 5.69915E-14 2.37791E-14 9.10210E-15 3.19923E-15 1.03330E-15 + 3.06862E-16 8.38321E-17 2.10768E-17 4.87838E-18 + -7.24421E-19 -3.12982E-18 -1.24487E-17 -4.55678E-17 -1.53441E-16 -4.75073E-16 + -1.35163E-15 -3.53111E-15 -8.46302E-15 -1.85862E-14 -3.73463E-14 -6.85192E-14 + -1.14465E-13 -1.73416E-13 -2.36838E-13 -2.88777E-13 -3.09049E-13 -2.80450E-13 + -1.97384E-13 -7.12594E-14 7.12594E-14 1.97384E-13 2.80450E-13 3.09049E-13 + 2.88777E-13 2.36838E-13 1.73416E-13 1.14465E-13 6.85192E-14 3.73463E-14 + 1.85862E-14 8.46302E-15 3.53111E-15 1.35163E-15 4.75073E-16 1.53441E-16 + 4.55678E-17 1.24487E-17 3.12982E-18 7.24421E-19 + -9.47050E-20 -4.09168E-19 -1.62745E-18 -5.95718E-18 -2.00596E-17 -6.21073E-17 + -1.76701E-16 -4.61629E-16 -1.10639E-15 -2.42981E-15 -4.88235E-15 -8.95766E-15 + -1.49642E-14 -2.26710E-14 -3.09624E-14 -3.77524E-14 -4.04026E-14 -3.66638E-14 + -2.58044E-14 -9.31589E-15 9.31589E-15 2.58044E-14 3.66638E-14 4.04026E-14 + 3.77524E-14 3.09624E-14 2.26710E-14 1.49642E-14 8.95766E-15 4.88235E-15 + 2.42981E-15 1.10639E-15 4.61629E-16 1.76701E-16 6.21073E-17 2.00596E-17 + 5.95718E-18 1.62745E-18 4.09168E-19 9.47050E-20 + -1.08998E-20 -4.70918E-20 -1.87306E-19 -6.85621E-19 -2.30870E-18 -7.14802E-18 + -2.03368E-17 -5.31297E-17 -1.27336E-16 -2.79651E-16 -5.61918E-16 -1.03095E-15 + -1.72226E-15 -2.60925E-15 -3.56351E-15 -4.34499E-15 -4.65000E-15 -4.21970E-15 + -2.96987E-15 -1.07218E-15 1.07218E-15 2.96987E-15 4.21970E-15 4.65000E-15 + 4.34499E-15 3.56351E-15 2.60925E-15 1.72226E-15 1.03095E-15 5.61918E-16 + 2.79651E-16 1.27336E-16 5.31297E-17 2.03368E-17 7.14802E-18 2.30870E-18 + 6.85621E-19 1.87306E-19 4.70918E-20 1.08998E-20 + -6.02489E-20 -2.60302E-19 -1.03534E-18 -3.78980E-18 -1.27614E-17 -3.95110E-17 + -1.12413E-16 -2.93677E-16 -7.03856E-16 -1.54579E-15 -3.10603E-15 -5.69863E-15 + -9.51985E-15 -1.44227E-14 -1.96975E-14 -2.40171E-14 -2.57031E-14 -2.33246E-14 + -1.64161E-14 -5.92653E-15 5.92653E-15 1.64161E-14 2.33246E-14 2.57031E-14 + 2.40171E-14 1.96975E-14 1.44227E-14 9.51985E-15 5.69863E-15 3.10603E-15 + 1.54579E-15 7.03856E-16 2.93677E-16 1.12413E-16 3.95110E-17 1.27614E-17 + 3.78980E-18 1.03534E-18 2.60302E-19 6.02489E-20 + -5.23487E-19 -2.26170E-18 -8.99580E-18 -3.29286E-17 -1.10881E-16 -3.43301E-16 + -9.76723E-16 -2.55168E-15 -6.11561E-15 -1.34309E-14 -2.69874E-14 -4.95139E-14 + -8.27155E-14 -1.25315E-13 -1.71146E-13 -2.08678E-13 -2.23327E-13 -2.02661E-13 + -1.42635E-13 -5.14940E-14 5.14940E-14 1.42635E-13 2.02661E-13 2.23327E-13 + 2.08678E-13 1.71146E-13 1.25315E-13 8.27155E-14 4.95139E-14 2.69874E-14 + 1.34309E-14 6.11561E-15 2.55168E-15 9.76723E-16 3.43301E-16 1.10881E-16 + 3.29286E-17 8.99580E-18 2.26170E-18 5.23487E-19 + -4.00427E-18 -1.73002E-17 -6.88110E-17 -2.51878E-16 -8.48152E-16 -2.62599E-15 + -7.47118E-15 -1.95184E-14 -4.67798E-14 -1.02736E-13 -2.06433E-13 -3.78743E-13 + -6.32710E-13 -9.58566E-13 -1.30913E-12 -1.59623E-12 -1.70828E-12 -1.55020E-12 + -1.09105E-12 -3.93890E-13 3.93890E-13 1.09105E-12 1.55020E-12 1.70828E-12 + 1.59623E-12 1.30913E-12 9.58566E-13 6.32710E-13 3.78743E-13 2.06433E-13 + 1.02736E-13 4.67798E-14 1.95184E-14 7.47118E-15 2.62599E-15 8.48152E-16 + 2.51878E-16 6.88110E-17 1.73002E-17 4.00427E-18 + -2.69655E-17 -1.16503E-16 -4.63386E-16 -1.69619E-15 -5.71161E-15 -1.76839E-14 + -5.03123E-14 -1.31440E-13 -3.15023E-13 -6.91844E-13 -1.39016E-12 -2.55052E-12 + -4.26078E-12 -6.45516E-12 -8.81595E-12 -1.07493E-11 -1.15039E-11 -1.04393E-11 + -7.34731E-12 -2.65252E-12 2.65252E-12 7.34731E-12 1.04393E-11 1.15039E-11 + 1.07493E-11 8.81595E-12 6.45516E-12 4.26078E-12 2.55052E-12 1.39016E-12 + 6.91844E-13 3.15023E-13 1.31440E-13 5.03123E-14 1.76839E-14 5.71161E-15 + 1.69619E-15 4.63386E-16 1.16503E-16 2.69655E-17 + -1.59871E-16 -6.90714E-16 -2.74729E-15 -1.00563E-14 -3.38625E-14 -1.04843E-13 + -2.98288E-13 -7.79273E-13 -1.86769E-12 -4.10175E-12 -8.24187E-12 -1.51214E-11 + -2.52610E-11 -3.82708E-11 -5.22673E-11 -6.37296E-11 -6.82033E-11 -6.18919E-11 + -4.35602E-11 -1.57261E-11 1.57261E-11 4.35602E-11 6.18919E-11 6.82033E-11 + 6.37296E-11 5.22673E-11 3.82708E-11 2.52610E-11 1.51214E-11 8.24187E-12 + 4.10175E-12 1.86769E-12 7.79273E-13 2.98288E-13 1.04843E-13 3.38625E-14 + 1.00563E-14 2.74729E-15 6.90714E-16 1.59871E-16 + -8.34492E-16 -3.60538E-15 -1.43402E-14 -5.24916E-14 -1.76755E-13 -5.47257E-13 + -1.55700E-12 -4.06764E-12 -9.74893E-12 -2.14103E-11 -4.30208E-11 -7.89303E-11 + -1.31857E-10 -1.99766E-10 -2.72824E-10 -3.32655E-10 -3.56007E-10 -3.23063E-10 + -2.27375E-10 -8.20868E-11 8.20868E-11 2.27375E-10 3.23063E-10 3.56007E-10 + 3.32655E-10 2.72824E-10 1.99766E-10 1.31857E-10 7.89303E-11 4.30208E-11 + 2.14103E-11 9.74893E-12 4.06764E-12 1.55700E-12 5.47257E-13 1.76755E-13 + 5.24916E-14 1.43402E-14 3.60538E-15 8.34492E-16 + -3.83525E-15 -1.65700E-14 -6.59064E-14 -2.41246E-13 -8.12350E-13 -2.51514E-12 + -7.15581E-12 -1.86945E-11 -4.48051E-11 -9.83996E-11 -1.97719E-10 -3.62756E-10 + -6.06002E-10 -9.18104E-10 -1.25387E-09 -1.52885E-09 -1.63617E-09 -1.48477E-09 + -1.04499E-09 -3.77263E-10 3.77263E-10 1.04499E-09 1.48477E-09 1.63617E-09 + 1.52885E-09 1.25387E-09 9.18104E-10 6.06002E-10 3.62756E-10 1.97719E-10 + 9.83996E-11 4.48051E-11 1.86945E-11 7.15581E-12 2.51514E-12 8.12350E-13 + 2.41246E-13 6.59064E-14 1.65700E-14 3.83525E-15 + -1.55212E-14 -6.70586E-14 -2.66723E-13 -9.76323E-13 -3.28758E-12 -1.01788E-11 + -2.89595E-11 -7.56565E-11 -1.81326E-10 -3.98223E-10 -8.00170E-10 -1.46807E-09 + -2.45249E-09 -3.71556E-09 -5.07443E-09 -6.18725E-09 -6.62158E-09 -6.00884E-09 + -4.22908E-09 -1.52678E-09 1.52678E-09 4.22908E-09 6.00884E-09 6.62158E-09 + 6.18725E-09 5.07443E-09 3.71556E-09 2.45249E-09 1.46807E-09 8.00170E-10 + 3.98223E-10 1.81326E-10 7.56565E-11 2.89595E-11 1.01788E-11 3.28758E-12 + 9.76323E-13 2.66723E-13 6.70586E-14 1.55212E-14 + -5.53215E-14 -2.39014E-13 -9.50667E-13 -3.47986E-12 -1.17177E-11 -3.62797E-11 + -1.03219E-10 -2.69659E-10 -6.46291E-10 -1.41936E-09 -2.85200E-09 -5.23257E-09 + -8.74128E-09 -1.32432E-08 -1.80865E-08 -2.20529E-08 -2.36010E-08 -2.14170E-08 + -1.50735E-08 -5.44183E-09 5.44183E-09 1.50735E-08 2.14170E-08 2.36010E-08 + 2.20529E-08 1.80865E-08 1.32432E-08 8.74128E-09 5.23257E-09 2.85200E-09 + 1.41936E-09 6.46291E-10 2.69659E-10 1.03219E-10 3.62797E-11 1.17177E-11 + 3.47986E-12 9.50667E-13 2.39014E-13 5.53215E-14 + -1.73708E-13 -7.50497E-13 -2.98507E-12 -1.09267E-11 -3.67934E-11 -1.13917E-10 + -3.24105E-10 -8.46722E-10 -2.02934E-09 -4.45677E-09 -8.95522E-09 -1.64301E-08 + -2.74474E-08 -4.15833E-08 -5.67912E-08 -6.92456E-08 -7.41065E-08 -6.72488E-08 + -4.73304E-08 -1.70872E-08 1.70872E-08 4.73304E-08 6.72488E-08 7.41065E-08 + 6.92456E-08 5.67912E-08 4.15833E-08 2.74474E-08 1.64301E-08 8.95522E-09 + 4.45677E-09 2.02934E-09 8.46722E-10 3.24105E-10 1.13917E-10 3.67934E-11 + 1.09267E-11 2.98507E-12 7.50497E-13 1.73708E-13 + -4.80740E-13 -2.07701E-12 -8.26123E-12 -3.02397E-11 -1.01826E-10 -3.15268E-10 + -8.96966E-10 -2.34332E-09 -5.61623E-09 -1.23342E-08 -2.47837E-08 -4.54707E-08 + -7.59611E-08 -1.15082E-07 -1.57171E-07 -1.91638E-07 -2.05091E-07 -1.86112E-07 + -1.30988E-07 -4.72891E-08 4.72891E-08 1.30988E-07 1.86112E-07 2.05091E-07 + 1.91638E-07 1.57171E-07 1.15082E-07 7.59611E-08 4.54707E-08 2.47837E-08 + 1.23342E-08 5.61623E-09 2.34332E-09 8.96966E-10 3.15268E-10 1.01826E-10 + 3.02397E-11 8.26123E-12 2.07701E-12 4.80740E-13 + -1.17356E-12 -5.07031E-12 -2.01669E-11 -7.38199E-11 -2.48574E-10 -7.69618E-10 + -2.18963E-09 -5.72040E-09 -1.37101E-08 -3.01097E-08 -6.05009E-08 -1.11001E-07 + -1.85433E-07 -2.80934E-07 -3.83678E-07 -4.67819E-07 -5.00659E-07 -4.54329E-07 + -3.19761E-07 -1.15440E-07 1.15440E-07 3.19761E-07 4.54329E-07 5.00659E-07 + 4.67819E-07 3.83678E-07 2.80934E-07 1.85433E-07 1.11001E-07 6.05009E-08 + 3.01097E-08 1.37101E-08 5.72040E-09 2.18963E-09 7.69618E-10 2.48574E-10 + 7.38199E-11 2.01669E-11 5.07031E-12 1.17356E-12 + -2.53030E-12 -1.09320E-11 -4.34816E-11 -1.59162E-10 -5.35947E-10 -1.65936E-09 + -4.72103E-09 -1.23337E-08 -2.95601E-08 -6.49189E-08 -1.30445E-07 -2.39328E-07 + -3.99809E-07 -6.05717E-07 -8.27242E-07 -1.00866E-06 -1.07946E-06 -9.79571E-07 + -6.89432E-07 -2.48899E-07 2.48899E-07 6.89432E-07 9.79571E-07 1.07946E-06 + 1.00866E-06 8.27242E-07 6.05717E-07 3.99809E-07 2.39328E-07 1.30445E-07 + 6.49189E-08 2.95601E-08 1.23337E-08 4.72103E-09 1.65936E-09 5.35947E-10 + 1.59162E-10 4.34816E-11 1.09320E-11 2.53030E-12 + -4.82869E-12 -2.08621E-11 -8.29781E-11 -3.03736E-10 -1.02277E-09 -3.16664E-09 + -9.00938E-09 -2.35369E-08 -5.64110E-08 -1.23888E-07 -2.48935E-07 -4.56721E-07 + -7.62975E-07 -1.15592E-06 -1.57867E-06 -1.92487E-06 -2.05999E-06 -1.86936E-06 + -1.31568E-06 -4.74986E-07 4.74986E-07 1.31568E-06 1.86936E-06 2.05999E-06 + 1.92487E-06 1.57867E-06 1.15592E-06 7.62975E-07 4.56721E-07 2.48935E-07 + 1.23888E-07 5.64110E-08 2.35369E-08 9.00938E-09 3.16664E-09 1.02277E-09 + 3.03736E-10 8.29781E-11 2.08621E-11 4.82869E-12 + -8.18386E-12 -3.53579E-11 -1.40635E-10 -5.14785E-10 -1.73344E-09 -5.36695E-09 + -1.52695E-08 -3.98914E-08 -9.56077E-08 -2.09971E-07 -4.21905E-07 -7.74069E-07 + -1.29312E-06 -1.95910E-06 -2.67559E-06 -3.26235E-06 -3.49136E-06 -3.16828E-06 + -2.22987E-06 -8.05025E-07 8.05025E-07 2.22987E-06 3.16828E-06 3.49136E-06 + 3.26235E-06 2.67559E-06 1.95910E-06 1.29312E-06 7.74069E-07 4.21905E-07 + 2.09971E-07 9.56077E-08 3.98914E-08 1.52695E-08 5.36695E-09 1.73344E-09 + 5.14785E-10 1.40635E-10 3.53579E-11 8.18386E-12 + -1.23839E-11 -5.35041E-11 -2.12810E-10 -7.78979E-10 -2.62306E-09 -8.12134E-09 + -2.31060E-08 -6.03641E-08 -1.44675E-07 -3.17730E-07 -6.38432E-07 -1.17133E-06 + -1.95677E-06 -2.96454E-06 -4.04873E-06 -4.93662E-06 -5.28317E-06 -4.79427E-06 + -3.37426E-06 -1.21817E-06 1.21817E-06 3.37426E-06 4.79427E-06 5.28317E-06 + 4.93662E-06 4.04873E-06 2.96454E-06 1.95677E-06 1.17133E-06 6.38432E-07 + 3.17730E-07 1.44675E-07 6.03641E-08 2.31060E-08 8.12134E-09 2.62306E-09 + 7.78979E-10 2.12810E-10 5.35041E-11 1.23839E-11 + -1.68628E-11 -7.28548E-11 -2.89777E-10 -1.06071E-09 -3.57174E-09 -1.10586E-08 + -3.14626E-08 -8.21958E-08 -1.96999E-07 -4.32643E-07 -8.69332E-07 -1.59496E-06 + -2.66447E-06 -4.03671E-06 -5.51303E-06 -6.72204E-06 -7.19391E-06 -6.52821E-06 + -4.59462E-06 -1.65875E-06 1.65875E-06 4.59462E-06 6.52821E-06 7.19391E-06 + 6.72204E-06 5.51303E-06 4.03671E-06 2.66447E-06 1.59496E-06 8.69332E-07 + 4.32643E-07 1.96999E-07 8.21958E-08 3.14626E-08 1.10586E-08 3.57174E-09 + 1.06071E-09 2.89777E-10 7.28548E-11 1.68628E-11 + -2.08836E-11 -9.02266E-11 -3.58873E-10 -1.31363E-09 -4.42340E-09 -1.36954E-08 + -3.89647E-08 -1.01795E-07 -2.43972E-07 -5.35804E-07 -1.07662E-06 -1.97527E-06 + -3.29980E-06 -4.99925E-06 -6.82758E-06 -8.32488E-06 -8.90927E-06 -8.08483E-06 + -5.69018E-06 -2.05427E-06 2.05427E-06 5.69018E-06 8.08483E-06 8.90927E-06 + 8.32488E-06 6.82758E-06 4.99925E-06 3.29980E-06 1.97527E-06 1.07662E-06 + 5.35804E-07 2.43972E-07 1.01795E-07 3.89647E-08 1.36954E-08 4.42340E-09 + 1.31363E-09 3.58873E-10 9.02266E-11 2.08836E-11 + -2.38249E-11 -1.02934E-10 -4.09417E-10 -1.49865E-09 -5.04641E-09 -1.56243E-08 + -4.44527E-08 -1.16132E-07 -2.78334E-07 -6.11269E-07 -1.22825E-06 -2.25348E-06 + -3.76455E-06 -5.70336E-06 -7.78920E-06 -9.49738E-06 -1.01641E-05 -9.22352E-06 + -6.49161E-06 -2.34360E-06 2.34360E-06 6.49161E-06 9.22352E-06 1.01641E-05 + 9.49738E-06 7.78920E-06 5.70336E-06 3.76455E-06 2.25348E-06 1.22825E-06 + 6.11269E-07 2.78334E-07 1.16132E-07 4.44527E-08 1.56243E-08 5.04641E-09 + 1.49865E-09 4.09417E-10 1.02934E-10 2.38249E-11 + -2.53484E-11 -1.09516E-10 -4.35596E-10 -1.59447E-09 -5.36908E-09 -1.66234E-08 + -4.72950E-08 -1.23558E-07 -2.96131E-07 -6.50354E-07 -1.30679E-06 -2.39757E-06 + -4.00526E-06 -6.06804E-06 -8.28726E-06 -1.01047E-05 -1.08140E-05 -9.81329E-06 + -6.90669E-06 -2.49345E-06 2.49345E-06 6.90669E-06 9.81329E-06 1.08140E-05 + 1.01047E-05 8.28726E-06 6.06804E-06 4.00526E-06 2.39757E-06 1.30679E-06 + 6.50354E-07 2.96131E-07 1.23558E-07 4.72950E-08 1.66234E-08 5.36908E-09 + 1.59447E-09 4.35596E-10 1.09516E-10 2.53484E-11 + -2.53484E-11 -1.09516E-10 -4.35596E-10 -1.59447E-09 -5.36908E-09 -1.66234E-08 + -4.72950E-08 -1.23558E-07 -2.96131E-07 -6.50354E-07 -1.30679E-06 -2.39757E-06 + -4.00526E-06 -6.06804E-06 -8.28726E-06 -1.01047E-05 -1.08140E-05 -9.81329E-06 + -6.90669E-06 -2.49345E-06 2.49345E-06 6.90669E-06 9.81329E-06 1.08140E-05 + 1.01047E-05 8.28726E-06 6.06804E-06 4.00526E-06 2.39757E-06 1.30679E-06 + 6.50354E-07 2.96131E-07 1.23558E-07 4.72950E-08 1.66234E-08 5.36908E-09 + 1.59447E-09 4.35596E-10 1.09516E-10 2.53484E-11 + -2.38249E-11 -1.02934E-10 -4.09417E-10 -1.49865E-09 -5.04641E-09 -1.56243E-08 + -4.44527E-08 -1.16132E-07 -2.78334E-07 -6.11269E-07 -1.22825E-06 -2.25348E-06 + -3.76455E-06 -5.70336E-06 -7.78920E-06 -9.49738E-06 -1.01641E-05 -9.22352E-06 + -6.49161E-06 -2.34360E-06 2.34360E-06 6.49161E-06 9.22352E-06 1.01641E-05 + 9.49738E-06 7.78920E-06 5.70336E-06 3.76455E-06 2.25348E-06 1.22825E-06 + 6.11269E-07 2.78334E-07 1.16132E-07 4.44527E-08 1.56243E-08 5.04641E-09 + 1.49865E-09 4.09417E-10 1.02934E-10 2.38249E-11 + -2.08836E-11 -9.02266E-11 -3.58873E-10 -1.31363E-09 -4.42340E-09 -1.36954E-08 + -3.89647E-08 -1.01795E-07 -2.43972E-07 -5.35804E-07 -1.07662E-06 -1.97527E-06 + -3.29980E-06 -4.99925E-06 -6.82758E-06 -8.32488E-06 -8.90927E-06 -8.08483E-06 + -5.69018E-06 -2.05427E-06 2.05427E-06 5.69018E-06 8.08483E-06 8.90927E-06 + 8.32488E-06 6.82758E-06 4.99925E-06 3.29980E-06 1.97527E-06 1.07662E-06 + 5.35804E-07 2.43972E-07 1.01795E-07 3.89647E-08 1.36954E-08 4.42340E-09 + 1.31363E-09 3.58873E-10 9.02266E-11 2.08836E-11 + -1.68628E-11 -7.28548E-11 -2.89777E-10 -1.06071E-09 -3.57174E-09 -1.10586E-08 + -3.14626E-08 -8.21958E-08 -1.96999E-07 -4.32643E-07 -8.69332E-07 -1.59496E-06 + -2.66447E-06 -4.03671E-06 -5.51303E-06 -6.72204E-06 -7.19391E-06 -6.52821E-06 + -4.59462E-06 -1.65875E-06 1.65875E-06 4.59462E-06 6.52821E-06 7.19391E-06 + 6.72204E-06 5.51303E-06 4.03671E-06 2.66447E-06 1.59496E-06 8.69332E-07 + 4.32643E-07 1.96999E-07 8.21958E-08 3.14626E-08 1.10586E-08 3.57174E-09 + 1.06071E-09 2.89777E-10 7.28548E-11 1.68628E-11 + -1.23839E-11 -5.35041E-11 -2.12810E-10 -7.78979E-10 -2.62306E-09 -8.12134E-09 + -2.31060E-08 -6.03641E-08 -1.44675E-07 -3.17730E-07 -6.38432E-07 -1.17133E-06 + -1.95677E-06 -2.96454E-06 -4.04873E-06 -4.93662E-06 -5.28317E-06 -4.79427E-06 + -3.37426E-06 -1.21817E-06 1.21817E-06 3.37426E-06 4.79427E-06 5.28317E-06 + 4.93662E-06 4.04873E-06 2.96454E-06 1.95677E-06 1.17133E-06 6.38432E-07 + 3.17730E-07 1.44675E-07 6.03641E-08 2.31060E-08 8.12134E-09 2.62306E-09 + 7.78979E-10 2.12810E-10 5.35041E-11 1.23839E-11 + -8.18386E-12 -3.53579E-11 -1.40635E-10 -5.14785E-10 -1.73344E-09 -5.36695E-09 + -1.52695E-08 -3.98914E-08 -9.56077E-08 -2.09971E-07 -4.21905E-07 -7.74069E-07 + -1.29312E-06 -1.95910E-06 -2.67559E-06 -3.26235E-06 -3.49136E-06 -3.16828E-06 + -2.22987E-06 -8.05025E-07 8.05025E-07 2.22987E-06 3.16828E-06 3.49136E-06 + 3.26235E-06 2.67559E-06 1.95910E-06 1.29312E-06 7.74069E-07 4.21905E-07 + 2.09971E-07 9.56077E-08 3.98914E-08 1.52695E-08 5.36695E-09 1.73344E-09 + 5.14785E-10 1.40635E-10 3.53579E-11 8.18386E-12 + -4.82869E-12 -2.08621E-11 -8.29781E-11 -3.03736E-10 -1.02277E-09 -3.16664E-09 + -9.00938E-09 -2.35369E-08 -5.64110E-08 -1.23888E-07 -2.48935E-07 -4.56721E-07 + -7.62975E-07 -1.15592E-06 -1.57867E-06 -1.92487E-06 -2.05999E-06 -1.86936E-06 + -1.31568E-06 -4.74986E-07 4.74986E-07 1.31568E-06 1.86936E-06 2.05999E-06 + 1.92487E-06 1.57867E-06 1.15592E-06 7.62975E-07 4.56721E-07 2.48935E-07 + 1.23888E-07 5.64110E-08 2.35369E-08 9.00938E-09 3.16664E-09 1.02277E-09 + 3.03736E-10 8.29781E-11 2.08621E-11 4.82869E-12 + -2.53030E-12 -1.09320E-11 -4.34816E-11 -1.59162E-10 -5.35947E-10 -1.65936E-09 + -4.72103E-09 -1.23337E-08 -2.95601E-08 -6.49189E-08 -1.30445E-07 -2.39328E-07 + -3.99809E-07 -6.05717E-07 -8.27242E-07 -1.00866E-06 -1.07946E-06 -9.79571E-07 + -6.89432E-07 -2.48899E-07 2.48899E-07 6.89432E-07 9.79571E-07 1.07946E-06 + 1.00866E-06 8.27242E-07 6.05717E-07 3.99809E-07 2.39328E-07 1.30445E-07 + 6.49189E-08 2.95601E-08 1.23337E-08 4.72103E-09 1.65936E-09 5.35947E-10 + 1.59162E-10 4.34816E-11 1.09320E-11 2.53030E-12 + -1.17356E-12 -5.07031E-12 -2.01669E-11 -7.38199E-11 -2.48574E-10 -7.69618E-10 + -2.18963E-09 -5.72040E-09 -1.37101E-08 -3.01097E-08 -6.05009E-08 -1.11001E-07 + -1.85433E-07 -2.80934E-07 -3.83678E-07 -4.67819E-07 -5.00659E-07 -4.54329E-07 + -3.19761E-07 -1.15440E-07 1.15440E-07 3.19761E-07 4.54329E-07 5.00659E-07 + 4.67819E-07 3.83678E-07 2.80934E-07 1.85433E-07 1.11001E-07 6.05009E-08 + 3.01097E-08 1.37101E-08 5.72040E-09 2.18963E-09 7.69618E-10 2.48574E-10 + 7.38199E-11 2.01669E-11 5.07031E-12 1.17356E-12 + -4.80740E-13 -2.07701E-12 -8.26123E-12 -3.02397E-11 -1.01826E-10 -3.15268E-10 + -8.96966E-10 -2.34332E-09 -5.61623E-09 -1.23342E-08 -2.47837E-08 -4.54707E-08 + -7.59611E-08 -1.15082E-07 -1.57171E-07 -1.91638E-07 -2.05091E-07 -1.86112E-07 + -1.30988E-07 -4.72891E-08 4.72891E-08 1.30988E-07 1.86112E-07 2.05091E-07 + 1.91638E-07 1.57171E-07 1.15082E-07 7.59611E-08 4.54707E-08 2.47837E-08 + 1.23342E-08 5.61623E-09 2.34332E-09 8.96966E-10 3.15268E-10 1.01826E-10 + 3.02397E-11 8.26123E-12 2.07701E-12 4.80740E-13 + -1.73708E-13 -7.50497E-13 -2.98507E-12 -1.09267E-11 -3.67934E-11 -1.13917E-10 + -3.24105E-10 -8.46722E-10 -2.02934E-09 -4.45677E-09 -8.95522E-09 -1.64301E-08 + -2.74474E-08 -4.15833E-08 -5.67912E-08 -6.92456E-08 -7.41065E-08 -6.72488E-08 + -4.73304E-08 -1.70872E-08 1.70872E-08 4.73304E-08 6.72488E-08 7.41065E-08 + 6.92456E-08 5.67912E-08 4.15833E-08 2.74474E-08 1.64301E-08 8.95522E-09 + 4.45677E-09 2.02934E-09 8.46722E-10 3.24105E-10 1.13917E-10 3.67934E-11 + 1.09267E-11 2.98507E-12 7.50497E-13 1.73708E-13 + -5.53215E-14 -2.39014E-13 -9.50667E-13 -3.47986E-12 -1.17177E-11 -3.62797E-11 + -1.03219E-10 -2.69659E-10 -6.46291E-10 -1.41936E-09 -2.85200E-09 -5.23257E-09 + -8.74128E-09 -1.32432E-08 -1.80865E-08 -2.20529E-08 -2.36010E-08 -2.14170E-08 + -1.50735E-08 -5.44183E-09 5.44183E-09 1.50735E-08 2.14170E-08 2.36010E-08 + 2.20529E-08 1.80865E-08 1.32432E-08 8.74128E-09 5.23257E-09 2.85200E-09 + 1.41936E-09 6.46291E-10 2.69659E-10 1.03219E-10 3.62797E-11 1.17177E-11 + 3.47986E-12 9.50667E-13 2.39014E-13 5.53215E-14 + -1.55212E-14 -6.70586E-14 -2.66723E-13 -9.76323E-13 -3.28758E-12 -1.01788E-11 + -2.89595E-11 -7.56565E-11 -1.81326E-10 -3.98223E-10 -8.00170E-10 -1.46807E-09 + -2.45249E-09 -3.71556E-09 -5.07443E-09 -6.18725E-09 -6.62158E-09 -6.00884E-09 + -4.22908E-09 -1.52678E-09 1.52678E-09 4.22908E-09 6.00884E-09 6.62158E-09 + 6.18725E-09 5.07443E-09 3.71556E-09 2.45249E-09 1.46807E-09 8.00170E-10 + 3.98223E-10 1.81326E-10 7.56565E-11 2.89595E-11 1.01788E-11 3.28758E-12 + 9.76323E-13 2.66723E-13 6.70586E-14 1.55212E-14 + -3.83525E-15 -1.65700E-14 -6.59064E-14 -2.41246E-13 -8.12350E-13 -2.51514E-12 + -7.15581E-12 -1.86945E-11 -4.48051E-11 -9.83996E-11 -1.97719E-10 -3.62756E-10 + -6.06002E-10 -9.18104E-10 -1.25387E-09 -1.52885E-09 -1.63617E-09 -1.48477E-09 + -1.04499E-09 -3.77263E-10 3.77263E-10 1.04499E-09 1.48477E-09 1.63617E-09 + 1.52885E-09 1.25387E-09 9.18104E-10 6.06002E-10 3.62756E-10 1.97719E-10 + 9.83996E-11 4.48051E-11 1.86945E-11 7.15581E-12 2.51514E-12 8.12350E-13 + 2.41246E-13 6.59064E-14 1.65700E-14 3.83525E-15 + -8.34492E-16 -3.60538E-15 -1.43402E-14 -5.24916E-14 -1.76755E-13 -5.47257E-13 + -1.55700E-12 -4.06764E-12 -9.74893E-12 -2.14103E-11 -4.30208E-11 -7.89303E-11 + -1.31857E-10 -1.99766E-10 -2.72824E-10 -3.32655E-10 -3.56007E-10 -3.23063E-10 + -2.27375E-10 -8.20868E-11 8.20868E-11 2.27375E-10 3.23063E-10 3.56007E-10 + 3.32655E-10 2.72824E-10 1.99766E-10 1.31857E-10 7.89303E-11 4.30208E-11 + 2.14103E-11 9.74893E-12 4.06764E-12 1.55700E-12 5.47257E-13 1.76755E-13 + 5.24916E-14 1.43402E-14 3.60538E-15 8.34492E-16 + -1.59871E-16 -6.90714E-16 -2.74729E-15 -1.00563E-14 -3.38625E-14 -1.04843E-13 + -2.98288E-13 -7.79273E-13 -1.86769E-12 -4.10175E-12 -8.24187E-12 -1.51214E-11 + -2.52610E-11 -3.82708E-11 -5.22673E-11 -6.37296E-11 -6.82033E-11 -6.18919E-11 + -4.35602E-11 -1.57261E-11 1.57261E-11 4.35602E-11 6.18919E-11 6.82033E-11 + 6.37296E-11 5.22673E-11 3.82708E-11 2.52610E-11 1.51214E-11 8.24187E-12 + 4.10175E-12 1.86769E-12 7.79273E-13 2.98288E-13 1.04843E-13 3.38625E-14 + 1.00563E-14 2.74729E-15 6.90714E-16 1.59871E-16 + -2.69655E-17 -1.16503E-16 -4.63386E-16 -1.69619E-15 -5.71161E-15 -1.76839E-14 + -5.03123E-14 -1.31440E-13 -3.15023E-13 -6.91844E-13 -1.39016E-12 -2.55052E-12 + -4.26078E-12 -6.45516E-12 -8.81595E-12 -1.07493E-11 -1.15039E-11 -1.04393E-11 + -7.34731E-12 -2.65252E-12 2.65252E-12 7.34731E-12 1.04393E-11 1.15039E-11 + 1.07493E-11 8.81595E-12 6.45516E-12 4.26078E-12 2.55052E-12 1.39016E-12 + 6.91844E-13 3.15023E-13 1.31440E-13 5.03123E-14 1.76839E-14 5.71161E-15 + 1.69619E-15 4.63386E-16 1.16503E-16 2.69655E-17 + -4.00427E-18 -1.73002E-17 -6.88110E-17 -2.51878E-16 -8.48152E-16 -2.62599E-15 + -7.47118E-15 -1.95184E-14 -4.67798E-14 -1.02736E-13 -2.06433E-13 -3.78743E-13 + -6.32710E-13 -9.58566E-13 -1.30913E-12 -1.59623E-12 -1.70828E-12 -1.55020E-12 + -1.09105E-12 -3.93890E-13 3.93890E-13 1.09105E-12 1.55020E-12 1.70828E-12 + 1.59623E-12 1.30913E-12 9.58566E-13 6.32710E-13 3.78743E-13 2.06433E-13 + 1.02736E-13 4.67798E-14 1.95184E-14 7.47118E-15 2.62599E-15 8.48152E-16 + 2.51878E-16 6.88110E-17 1.73002E-17 4.00427E-18 + -5.23487E-19 -2.26170E-18 -8.99580E-18 -3.29286E-17 -1.10881E-16 -3.43301E-16 + -9.76723E-16 -2.55168E-15 -6.11561E-15 -1.34309E-14 -2.69874E-14 -4.95139E-14 + -8.27155E-14 -1.25315E-13 -1.71146E-13 -2.08678E-13 -2.23327E-13 -2.02661E-13 + -1.42635E-13 -5.14940E-14 5.14940E-14 1.42635E-13 2.02661E-13 2.23327E-13 + 2.08678E-13 1.71146E-13 1.25315E-13 8.27155E-14 4.95139E-14 2.69874E-14 + 1.34309E-14 6.11561E-15 2.55168E-15 9.76723E-16 3.43301E-16 1.10881E-16 + 3.29286E-17 8.99580E-18 2.26170E-18 5.23487E-19 + -6.02489E-20 -2.60302E-19 -1.03534E-18 -3.78980E-18 -1.27614E-17 -3.95110E-17 + -1.12413E-16 -2.93677E-16 -7.03856E-16 -1.54579E-15 -3.10603E-15 -5.69863E-15 + -9.51985E-15 -1.44227E-14 -1.96975E-14 -2.40171E-14 -2.57031E-14 -2.33246E-14 + -1.64161E-14 -5.92653E-15 5.92653E-15 1.64161E-14 2.33246E-14 2.57031E-14 + 2.40171E-14 1.96975E-14 1.44227E-14 9.51985E-15 5.69863E-15 3.10603E-15 + 1.54579E-15 7.03856E-16 2.93677E-16 1.12413E-16 3.95110E-17 1.27614E-17 + 3.78980E-18 1.03534E-18 2.60302E-19 6.02489E-20 + -2.84402E-19 -1.22874E-18 -4.88728E-18 -1.78896E-17 -6.02397E-17 -1.86510E-16 + -5.30638E-16 -1.38629E-15 -3.32252E-15 -7.29680E-15 -1.46618E-14 -2.69001E-14 + -4.49380E-14 -6.80818E-14 -9.29808E-14 -1.13372E-13 -1.21330E-13 -1.10102E-13 + -7.74912E-14 -2.79759E-14 2.79759E-14 7.74912E-14 1.10102E-13 1.21330E-13 + 1.13372E-13 9.29808E-14 6.80818E-14 4.49380E-14 2.69001E-14 1.46618E-14 + 7.29680E-15 3.32252E-15 1.38629E-15 5.30638E-16 1.86510E-16 6.02397E-17 + 1.78896E-17 4.88728E-18 1.22874E-18 2.84402E-19 + -2.47109E-18 -1.06762E-17 -4.24642E-17 -1.55438E-16 -5.23406E-16 -1.62053E-15 + -4.61057E-15 -1.20451E-14 -2.88684E-14 -6.33999E-14 -1.27393E-13 -2.33728E-13 + -3.90454E-13 -5.91544E-13 -8.07886E-13 -9.85055E-13 -1.05420E-12 -9.56651E-13 + -6.73301E-13 -2.43075E-13 2.43075E-13 6.73301E-13 9.56651E-13 1.05420E-12 + 9.85055E-13 8.07886E-13 5.91544E-13 3.90454E-13 2.33728E-13 1.27393E-13 + 6.33999E-14 2.88684E-14 1.20451E-14 4.61057E-15 1.62053E-15 5.23406E-16 + 1.55438E-16 4.24642E-17 1.06762E-17 2.47109E-18 + -1.89020E-17 -8.16649E-17 -3.24819E-16 -1.18898E-15 -4.00366E-15 -1.23958E-14 + -3.52673E-14 -9.21355E-14 -2.20821E-13 -4.84961E-13 -9.74458E-13 -1.78784E-12 + -2.98667E-12 -4.52486E-12 -6.17970E-12 -7.53492E-12 -8.06386E-12 -7.31764E-12 + -5.15023E-12 -1.85934E-12 1.85934E-12 5.15023E-12 7.31764E-12 8.06386E-12 + 7.53492E-12 6.17970E-12 4.52486E-12 2.98667E-12 1.78784E-12 9.74458E-13 + 4.84961E-13 2.20821E-13 9.21355E-14 3.52673E-14 1.23958E-14 4.00366E-15 + 1.18898E-15 3.24819E-16 8.16649E-17 1.89020E-17 + -1.27289E-16 -5.49946E-16 -2.18739E-15 -8.00680E-15 -2.69614E-14 -8.34759E-14 + -2.37497E-13 -6.20457E-13 -1.48705E-12 -3.26582E-12 -6.56218E-12 -1.20396E-11 + -2.01128E-11 -3.04712E-11 -4.16153E-11 -5.07415E-11 -5.43035E-11 -4.92783E-11 + -3.46826E-11 -1.25211E-11 1.25211E-11 3.46826E-11 4.92783E-11 5.43035E-11 + 5.07415E-11 4.16153E-11 3.04712E-11 2.01128E-11 1.20396E-11 6.56218E-12 + 3.26582E-12 1.48705E-12 6.20457E-13 2.37497E-13 8.34759E-14 2.69614E-14 + 8.00680E-15 2.18739E-15 5.49946E-16 1.27289E-16 + -7.54662E-16 -3.26048E-15 -1.29684E-14 -4.74701E-14 -1.59846E-13 -4.94905E-13 + -1.40805E-12 -3.67852E-12 -8.81632E-12 -1.93621E-11 -3.89053E-11 -7.13796E-11 + -1.19243E-10 -1.80656E-10 -2.46725E-10 -3.00832E-10 -3.21950E-10 -2.92158E-10 + -2.05624E-10 -7.42342E-11 7.42342E-11 2.05624E-10 2.92158E-10 3.21950E-10 + 3.00832E-10 2.46725E-10 1.80656E-10 1.19243E-10 7.13796E-11 3.89053E-11 + 1.93621E-11 8.81632E-12 3.67852E-12 1.40805E-12 4.94905E-13 1.59846E-13 + 4.74701E-14 1.29684E-14 3.26048E-15 7.54662E-16 + -3.93918E-15 -1.70190E-14 -6.76924E-14 -2.47784E-13 -8.34365E-13 -2.58330E-12 + -7.34973E-12 -1.92011E-11 -4.60193E-11 -1.01066E-10 -2.03078E-10 -3.72586E-10 + -6.22425E-10 -9.42984E-10 -1.28785E-09 -1.57028E-09 -1.68051E-09 -1.52500E-09 + -1.07331E-09 -3.87487E-10 3.87487E-10 1.07331E-09 1.52500E-09 1.68051E-09 + 1.57028E-09 1.28785E-09 9.42984E-10 6.22425E-10 3.72586E-10 2.03078E-10 + 1.01066E-10 4.60193E-11 1.92011E-11 7.34973E-12 2.58330E-12 8.34365E-13 + 2.47784E-13 6.76924E-14 1.70190E-14 3.93918E-15 + -1.81041E-14 -7.82177E-14 -3.11108E-13 -1.13879E-12 -3.83466E-12 -1.18726E-11 + -3.37786E-11 -8.82464E-11 -2.11500E-10 -4.64490E-10 -9.33325E-10 -1.71237E-09 + -2.86060E-09 -4.33386E-09 -5.91885E-09 -7.21686E-09 -7.72347E-09 -7.00876E-09 + -4.93284E-09 -1.78085E-09 1.78085E-09 4.93284E-09 7.00876E-09 7.72347E-09 + 7.21686E-09 5.91885E-09 4.33386E-09 2.86060E-09 1.71237E-09 9.33325E-10 + 4.64490E-10 2.11500E-10 8.82464E-11 3.37786E-11 1.18726E-11 3.83466E-12 + 1.13879E-12 3.11108E-13 7.82177E-14 1.81041E-14 + -7.32671E-14 -3.16547E-13 -1.25905E-12 -4.60868E-12 -1.55188E-11 -4.80484E-11 + -1.36702E-10 -3.57133E-10 -8.55941E-10 -1.87979E-09 -3.77716E-09 -6.92996E-09 + -1.15768E-08 -1.75391E-08 -2.39536E-08 -2.92066E-08 -3.12569E-08 -2.83644E-08 + -1.99632E-08 -7.20710E-09 7.20710E-09 1.99632E-08 2.83644E-08 3.12569E-08 + 2.92066E-08 2.39536E-08 1.75391E-08 1.15768E-08 6.92996E-09 3.77716E-09 + 1.87979E-09 8.55941E-10 3.57133E-10 1.36702E-10 4.80484E-11 1.55188E-11 + 4.60868E-12 1.25905E-12 3.16547E-13 7.32671E-14 + -2.61142E-13 -1.12825E-12 -4.48757E-12 -1.64265E-11 -5.53130E-11 -1.71256E-10 + -4.87240E-10 -1.27291E-09 -3.05079E-09 -6.70004E-09 -1.34627E-08 -2.47001E-08 + -4.12628E-08 -6.25138E-08 -8.53765E-08 -1.04100E-07 -1.11407E-07 -1.01098E-07 + -7.11537E-08 -2.56879E-08 2.56879E-08 7.11537E-08 1.01098E-07 1.11407E-07 + 1.04100E-07 8.53765E-08 6.25138E-08 4.12628E-08 2.47001E-08 1.34627E-08 + 6.70004E-09 3.05079E-09 1.27291E-09 4.87240E-10 1.71256E-10 5.53130E-11 + 1.64265E-11 4.48757E-12 1.12825E-12 2.61142E-13 + -8.19980E-13 -3.54268E-12 -1.40909E-11 -5.15788E-11 -1.73682E-10 -5.37741E-10 + -1.52992E-09 -3.99691E-09 -9.57939E-09 -2.10380E-08 -4.22727E-08 -7.75577E-08 + -1.29564E-07 -1.96292E-07 -2.68080E-07 -3.26870E-07 -3.49816E-07 -3.17445E-07 + -2.23421E-07 -8.06593E-08 8.06593E-08 2.23421E-07 3.17445E-07 3.49816E-07 + 3.26870E-07 2.68080E-07 1.96292E-07 1.29564E-07 7.75577E-08 4.22727E-08 + 2.10380E-08 9.57939E-09 3.99691E-09 1.52992E-09 5.37741E-10 1.73682E-10 + 5.15788E-11 1.40909E-11 3.54268E-12 8.19980E-13 + -2.26931E-12 -9.80443E-12 -3.89967E-11 -1.42745E-10 -4.80666E-10 -1.48821E-09 + -4.23408E-09 -1.10615E-08 -2.65111E-08 -5.82229E-08 -1.16990E-07 -2.14642E-07 + -3.58571E-07 -5.43240E-07 -7.41916E-07 -9.04618E-07 -9.68121E-07 -8.78533E-07 + -6.18321E-07 -2.23226E-07 2.23226E-07 6.18321E-07 8.78533E-07 9.68121E-07 + 9.04618E-07 7.41916E-07 5.43240E-07 3.58571E-07 2.14642E-07 1.16990E-07 + 5.82229E-08 2.65111E-08 1.10615E-08 4.23408E-09 1.48821E-09 4.80666E-10 + 1.42745E-10 3.89967E-11 9.80443E-12 2.26931E-12 + -5.53974E-12 -2.39341E-11 -9.51971E-11 -3.48463E-10 -1.17338E-09 -3.63294E-09 + -1.03361E-08 -2.70028E-08 -6.47178E-08 -1.42131E-07 -2.85592E-07 -5.23975E-07 + -8.75327E-07 -1.32613E-06 -1.81113E-06 -2.20831E-06 -2.36333E-06 -2.14464E-06 + -1.50942E-06 -5.44929E-07 5.44929E-07 1.50942E-06 2.14464E-06 2.36333E-06 + 2.20831E-06 1.81113E-06 1.32613E-06 8.75327E-07 5.23975E-07 2.85592E-07 + 1.42131E-07 6.47178E-08 2.70028E-08 1.03361E-08 3.63294E-09 1.17338E-09 + 3.48463E-10 9.51971E-11 2.39341E-11 5.53974E-12 + -1.19441E-11 -5.16040E-11 -2.05253E-10 -7.51315E-10 -2.52991E-09 -7.83293E-09 + -2.22854E-08 -5.82204E-08 -1.39537E-07 -3.06447E-07 -6.15759E-07 -1.12973E-06 + -1.88728E-06 -2.85926E-06 -3.90495E-06 -4.76131E-06 -5.09555E-06 -4.62402E-06 + -3.25443E-06 -1.17491E-06 1.17491E-06 3.25443E-06 4.62402E-06 5.09555E-06 + 4.76131E-06 3.90495E-06 2.85926E-06 1.88728E-06 1.12973E-06 6.15759E-07 + 3.06447E-07 1.39537E-07 5.82204E-08 2.22854E-08 7.83293E-09 2.52991E-09 + 7.51315E-10 2.05253E-10 5.16040E-11 1.19441E-11 + -2.27936E-11 -9.84785E-11 -3.91694E-10 -1.43377E-09 -4.82795E-09 -1.49480E-08 + -4.25283E-08 -1.11105E-07 -2.66285E-07 -5.84807E-07 -1.17508E-06 -2.15593E-06 + -3.60159E-06 -5.45646E-06 -7.45201E-06 -9.08624E-06 -9.72408E-06 -8.82424E-06 + -6.21060E-06 -2.24215E-06 2.24215E-06 6.21060E-06 8.82424E-06 9.72408E-06 + 9.08624E-06 7.45201E-06 5.45646E-06 3.60159E-06 2.15593E-06 1.17508E-06 + 5.84807E-07 2.66285E-07 1.11105E-07 4.25283E-08 1.49480E-08 4.82795E-09 + 1.43377E-09 3.91694E-10 9.84785E-11 2.27936E-11 + -3.86315E-11 -1.66905E-10 -6.63859E-10 -2.43002E-09 -8.18261E-09 -2.53344E-08 + -7.20788E-08 -1.88305E-07 -4.51311E-07 -9.91155E-07 -1.99158E-06 -3.65395E-06 + -6.10412E-06 -9.24784E-06 -1.26300E-05 -1.53997E-05 -1.64808E-05 -1.49557E-05 + -1.05260E-05 -3.80010E-06 3.80010E-06 1.05260E-05 1.49557E-05 1.64808E-05 + 1.53997E-05 1.26300E-05 9.24784E-06 6.10412E-06 3.65395E-06 1.99158E-06 + 9.91155E-07 4.51311E-07 1.88305E-07 7.20788E-08 2.53344E-08 8.18261E-09 + 2.43002E-09 6.63859E-10 1.66905E-10 3.86315E-11 + -5.84577E-11 -2.52563E-10 -1.00456E-09 -3.67713E-09 -1.23820E-08 -3.83364E-08 + -1.09071E-07 -2.84946E-07 -6.82930E-07 -1.49983E-06 -3.01368E-06 -5.52921E-06 + -9.23682E-06 -1.39939E-05 -1.91118E-05 -2.33031E-05 -2.49389E-05 -2.26312E-05 + -1.59281E-05 -5.75037E-06 5.75037E-06 1.59281E-05 2.26312E-05 2.49389E-05 + 2.33031E-05 1.91118E-05 1.39939E-05 9.23682E-06 5.52921E-06 3.01368E-06 + 1.49983E-06 6.82930E-07 2.84946E-07 1.09071E-07 3.83364E-08 1.23820E-08 + 3.67713E-09 1.00456E-09 2.52563E-10 5.84577E-11 + -7.95999E-11 -3.43907E-10 -1.36788E-09 -5.00703E-09 -1.68602E-08 -5.22014E-08 + -1.48518E-07 -3.88001E-07 -9.29923E-07 -2.04227E-06 -4.10364E-06 -7.52894E-06 + -1.25775E-05 -1.90551E-05 -2.60240E-05 -3.17310E-05 -3.39585E-05 -3.08161E-05 + -2.16888E-05 -7.83008E-06 7.83008E-06 2.16888E-05 3.08161E-05 3.39585E-05 + 3.17310E-05 2.60240E-05 1.90551E-05 1.25775E-05 7.52894E-06 4.10364E-06 + 2.04227E-06 9.29923E-07 3.88001E-07 1.48518E-07 5.22014E-08 1.68602E-08 + 5.00703E-09 1.36788E-09 3.43907E-10 7.95999E-11 + -9.85801E-11 -4.25910E-10 -1.69404E-09 -6.20093E-09 -2.08804E-08 -6.46485E-08 + -1.83931E-07 -4.80518E-07 -1.15166E-06 -2.52924E-06 -5.08213E-06 -9.32418E-06 + -1.55765E-05 -2.35987E-05 -3.22293E-05 -3.92972E-05 -4.20558E-05 -3.81641E-05 + -2.68603E-05 -9.69710E-06 9.69710E-06 2.68603E-05 3.81641E-05 4.20558E-05 + 3.92972E-05 3.22293E-05 2.35987E-05 1.55765E-05 9.32418E-06 5.08213E-06 + 2.52924E-06 1.15166E-06 4.80518E-07 1.83931E-07 6.46485E-08 2.08804E-08 + 6.20093E-09 1.69404E-09 4.25910E-10 9.85801E-11 + -1.12464E-10 -4.85897E-10 -1.93263E-09 -7.07429E-09 -2.38213E-08 -7.37538E-08 + -2.09836E-07 -5.48196E-07 -1.31386E-06 -2.88546E-06 -5.79791E-06 -1.06374E-05 + -1.77704E-05 -2.69224E-05 -3.67685E-05 -4.48319E-05 -4.79790E-05 -4.35392E-05 + -3.06433E-05 -1.10628E-05 1.10628E-05 3.06433E-05 4.35392E-05 4.79790E-05 + 4.48319E-05 3.67685E-05 2.69224E-05 1.77704E-05 1.06374E-05 5.79791E-06 + 2.88546E-06 1.31386E-06 5.48196E-07 2.09836E-07 7.37538E-08 2.38213E-08 + 7.07429E-09 1.93263E-09 4.85897E-10 1.12464E-10 + -1.19656E-10 -5.16966E-10 -2.05621E-09 -7.52663E-09 -2.53445E-08 -7.84698E-08 + -2.23254E-07 -5.83249E-07 -1.39787E-06 -3.06996E-06 -6.16864E-06 -1.13176E-05 + -1.89066E-05 -2.86439E-05 -3.91196E-05 -4.76985E-05 -5.10469E-05 -4.63231E-05 + -3.26027E-05 -1.17702E-05 1.17702E-05 3.26027E-05 4.63231E-05 5.10469E-05 + 4.76985E-05 3.91196E-05 2.86439E-05 1.89066E-05 1.13176E-05 6.16864E-06 + 3.06996E-06 1.39787E-06 5.83249E-07 2.23254E-07 7.84698E-08 2.53445E-08 + 7.52663E-09 2.05621E-09 5.16966E-10 1.19656E-10 + -1.19656E-10 -5.16966E-10 -2.05621E-09 -7.52663E-09 -2.53445E-08 -7.84698E-08 + -2.23254E-07 -5.83249E-07 -1.39787E-06 -3.06996E-06 -6.16864E-06 -1.13176E-05 + -1.89066E-05 -2.86439E-05 -3.91196E-05 -4.76985E-05 -5.10469E-05 -4.63231E-05 + -3.26027E-05 -1.17702E-05 1.17702E-05 3.26027E-05 4.63231E-05 5.10469E-05 + 4.76985E-05 3.91196E-05 2.86439E-05 1.89066E-05 1.13176E-05 6.16864E-06 + 3.06996E-06 1.39787E-06 5.83249E-07 2.23254E-07 7.84698E-08 2.53445E-08 + 7.52663E-09 2.05621E-09 5.16966E-10 1.19656E-10 + -1.12464E-10 -4.85897E-10 -1.93263E-09 -7.07429E-09 -2.38213E-08 -7.37538E-08 + -2.09836E-07 -5.48196E-07 -1.31386E-06 -2.88546E-06 -5.79791E-06 -1.06374E-05 + -1.77704E-05 -2.69224E-05 -3.67685E-05 -4.48319E-05 -4.79790E-05 -4.35392E-05 + -3.06433E-05 -1.10628E-05 1.10628E-05 3.06433E-05 4.35392E-05 4.79790E-05 + 4.48319E-05 3.67685E-05 2.69224E-05 1.77704E-05 1.06374E-05 5.79791E-06 + 2.88546E-06 1.31386E-06 5.48196E-07 2.09836E-07 7.37538E-08 2.38213E-08 + 7.07429E-09 1.93263E-09 4.85897E-10 1.12464E-10 + -9.85801E-11 -4.25910E-10 -1.69404E-09 -6.20093E-09 -2.08804E-08 -6.46485E-08 + -1.83931E-07 -4.80518E-07 -1.15166E-06 -2.52924E-06 -5.08213E-06 -9.32418E-06 + -1.55765E-05 -2.35987E-05 -3.22293E-05 -3.92972E-05 -4.20558E-05 -3.81641E-05 + -2.68603E-05 -9.69710E-06 9.69710E-06 2.68603E-05 3.81641E-05 4.20558E-05 + 3.92972E-05 3.22293E-05 2.35987E-05 1.55765E-05 9.32418E-06 5.08213E-06 + 2.52924E-06 1.15166E-06 4.80518E-07 1.83931E-07 6.46485E-08 2.08804E-08 + 6.20093E-09 1.69404E-09 4.25910E-10 9.85801E-11 + -7.95999E-11 -3.43907E-10 -1.36788E-09 -5.00703E-09 -1.68602E-08 -5.22014E-08 + -1.48518E-07 -3.88001E-07 -9.29923E-07 -2.04227E-06 -4.10364E-06 -7.52894E-06 + -1.25775E-05 -1.90551E-05 -2.60240E-05 -3.17310E-05 -3.39585E-05 -3.08161E-05 + -2.16888E-05 -7.83008E-06 7.83008E-06 2.16888E-05 3.08161E-05 3.39585E-05 + 3.17310E-05 2.60240E-05 1.90551E-05 1.25775E-05 7.52894E-06 4.10364E-06 + 2.04227E-06 9.29923E-07 3.88001E-07 1.48518E-07 5.22014E-08 1.68602E-08 + 5.00703E-09 1.36788E-09 3.43907E-10 7.95999E-11 + -5.84577E-11 -2.52563E-10 -1.00456E-09 -3.67713E-09 -1.23820E-08 -3.83364E-08 + -1.09071E-07 -2.84946E-07 -6.82930E-07 -1.49983E-06 -3.01368E-06 -5.52921E-06 + -9.23682E-06 -1.39939E-05 -1.91118E-05 -2.33031E-05 -2.49389E-05 -2.26312E-05 + -1.59281E-05 -5.75037E-06 5.75037E-06 1.59281E-05 2.26312E-05 2.49389E-05 + 2.33031E-05 1.91118E-05 1.39939E-05 9.23682E-06 5.52921E-06 3.01368E-06 + 1.49983E-06 6.82930E-07 2.84946E-07 1.09071E-07 3.83364E-08 1.23820E-08 + 3.67713E-09 1.00456E-09 2.52563E-10 5.84577E-11 + -3.86315E-11 -1.66905E-10 -6.63859E-10 -2.43002E-09 -8.18261E-09 -2.53344E-08 + -7.20788E-08 -1.88305E-07 -4.51311E-07 -9.91155E-07 -1.99158E-06 -3.65395E-06 + -6.10412E-06 -9.24784E-06 -1.26300E-05 -1.53997E-05 -1.64808E-05 -1.49557E-05 + -1.05260E-05 -3.80010E-06 3.80010E-06 1.05260E-05 1.49557E-05 1.64808E-05 + 1.53997E-05 1.26300E-05 9.24784E-06 6.10412E-06 3.65395E-06 1.99158E-06 + 9.91155E-07 4.51311E-07 1.88305E-07 7.20788E-08 2.53344E-08 8.18261E-09 + 2.43002E-09 6.63859E-10 1.66905E-10 3.86315E-11 + -2.27936E-11 -9.84785E-11 -3.91694E-10 -1.43377E-09 -4.82795E-09 -1.49480E-08 + -4.25283E-08 -1.11105E-07 -2.66285E-07 -5.84807E-07 -1.17508E-06 -2.15593E-06 + -3.60159E-06 -5.45646E-06 -7.45201E-06 -9.08624E-06 -9.72408E-06 -8.82424E-06 + -6.21060E-06 -2.24215E-06 2.24215E-06 6.21060E-06 8.82424E-06 9.72408E-06 + 9.08624E-06 7.45201E-06 5.45646E-06 3.60159E-06 2.15593E-06 1.17508E-06 + 5.84807E-07 2.66285E-07 1.11105E-07 4.25283E-08 1.49480E-08 4.82795E-09 + 1.43377E-09 3.91694E-10 9.84785E-11 2.27936E-11 + -1.19441E-11 -5.16040E-11 -2.05253E-10 -7.51315E-10 -2.52991E-09 -7.83293E-09 + -2.22854E-08 -5.82204E-08 -1.39537E-07 -3.06447E-07 -6.15759E-07 -1.12973E-06 + -1.88728E-06 -2.85926E-06 -3.90495E-06 -4.76131E-06 -5.09555E-06 -4.62402E-06 + -3.25443E-06 -1.17491E-06 1.17491E-06 3.25443E-06 4.62402E-06 5.09555E-06 + 4.76131E-06 3.90495E-06 2.85926E-06 1.88728E-06 1.12973E-06 6.15759E-07 + 3.06447E-07 1.39537E-07 5.82204E-08 2.22854E-08 7.83293E-09 2.52991E-09 + 7.51315E-10 2.05253E-10 5.16040E-11 1.19441E-11 + -5.53974E-12 -2.39341E-11 -9.51971E-11 -3.48463E-10 -1.17338E-09 -3.63294E-09 + -1.03361E-08 -2.70028E-08 -6.47178E-08 -1.42131E-07 -2.85592E-07 -5.23975E-07 + -8.75327E-07 -1.32613E-06 -1.81113E-06 -2.20831E-06 -2.36333E-06 -2.14464E-06 + -1.50942E-06 -5.44929E-07 5.44929E-07 1.50942E-06 2.14464E-06 2.36333E-06 + 2.20831E-06 1.81113E-06 1.32613E-06 8.75327E-07 5.23975E-07 2.85592E-07 + 1.42131E-07 6.47178E-08 2.70028E-08 1.03361E-08 3.63294E-09 1.17338E-09 + 3.48463E-10 9.51971E-11 2.39341E-11 5.53974E-12 + -2.26931E-12 -9.80443E-12 -3.89967E-11 -1.42745E-10 -4.80666E-10 -1.48821E-09 + -4.23408E-09 -1.10615E-08 -2.65111E-08 -5.82229E-08 -1.16990E-07 -2.14642E-07 + -3.58571E-07 -5.43240E-07 -7.41916E-07 -9.04618E-07 -9.68121E-07 -8.78533E-07 + -6.18321E-07 -2.23226E-07 2.23226E-07 6.18321E-07 8.78533E-07 9.68121E-07 + 9.04618E-07 7.41916E-07 5.43240E-07 3.58571E-07 2.14642E-07 1.16990E-07 + 5.82229E-08 2.65111E-08 1.10615E-08 4.23408E-09 1.48821E-09 4.80666E-10 + 1.42745E-10 3.89967E-11 9.80443E-12 2.26931E-12 + -8.19980E-13 -3.54268E-12 -1.40909E-11 -5.15788E-11 -1.73682E-10 -5.37741E-10 + -1.52992E-09 -3.99691E-09 -9.57939E-09 -2.10380E-08 -4.22727E-08 -7.75577E-08 + -1.29564E-07 -1.96292E-07 -2.68080E-07 -3.26870E-07 -3.49816E-07 -3.17445E-07 + -2.23421E-07 -8.06593E-08 8.06593E-08 2.23421E-07 3.17445E-07 3.49816E-07 + 3.26870E-07 2.68080E-07 1.96292E-07 1.29564E-07 7.75577E-08 4.22727E-08 + 2.10380E-08 9.57939E-09 3.99691E-09 1.52992E-09 5.37741E-10 1.73682E-10 + 5.15788E-11 1.40909E-11 3.54268E-12 8.19980E-13 + -2.61142E-13 -1.12825E-12 -4.48757E-12 -1.64265E-11 -5.53130E-11 -1.71256E-10 + -4.87240E-10 -1.27291E-09 -3.05079E-09 -6.70004E-09 -1.34627E-08 -2.47001E-08 + -4.12628E-08 -6.25138E-08 -8.53765E-08 -1.04100E-07 -1.11407E-07 -1.01098E-07 + -7.11537E-08 -2.56879E-08 2.56879E-08 7.11537E-08 1.01098E-07 1.11407E-07 + 1.04100E-07 8.53765E-08 6.25138E-08 4.12628E-08 2.47001E-08 1.34627E-08 + 6.70004E-09 3.05079E-09 1.27291E-09 4.87240E-10 1.71256E-10 5.53130E-11 + 1.64265E-11 4.48757E-12 1.12825E-12 2.61142E-13 + -7.32671E-14 -3.16547E-13 -1.25905E-12 -4.60868E-12 -1.55188E-11 -4.80484E-11 + -1.36702E-10 -3.57133E-10 -8.55941E-10 -1.87979E-09 -3.77716E-09 -6.92996E-09 + -1.15768E-08 -1.75391E-08 -2.39536E-08 -2.92066E-08 -3.12569E-08 -2.83644E-08 + -1.99632E-08 -7.20710E-09 7.20710E-09 1.99632E-08 2.83644E-08 3.12569E-08 + 2.92066E-08 2.39536E-08 1.75391E-08 1.15768E-08 6.92996E-09 3.77716E-09 + 1.87979E-09 8.55941E-10 3.57133E-10 1.36702E-10 4.80484E-11 1.55188E-11 + 4.60868E-12 1.25905E-12 3.16547E-13 7.32671E-14 + -1.81041E-14 -7.82177E-14 -3.11108E-13 -1.13879E-12 -3.83466E-12 -1.18726E-11 + -3.37786E-11 -8.82464E-11 -2.11500E-10 -4.64490E-10 -9.33325E-10 -1.71237E-09 + -2.86060E-09 -4.33386E-09 -5.91885E-09 -7.21686E-09 -7.72347E-09 -7.00876E-09 + -4.93284E-09 -1.78085E-09 1.78085E-09 4.93284E-09 7.00876E-09 7.72347E-09 + 7.21686E-09 5.91885E-09 4.33386E-09 2.86060E-09 1.71237E-09 9.33325E-10 + 4.64490E-10 2.11500E-10 8.82464E-11 3.37786E-11 1.18726E-11 3.83466E-12 + 1.13879E-12 3.11108E-13 7.82177E-14 1.81041E-14 + -3.93918E-15 -1.70190E-14 -6.76924E-14 -2.47784E-13 -8.34365E-13 -2.58330E-12 + -7.34973E-12 -1.92011E-11 -4.60193E-11 -1.01066E-10 -2.03078E-10 -3.72586E-10 + -6.22425E-10 -9.42984E-10 -1.28785E-09 -1.57028E-09 -1.68051E-09 -1.52500E-09 + -1.07331E-09 -3.87487E-10 3.87487E-10 1.07331E-09 1.52500E-09 1.68051E-09 + 1.57028E-09 1.28785E-09 9.42984E-10 6.22425E-10 3.72586E-10 2.03078E-10 + 1.01066E-10 4.60193E-11 1.92011E-11 7.34973E-12 2.58330E-12 8.34365E-13 + 2.47784E-13 6.76924E-14 1.70190E-14 3.93918E-15 + -7.54662E-16 -3.26048E-15 -1.29684E-14 -4.74701E-14 -1.59846E-13 -4.94905E-13 + -1.40805E-12 -3.67852E-12 -8.81632E-12 -1.93621E-11 -3.89053E-11 -7.13796E-11 + -1.19243E-10 -1.80656E-10 -2.46725E-10 -3.00832E-10 -3.21950E-10 -2.92158E-10 + -2.05624E-10 -7.42342E-11 7.42342E-11 2.05624E-10 2.92158E-10 3.21950E-10 + 3.00832E-10 2.46725E-10 1.80656E-10 1.19243E-10 7.13796E-11 3.89053E-11 + 1.93621E-11 8.81632E-12 3.67852E-12 1.40805E-12 4.94905E-13 1.59846E-13 + 4.74701E-14 1.29684E-14 3.26048E-15 7.54662E-16 + -1.27289E-16 -5.49946E-16 -2.18739E-15 -8.00680E-15 -2.69614E-14 -8.34759E-14 + -2.37497E-13 -6.20457E-13 -1.48705E-12 -3.26582E-12 -6.56218E-12 -1.20396E-11 + -2.01128E-11 -3.04712E-11 -4.16153E-11 -5.07415E-11 -5.43035E-11 -4.92783E-11 + -3.46826E-11 -1.25211E-11 1.25211E-11 3.46826E-11 4.92783E-11 5.43035E-11 + 5.07415E-11 4.16153E-11 3.04712E-11 2.01128E-11 1.20396E-11 6.56218E-12 + 3.26582E-12 1.48705E-12 6.20457E-13 2.37497E-13 8.34759E-14 2.69614E-14 + 8.00680E-15 2.18739E-15 5.49946E-16 1.27289E-16 + -1.89020E-17 -8.16649E-17 -3.24819E-16 -1.18898E-15 -4.00366E-15 -1.23958E-14 + -3.52673E-14 -9.21355E-14 -2.20821E-13 -4.84961E-13 -9.74458E-13 -1.78784E-12 + -2.98667E-12 -4.52486E-12 -6.17970E-12 -7.53492E-12 -8.06386E-12 -7.31764E-12 + -5.15023E-12 -1.85934E-12 1.85934E-12 5.15023E-12 7.31764E-12 8.06386E-12 + 7.53492E-12 6.17970E-12 4.52486E-12 2.98667E-12 1.78784E-12 9.74458E-13 + 4.84961E-13 2.20821E-13 9.21355E-14 3.52673E-14 1.23958E-14 4.00366E-15 + 1.18898E-15 3.24819E-16 8.16649E-17 1.89020E-17 + -2.47109E-18 -1.06762E-17 -4.24642E-17 -1.55438E-16 -5.23406E-16 -1.62053E-15 + -4.61057E-15 -1.20451E-14 -2.88684E-14 -6.33999E-14 -1.27393E-13 -2.33728E-13 + -3.90454E-13 -5.91544E-13 -8.07886E-13 -9.85055E-13 -1.05420E-12 -9.56651E-13 + -6.73301E-13 -2.43075E-13 2.43075E-13 6.73301E-13 9.56651E-13 1.05420E-12 + 9.85055E-13 8.07886E-13 5.91544E-13 3.90454E-13 2.33728E-13 1.27393E-13 + 6.33999E-14 2.88684E-14 1.20451E-14 4.61057E-15 1.62053E-15 5.23406E-16 + 1.55438E-16 4.24642E-17 1.06762E-17 2.47109E-18 + -2.84402E-19 -1.22874E-18 -4.88728E-18 -1.78896E-17 -6.02397E-17 -1.86510E-16 + -5.30638E-16 -1.38629E-15 -3.32252E-15 -7.29680E-15 -1.46618E-14 -2.69001E-14 + -4.49380E-14 -6.80818E-14 -9.29808E-14 -1.13372E-13 -1.21330E-13 -1.10102E-13 + -7.74912E-14 -2.79759E-14 2.79759E-14 7.74912E-14 1.10102E-13 1.21330E-13 + 1.13372E-13 9.29808E-14 6.80818E-14 4.49380E-14 2.69001E-14 1.46618E-14 + 7.29680E-15 3.32252E-15 1.38629E-15 5.30638E-16 1.86510E-16 6.02397E-17 + 1.78896E-17 4.88728E-18 1.22874E-18 2.84402E-19 + -1.14648E-18 -4.95329E-18 -1.97015E-17 -7.21162E-17 -2.42837E-16 -7.51856E-16 + -2.13910E-15 -5.58838E-15 -1.33937E-14 -2.94148E-14 -5.91047E-14 -1.08439E-13 + -1.81153E-13 -2.74451E-13 -3.74823E-13 -4.57022E-13 -4.89104E-13 -4.43844E-13 + -3.12382E-13 -1.12776E-13 1.12776E-13 3.12382E-13 4.43844E-13 4.89104E-13 + 4.57022E-13 3.74823E-13 2.74451E-13 1.81153E-13 1.08439E-13 5.91047E-14 + 2.94148E-14 1.33937E-14 5.58838E-15 2.13910E-15 7.51856E-16 2.42837E-16 + 7.21162E-17 1.97015E-17 4.95329E-18 1.14648E-18 + -9.96143E-18 -4.30379E-17 -1.71181E-16 -6.26599E-16 -2.10995E-15 -6.53268E-15 + -1.85861E-14 -4.85559E-14 -1.16374E-13 -2.55577E-13 -5.13545E-13 -9.42200E-13 + -1.57399E-12 -2.38463E-12 -3.25674E-12 -3.97094E-12 -4.24970E-12 -3.85644E-12 + -2.71420E-12 -9.79880E-13 9.79880E-13 2.71420E-12 3.85644E-12 4.24970E-12 + 3.97094E-12 3.25674E-12 2.38463E-12 1.57399E-12 9.42200E-13 5.13545E-13 + 2.55577E-13 1.16374E-13 4.85559E-14 1.85861E-14 6.53268E-15 2.10995E-15 + 6.26599E-16 1.71181E-16 4.30379E-17 9.96143E-18 + -7.61973E-17 -3.29207E-16 -1.30941E-15 -4.79300E-15 -1.61395E-14 -4.99700E-14 + -1.42169E-13 -3.71416E-13 -8.90173E-13 -1.95497E-12 -3.92822E-12 -7.20711E-12 + -1.20398E-11 -1.82406E-11 -2.49116E-11 -3.03747E-11 -3.25069E-11 -2.94988E-11 + -2.07616E-11 -7.49533E-12 7.49533E-12 2.07616E-11 2.94988E-11 3.25069E-11 + 3.03747E-11 2.49116E-11 1.82406E-11 1.20398E-11 7.20711E-12 3.92822E-12 + 1.95497E-12 8.90173E-13 3.71416E-13 1.42169E-13 4.99700E-14 1.61395E-14 + 4.79300E-15 1.30941E-15 3.29207E-16 7.61973E-17 + -5.13127E-16 -2.21694E-15 -8.81777E-15 -3.22769E-14 -1.08686E-13 -3.36507E-13 + -9.57393E-13 -2.50118E-12 -5.99459E-12 -1.31651E-11 -2.64534E-11 -4.85340E-11 + -8.10785E-11 -1.22835E-10 -1.67759E-10 -2.04549E-10 -2.18908E-10 -1.98650E-10 + -1.39812E-10 -5.04749E-11 5.04749E-11 1.39812E-10 1.98650E-10 2.18908E-10 + 2.04549E-10 1.67759E-10 1.22835E-10 8.10785E-11 4.85340E-11 2.64534E-11 + 1.31651E-11 5.99459E-12 2.50118E-12 9.57393E-13 3.36507E-13 1.08686E-13 + 3.22769E-14 8.81777E-15 2.21694E-15 5.13127E-16 + -3.04219E-15 -1.31436E-14 -5.22781E-14 -1.91361E-13 -6.44371E-13 -1.99506E-12 + -5.67612E-12 -1.48288E-11 -3.55402E-11 -7.80523E-11 -1.56835E-10 -2.87744E-10 + -4.80692E-10 -7.28256E-10 -9.94596E-10 -1.21271E-09 -1.29784E-09 -1.17774E-09 + -8.28907E-10 -2.99252E-10 2.99252E-10 8.28907E-10 1.17774E-09 1.29784E-09 + 1.21271E-09 9.94596E-10 7.28256E-10 4.80692E-10 2.87744E-10 1.56835E-10 + 7.80523E-11 3.55402E-11 1.48288E-11 5.67612E-12 1.99506E-12 6.44371E-13 + 1.91361E-13 5.22781E-14 1.31436E-14 3.04219E-15 + -1.58796E-14 -6.86068E-14 -2.72881E-13 -9.98864E-13 -3.36348E-12 -1.04138E-11 + -2.96281E-11 -7.74032E-11 -1.85513E-10 -4.07417E-10 -8.18644E-10 -1.50197E-09 + -2.50911E-09 -3.80134E-09 -5.19158E-09 -6.33010E-09 -6.77446E-09 -6.14757E-09 + -4.32672E-09 -1.56203E-09 1.56203E-09 4.32672E-09 6.14757E-09 6.77446E-09 + 6.33010E-09 5.19158E-09 3.80134E-09 2.50911E-09 1.50197E-09 8.18644E-10 + 4.07417E-10 1.85513E-10 7.74032E-11 2.96281E-11 1.04138E-11 3.36348E-12 + 9.98864E-13 2.72881E-13 6.86068E-14 1.58796E-14 + -7.29810E-14 -3.15310E-13 -1.25413E-12 -4.59068E-12 -1.54582E-11 -4.78607E-11 + -1.36168E-10 -3.55738E-10 -8.52598E-10 -1.87245E-09 -3.76241E-09 -6.90289E-09 + -1.15316E-08 -1.74706E-08 -2.38600E-08 -2.90925E-08 -3.11348E-08 -2.82536E-08 + -1.98852E-08 -7.17895E-09 7.17895E-09 1.98852E-08 2.82536E-08 3.11348E-08 + 2.90925E-08 2.38600E-08 1.74706E-08 1.15316E-08 6.90289E-09 3.76241E-09 + 1.87245E-09 8.52598E-10 3.55738E-10 1.36168E-10 4.78607E-11 1.54582E-11 + 4.59068E-12 1.25413E-12 3.15310E-13 7.29810E-14 + -2.95354E-13 -1.27606E-12 -5.07547E-12 -1.85785E-11 -6.25594E-11 -1.93692E-10 + -5.51072E-10 -1.43967E-09 -3.45046E-09 -7.57779E-09 -1.52264E-08 -2.79360E-08 + -4.66685E-08 -7.07035E-08 -9.65613E-08 -1.17737E-07 -1.26002E-07 -1.14342E-07 + -8.04753E-08 -2.90532E-08 2.90532E-08 8.04753E-08 1.14342E-07 1.26002E-07 + 1.17737E-07 9.65613E-08 7.07035E-08 4.66685E-08 2.79360E-08 1.52264E-08 + 7.57779E-09 3.45046E-09 1.43967E-09 5.51072E-10 1.93692E-10 6.25594E-11 + 1.85785E-11 5.07547E-12 1.27606E-12 2.95354E-13 + -1.05271E-12 -4.54819E-12 -1.80903E-11 -6.62183E-11 -2.22977E-10 -6.90366E-10 + -1.96416E-09 -5.13134E-09 -1.22983E-08 -2.70091E-08 -5.42708E-08 -9.95707E-08 + -1.66338E-07 -2.52005E-07 -3.44169E-07 -4.19645E-07 -4.49103E-07 -4.07544E-07 + -2.86834E-07 -1.03553E-07 1.03553E-07 2.86834E-07 4.07544E-07 4.49103E-07 + 4.19645E-07 3.44169E-07 2.52005E-07 1.66338E-07 9.95707E-08 5.42708E-08 + 2.70091E-08 1.22983E-08 5.13134E-09 1.96416E-09 6.90366E-10 2.22977E-10 + 6.62183E-11 1.80903E-11 4.54819E-12 1.05271E-12 + -3.30550E-12 -1.42812E-11 -5.68030E-11 -2.07924E-10 -7.00143E-10 -2.16773E-09 + -6.16740E-09 -1.61123E-08 -3.86163E-08 -8.48080E-08 -1.70409E-07 -3.12650E-07 + -5.22297E-07 -7.91289E-07 -1.08068E-06 -1.31768E-06 -1.41017E-06 -1.27968E-06 + -9.00652E-07 -3.25153E-07 3.25153E-07 9.00652E-07 1.27968E-06 1.41017E-06 + 1.31768E-06 1.08068E-06 7.91289E-07 5.22297E-07 3.12650E-07 1.70409E-07 + 8.48080E-08 3.86163E-08 1.61123E-08 6.16740E-09 2.16773E-09 7.00143E-10 + 2.07924E-10 5.68030E-11 1.42812E-11 3.30550E-12 + -9.14801E-12 -3.95235E-11 -1.57203E-10 -5.75432E-10 -1.93766E-09 -5.99924E-09 + -1.70684E-08 -4.45910E-08 -1.06871E-07 -2.34707E-07 -4.71610E-07 -8.65263E-07 + -1.44547E-06 -2.18990E-06 -2.99080E-06 -3.64669E-06 -3.90268E-06 -3.54153E-06 + -2.49257E-06 -8.99866E-07 8.99866E-07 2.49257E-06 3.54153E-06 3.90268E-06 + 3.64669E-06 2.99080E-06 2.18990E-06 1.44547E-06 8.65263E-07 4.71610E-07 + 2.34707E-07 1.06871E-07 4.45910E-08 1.70684E-08 5.99924E-09 1.93766E-09 + 5.75432E-10 1.57203E-10 3.95235E-11 9.14801E-12 + -2.23317E-11 -9.64830E-11 -3.83757E-10 -1.40472E-09 -4.73012E-09 -1.46451E-08 + -4.16666E-08 -1.08854E-07 -2.60890E-07 -5.72957E-07 -1.15127E-06 -2.11224E-06 + -3.52861E-06 -5.34590E-06 -7.30101E-06 -8.90213E-06 -9.52705E-06 -8.64544E-06 + -6.08475E-06 -2.19672E-06 2.19672E-06 6.08475E-06 8.64544E-06 9.52705E-06 + 8.90213E-06 7.30101E-06 5.34590E-06 3.52861E-06 2.11224E-06 1.15127E-06 + 5.72957E-07 2.60890E-07 1.08854E-07 4.16666E-08 1.46451E-08 4.73012E-09 + 1.40472E-09 3.83757E-10 9.64830E-11 2.23317E-11 + -4.81491E-11 -2.08025E-10 -8.27413E-10 -3.02869E-09 -1.01985E-08 -3.15760E-08 + -8.98366E-08 -2.34697E-07 -5.62500E-07 -1.23534E-06 -2.48224E-06 -4.55417E-06 + -7.60797E-06 -1.15262E-05 -1.57416E-05 -1.91937E-05 -2.05411E-05 -1.86404E-05 + -1.31193E-05 -4.73635E-06 4.73635E-06 1.31193E-05 1.86404E-05 2.05411E-05 + 1.91937E-05 1.57416E-05 1.15262E-05 7.60797E-06 4.55417E-06 2.48224E-06 + 1.23534E-06 5.62500E-07 2.34697E-07 8.98366E-08 3.15760E-08 1.01985E-08 + 3.02869E-09 8.27413E-10 2.08025E-10 4.81491E-11 + -9.18852E-11 -3.96985E-10 -1.57899E-09 -5.77980E-09 -1.94624E-08 -6.02580E-08 + -1.71440E-07 -4.47885E-07 -1.07345E-06 -2.35747E-06 -4.73698E-06 -8.69094E-06 + -1.45187E-05 -2.19960E-05 -3.00405E-05 -3.66284E-05 -3.91999E-05 -3.55729E-05 + -2.50370E-05 -9.03896E-06 9.03896E-06 2.50370E-05 3.55729E-05 3.91999E-05 + 3.66284E-05 3.00405E-05 2.19960E-05 1.45187E-05 8.69094E-06 4.73698E-06 + 2.35747E-06 1.07345E-06 4.47885E-07 1.71440E-07 6.02580E-08 1.94624E-08 + 5.77980E-09 1.57899E-09 3.96985E-10 9.18852E-11 + -1.55731E-10 -6.72827E-10 -2.67614E-09 -9.79585E-09 -3.29856E-08 -1.02128E-07 + -2.90563E-07 -7.59093E-07 -1.81932E-06 -3.99553E-06 -8.02844E-06 -1.47298E-05 + -2.46068E-05 -3.72798E-05 -5.09139E-05 -6.20796E-05 -6.64385E-05 -6.02922E-05 + -4.24361E-05 -1.53208E-05 1.53208E-05 4.24361E-05 6.02922E-05 6.64385E-05 + 6.20796E-05 5.09139E-05 3.72798E-05 2.46068E-05 1.47298E-05 8.02844E-06 + 3.99553E-06 1.81932E-06 7.59093E-07 2.90563E-07 1.02128E-07 3.29856E-08 + 9.79585E-09 2.67614E-09 6.72827E-10 1.55731E-10 + -2.35654E-10 -1.01813E-09 -4.04957E-09 -1.48232E-08 -4.99143E-08 -1.54541E-07 + -4.39684E-07 -1.14867E-06 -2.75302E-06 -6.04609E-06 -1.21487E-05 -2.22893E-05 + -3.72354E-05 -5.64122E-05 -7.70436E-05 -9.39400E-05 -1.00537E-04 -9.12374E-05 + -6.42180E-05 -2.31851E-05 2.31851E-05 6.42180E-05 9.12374E-05 1.00537E-04 + 9.39400E-05 7.70436E-05 5.64122E-05 3.72354E-05 2.22893E-05 1.21487E-05 + 6.04609E-06 2.75302E-06 1.14867E-06 4.39684E-07 1.54541E-07 4.99143E-08 + 1.48232E-08 4.04957E-09 1.01813E-09 2.35654E-10 + -3.20882E-10 -1.38635E-09 -5.51417E-09 -2.01843E-08 -6.79666E-08 -2.10434E-07 + -5.98703E-07 -1.56411E-06 -3.74870E-06 -8.23276E-06 -1.65425E-05 -3.03506E-05 + -5.07022E-05 -7.68147E-05 -1.04908E-04 -1.27915E-04 -1.36897E-04 -1.24234E-04 + -8.74427E-05 -3.15700E-05 3.15700E-05 8.74427E-05 1.24234E-04 1.36897E-04 + 1.27915E-04 1.04908E-04 7.68147E-05 5.07022E-05 3.03506E-05 1.65425E-05 + 8.23276E-06 3.74870E-06 1.56411E-06 5.98703E-07 2.10434E-07 6.79666E-08 + 2.01843E-08 5.51417E-09 1.38635E-09 3.20882E-10 + -3.97395E-10 -1.71692E-09 -6.82900E-09 -2.49971E-08 -8.41730E-08 -2.60610E-07 + -7.41461E-07 -1.93706E-06 -4.64255E-06 -1.01958E-05 -2.04870E-05 -3.75875E-05 + -6.27919E-05 -9.51308E-05 -1.29922E-04 -1.58415E-04 -1.69537E-04 -1.53853E-04 + -1.08287E-04 -3.90946E-05 3.90946E-05 1.08287E-04 1.53853E-04 1.69537E-04 + 1.58415E-04 1.29922E-04 9.51308E-05 6.27919E-05 3.75875E-05 2.04870E-05 + 1.01958E-05 4.64255E-06 1.93706E-06 7.41461E-07 2.60610E-07 8.41730E-08 + 2.49971E-08 6.82900E-09 1.71692E-09 3.97395E-10 + -4.53365E-10 -1.95874E-09 -7.79081E-09 -2.85178E-08 -9.60282E-08 -2.97316E-07 + -8.45890E-07 -2.20988E-06 -5.29643E-06 -1.16318E-05 -2.33725E-05 -4.28815E-05 + -7.16357E-05 -1.08529E-04 -1.48221E-04 -1.80726E-04 -1.93414E-04 -1.75517E-04 + -1.23532E-04 -4.45979E-05 4.45979E-05 1.23532E-04 1.75517E-04 1.93414E-04 + 1.80726E-04 1.48221E-04 1.08529E-04 7.16357E-05 4.28815E-05 2.33725E-05 + 1.16318E-05 5.29643E-06 2.20988E-06 8.45890E-07 2.97316E-07 9.60282E-08 + 2.85178E-08 7.79081E-09 1.95874E-09 4.53365E-10 + -4.82354E-10 -2.08399E-09 -8.28897E-09 -3.03413E-08 -1.02168E-07 -3.16327E-07 + -8.99978E-07 -2.35118E-06 -5.63509E-06 -1.23756E-05 -2.48670E-05 -4.56234E-05 + -7.62162E-05 -1.15469E-04 -1.57698E-04 -1.92282E-04 -2.05780E-04 -1.86738E-04 + -1.31428E-04 -4.74484E-05 4.74484E-05 1.31428E-04 1.86738E-04 2.05780E-04 + 1.92282E-04 1.57698E-04 1.15469E-04 7.62162E-05 4.56234E-05 2.48670E-05 + 1.23756E-05 5.63509E-06 2.35118E-06 8.99978E-07 3.16327E-07 1.02168E-07 + 3.03413E-08 8.28897E-09 2.08399E-09 4.82354E-10 + -4.82354E-10 -2.08399E-09 -8.28897E-09 -3.03413E-08 -1.02168E-07 -3.16327E-07 + -8.99978E-07 -2.35118E-06 -5.63509E-06 -1.23756E-05 -2.48670E-05 -4.56234E-05 + -7.62162E-05 -1.15469E-04 -1.57698E-04 -1.92282E-04 -2.05780E-04 -1.86738E-04 + -1.31428E-04 -4.74484E-05 4.74484E-05 1.31428E-04 1.86738E-04 2.05780E-04 + 1.92282E-04 1.57698E-04 1.15469E-04 7.62162E-05 4.56234E-05 2.48670E-05 + 1.23756E-05 5.63509E-06 2.35118E-06 8.99978E-07 3.16327E-07 1.02168E-07 + 3.03413E-08 8.28897E-09 2.08399E-09 4.82354E-10 + -4.53365E-10 -1.95874E-09 -7.79081E-09 -2.85178E-08 -9.60282E-08 -2.97316E-07 + -8.45890E-07 -2.20988E-06 -5.29643E-06 -1.16318E-05 -2.33725E-05 -4.28815E-05 + -7.16357E-05 -1.08529E-04 -1.48221E-04 -1.80726E-04 -1.93414E-04 -1.75517E-04 + -1.23532E-04 -4.45979E-05 4.45979E-05 1.23532E-04 1.75517E-04 1.93414E-04 + 1.80726E-04 1.48221E-04 1.08529E-04 7.16357E-05 4.28815E-05 2.33725E-05 + 1.16318E-05 5.29643E-06 2.20988E-06 8.45890E-07 2.97316E-07 9.60282E-08 + 2.85178E-08 7.79081E-09 1.95874E-09 4.53365E-10 + -3.97395E-10 -1.71692E-09 -6.82900E-09 -2.49971E-08 -8.41730E-08 -2.60610E-07 + -7.41461E-07 -1.93706E-06 -4.64255E-06 -1.01958E-05 -2.04870E-05 -3.75875E-05 + -6.27919E-05 -9.51308E-05 -1.29922E-04 -1.58415E-04 -1.69537E-04 -1.53853E-04 + -1.08287E-04 -3.90946E-05 3.90946E-05 1.08287E-04 1.53853E-04 1.69537E-04 + 1.58415E-04 1.29922E-04 9.51308E-05 6.27919E-05 3.75875E-05 2.04870E-05 + 1.01958E-05 4.64255E-06 1.93706E-06 7.41461E-07 2.60610E-07 8.41730E-08 + 2.49971E-08 6.82900E-09 1.71692E-09 3.97395E-10 + -3.20882E-10 -1.38635E-09 -5.51417E-09 -2.01843E-08 -6.79666E-08 -2.10434E-07 + -5.98703E-07 -1.56411E-06 -3.74870E-06 -8.23276E-06 -1.65425E-05 -3.03506E-05 + -5.07022E-05 -7.68147E-05 -1.04908E-04 -1.27915E-04 -1.36897E-04 -1.24234E-04 + -8.74427E-05 -3.15700E-05 3.15700E-05 8.74427E-05 1.24234E-04 1.36897E-04 + 1.27915E-04 1.04908E-04 7.68147E-05 5.07022E-05 3.03506E-05 1.65425E-05 + 8.23276E-06 3.74870E-06 1.56411E-06 5.98703E-07 2.10434E-07 6.79666E-08 + 2.01843E-08 5.51417E-09 1.38635E-09 3.20882E-10 + -2.35654E-10 -1.01813E-09 -4.04957E-09 -1.48232E-08 -4.99143E-08 -1.54541E-07 + -4.39684E-07 -1.14867E-06 -2.75302E-06 -6.04609E-06 -1.21487E-05 -2.22893E-05 + -3.72354E-05 -5.64122E-05 -7.70436E-05 -9.39400E-05 -1.00537E-04 -9.12374E-05 + -6.42180E-05 -2.31851E-05 2.31851E-05 6.42180E-05 9.12374E-05 1.00537E-04 + 9.39400E-05 7.70436E-05 5.64122E-05 3.72354E-05 2.22893E-05 1.21487E-05 + 6.04609E-06 2.75302E-06 1.14867E-06 4.39684E-07 1.54541E-07 4.99143E-08 + 1.48232E-08 4.04957E-09 1.01813E-09 2.35654E-10 + -1.55731E-10 -6.72827E-10 -2.67614E-09 -9.79585E-09 -3.29856E-08 -1.02128E-07 + -2.90563E-07 -7.59093E-07 -1.81932E-06 -3.99553E-06 -8.02844E-06 -1.47298E-05 + -2.46068E-05 -3.72798E-05 -5.09139E-05 -6.20796E-05 -6.64385E-05 -6.02922E-05 + -4.24361E-05 -1.53208E-05 1.53208E-05 4.24361E-05 6.02922E-05 6.64385E-05 + 6.20796E-05 5.09139E-05 3.72798E-05 2.46068E-05 1.47298E-05 8.02844E-06 + 3.99553E-06 1.81932E-06 7.59093E-07 2.90563E-07 1.02128E-07 3.29856E-08 + 9.79585E-09 2.67614E-09 6.72827E-10 1.55731E-10 + -9.18852E-11 -3.96985E-10 -1.57899E-09 -5.77980E-09 -1.94624E-08 -6.02580E-08 + -1.71440E-07 -4.47885E-07 -1.07345E-06 -2.35747E-06 -4.73698E-06 -8.69094E-06 + -1.45187E-05 -2.19960E-05 -3.00405E-05 -3.66284E-05 -3.91999E-05 -3.55729E-05 + -2.50370E-05 -9.03896E-06 9.03896E-06 2.50370E-05 3.55729E-05 3.91999E-05 + 3.66284E-05 3.00405E-05 2.19960E-05 1.45187E-05 8.69094E-06 4.73698E-06 + 2.35747E-06 1.07345E-06 4.47885E-07 1.71440E-07 6.02580E-08 1.94624E-08 + 5.77980E-09 1.57899E-09 3.96985E-10 9.18852E-11 + -4.81491E-11 -2.08025E-10 -8.27413E-10 -3.02869E-09 -1.01985E-08 -3.15760E-08 + -8.98366E-08 -2.34697E-07 -5.62500E-07 -1.23534E-06 -2.48224E-06 -4.55417E-06 + -7.60797E-06 -1.15262E-05 -1.57416E-05 -1.91937E-05 -2.05411E-05 -1.86404E-05 + -1.31193E-05 -4.73635E-06 4.73635E-06 1.31193E-05 1.86404E-05 2.05411E-05 + 1.91937E-05 1.57416E-05 1.15262E-05 7.60797E-06 4.55417E-06 2.48224E-06 + 1.23534E-06 5.62500E-07 2.34697E-07 8.98366E-08 3.15760E-08 1.01985E-08 + 3.02869E-09 8.27413E-10 2.08025E-10 4.81491E-11 + -2.23317E-11 -9.64830E-11 -3.83757E-10 -1.40472E-09 -4.73012E-09 -1.46451E-08 + -4.16666E-08 -1.08854E-07 -2.60890E-07 -5.72957E-07 -1.15127E-06 -2.11224E-06 + -3.52861E-06 -5.34590E-06 -7.30101E-06 -8.90213E-06 -9.52705E-06 -8.64544E-06 + -6.08475E-06 -2.19672E-06 2.19672E-06 6.08475E-06 8.64544E-06 9.52705E-06 + 8.90213E-06 7.30101E-06 5.34590E-06 3.52861E-06 2.11224E-06 1.15127E-06 + 5.72957E-07 2.60890E-07 1.08854E-07 4.16666E-08 1.46451E-08 4.73012E-09 + 1.40472E-09 3.83757E-10 9.64830E-11 2.23317E-11 + -9.14801E-12 -3.95235E-11 -1.57203E-10 -5.75432E-10 -1.93766E-09 -5.99924E-09 + -1.70684E-08 -4.45910E-08 -1.06871E-07 -2.34707E-07 -4.71610E-07 -8.65263E-07 + -1.44547E-06 -2.18990E-06 -2.99080E-06 -3.64669E-06 -3.90268E-06 -3.54153E-06 + -2.49257E-06 -8.99866E-07 8.99866E-07 2.49257E-06 3.54153E-06 3.90268E-06 + 3.64669E-06 2.99080E-06 2.18990E-06 1.44547E-06 8.65263E-07 4.71610E-07 + 2.34707E-07 1.06871E-07 4.45910E-08 1.70684E-08 5.99924E-09 1.93766E-09 + 5.75432E-10 1.57203E-10 3.95235E-11 9.14801E-12 + -3.30550E-12 -1.42812E-11 -5.68030E-11 -2.07924E-10 -7.00143E-10 -2.16773E-09 + -6.16740E-09 -1.61123E-08 -3.86163E-08 -8.48080E-08 -1.70409E-07 -3.12650E-07 + -5.22297E-07 -7.91289E-07 -1.08068E-06 -1.31768E-06 -1.41017E-06 -1.27968E-06 + -9.00652E-07 -3.25153E-07 3.25153E-07 9.00652E-07 1.27968E-06 1.41017E-06 + 1.31768E-06 1.08068E-06 7.91289E-07 5.22297E-07 3.12650E-07 1.70409E-07 + 8.48080E-08 3.86163E-08 1.61123E-08 6.16740E-09 2.16773E-09 7.00143E-10 + 2.07924E-10 5.68030E-11 1.42812E-11 3.30550E-12 + -1.05271E-12 -4.54819E-12 -1.80903E-11 -6.62183E-11 -2.22977E-10 -6.90366E-10 + -1.96416E-09 -5.13134E-09 -1.22983E-08 -2.70091E-08 -5.42708E-08 -9.95707E-08 + -1.66338E-07 -2.52005E-07 -3.44169E-07 -4.19645E-07 -4.49103E-07 -4.07544E-07 + -2.86834E-07 -1.03553E-07 1.03553E-07 2.86834E-07 4.07544E-07 4.49103E-07 + 4.19645E-07 3.44169E-07 2.52005E-07 1.66338E-07 9.95707E-08 5.42708E-08 + 2.70091E-08 1.22983E-08 5.13134E-09 1.96416E-09 6.90366E-10 2.22977E-10 + 6.62183E-11 1.80903E-11 4.54819E-12 1.05271E-12 + -2.95354E-13 -1.27606E-12 -5.07547E-12 -1.85785E-11 -6.25594E-11 -1.93692E-10 + -5.51072E-10 -1.43967E-09 -3.45046E-09 -7.57779E-09 -1.52264E-08 -2.79360E-08 + -4.66685E-08 -7.07035E-08 -9.65613E-08 -1.17737E-07 -1.26002E-07 -1.14342E-07 + -8.04753E-08 -2.90532E-08 2.90532E-08 8.04753E-08 1.14342E-07 1.26002E-07 + 1.17737E-07 9.65613E-08 7.07035E-08 4.66685E-08 2.79360E-08 1.52264E-08 + 7.57779E-09 3.45046E-09 1.43967E-09 5.51072E-10 1.93692E-10 6.25594E-11 + 1.85785E-11 5.07547E-12 1.27606E-12 2.95354E-13 + -7.29810E-14 -3.15310E-13 -1.25413E-12 -4.59068E-12 -1.54582E-11 -4.78607E-11 + -1.36168E-10 -3.55738E-10 -8.52598E-10 -1.87245E-09 -3.76241E-09 -6.90289E-09 + -1.15316E-08 -1.74706E-08 -2.38600E-08 -2.90925E-08 -3.11348E-08 -2.82536E-08 + -1.98852E-08 -7.17895E-09 7.17895E-09 1.98852E-08 2.82536E-08 3.11348E-08 + 2.90925E-08 2.38600E-08 1.74706E-08 1.15316E-08 6.90289E-09 3.76241E-09 + 1.87245E-09 8.52598E-10 3.55738E-10 1.36168E-10 4.78607E-11 1.54582E-11 + 4.59068E-12 1.25413E-12 3.15310E-13 7.29810E-14 + -1.58796E-14 -6.86068E-14 -2.72881E-13 -9.98864E-13 -3.36348E-12 -1.04138E-11 + -2.96281E-11 -7.74032E-11 -1.85513E-10 -4.07417E-10 -8.18644E-10 -1.50197E-09 + -2.50911E-09 -3.80134E-09 -5.19158E-09 -6.33010E-09 -6.77446E-09 -6.14757E-09 + -4.32672E-09 -1.56203E-09 1.56203E-09 4.32672E-09 6.14757E-09 6.77446E-09 + 6.33010E-09 5.19158E-09 3.80134E-09 2.50911E-09 1.50197E-09 8.18644E-10 + 4.07417E-10 1.85513E-10 7.74032E-11 2.96281E-11 1.04138E-11 3.36348E-12 + 9.98864E-13 2.72881E-13 6.86068E-14 1.58796E-14 + -3.04219E-15 -1.31436E-14 -5.22781E-14 -1.91361E-13 -6.44371E-13 -1.99506E-12 + -5.67612E-12 -1.48288E-11 -3.55402E-11 -7.80523E-11 -1.56835E-10 -2.87744E-10 + -4.80692E-10 -7.28256E-10 -9.94596E-10 -1.21271E-09 -1.29784E-09 -1.17774E-09 + -8.28907E-10 -2.99252E-10 2.99252E-10 8.28907E-10 1.17774E-09 1.29784E-09 + 1.21271E-09 9.94596E-10 7.28256E-10 4.80692E-10 2.87744E-10 1.56835E-10 + 7.80523E-11 3.55402E-11 1.48288E-11 5.67612E-12 1.99506E-12 6.44371E-13 + 1.91361E-13 5.22781E-14 1.31436E-14 3.04219E-15 + -5.13127E-16 -2.21694E-15 -8.81777E-15 -3.22769E-14 -1.08686E-13 -3.36507E-13 + -9.57393E-13 -2.50118E-12 -5.99459E-12 -1.31651E-11 -2.64534E-11 -4.85340E-11 + -8.10785E-11 -1.22835E-10 -1.67759E-10 -2.04549E-10 -2.18908E-10 -1.98650E-10 + -1.39812E-10 -5.04749E-11 5.04749E-11 1.39812E-10 1.98650E-10 2.18908E-10 + 2.04549E-10 1.67759E-10 1.22835E-10 8.10785E-11 4.85340E-11 2.64534E-11 + 1.31651E-11 5.99459E-12 2.50118E-12 9.57393E-13 3.36507E-13 1.08686E-13 + 3.22769E-14 8.81777E-15 2.21694E-15 5.13127E-16 + -7.61973E-17 -3.29207E-16 -1.30941E-15 -4.79300E-15 -1.61395E-14 -4.99700E-14 + -1.42169E-13 -3.71416E-13 -8.90173E-13 -1.95497E-12 -3.92822E-12 -7.20711E-12 + -1.20398E-11 -1.82406E-11 -2.49116E-11 -3.03747E-11 -3.25069E-11 -2.94988E-11 + -2.07616E-11 -7.49533E-12 7.49533E-12 2.07616E-11 2.94988E-11 3.25069E-11 + 3.03747E-11 2.49116E-11 1.82406E-11 1.20398E-11 7.20711E-12 3.92822E-12 + 1.95497E-12 8.90173E-13 3.71416E-13 1.42169E-13 4.99700E-14 1.61395E-14 + 4.79300E-15 1.30941E-15 3.29207E-16 7.61973E-17 + -9.96143E-18 -4.30379E-17 -1.71181E-16 -6.26599E-16 -2.10995E-15 -6.53268E-15 + -1.85861E-14 -4.85559E-14 -1.16374E-13 -2.55577E-13 -5.13545E-13 -9.42200E-13 + -1.57399E-12 -2.38463E-12 -3.25674E-12 -3.97094E-12 -4.24970E-12 -3.85644E-12 + -2.71420E-12 -9.79880E-13 9.79880E-13 2.71420E-12 3.85644E-12 4.24970E-12 + 3.97094E-12 3.25674E-12 2.38463E-12 1.57399E-12 9.42200E-13 5.13545E-13 + 2.55577E-13 1.16374E-13 4.85559E-14 1.85861E-14 6.53268E-15 2.10995E-15 + 6.26599E-16 1.71181E-16 4.30379E-17 9.96143E-18 + -1.14648E-18 -4.95329E-18 -1.97015E-17 -7.21162E-17 -2.42837E-16 -7.51856E-16 + -2.13910E-15 -5.58838E-15 -1.33937E-14 -2.94148E-14 -5.91047E-14 -1.08439E-13 + -1.81153E-13 -2.74451E-13 -3.74823E-13 -4.57022E-13 -4.89104E-13 -4.43844E-13 + -3.12382E-13 -1.12776E-13 1.12776E-13 3.12382E-13 4.43844E-13 4.89104E-13 + 4.57022E-13 3.74823E-13 2.74451E-13 1.81153E-13 1.08439E-13 5.91047E-14 + 2.94148E-14 1.33937E-14 5.58838E-15 2.13910E-15 7.51856E-16 2.42837E-16 + 7.21162E-17 1.97015E-17 4.95329E-18 1.14648E-18 + -3.94680E-18 -1.70519E-17 -6.78234E-17 -2.48263E-16 -8.35979E-16 -2.58830E-15 + -7.36395E-15 -1.92383E-14 -4.61084E-14 -1.01262E-13 -2.03471E-13 -3.73307E-13 + -6.23629E-13 -9.44809E-13 -1.29035E-12 -1.57332E-12 -1.68376E-12 -1.52795E-12 + -1.07539E-12 -3.88237E-13 3.88237E-13 1.07539E-12 1.52795E-12 1.68376E-12 + 1.57332E-12 1.29035E-12 9.44809E-13 6.23629E-13 3.73307E-13 2.03471E-13 + 1.01262E-13 4.61084E-14 1.92383E-14 7.36395E-15 2.58830E-15 8.35979E-16 + 2.48263E-16 6.78234E-17 1.70519E-17 3.94680E-18 + -3.42927E-17 -1.48160E-16 -5.89300E-16 -2.15709E-15 -7.26360E-15 -2.24890E-14 + -6.39834E-14 -1.67156E-13 -4.00623E-13 -8.79836E-13 -1.76790E-12 -3.24357E-12 + -5.41855E-12 -8.20919E-12 -1.12115E-11 -1.36702E-11 -1.46298E-11 -1.32760E-11 + -9.34377E-12 -3.37328E-12 3.37328E-12 9.34377E-12 1.32760E-11 1.46298E-11 + 1.36702E-11 1.12115E-11 8.20919E-12 5.41855E-12 3.24357E-12 1.76790E-12 + 8.79836E-13 4.00623E-13 1.67156E-13 6.39834E-14 2.24890E-14 7.26360E-15 + 2.15709E-15 5.89300E-16 1.48160E-16 3.42927E-17 + -2.62313E-16 -1.13331E-15 -4.50769E-15 -1.65001E-14 -5.55610E-14 -1.72024E-13 + -4.89424E-13 -1.27862E-12 -3.06446E-12 -6.73007E-12 -1.35231E-11 -2.48108E-11 + -4.14477E-11 -6.27940E-11 -8.57592E-11 -1.04566E-10 -1.11907E-10 -1.01551E-10 + -7.14726E-11 -2.58030E-11 2.58030E-11 7.14726E-11 1.01551E-10 1.11907E-10 + 1.04566E-10 8.57592E-11 6.27940E-11 4.14477E-11 2.48108E-11 1.35231E-11 + 6.73007E-12 3.06446E-12 1.27862E-12 4.89424E-13 1.72024E-13 5.55610E-14 + 1.65001E-14 4.50769E-15 1.13331E-15 2.62313E-16 + -1.76646E-15 -7.63191E-15 -3.03556E-14 -1.11115E-13 -3.74158E-13 -1.15844E-12 + -3.29587E-12 -8.61043E-12 -2.06366E-11 -4.53215E-11 -9.10669E-11 -1.67080E-10 + -2.79117E-10 -4.22866E-10 -5.77518E-10 -7.04168E-10 -7.53599E-10 -6.83863E-10 + -4.81310E-10 -1.73762E-10 1.73762E-10 4.81310E-10 6.83863E-10 7.53599E-10 + 7.04168E-10 5.77518E-10 4.22866E-10 2.79117E-10 1.67080E-10 9.10669E-11 + 4.53215E-11 2.06366E-11 8.61043E-12 3.29587E-12 1.15844E-12 3.74158E-13 + 1.11115E-13 3.03556E-14 7.63191E-15 1.76646E-15 + -1.04729E-14 -4.52475E-14 -1.79970E-13 -6.58769E-13 -2.21828E-12 -6.86807E-12 + -1.95403E-11 -5.10489E-11 -1.22349E-10 -2.68699E-10 -5.39911E-10 -9.90574E-10 + -1.65480E-09 -2.50706E-09 -3.42394E-09 -4.17482E-09 -4.46788E-09 -4.05443E-09 + -2.85355E-09 -1.03019E-09 1.03019E-09 2.85355E-09 4.05443E-09 4.46788E-09 + 4.17482E-09 3.42394E-09 2.50706E-09 1.65480E-09 9.90574E-10 5.39911E-10 + 2.68699E-10 1.22349E-10 5.10489E-11 1.95403E-11 6.86807E-12 2.21828E-12 + 6.58769E-13 1.79970E-13 4.52475E-14 1.04729E-14 + -5.46661E-14 -2.36182E-13 -9.39405E-13 -3.43863E-12 -1.15789E-11 -3.58499E-11 + -1.01996E-10 -2.66464E-10 -6.38635E-10 -1.40255E-09 -2.81822E-09 -5.17059E-09 + -8.63773E-09 -1.30863E-08 -1.78723E-08 -2.17917E-08 -2.33214E-08 -2.11633E-08 + -1.48949E-08 -5.37737E-09 5.37737E-09 1.48949E-08 2.11633E-08 2.33214E-08 + 2.17917E-08 1.78723E-08 1.30863E-08 8.63773E-09 5.17059E-09 2.81822E-09 + 1.40255E-09 6.38635E-10 2.66464E-10 1.01996E-10 3.58499E-11 1.15789E-11 + 3.43863E-12 9.39405E-13 2.36182E-13 5.46661E-14 + -2.51240E-13 -1.08547E-12 -4.31741E-12 -1.58036E-11 -5.32157E-11 -1.64763E-10 + -4.68765E-10 -1.22464E-09 -2.93511E-09 -6.44599E-09 -1.29523E-08 -2.37635E-08 + -3.96982E-08 -6.01434E-08 -8.21392E-08 -1.00152E-07 -1.07183E-07 -9.72644E-08 + -6.84557E-08 -2.47139E-08 2.47139E-08 6.84557E-08 9.72644E-08 1.07183E-07 + 1.00152E-07 8.21392E-08 6.01434E-08 3.96982E-08 2.37635E-08 1.29523E-08 + 6.44599E-09 2.93511E-09 1.22464E-09 4.68765E-10 1.64763E-10 5.32157E-11 + 1.58036E-11 4.31741E-12 1.08547E-12 2.51240E-13 + -1.01677E-12 -4.39289E-12 -1.74726E-11 -6.39572E-11 -2.15364E-10 -6.66794E-10 + -1.89709E-09 -4.95613E-09 -1.18784E-08 -2.60869E-08 -5.24177E-08 -9.61708E-08 + -1.60658E-07 -2.43400E-07 -3.32417E-07 -4.05316E-07 -4.33769E-07 -3.93629E-07 + -2.77040E-07 -1.00017E-07 1.00017E-07 2.77040E-07 3.93629E-07 4.33769E-07 + 4.05316E-07 3.32417E-07 2.43400E-07 1.60658E-07 9.61708E-08 5.24177E-08 + 2.60869E-08 1.18784E-08 4.95613E-09 1.89709E-09 6.66794E-10 2.15364E-10 + 6.39572E-11 1.74726E-11 4.39289E-12 1.01677E-12 + -3.62402E-12 -1.56574E-11 -6.22765E-11 -2.27959E-10 -7.67609E-10 -2.37662E-09 + -6.76170E-09 -1.76649E-08 -4.23374E-08 -9.29801E-08 -1.86830E-07 -3.42777E-07 + -5.72626E-07 -8.67538E-07 -1.18482E-06 -1.44465E-06 -1.54606E-06 -1.40299E-06 + -9.87439E-07 -3.56485E-07 3.56485E-07 9.87439E-07 1.40299E-06 1.54606E-06 + 1.44465E-06 1.18482E-06 8.67538E-07 5.72626E-07 3.42777E-07 1.86830E-07 + 9.29801E-08 4.23374E-08 1.76649E-08 6.76170E-09 2.37662E-09 7.67609E-10 + 2.27959E-10 6.22765E-11 1.56574E-11 3.62402E-12 + -1.13793E-11 -4.91638E-11 -1.95547E-10 -7.15787E-10 -2.41028E-09 -7.46252E-09 + -2.12316E-08 -5.54673E-08 -1.32939E-07 -2.91955E-07 -5.86641E-07 -1.07631E-06 + -1.79803E-06 -2.72405E-06 -3.72030E-06 -4.53616E-06 -4.85459E-06 -4.40536E-06 + -3.10054E-06 -1.11935E-06 1.11935E-06 3.10054E-06 4.40536E-06 4.85459E-06 + 4.53616E-06 3.72030E-06 2.72405E-06 1.79803E-06 1.07631E-06 5.86641E-07 + 2.91955E-07 1.32939E-07 5.54673E-08 2.12316E-08 7.46252E-09 2.41028E-09 + 7.15787E-10 1.95547E-10 4.91638E-11 1.13793E-11 + -3.14924E-11 -1.36061E-10 -5.41179E-10 -1.98095E-09 -6.67047E-09 -2.06527E-08 + -5.87587E-08 -1.53507E-07 -3.67910E-07 -8.07991E-07 -1.62354E-06 -2.97871E-06 + -4.97608E-06 -7.53885E-06 -1.02960E-05 -1.25539E-05 -1.34352E-05 -1.21919E-05 + -8.58080E-06 -3.09784E-06 3.09784E-06 8.58080E-06 1.21919E-05 1.34352E-05 + 1.25539E-05 1.02960E-05 7.53885E-06 4.97608E-06 2.97871E-06 1.62354E-06 + 8.07991E-07 3.67910E-07 1.53507E-07 5.87587E-08 2.06527E-08 6.67047E-09 + 1.98095E-09 5.41179E-10 1.36061E-10 3.14924E-11 + -7.68780E-11 -3.32147E-10 -1.32110E-09 -4.83581E-09 -1.62837E-08 -5.04163E-08 + -1.43439E-07 -3.74733E-07 -8.98125E-07 -1.97243E-06 -3.96331E-06 -7.27149E-06 + -1.21474E-05 -1.84035E-05 -2.51341E-05 -3.06460E-05 -3.27975E-05 -2.97627E-05 + -2.09475E-05 -7.56251E-06 7.56251E-06 2.09475E-05 2.97627E-05 3.27975E-05 + 3.06460E-05 2.51341E-05 1.84035E-05 1.21474E-05 7.27149E-06 3.96331E-06 + 1.97243E-06 8.98125E-07 3.74733E-07 1.43439E-07 5.04163E-08 1.62837E-08 + 4.83581E-09 1.32110E-09 3.32147E-10 7.68780E-11 + -1.65755E-10 -7.16137E-10 -2.84841E-09 -1.04264E-08 -3.51089E-08 -1.08702E-07 + -3.09267E-07 -8.07957E-07 -1.93643E-06 -4.25273E-06 -8.54523E-06 -1.56779E-05 + -2.61908E-05 -3.96795E-05 -5.41913E-05 -6.60760E-05 -7.07160E-05 -6.41753E-05 + -4.51703E-05 -1.63082E-05 1.63082E-05 4.51703E-05 6.41753E-05 7.07160E-05 + 6.60760E-05 5.41913E-05 3.96795E-05 2.61908E-05 1.56779E-05 8.54523E-06 + 4.25273E-06 1.93643E-06 8.07957E-07 3.09267E-07 1.08702E-07 3.51089E-08 + 1.04264E-08 2.84841E-09 7.16137E-10 1.65755E-10 + -3.16319E-10 -1.36664E-09 -5.43575E-09 -1.98972E-08 -6.70001E-08 -2.07441E-07 + -5.90189E-07 -1.54186E-06 -3.69539E-06 -8.11569E-06 -1.63073E-05 -2.99190E-05 + -4.99812E-05 -7.57224E-05 -1.03417E-04 -1.26100E-04 -1.34965E-04 -1.22500E-04 + -8.62410E-05 -3.11415E-05 3.11415E-05 8.62410E-05 1.22500E-04 1.34965E-04 + 1.26100E-04 1.03417E-04 7.57224E-05 4.99812E-05 2.99190E-05 1.63073E-05 + 8.11569E-06 3.69539E-06 1.54186E-06 5.90189E-07 2.07441E-07 6.70001E-08 + 1.98972E-08 5.43575E-09 1.36664E-09 3.16319E-10 + -5.36111E-10 -2.31624E-09 -9.21274E-09 -3.37227E-08 -1.13555E-07 -3.51580E-07 + -1.00028E-06 -2.61321E-06 -6.26310E-06 -1.37548E-05 -2.76383E-05 -5.07079E-05 + -8.47102E-05 -1.28338E-04 -1.75277E-04 -2.13733E-04 -2.28792E-04 -2.07725E-04 + -1.46302E-04 -5.28470E-05 5.28470E-05 1.46302E-04 2.07725E-04 2.28792E-04 + 2.13733E-04 1.75277E-04 1.28338E-04 8.47102E-05 5.07079E-05 2.76383E-05 + 1.37548E-05 6.26310E-06 2.61321E-06 1.00028E-06 3.51580E-07 1.13555E-07 + 3.37227E-08 9.21274E-09 2.31624E-09 5.36111E-10 + -8.11250E-10 -3.50496E-09 -1.39408E-08 -5.10296E-08 -1.71832E-07 -5.32015E-07 + -1.51363E-06 -3.95435E-06 -9.47740E-06 -2.08140E-05 -4.18226E-05 -7.67319E-05 + -1.28185E-04 -1.94203E-04 -2.65235E-04 -3.23441E-04 -3.46275E-04 -3.14476E-04 + -2.21572E-04 -8.00593E-05 8.00593E-05 2.21572E-04 3.14476E-04 3.46275E-04 + 3.23441E-04 2.65235E-04 1.94203E-04 1.28185E-04 7.67319E-05 4.18226E-05 + 2.08140E-05 9.47740E-06 3.95435E-06 1.51363E-06 5.32015E-07 1.71832E-07 + 5.10296E-08 1.39408E-08 3.50496E-09 8.11250E-10 + -1.10465E-09 -4.77259E-09 -1.89828E-08 -6.94853E-08 -2.33978E-07 -7.24427E-07 + -2.06106E-06 -5.38451E-06 -1.29051E-05 -2.83417E-05 -5.69484E-05 -1.04483E-04 + -1.74545E-04 -2.64440E-04 -3.61161E-04 -4.40415E-04 -4.71495E-04 -4.28175E-04 + -3.01659E-04 -1.08990E-04 1.08990E-04 3.01659E-04 4.28175E-04 4.71495E-04 + 4.40415E-04 3.61161E-04 2.64440E-04 1.74545E-04 1.04483E-04 5.69484E-05 + 2.83417E-05 1.29051E-05 5.38451E-06 2.06106E-06 7.24427E-07 2.33978E-07 + 6.94853E-08 1.89828E-08 4.77259E-09 1.10465E-09 + -1.36805E-09 -5.91059E-09 -2.35091E-08 -8.60537E-08 -2.89769E-07 -8.97164E-07 + -2.55251E-06 -6.66842E-06 -1.59822E-05 -3.50996E-05 -7.05275E-05 -1.29397E-04 + -2.16164E-04 -3.27493E-04 -4.47272E-04 -5.45396E-04 -5.83797E-04 -5.29991E-04 + -3.73225E-04 -1.34801E-04 1.34801E-04 3.73225E-04 5.29991E-04 5.83797E-04 + 5.45396E-04 4.47272E-04 3.27493E-04 2.16164E-04 1.29397E-04 7.05275E-05 + 3.50996E-05 1.59822E-05 6.66842E-06 2.55251E-06 8.97164E-07 2.89769E-07 + 8.60537E-08 2.35091E-08 5.91059E-09 1.36805E-09 + -1.56073E-09 -6.74306E-09 -2.68202E-08 -9.81738E-08 -3.30581E-07 -1.02352E-06 + -2.91202E-06 -7.60762E-06 -1.82332E-05 -4.00431E-05 -8.04608E-05 -1.47621E-04 + -2.46609E-04 -3.73618E-04 -5.10261E-04 -6.22177E-04 -6.65900E-04 -6.04366E-04 + -4.25442E-04 -1.53616E-04 1.53616E-04 4.25442E-04 6.04366E-04 6.65900E-04 + 6.22177E-04 5.10261E-04 3.73618E-04 2.46609E-04 1.47621E-04 8.04608E-05 + 4.00431E-05 1.82332E-05 7.60762E-06 2.91202E-06 1.02352E-06 3.30581E-07 + 9.81738E-08 2.68202E-08 6.74306E-09 1.56073E-09 + -1.66053E-09 -7.17422E-09 -2.85352E-08 -1.04451E-07 -3.51719E-07 -1.08897E-06 + -3.09822E-06 -8.09406E-06 -1.93991E-05 -4.26036E-05 -8.56056E-05 -1.57061E-04 + -2.62378E-04 -3.97507E-04 -5.42886E-04 -6.61946E-04 -7.08428E-04 -6.42897E-04 + -4.52500E-04 -1.63368E-04 1.63368E-04 4.52500E-04 6.42897E-04 7.08428E-04 + 6.61946E-04 5.42886E-04 3.97507E-04 2.62378E-04 1.57061E-04 8.56056E-05 + 4.26036E-05 1.93991E-05 8.09406E-06 3.09822E-06 1.08897E-06 3.51719E-07 + 1.04451E-07 2.85352E-08 7.17422E-09 1.66053E-09 + -1.66053E-09 -7.17422E-09 -2.85352E-08 -1.04451E-07 -3.51719E-07 -1.08897E-06 + -3.09822E-06 -8.09406E-06 -1.93991E-05 -4.26036E-05 -8.56056E-05 -1.57061E-04 + -2.62378E-04 -3.97507E-04 -5.42886E-04 -6.61946E-04 -7.08428E-04 -6.42897E-04 + -4.52500E-04 -1.63368E-04 1.63368E-04 4.52500E-04 6.42897E-04 7.08428E-04 + 6.61946E-04 5.42886E-04 3.97507E-04 2.62378E-04 1.57061E-04 8.56056E-05 + 4.26036E-05 1.93991E-05 8.09406E-06 3.09822E-06 1.08897E-06 3.51719E-07 + 1.04451E-07 2.85352E-08 7.17422E-09 1.66053E-09 + -1.56073E-09 -6.74306E-09 -2.68202E-08 -9.81738E-08 -3.30581E-07 -1.02352E-06 + -2.91202E-06 -7.60762E-06 -1.82332E-05 -4.00431E-05 -8.04608E-05 -1.47621E-04 + -2.46609E-04 -3.73618E-04 -5.10261E-04 -6.22177E-04 -6.65900E-04 -6.04366E-04 + -4.25442E-04 -1.53616E-04 1.53616E-04 4.25442E-04 6.04366E-04 6.65900E-04 + 6.22177E-04 5.10261E-04 3.73618E-04 2.46609E-04 1.47621E-04 8.04608E-05 + 4.00431E-05 1.82332E-05 7.60762E-06 2.91202E-06 1.02352E-06 3.30581E-07 + 9.81738E-08 2.68202E-08 6.74306E-09 1.56073E-09 + -1.36805E-09 -5.91059E-09 -2.35091E-08 -8.60537E-08 -2.89769E-07 -8.97164E-07 + -2.55251E-06 -6.66842E-06 -1.59822E-05 -3.50996E-05 -7.05275E-05 -1.29397E-04 + -2.16164E-04 -3.27493E-04 -4.47272E-04 -5.45396E-04 -5.83797E-04 -5.29991E-04 + -3.73225E-04 -1.34801E-04 1.34801E-04 3.73225E-04 5.29991E-04 5.83797E-04 + 5.45396E-04 4.47272E-04 3.27493E-04 2.16164E-04 1.29397E-04 7.05275E-05 + 3.50996E-05 1.59822E-05 6.66842E-06 2.55251E-06 8.97164E-07 2.89769E-07 + 8.60537E-08 2.35091E-08 5.91059E-09 1.36805E-09 + -1.10465E-09 -4.77259E-09 -1.89828E-08 -6.94853E-08 -2.33978E-07 -7.24427E-07 + -2.06106E-06 -5.38451E-06 -1.29051E-05 -2.83417E-05 -5.69484E-05 -1.04483E-04 + -1.74545E-04 -2.64440E-04 -3.61161E-04 -4.40415E-04 -4.71495E-04 -4.28175E-04 + -3.01659E-04 -1.08990E-04 1.08990E-04 3.01659E-04 4.28175E-04 4.71495E-04 + 4.40415E-04 3.61161E-04 2.64440E-04 1.74545E-04 1.04483E-04 5.69484E-05 + 2.83417E-05 1.29051E-05 5.38451E-06 2.06106E-06 7.24427E-07 2.33978E-07 + 6.94853E-08 1.89828E-08 4.77259E-09 1.10465E-09 + -8.11250E-10 -3.50496E-09 -1.39408E-08 -5.10296E-08 -1.71832E-07 -5.32015E-07 + -1.51363E-06 -3.95435E-06 -9.47740E-06 -2.08140E-05 -4.18226E-05 -7.67319E-05 + -1.28185E-04 -1.94203E-04 -2.65235E-04 -3.23441E-04 -3.46275E-04 -3.14476E-04 + -2.21572E-04 -8.00593E-05 8.00593E-05 2.21572E-04 3.14476E-04 3.46275E-04 + 3.23441E-04 2.65235E-04 1.94203E-04 1.28185E-04 7.67319E-05 4.18226E-05 + 2.08140E-05 9.47740E-06 3.95435E-06 1.51363E-06 5.32015E-07 1.71832E-07 + 5.10296E-08 1.39408E-08 3.50496E-09 8.11250E-10 + -5.36111E-10 -2.31624E-09 -9.21274E-09 -3.37227E-08 -1.13555E-07 -3.51580E-07 + -1.00028E-06 -2.61321E-06 -6.26310E-06 -1.37548E-05 -2.76383E-05 -5.07079E-05 + -8.47102E-05 -1.28338E-04 -1.75277E-04 -2.13733E-04 -2.28792E-04 -2.07725E-04 + -1.46302E-04 -5.28470E-05 5.28470E-05 1.46302E-04 2.07725E-04 2.28792E-04 + 2.13733E-04 1.75277E-04 1.28338E-04 8.47102E-05 5.07079E-05 2.76383E-05 + 1.37548E-05 6.26310E-06 2.61321E-06 1.00028E-06 3.51580E-07 1.13555E-07 + 3.37227E-08 9.21274E-09 2.31624E-09 5.36111E-10 + -3.16319E-10 -1.36664E-09 -5.43575E-09 -1.98972E-08 -6.70001E-08 -2.07441E-07 + -5.90189E-07 -1.54186E-06 -3.69539E-06 -8.11569E-06 -1.63073E-05 -2.99190E-05 + -4.99812E-05 -7.57224E-05 -1.03417E-04 -1.26100E-04 -1.34965E-04 -1.22500E-04 + -8.62410E-05 -3.11415E-05 3.11415E-05 8.62410E-05 1.22500E-04 1.34965E-04 + 1.26100E-04 1.03417E-04 7.57224E-05 4.99812E-05 2.99190E-05 1.63073E-05 + 8.11569E-06 3.69539E-06 1.54186E-06 5.90189E-07 2.07441E-07 6.70001E-08 + 1.98972E-08 5.43575E-09 1.36664E-09 3.16319E-10 + -1.65755E-10 -7.16137E-10 -2.84841E-09 -1.04264E-08 -3.51089E-08 -1.08702E-07 + -3.09267E-07 -8.07957E-07 -1.93643E-06 -4.25273E-06 -8.54523E-06 -1.56779E-05 + -2.61908E-05 -3.96795E-05 -5.41913E-05 -6.60760E-05 -7.07160E-05 -6.41753E-05 + -4.51703E-05 -1.63082E-05 1.63082E-05 4.51703E-05 6.41753E-05 7.07160E-05 + 6.60760E-05 5.41913E-05 3.96795E-05 2.61908E-05 1.56779E-05 8.54523E-06 + 4.25273E-06 1.93643E-06 8.07957E-07 3.09267E-07 1.08702E-07 3.51089E-08 + 1.04264E-08 2.84841E-09 7.16137E-10 1.65755E-10 + -7.68780E-11 -3.32147E-10 -1.32110E-09 -4.83581E-09 -1.62837E-08 -5.04163E-08 + -1.43439E-07 -3.74733E-07 -8.98125E-07 -1.97243E-06 -3.96331E-06 -7.27149E-06 + -1.21474E-05 -1.84035E-05 -2.51341E-05 -3.06460E-05 -3.27975E-05 -2.97627E-05 + -2.09475E-05 -7.56251E-06 7.56251E-06 2.09475E-05 2.97627E-05 3.27975E-05 + 3.06460E-05 2.51341E-05 1.84035E-05 1.21474E-05 7.27149E-06 3.96331E-06 + 1.97243E-06 8.98125E-07 3.74733E-07 1.43439E-07 5.04163E-08 1.62837E-08 + 4.83581E-09 1.32110E-09 3.32147E-10 7.68780E-11 + -3.14924E-11 -1.36061E-10 -5.41179E-10 -1.98095E-09 -6.67047E-09 -2.06527E-08 + -5.87587E-08 -1.53507E-07 -3.67910E-07 -8.07991E-07 -1.62354E-06 -2.97871E-06 + -4.97608E-06 -7.53885E-06 -1.02960E-05 -1.25539E-05 -1.34352E-05 -1.21919E-05 + -8.58080E-06 -3.09784E-06 3.09784E-06 8.58080E-06 1.21919E-05 1.34352E-05 + 1.25539E-05 1.02960E-05 7.53885E-06 4.97608E-06 2.97871E-06 1.62354E-06 + 8.07991E-07 3.67910E-07 1.53507E-07 5.87587E-08 2.06527E-08 6.67047E-09 + 1.98095E-09 5.41179E-10 1.36061E-10 3.14924E-11 + -1.13793E-11 -4.91638E-11 -1.95547E-10 -7.15787E-10 -2.41028E-09 -7.46252E-09 + -2.12316E-08 -5.54673E-08 -1.32939E-07 -2.91955E-07 -5.86641E-07 -1.07631E-06 + -1.79803E-06 -2.72405E-06 -3.72030E-06 -4.53616E-06 -4.85459E-06 -4.40536E-06 + -3.10054E-06 -1.11935E-06 1.11935E-06 3.10054E-06 4.40536E-06 4.85459E-06 + 4.53616E-06 3.72030E-06 2.72405E-06 1.79803E-06 1.07631E-06 5.86641E-07 + 2.91955E-07 1.32939E-07 5.54673E-08 2.12316E-08 7.46252E-09 2.41028E-09 + 7.15787E-10 1.95547E-10 4.91638E-11 1.13793E-11 + -3.62402E-12 -1.56574E-11 -6.22765E-11 -2.27959E-10 -7.67609E-10 -2.37662E-09 + -6.76170E-09 -1.76649E-08 -4.23374E-08 -9.29801E-08 -1.86830E-07 -3.42777E-07 + -5.72626E-07 -8.67538E-07 -1.18482E-06 -1.44465E-06 -1.54606E-06 -1.40299E-06 + -9.87439E-07 -3.56485E-07 3.56485E-07 9.87439E-07 1.40299E-06 1.54606E-06 + 1.44465E-06 1.18482E-06 8.67538E-07 5.72626E-07 3.42777E-07 1.86830E-07 + 9.29801E-08 4.23374E-08 1.76649E-08 6.76170E-09 2.37662E-09 7.67609E-10 + 2.27959E-10 6.22765E-11 1.56574E-11 3.62402E-12 + -1.01677E-12 -4.39289E-12 -1.74726E-11 -6.39572E-11 -2.15364E-10 -6.66794E-10 + -1.89709E-09 -4.95613E-09 -1.18784E-08 -2.60869E-08 -5.24177E-08 -9.61708E-08 + -1.60658E-07 -2.43400E-07 -3.32417E-07 -4.05316E-07 -4.33769E-07 -3.93629E-07 + -2.77040E-07 -1.00017E-07 1.00017E-07 2.77040E-07 3.93629E-07 4.33769E-07 + 4.05316E-07 3.32417E-07 2.43400E-07 1.60658E-07 9.61708E-08 5.24177E-08 + 2.60869E-08 1.18784E-08 4.95613E-09 1.89709E-09 6.66794E-10 2.15364E-10 + 6.39572E-11 1.74726E-11 4.39289E-12 1.01677E-12 + -2.51240E-13 -1.08547E-12 -4.31741E-12 -1.58036E-11 -5.32157E-11 -1.64763E-10 + -4.68765E-10 -1.22464E-09 -2.93511E-09 -6.44599E-09 -1.29523E-08 -2.37635E-08 + -3.96982E-08 -6.01434E-08 -8.21392E-08 -1.00152E-07 -1.07183E-07 -9.72644E-08 + -6.84557E-08 -2.47139E-08 2.47139E-08 6.84557E-08 9.72644E-08 1.07183E-07 + 1.00152E-07 8.21392E-08 6.01434E-08 3.96982E-08 2.37635E-08 1.29523E-08 + 6.44599E-09 2.93511E-09 1.22464E-09 4.68765E-10 1.64763E-10 5.32157E-11 + 1.58036E-11 4.31741E-12 1.08547E-12 2.51240E-13 + -5.46661E-14 -2.36182E-13 -9.39405E-13 -3.43863E-12 -1.15789E-11 -3.58499E-11 + -1.01996E-10 -2.66464E-10 -6.38635E-10 -1.40255E-09 -2.81822E-09 -5.17059E-09 + -8.63773E-09 -1.30863E-08 -1.78723E-08 -2.17917E-08 -2.33214E-08 -2.11633E-08 + -1.48949E-08 -5.37737E-09 5.37737E-09 1.48949E-08 2.11633E-08 2.33214E-08 + 2.17917E-08 1.78723E-08 1.30863E-08 8.63773E-09 5.17059E-09 2.81822E-09 + 1.40255E-09 6.38635E-10 2.66464E-10 1.01996E-10 3.58499E-11 1.15789E-11 + 3.43863E-12 9.39405E-13 2.36182E-13 5.46661E-14 + -1.04729E-14 -4.52475E-14 -1.79970E-13 -6.58769E-13 -2.21828E-12 -6.86807E-12 + -1.95403E-11 -5.10489E-11 -1.22349E-10 -2.68699E-10 -5.39911E-10 -9.90574E-10 + -1.65480E-09 -2.50706E-09 -3.42394E-09 -4.17482E-09 -4.46788E-09 -4.05443E-09 + -2.85355E-09 -1.03019E-09 1.03019E-09 2.85355E-09 4.05443E-09 4.46788E-09 + 4.17482E-09 3.42394E-09 2.50706E-09 1.65480E-09 9.90574E-10 5.39911E-10 + 2.68699E-10 1.22349E-10 5.10489E-11 1.95403E-11 6.86807E-12 2.21828E-12 + 6.58769E-13 1.79970E-13 4.52475E-14 1.04729E-14 + -1.76646E-15 -7.63191E-15 -3.03556E-14 -1.11115E-13 -3.74158E-13 -1.15844E-12 + -3.29587E-12 -8.61043E-12 -2.06366E-11 -4.53215E-11 -9.10669E-11 -1.67080E-10 + -2.79117E-10 -4.22866E-10 -5.77518E-10 -7.04168E-10 -7.53599E-10 -6.83863E-10 + -4.81310E-10 -1.73762E-10 1.73762E-10 4.81310E-10 6.83863E-10 7.53599E-10 + 7.04168E-10 5.77518E-10 4.22866E-10 2.79117E-10 1.67080E-10 9.10669E-11 + 4.53215E-11 2.06366E-11 8.61043E-12 3.29587E-12 1.15844E-12 3.74158E-13 + 1.11115E-13 3.03556E-14 7.63191E-15 1.76646E-15 + -2.62313E-16 -1.13331E-15 -4.50769E-15 -1.65001E-14 -5.55610E-14 -1.72024E-13 + -4.89424E-13 -1.27862E-12 -3.06446E-12 -6.73007E-12 -1.35231E-11 -2.48108E-11 + -4.14477E-11 -6.27940E-11 -8.57592E-11 -1.04566E-10 -1.11907E-10 -1.01551E-10 + -7.14726E-11 -2.58030E-11 2.58030E-11 7.14726E-11 1.01551E-10 1.11907E-10 + 1.04566E-10 8.57592E-11 6.27940E-11 4.14477E-11 2.48108E-11 1.35231E-11 + 6.73007E-12 3.06446E-12 1.27862E-12 4.89424E-13 1.72024E-13 5.55610E-14 + 1.65001E-14 4.50769E-15 1.13331E-15 2.62313E-16 + -3.42927E-17 -1.48160E-16 -5.89300E-16 -2.15709E-15 -7.26360E-15 -2.24890E-14 + -6.39834E-14 -1.67156E-13 -4.00623E-13 -8.79836E-13 -1.76790E-12 -3.24357E-12 + -5.41855E-12 -8.20919E-12 -1.12115E-11 -1.36702E-11 -1.46298E-11 -1.32760E-11 + -9.34377E-12 -3.37328E-12 3.37328E-12 9.34377E-12 1.32760E-11 1.46298E-11 + 1.36702E-11 1.12115E-11 8.20919E-12 5.41855E-12 3.24357E-12 1.76790E-12 + 8.79836E-13 4.00623E-13 1.67156E-13 6.39834E-14 2.24890E-14 7.26360E-15 + 2.15709E-15 5.89300E-16 1.48160E-16 3.42927E-17 + -3.94680E-18 -1.70519E-17 -6.78234E-17 -2.48263E-16 -8.35979E-16 -2.58830E-15 + -7.36395E-15 -1.92383E-14 -4.61084E-14 -1.01262E-13 -2.03471E-13 -3.73307E-13 + -6.23629E-13 -9.44809E-13 -1.29035E-12 -1.57332E-12 -1.68376E-12 -1.52795E-12 + -1.07539E-12 -3.88237E-13 3.88237E-13 1.07539E-12 1.52795E-12 1.68376E-12 + 1.57332E-12 1.29035E-12 9.44809E-13 6.23629E-13 3.73307E-13 2.03471E-13 + 1.01262E-13 4.61084E-14 1.92383E-14 7.36395E-15 2.58830E-15 8.35979E-16 + 2.48263E-16 6.78234E-17 1.70519E-17 3.94680E-18 + -1.16028E-17 -5.01294E-17 -1.99388E-16 -7.29846E-16 -2.45762E-15 -7.60910E-15 + -2.16486E-14 -5.65567E-14 -1.35550E-13 -2.97690E-13 -5.98164E-13 -1.09745E-12 + -1.83335E-12 -2.77755E-12 -3.79337E-12 -4.62525E-12 -4.94994E-12 -4.49188E-12 + -3.16143E-12 -1.14134E-12 1.14134E-12 3.16143E-12 4.49188E-12 4.94994E-12 + 4.62525E-12 3.79337E-12 2.77755E-12 1.83335E-12 1.09745E-12 5.98164E-13 + 2.97690E-13 1.35550E-13 5.65567E-14 2.16486E-14 7.60910E-15 2.45762E-15 + 7.29846E-16 1.99388E-16 5.01294E-17 1.16028E-17 + -1.00814E-16 -4.35561E-16 -1.73242E-15 -6.34143E-15 -2.13536E-14 -6.61134E-14 + -1.88099E-13 -4.91406E-13 -1.17775E-12 -2.58655E-12 -5.19728E-12 -9.53545E-12 + -1.59295E-11 -2.41334E-11 -3.29595E-11 -4.01876E-11 -4.30087E-11 -3.90287E-11 + -2.74688E-11 -9.91679E-12 9.91679E-12 2.74688E-11 3.90287E-11 4.30087E-11 + 4.01876E-11 3.29595E-11 2.41334E-11 1.59295E-11 9.53545E-12 5.19728E-12 + 2.58655E-12 1.17775E-12 4.91406E-13 1.88099E-13 6.61134E-14 2.13536E-14 + 6.34143E-15 1.73242E-15 4.35561E-16 1.00814E-16 + -7.71148E-16 -3.33171E-15 -1.32517E-14 -4.85071E-14 -1.63338E-13 -5.05717E-13 + -1.43881E-12 -3.75888E-12 -9.00891E-12 -1.97851E-11 -3.97552E-11 -7.29389E-11 + -1.21848E-10 -1.84602E-10 -2.52115E-10 -3.07404E-10 -3.28983E-10 -2.98540E-10 + -2.10116E-10 -7.58558E-11 7.58558E-11 2.10116E-10 2.98540E-10 3.28983E-10 + 3.07404E-10 2.52115E-10 1.84602E-10 1.21848E-10 7.29389E-11 3.97552E-11 + 1.97851E-11 9.00891E-12 3.75888E-12 1.43881E-12 5.05717E-13 1.63338E-13 + 4.85071E-14 1.32517E-14 3.33171E-15 7.71148E-16 + -5.19305E-15 -2.24363E-14 -8.92395E-14 -3.26656E-13 -1.09995E-12 -3.40559E-12 + -9.68921E-12 -2.53130E-11 -6.06677E-11 -1.33236E-10 -2.67719E-10 -4.91184E-10 + -8.20548E-10 -1.24314E-09 -1.69779E-09 -2.07012E-09 -2.21543E-09 -2.01042E-09 + -1.41496E-09 -5.10827E-10 5.10827E-10 1.41496E-09 2.01042E-09 2.21543E-09 + 2.07012E-09 1.69779E-09 1.24314E-09 8.20548E-10 4.91184E-10 2.67719E-10 + 1.33236E-10 6.06677E-11 2.53130E-11 9.68921E-12 3.40559E-12 1.09995E-12 + 3.26656E-13 8.92395E-14 2.24363E-14 5.19305E-15 + -3.07882E-14 -1.33019E-13 -5.29076E-13 -1.93665E-12 -6.52130E-12 -2.01908E-11 + -5.74447E-11 -1.50074E-10 -3.59682E-10 -7.89922E-10 -1.58723E-09 -2.91209E-09 + -4.86480E-09 -7.37025E-09 -1.00657E-08 -1.22731E-08 -1.31347E-08 -1.19192E-08 + -8.38888E-09 -3.02855E-09 3.02855E-09 8.38888E-09 1.19192E-08 1.31347E-08 + 1.22731E-08 1.00657E-08 7.37025E-09 4.86480E-09 2.91209E-09 1.58723E-09 + 7.89922E-10 3.59682E-10 1.50074E-10 5.74447E-11 2.01908E-11 6.52130E-12 + 1.93665E-12 5.29076E-13 1.33019E-13 3.07882E-14 + -1.60708E-13 -6.94329E-13 -2.76167E-12 -1.01089E-11 -3.40398E-11 -1.05392E-10 + -2.99849E-10 -7.83353E-10 -1.87746E-09 -4.12322E-09 -8.28501E-09 -1.52005E-08 + -2.53932E-08 -3.84712E-08 -5.25409E-08 -6.40632E-08 -6.85603E-08 -6.22159E-08 + -4.37882E-08 -1.58084E-08 1.58084E-08 4.37882E-08 6.22159E-08 6.85603E-08 + 6.40632E-08 5.25409E-08 3.84712E-08 2.53932E-08 1.52005E-08 8.28501E-09 + 4.12322E-09 1.87746E-09 7.83353E-10 2.99849E-10 1.05392E-10 3.40398E-11 + 1.01089E-11 2.76167E-12 6.94329E-13 1.60708E-13 + -7.38597E-13 -3.19107E-12 -1.26924E-11 -4.64596E-11 -1.56444E-10 -4.84370E-10 + -1.37808E-09 -3.60021E-09 -8.62864E-09 -1.89499E-08 -3.80771E-08 -6.98601E-08 + -1.16705E-07 -1.76810E-07 -2.41473E-07 -2.94428E-07 -3.15097E-07 -2.85938E-07 + -2.01246E-07 -7.26539E-08 7.26539E-08 2.01246E-07 2.85938E-07 3.15097E-07 + 2.94428E-07 2.41473E-07 1.76810E-07 1.16705E-07 6.98601E-08 3.80771E-08 + 1.89499E-08 8.62864E-09 3.60021E-09 1.37808E-09 4.84370E-10 1.56444E-10 + 4.64596E-11 1.26924E-11 3.19107E-12 7.38597E-13 + -2.98910E-12 -1.29142E-11 -5.13659E-11 -1.88022E-10 -6.33127E-10 -1.96024E-09 + -5.57707E-09 -1.45700E-08 -3.49201E-08 -7.66903E-08 -1.54098E-07 -2.82723E-07 + -4.72304E-07 -7.15548E-07 -9.77240E-07 -1.19155E-06 -1.27519E-06 -1.15719E-06 + -8.14443E-07 -2.94030E-07 2.94030E-07 8.14443E-07 1.15719E-06 1.27519E-06 + 1.19155E-06 9.77240E-07 7.15548E-07 4.72304E-07 2.82723E-07 1.54098E-07 + 7.66903E-08 3.49201E-08 1.45700E-08 5.57707E-09 1.96024E-09 6.33127E-10 + 1.88022E-10 5.13659E-11 1.29142E-11 2.98910E-12 + -1.06539E-11 -4.60296E-11 -1.83081E-10 -6.70156E-10 -2.25662E-09 -6.98679E-09 + -1.98781E-08 -5.19313E-08 -1.24464E-07 -2.73343E-07 -5.49243E-07 -1.00770E-06 + -1.68341E-06 -2.55039E-06 -3.48313E-06 -4.24698E-06 -4.54511E-06 -4.12452E-06 + -2.90288E-06 -1.04800E-06 1.04800E-06 2.90288E-06 4.12452E-06 4.54511E-06 + 4.24698E-06 3.48313E-06 2.55039E-06 1.68341E-06 1.00770E-06 5.49243E-07 + 2.73343E-07 1.24464E-07 5.19313E-08 1.98781E-08 6.98679E-09 2.25662E-09 + 6.70156E-10 1.83081E-10 4.60296E-11 1.06539E-11 + -3.34530E-11 -1.44532E-10 -5.74869E-10 -2.10427E-09 -7.08574E-09 -2.19384E-08 + -6.24167E-08 -1.63063E-07 -3.90813E-07 -8.58291E-07 -1.72461E-06 -3.16414E-06 + -5.28586E-06 -8.00817E-06 -1.09369E-05 -1.33354E-05 -1.42715E-05 -1.29509E-05 + -9.11497E-06 -3.29069E-06 3.29069E-06 9.11497E-06 1.29509E-05 1.42715E-05 + 1.33354E-05 1.09369E-05 8.00817E-06 5.28586E-06 3.16414E-06 1.72461E-06 + 8.58291E-07 3.90813E-07 1.63063E-07 6.24167E-08 2.19384E-08 7.08574E-09 + 2.10427E-09 5.74869E-10 1.44532E-10 3.34530E-11 + -9.25816E-11 -3.99994E-10 -1.59096E-09 -5.82361E-09 -1.96099E-08 -6.07147E-08 + -1.72739E-07 -4.51279E-07 -1.08158E-06 -2.37534E-06 -4.77289E-06 -8.75681E-06 + -1.46287E-05 -2.21627E-05 -3.02682E-05 -3.69060E-05 -3.94969E-05 -3.58421E-05 + -2.52263E-05 -9.10724E-06 9.10724E-06 2.52263E-05 3.58421E-05 3.94969E-05 + 3.69060E-05 3.02682E-05 2.21627E-05 1.46287E-05 8.75681E-06 4.77289E-06 + 2.37534E-06 1.08158E-06 4.51279E-07 1.72739E-07 6.07147E-08 1.96099E-08 + 5.82361E-09 1.59096E-09 3.99994E-10 9.25816E-11 + -2.26006E-10 -9.76448E-10 -3.88378E-09 -1.42163E-08 -4.78708E-08 -1.48214E-07 + -4.21683E-07 -1.10164E-06 -2.64031E-06 -5.79856E-06 -1.16514E-05 -2.13767E-05 + -3.57110E-05 -5.41027E-05 -7.38895E-05 -9.00944E-05 -9.64220E-05 -8.75052E-05 + -6.15928E-05 -2.22378E-05 2.22378E-05 6.15928E-05 8.75052E-05 9.64220E-05 + 9.00944E-05 7.38895E-05 5.41027E-05 3.57110E-05 2.13767E-05 1.16514E-05 + 5.79856E-06 2.64031E-06 1.10164E-06 4.21683E-07 1.48214E-07 4.78708E-08 + 1.42163E-08 3.88378E-09 9.76448E-10 2.26006E-10 + -4.87288E-10 -2.10530E-09 -8.37376E-09 -3.06516E-08 -1.03213E-07 -3.19562E-07 + -9.09184E-07 -2.37523E-06 -5.69273E-06 -1.25022E-05 -2.51213E-05 -4.60901E-05 + -7.69958E-05 -1.16650E-04 -1.59315E-04 -1.94266E-04 -2.07948E-04 -1.88790E-04 + -1.32955E-04 -4.80229E-05 4.80229E-05 1.32955E-04 1.88790E-04 2.07948E-04 + 1.94266E-04 1.59315E-04 1.16650E-04 7.69958E-05 4.60901E-05 2.51213E-05 + 1.25022E-05 5.69273E-06 2.37523E-06 9.09184E-07 3.19562E-07 1.03213E-07 + 3.06516E-08 8.37376E-09 2.10530E-09 4.87288E-10 + -9.29916E-10 -4.01765E-09 -1.59801E-08 -5.84940E-08 -1.96967E-07 -6.09836E-07 + -1.73504E-06 -4.53278E-06 -1.08637E-05 -2.38585E-05 -4.79402E-05 -8.79559E-05 + -1.46935E-04 -2.22612E-04 -3.04047E-04 -3.70834E-04 -3.97216E-04 -3.61128E-04 + -2.54821E-04 -9.21798E-05 9.21798E-05 2.54821E-04 3.61128E-04 3.97216E-04 + 3.70834E-04 3.04047E-04 2.22612E-04 1.46935E-04 8.79559E-05 4.79402E-05 + 2.38585E-05 1.08637E-05 4.53278E-06 1.73504E-06 6.09836E-07 1.96967E-07 + 5.84940E-08 1.59801E-08 4.01765E-09 9.29916E-10 + -1.57606E-09 -6.80929E-09 -2.70837E-08 -9.91381E-08 -3.33828E-07 -1.03358E-06 + -2.94062E-06 -7.68234E-06 -1.84123E-05 -4.04364E-05 -8.12511E-05 -1.49071E-04 + -2.49032E-04 -3.77300E-04 -5.15378E-04 -6.28868E-04 -6.74517E-04 -6.14966E-04 + -4.35628E-04 -1.58059E-04 1.58059E-04 4.35628E-04 6.14966E-04 6.74517E-04 + 6.28868E-04 5.15378E-04 3.77300E-04 2.49032E-04 1.49071E-04 8.12511E-05 + 4.04364E-05 1.84123E-05 7.68234E-06 2.94062E-06 1.03358E-06 3.33828E-07 + 9.91381E-08 2.70837E-08 6.80929E-09 1.57606E-09 + -2.38491E-09 -1.03039E-08 -4.09833E-08 -1.50017E-07 -5.05153E-07 -1.56402E-06 + -4.44978E-06 -1.16250E-05 -2.78617E-05 -6.11889E-05 -1.22950E-04 -2.25577E-04 + -3.76840E-04 -5.70947E-04 -7.79971E-04 -9.52115E-04 -1.02247E-03 -9.34539E-04 + -6.64285E-04 -2.41658E-04 2.41658E-04 6.64285E-04 9.34539E-04 1.02247E-03 + 9.52115E-04 7.79971E-04 5.70947E-04 3.76840E-04 2.25577E-04 1.22950E-04 + 6.11889E-05 2.78617E-05 1.16250E-05 4.44978E-06 1.56402E-06 5.05153E-07 + 1.50017E-07 4.09833E-08 1.03039E-08 2.38491E-09 + -3.24746E-09 -1.40305E-08 -5.58056E-08 -2.04273E-07 -6.87850E-07 -2.12967E-06 + -6.05912E-06 -1.58294E-05 -3.79383E-05 -8.33190E-05 -1.67417E-04 -3.07161E-04 + -5.13131E-04 -7.77440E-04 -1.06205E-03 -1.29638E-03 -1.39189E-03 -1.27163E-03 + -9.03324E-04 -3.28455E-04 3.28455E-04 9.03324E-04 1.27163E-03 1.39189E-03 + 1.29638E-03 1.06205E-03 7.77440E-04 5.13131E-04 3.07161E-04 1.67417E-04 + 8.33190E-05 3.79383E-05 1.58294E-05 6.05912E-06 2.12967E-06 6.87850E-07 + 2.04273E-07 5.58056E-08 1.40305E-08 3.24746E-09 + -4.02180E-09 -1.73760E-08 -6.91122E-08 -2.52981E-07 -8.51865E-07 -2.63748E-06 + -7.50389E-06 -1.96038E-05 -4.69846E-05 -1.03186E-04 -2.07337E-04 -3.80402E-04 + -6.35484E-04 -9.62799E-04 -1.31513E-03 -1.60459E-03 -1.72047E-03 -1.56732E-03 + -1.10897E-03 -4.02001E-04 4.02001E-04 1.10897E-03 1.56732E-03 1.72047E-03 + 1.60459E-03 1.31513E-03 9.62799E-04 6.35484E-04 3.80402E-04 2.07337E-04 + 1.03186E-04 4.69846E-05 1.96038E-05 7.50389E-06 2.63748E-06 8.51865E-07 + 2.52981E-07 6.91122E-08 1.73760E-08 4.02180E-09 + -4.58824E-09 -1.98233E-08 -7.88462E-08 -2.88612E-07 -9.71844E-07 -3.00896E-06 + -8.56076E-06 -2.23649E-05 -5.36020E-05 -1.17719E-04 -2.36539E-04 -4.33978E-04 + -7.24985E-04 -1.09838E-03 -1.50020E-03 -1.82967E-03 -1.95952E-03 -1.78072E-03 + -1.25569E-03 -4.53990E-04 4.53990E-04 1.25569E-03 1.78072E-03 1.95952E-03 + 1.82967E-03 1.50020E-03 1.09838E-03 7.24985E-04 4.33978E-04 2.36539E-04 + 1.17719E-04 5.36020E-05 2.23649E-05 8.56076E-06 3.00896E-06 9.71844E-07 + 2.88612E-07 7.88462E-08 1.98233E-08 4.58824E-09 + -4.88163E-09 -2.10908E-08 -8.38878E-08 -3.07066E-07 -1.03399E-06 -3.20135E-06 + -9.10815E-06 -2.37950E-05 -5.70294E-05 -1.25246E-04 -2.51664E-04 -4.61728E-04 + -7.71341E-04 -1.16861E-03 -1.59605E-03 -1.94626E-03 -2.08339E-03 -1.89144E-03 + -1.33196E-03 -4.81065E-04 4.81065E-04 1.33196E-03 1.89144E-03 2.08339E-03 + 1.94626E-03 1.59605E-03 1.16861E-03 7.71341E-04 4.61728E-04 2.51664E-04 + 1.25246E-04 5.70294E-05 2.37950E-05 9.10815E-06 3.20135E-06 1.03399E-06 + 3.07066E-07 8.38878E-08 2.10908E-08 4.88163E-09 + -4.88163E-09 -2.10908E-08 -8.38878E-08 -3.07066E-07 -1.03399E-06 -3.20135E-06 + -9.10815E-06 -2.37950E-05 -5.70294E-05 -1.25246E-04 -2.51664E-04 -4.61728E-04 + -7.71341E-04 -1.16861E-03 -1.59605E-03 -1.94626E-03 -2.08339E-03 -1.89144E-03 + -1.33196E-03 -4.81065E-04 4.81065E-04 1.33196E-03 1.89144E-03 2.08339E-03 + 1.94626E-03 1.59605E-03 1.16861E-03 7.71341E-04 4.61728E-04 2.51664E-04 + 1.25246E-04 5.70294E-05 2.37950E-05 9.10815E-06 3.20135E-06 1.03399E-06 + 3.07066E-07 8.38878E-08 2.10908E-08 4.88163E-09 + -4.58824E-09 -1.98233E-08 -7.88462E-08 -2.88612E-07 -9.71844E-07 -3.00896E-06 + -8.56076E-06 -2.23649E-05 -5.36020E-05 -1.17719E-04 -2.36539E-04 -4.33978E-04 + -7.24985E-04 -1.09838E-03 -1.50020E-03 -1.82967E-03 -1.95952E-03 -1.78072E-03 + -1.25569E-03 -4.53990E-04 4.53990E-04 1.25569E-03 1.78072E-03 1.95952E-03 + 1.82967E-03 1.50020E-03 1.09838E-03 7.24985E-04 4.33978E-04 2.36539E-04 + 1.17719E-04 5.36020E-05 2.23649E-05 8.56076E-06 3.00896E-06 9.71844E-07 + 2.88612E-07 7.88462E-08 1.98233E-08 4.58824E-09 + -4.02180E-09 -1.73760E-08 -6.91122E-08 -2.52981E-07 -8.51865E-07 -2.63748E-06 + -7.50389E-06 -1.96038E-05 -4.69846E-05 -1.03186E-04 -2.07337E-04 -3.80402E-04 + -6.35484E-04 -9.62799E-04 -1.31513E-03 -1.60459E-03 -1.72047E-03 -1.56732E-03 + -1.10897E-03 -4.02001E-04 4.02001E-04 1.10897E-03 1.56732E-03 1.72047E-03 + 1.60459E-03 1.31513E-03 9.62799E-04 6.35484E-04 3.80402E-04 2.07337E-04 + 1.03186E-04 4.69846E-05 1.96038E-05 7.50389E-06 2.63748E-06 8.51865E-07 + 2.52981E-07 6.91122E-08 1.73760E-08 4.02180E-09 + -3.24746E-09 -1.40305E-08 -5.58056E-08 -2.04273E-07 -6.87850E-07 -2.12967E-06 + -6.05912E-06 -1.58294E-05 -3.79383E-05 -8.33190E-05 -1.67417E-04 -3.07161E-04 + -5.13131E-04 -7.77440E-04 -1.06205E-03 -1.29638E-03 -1.39189E-03 -1.27163E-03 + -9.03324E-04 -3.28455E-04 3.28455E-04 9.03324E-04 1.27163E-03 1.39189E-03 + 1.29638E-03 1.06205E-03 7.77440E-04 5.13131E-04 3.07161E-04 1.67417E-04 + 8.33190E-05 3.79383E-05 1.58294E-05 6.05912E-06 2.12967E-06 6.87850E-07 + 2.04273E-07 5.58056E-08 1.40305E-08 3.24746E-09 + -2.38491E-09 -1.03039E-08 -4.09833E-08 -1.50017E-07 -5.05153E-07 -1.56402E-06 + -4.44978E-06 -1.16250E-05 -2.78617E-05 -6.11889E-05 -1.22950E-04 -2.25577E-04 + -3.76840E-04 -5.70947E-04 -7.79971E-04 -9.52115E-04 -1.02247E-03 -9.34539E-04 + -6.64285E-04 -2.41658E-04 2.41658E-04 6.64285E-04 9.34539E-04 1.02247E-03 + 9.52115E-04 7.79971E-04 5.70947E-04 3.76840E-04 2.25577E-04 1.22950E-04 + 6.11889E-05 2.78617E-05 1.16250E-05 4.44978E-06 1.56402E-06 5.05153E-07 + 1.50017E-07 4.09833E-08 1.03039E-08 2.38491E-09 + -1.57606E-09 -6.80929E-09 -2.70837E-08 -9.91381E-08 -3.33828E-07 -1.03358E-06 + -2.94062E-06 -7.68234E-06 -1.84123E-05 -4.04364E-05 -8.12511E-05 -1.49071E-04 + -2.49032E-04 -3.77300E-04 -5.15378E-04 -6.28868E-04 -6.74517E-04 -6.14966E-04 + -4.35628E-04 -1.58059E-04 1.58059E-04 4.35628E-04 6.14966E-04 6.74517E-04 + 6.28868E-04 5.15378E-04 3.77300E-04 2.49032E-04 1.49071E-04 8.12511E-05 + 4.04364E-05 1.84123E-05 7.68234E-06 2.94062E-06 1.03358E-06 3.33828E-07 + 9.91381E-08 2.70837E-08 6.80929E-09 1.57606E-09 + -9.29916E-10 -4.01765E-09 -1.59801E-08 -5.84940E-08 -1.96967E-07 -6.09836E-07 + -1.73504E-06 -4.53278E-06 -1.08637E-05 -2.38585E-05 -4.79402E-05 -8.79559E-05 + -1.46935E-04 -2.22612E-04 -3.04047E-04 -3.70834E-04 -3.97216E-04 -3.61128E-04 + -2.54821E-04 -9.21798E-05 9.21798E-05 2.54821E-04 3.61128E-04 3.97216E-04 + 3.70834E-04 3.04047E-04 2.22612E-04 1.46935E-04 8.79559E-05 4.79402E-05 + 2.38585E-05 1.08637E-05 4.53278E-06 1.73504E-06 6.09836E-07 1.96967E-07 + 5.84940E-08 1.59801E-08 4.01765E-09 9.29916E-10 + -4.87288E-10 -2.10530E-09 -8.37376E-09 -3.06516E-08 -1.03213E-07 -3.19562E-07 + -9.09184E-07 -2.37523E-06 -5.69273E-06 -1.25022E-05 -2.51213E-05 -4.60901E-05 + -7.69958E-05 -1.16650E-04 -1.59315E-04 -1.94266E-04 -2.07948E-04 -1.88790E-04 + -1.32955E-04 -4.80229E-05 4.80229E-05 1.32955E-04 1.88790E-04 2.07948E-04 + 1.94266E-04 1.59315E-04 1.16650E-04 7.69958E-05 4.60901E-05 2.51213E-05 + 1.25022E-05 5.69273E-06 2.37523E-06 9.09184E-07 3.19562E-07 1.03213E-07 + 3.06516E-08 8.37376E-09 2.10530E-09 4.87288E-10 + -2.26006E-10 -9.76448E-10 -3.88378E-09 -1.42163E-08 -4.78708E-08 -1.48214E-07 + -4.21683E-07 -1.10164E-06 -2.64031E-06 -5.79856E-06 -1.16514E-05 -2.13767E-05 + -3.57110E-05 -5.41027E-05 -7.38895E-05 -9.00944E-05 -9.64220E-05 -8.75052E-05 + -6.15928E-05 -2.22378E-05 2.22378E-05 6.15928E-05 8.75052E-05 9.64220E-05 + 9.00944E-05 7.38895E-05 5.41027E-05 3.57110E-05 2.13767E-05 1.16514E-05 + 5.79856E-06 2.64031E-06 1.10164E-06 4.21683E-07 1.48214E-07 4.78708E-08 + 1.42163E-08 3.88378E-09 9.76448E-10 2.26006E-10 + -9.25816E-11 -3.99994E-10 -1.59096E-09 -5.82361E-09 -1.96099E-08 -6.07147E-08 + -1.72739E-07 -4.51279E-07 -1.08158E-06 -2.37534E-06 -4.77289E-06 -8.75681E-06 + -1.46287E-05 -2.21627E-05 -3.02682E-05 -3.69060E-05 -3.94969E-05 -3.58421E-05 + -2.52263E-05 -9.10724E-06 9.10724E-06 2.52263E-05 3.58421E-05 3.94969E-05 + 3.69060E-05 3.02682E-05 2.21627E-05 1.46287E-05 8.75681E-06 4.77289E-06 + 2.37534E-06 1.08158E-06 4.51279E-07 1.72739E-07 6.07147E-08 1.96099E-08 + 5.82361E-09 1.59096E-09 3.99994E-10 9.25816E-11 + -3.34530E-11 -1.44532E-10 -5.74869E-10 -2.10427E-09 -7.08574E-09 -2.19384E-08 + -6.24167E-08 -1.63063E-07 -3.90813E-07 -8.58291E-07 -1.72461E-06 -3.16414E-06 + -5.28586E-06 -8.00817E-06 -1.09369E-05 -1.33354E-05 -1.42715E-05 -1.29509E-05 + -9.11497E-06 -3.29069E-06 3.29069E-06 9.11497E-06 1.29509E-05 1.42715E-05 + 1.33354E-05 1.09369E-05 8.00817E-06 5.28586E-06 3.16414E-06 1.72461E-06 + 8.58291E-07 3.90813E-07 1.63063E-07 6.24167E-08 2.19384E-08 7.08574E-09 + 2.10427E-09 5.74869E-10 1.44532E-10 3.34530E-11 + -1.06539E-11 -4.60296E-11 -1.83081E-10 -6.70156E-10 -2.25662E-09 -6.98679E-09 + -1.98781E-08 -5.19313E-08 -1.24464E-07 -2.73343E-07 -5.49243E-07 -1.00770E-06 + -1.68341E-06 -2.55039E-06 -3.48313E-06 -4.24698E-06 -4.54511E-06 -4.12452E-06 + -2.90288E-06 -1.04800E-06 1.04800E-06 2.90288E-06 4.12452E-06 4.54511E-06 + 4.24698E-06 3.48313E-06 2.55039E-06 1.68341E-06 1.00770E-06 5.49243E-07 + 2.73343E-07 1.24464E-07 5.19313E-08 1.98781E-08 6.98679E-09 2.25662E-09 + 6.70156E-10 1.83081E-10 4.60296E-11 1.06539E-11 + -2.98910E-12 -1.29142E-11 -5.13659E-11 -1.88022E-10 -6.33127E-10 -1.96024E-09 + -5.57707E-09 -1.45700E-08 -3.49201E-08 -7.66903E-08 -1.54098E-07 -2.82723E-07 + -4.72304E-07 -7.15548E-07 -9.77240E-07 -1.19155E-06 -1.27519E-06 -1.15719E-06 + -8.14443E-07 -2.94030E-07 2.94030E-07 8.14443E-07 1.15719E-06 1.27519E-06 + 1.19155E-06 9.77240E-07 7.15548E-07 4.72304E-07 2.82723E-07 1.54098E-07 + 7.66903E-08 3.49201E-08 1.45700E-08 5.57707E-09 1.96024E-09 6.33127E-10 + 1.88022E-10 5.13659E-11 1.29142E-11 2.98910E-12 + -7.38597E-13 -3.19107E-12 -1.26924E-11 -4.64596E-11 -1.56444E-10 -4.84370E-10 + -1.37808E-09 -3.60021E-09 -8.62864E-09 -1.89499E-08 -3.80771E-08 -6.98601E-08 + -1.16705E-07 -1.76810E-07 -2.41473E-07 -2.94428E-07 -3.15097E-07 -2.85938E-07 + -2.01246E-07 -7.26539E-08 7.26539E-08 2.01246E-07 2.85938E-07 3.15097E-07 + 2.94428E-07 2.41473E-07 1.76810E-07 1.16705E-07 6.98601E-08 3.80771E-08 + 1.89499E-08 8.62864E-09 3.60021E-09 1.37808E-09 4.84370E-10 1.56444E-10 + 4.64596E-11 1.26924E-11 3.19107E-12 7.38597E-13 + -1.60708E-13 -6.94329E-13 -2.76167E-12 -1.01089E-11 -3.40398E-11 -1.05392E-10 + -2.99849E-10 -7.83353E-10 -1.87746E-09 -4.12322E-09 -8.28501E-09 -1.52005E-08 + -2.53932E-08 -3.84712E-08 -5.25409E-08 -6.40632E-08 -6.85603E-08 -6.22159E-08 + -4.37882E-08 -1.58084E-08 1.58084E-08 4.37882E-08 6.22159E-08 6.85603E-08 + 6.40632E-08 5.25409E-08 3.84712E-08 2.53932E-08 1.52005E-08 8.28501E-09 + 4.12322E-09 1.87746E-09 7.83353E-10 2.99849E-10 1.05392E-10 3.40398E-11 + 1.01089E-11 2.76167E-12 6.94329E-13 1.60708E-13 + -3.07882E-14 -1.33019E-13 -5.29076E-13 -1.93665E-12 -6.52130E-12 -2.01908E-11 + -5.74447E-11 -1.50074E-10 -3.59682E-10 -7.89922E-10 -1.58723E-09 -2.91209E-09 + -4.86480E-09 -7.37025E-09 -1.00657E-08 -1.22731E-08 -1.31347E-08 -1.19192E-08 + -8.38888E-09 -3.02855E-09 3.02855E-09 8.38888E-09 1.19192E-08 1.31347E-08 + 1.22731E-08 1.00657E-08 7.37025E-09 4.86480E-09 2.91209E-09 1.58723E-09 + 7.89922E-10 3.59682E-10 1.50074E-10 5.74447E-11 2.01908E-11 6.52130E-12 + 1.93665E-12 5.29076E-13 1.33019E-13 3.07882E-14 + -5.19305E-15 -2.24363E-14 -8.92395E-14 -3.26656E-13 -1.09995E-12 -3.40559E-12 + -9.68921E-12 -2.53130E-11 -6.06677E-11 -1.33236E-10 -2.67719E-10 -4.91184E-10 + -8.20548E-10 -1.24314E-09 -1.69779E-09 -2.07012E-09 -2.21543E-09 -2.01042E-09 + -1.41496E-09 -5.10827E-10 5.10827E-10 1.41496E-09 2.01042E-09 2.21543E-09 + 2.07012E-09 1.69779E-09 1.24314E-09 8.20548E-10 4.91184E-10 2.67719E-10 + 1.33236E-10 6.06677E-11 2.53130E-11 9.68921E-12 3.40559E-12 1.09995E-12 + 3.26656E-13 8.92395E-14 2.24363E-14 5.19305E-15 + -7.71148E-16 -3.33171E-15 -1.32517E-14 -4.85071E-14 -1.63338E-13 -5.05717E-13 + -1.43881E-12 -3.75888E-12 -9.00891E-12 -1.97851E-11 -3.97552E-11 -7.29389E-11 + -1.21848E-10 -1.84602E-10 -2.52115E-10 -3.07404E-10 -3.28983E-10 -2.98540E-10 + -2.10116E-10 -7.58558E-11 7.58558E-11 2.10116E-10 2.98540E-10 3.28983E-10 + 3.07404E-10 2.52115E-10 1.84602E-10 1.21848E-10 7.29389E-11 3.97552E-11 + 1.97851E-11 9.00891E-12 3.75888E-12 1.43881E-12 5.05717E-13 1.63338E-13 + 4.85071E-14 1.32517E-14 3.33171E-15 7.71148E-16 + -1.00814E-16 -4.35561E-16 -1.73242E-15 -6.34143E-15 -2.13536E-14 -6.61134E-14 + -1.88099E-13 -4.91406E-13 -1.17775E-12 -2.58655E-12 -5.19728E-12 -9.53545E-12 + -1.59295E-11 -2.41334E-11 -3.29595E-11 -4.01876E-11 -4.30087E-11 -3.90287E-11 + -2.74688E-11 -9.91679E-12 9.91679E-12 2.74688E-11 3.90287E-11 4.30087E-11 + 4.01876E-11 3.29595E-11 2.41334E-11 1.59295E-11 9.53545E-12 5.19728E-12 + 2.58655E-12 1.17775E-12 4.91406E-13 1.88099E-13 6.61134E-14 2.13536E-14 + 6.34143E-15 1.73242E-15 4.35561E-16 1.00814E-16 + -1.16028E-17 -5.01294E-17 -1.99388E-16 -7.29846E-16 -2.45762E-15 -7.60910E-15 + -2.16486E-14 -5.65567E-14 -1.35550E-13 -2.97690E-13 -5.98164E-13 -1.09745E-12 + -1.83335E-12 -2.77755E-12 -3.79337E-12 -4.62525E-12 -4.94994E-12 -4.49188E-12 + -3.16143E-12 -1.14134E-12 1.14134E-12 3.16143E-12 4.49188E-12 4.94994E-12 + 4.62525E-12 3.79337E-12 2.77755E-12 1.83335E-12 1.09745E-12 5.98164E-13 + 2.97690E-13 1.35550E-13 5.65567E-14 2.16486E-14 7.60910E-15 2.45762E-15 + 7.29846E-16 1.99388E-16 5.01294E-17 1.16028E-17 + -2.91272E-17 -1.25842E-16 -5.00533E-16 -1.83217E-15 -6.16948E-15 -1.91015E-14 + -5.43455E-14 -1.41977E-13 -3.40277E-13 -7.47306E-13 -1.50160E-12 -2.75499E-12 + -4.60235E-12 -6.97263E-12 -9.52268E-12 -1.16110E-11 -1.24261E-11 -1.12762E-11 + -7.93631E-12 -2.86516E-12 2.86516E-12 7.93631E-12 1.12762E-11 1.24261E-11 + 1.16110E-11 9.52268E-12 6.97263E-12 4.60235E-12 2.75499E-12 1.50160E-12 + 7.47306E-13 3.40277E-13 1.41977E-13 5.43455E-14 1.91015E-14 6.16948E-15 + 1.83217E-15 5.00533E-16 1.25842E-16 2.91272E-17 + -2.53078E-16 -1.09341E-15 -4.34900E-15 -1.59192E-14 -5.36049E-14 -1.65968E-13 + -4.72194E-13 -1.23360E-12 -2.95658E-12 -6.49314E-12 -1.30470E-11 -2.39373E-11 + -3.99886E-11 -6.05833E-11 -8.27400E-11 -1.00885E-10 -1.07967E-10 -9.79759E-11 + -6.89564E-11 -2.48946E-11 2.48946E-11 6.89564E-11 9.79759E-11 1.07967E-10 + 1.00885E-10 8.27400E-11 6.05833E-11 3.99886E-11 2.39373E-11 1.30470E-11 + 6.49314E-12 2.95658E-12 1.23360E-12 4.72194E-13 1.65968E-13 5.36049E-14 + 1.59192E-14 4.34900E-15 1.09341E-15 2.53078E-16 + -1.93585E-15 -8.36375E-15 -3.32665E-14 -1.21770E-13 -4.10037E-13 -1.26953E-12 + -3.61192E-12 -9.43611E-12 -2.26155E-11 -4.96675E-11 -9.97996E-11 -1.83102E-10 + -3.05882E-10 -4.63416E-10 -6.32898E-10 -7.71692E-10 -8.25864E-10 -7.49440E-10 + -5.27464E-10 -1.90425E-10 1.90425E-10 5.27464E-10 7.49440E-10 8.25864E-10 + 7.71692E-10 6.32898E-10 4.63416E-10 3.05882E-10 1.83102E-10 9.97996E-11 + 4.96675E-11 2.26155E-11 9.43611E-12 3.61192E-12 1.26953E-12 4.10037E-13 + 1.21770E-13 3.32665E-14 8.36375E-15 1.93585E-15 + -1.30364E-14 -5.63230E-14 -2.24023E-13 -8.20021E-13 -2.76126E-12 -8.54922E-12 + -2.43233E-11 -6.35445E-11 -1.52297E-10 -3.34470E-10 -6.72069E-10 -1.23304E-09 + -2.05986E-09 -3.12073E-09 -4.26205E-09 -5.19672E-09 -5.56152E-09 -5.04687E-09 + -3.55204E-09 -1.28236E-09 1.28236E-09 3.55204E-09 5.04687E-09 5.56152E-09 + 5.19672E-09 4.26205E-09 3.12073E-09 2.05986E-09 1.23304E-09 6.72069E-10 + 3.34470E-10 1.52297E-10 6.35445E-11 2.43233E-11 8.54922E-12 2.76126E-12 + 8.20021E-13 2.24023E-13 5.63230E-14 1.30364E-14 + -7.72891E-14 -3.33924E-13 -1.32817E-12 -4.86167E-12 -1.63708E-11 -5.06860E-11 + -1.44206E-10 -3.76738E-10 -9.02928E-10 -1.98298E-09 -3.98451E-09 -7.31038E-09 + -1.22124E-08 -1.85019E-08 -2.52685E-08 -3.08099E-08 -3.29727E-08 -2.99215E-08 + -2.10590E-08 -7.60273E-09 7.60273E-09 2.10590E-08 2.99215E-08 3.29727E-08 + 3.08099E-08 2.52685E-08 1.85019E-08 1.22124E-08 7.31038E-09 3.98451E-09 + 1.98298E-09 9.02928E-10 3.76738E-10 1.44206E-10 5.06860E-11 1.63708E-11 + 4.86167E-12 1.32817E-12 3.33924E-13 7.72891E-14 + -4.03433E-13 -1.74301E-12 -6.93275E-12 -2.53769E-11 -8.54519E-11 -2.64570E-10 + -7.52726E-10 -1.96649E-09 -4.71309E-09 -1.03507E-08 -2.07983E-08 -3.81586E-08 + -6.37459E-08 -9.65762E-08 -1.31896E-07 -1.60821E-07 -1.72111E-07 -1.56184E-07 + -1.09924E-07 -3.96846E-08 3.96846E-08 1.09924E-07 1.56184E-07 1.72111E-07 + 1.60821E-07 1.31896E-07 9.65762E-08 6.37459E-08 3.81586E-08 2.07983E-08 + 1.03507E-08 4.71309E-09 1.96649E-09 7.52726E-10 2.64570E-10 8.54519E-11 + 2.53769E-11 6.93275E-12 1.74301E-12 4.03433E-13 + -1.85414E-12 -8.01071E-12 -3.18623E-11 -1.16630E-10 -3.92729E-10 -1.21594E-09 + -3.45946E-09 -9.03780E-09 -2.16609E-08 -4.75710E-08 -9.55869E-08 -1.75373E-07 + -2.92970E-07 -4.43855E-07 -6.06182E-07 -7.39118E-07 -7.91003E-07 -7.17806E-07 + -5.05199E-07 -1.82387E-07 1.82387E-07 5.05199E-07 7.17806E-07 7.91003E-07 + 7.39118E-07 6.06182E-07 4.43855E-07 2.92970E-07 1.75373E-07 9.55869E-08 + 4.75710E-08 2.16609E-08 9.03780E-09 3.45946E-09 1.21594E-09 3.92729E-10 + 1.16630E-10 3.18623E-11 8.01071E-12 1.85414E-12 + -7.50369E-12 -3.24193E-11 -1.28946E-10 -4.72000E-10 -1.58937E-09 -4.92090E-09 + -1.40004E-08 -3.65759E-08 -8.76616E-08 -1.92520E-07 -3.86840E-07 -7.09735E-07 + -1.18565E-06 -1.79628E-06 -2.45322E-06 -2.99121E-06 -3.20119E-06 -2.90496E-06 + -2.04454E-06 -7.38119E-07 7.38119E-07 2.04454E-06 2.90496E-06 3.20119E-06 + 2.99121E-06 2.45322E-06 1.79628E-06 1.18565E-06 7.09735E-07 3.86840E-07 + 1.92520E-07 8.76616E-08 3.65759E-08 1.40004E-08 4.92090E-09 1.58937E-09 + 4.72000E-10 1.28946E-10 3.24193E-11 7.50369E-12 + -2.67450E-11 -1.15550E-10 -4.59597E-10 -1.68233E-09 -5.66491E-09 -1.75393E-08 + -4.99009E-08 -1.30366E-07 -3.12448E-07 -6.86188E-07 -1.37879E-06 -2.52967E-06 + -4.22595E-06 -6.40238E-06 -8.74388E-06 -1.06614E-05 -1.14098E-05 -1.03540E-05 + -7.28724E-06 -2.63084E-06 2.63084E-06 7.28724E-06 1.03540E-05 1.14098E-05 + 1.06614E-05 8.74388E-06 6.40238E-06 4.22595E-06 2.52967E-06 1.37879E-06 + 6.86188E-07 3.12448E-07 1.30366E-07 4.99009E-08 1.75393E-08 5.66491E-09 + 1.68233E-09 4.59597E-10 1.15550E-10 2.67450E-11 + -8.39787E-11 -3.62826E-10 -1.44312E-09 -5.28247E-09 -1.77877E-08 -5.50730E-08 + -1.56688E-07 -4.09345E-07 -9.81079E-07 -2.15461E-06 -4.32938E-06 -7.94311E-06 + -1.32694E-05 -2.01033E-05 -2.74556E-05 -3.34766E-05 -3.58266E-05 -3.25114E-05 + -2.28819E-05 -8.26083E-06 8.26083E-06 2.28819E-05 3.25114E-05 3.58266E-05 + 3.34766E-05 2.74556E-05 2.01033E-05 1.32694E-05 7.94311E-06 4.32938E-06 + 2.15461E-06 9.81079E-07 4.09345E-07 1.56688E-07 5.50730E-08 1.77877E-08 + 5.28247E-09 1.44312E-09 3.62826E-10 8.39787E-11 + -2.32412E-10 -1.00413E-09 -3.99387E-09 -1.46193E-08 -4.92277E-08 -1.52415E-07 + -4.33636E-07 -1.13287E-06 -2.71515E-06 -5.96293E-06 -1.19816E-05 -2.19827E-05 + -3.67232E-05 -5.56363E-05 -7.59838E-05 -9.26475E-05 -9.91527E-05 -8.99801E-05 + -6.33317E-05 -2.28648E-05 2.28648E-05 6.33317E-05 8.99801E-05 9.91527E-05 + 9.26475E-05 7.59838E-05 5.56363E-05 3.67232E-05 2.19827E-05 1.19816E-05 + 5.96293E-06 2.71515E-06 1.13287E-06 4.33636E-07 1.52415E-07 4.92277E-08 + 1.46193E-08 3.99387E-09 1.00413E-09 2.32412E-10 + -5.67355E-10 -2.45123E-09 -9.74966E-09 -3.56880E-08 -1.20173E-07 -3.72070E-07 + -1.05857E-06 -2.76551E-06 -6.62811E-06 -1.45564E-05 -2.92490E-05 -5.36632E-05 + -8.96471E-05 -1.35817E-04 -1.85491E-04 -2.26181E-04 -2.42098E-04 -2.19770E-04 + -1.54749E-04 -5.58881E-05 5.58881E-05 1.54749E-04 2.19770E-04 2.42098E-04 + 2.26181E-04 1.85491E-04 1.35817E-04 8.96471E-05 5.36632E-05 2.92490E-05 + 1.45564E-05 6.62811E-06 2.76551E-06 1.05857E-06 3.72070E-07 1.20173E-07 + 3.56880E-08 9.74966E-09 2.45123E-09 5.67355E-10 + -1.22326E-09 -5.28505E-09 -2.10211E-08 -7.69463E-08 -2.59102E-07 -8.02213E-07 + -2.28237E-06 -5.96267E-06 -1.42907E-05 -3.13849E-05 -6.30633E-05 -1.15702E-04 + -1.93287E-04 -2.92837E-04 -3.99969E-04 -4.87859E-04 -5.22675E-04 -4.75393E-04 + -3.35649E-04 -1.21475E-04 1.21475E-04 3.35649E-04 4.75393E-04 5.22675E-04 + 4.87859E-04 3.99969E-04 2.92837E-04 1.93287E-04 1.15702E-04 6.30633E-05 + 3.13849E-05 1.42907E-05 5.96267E-06 2.28237E-06 8.02213E-07 2.59102E-07 + 7.69463E-08 2.10211E-08 5.28505E-09 1.22326E-09 + -2.33442E-09 -1.00857E-08 -4.01155E-08 -1.46840E-07 -4.94457E-07 -1.53090E-06 + -4.35556E-06 -1.13789E-05 -2.72717E-05 -5.98933E-05 -1.20347E-04 -2.20800E-04 + -3.68862E-04 -5.58867E-04 -7.63531E-04 -9.32371E-04 -1.00231E-03 -9.18125E-04 + -6.54572E-04 -2.38668E-04 2.38668E-04 6.54572E-04 9.18125E-04 1.00231E-03 + 9.32371E-04 7.63531E-04 5.58867E-04 3.68862E-04 2.20800E-04 1.20347E-04 + 5.98933E-05 2.72717E-05 1.13789E-05 4.35556E-06 1.53090E-06 4.94457E-07 + 1.46840E-07 4.01155E-08 1.00857E-08 2.33442E-09 + -3.95647E-09 -1.70937E-08 -6.79895E-08 -2.48871E-07 -8.38026E-07 -2.59464E-06 + -7.38199E-06 -1.92854E-05 -4.62213E-05 -1.01510E-04 -2.03969E-04 -3.74222E-04 + -6.25172E-04 -9.47300E-04 -1.29494E-03 -1.58496E-03 -1.71556E-03 -1.59359E-03 + -1.15757E-03 -4.28006E-04 4.28006E-04 1.15757E-03 1.59359E-03 1.71556E-03 + 1.58496E-03 1.29494E-03 9.47300E-04 6.25172E-04 3.74222E-04 2.03969E-04 + 1.01510E-04 4.62213E-05 1.92854E-05 7.38199E-06 2.59464E-06 8.38026E-07 + 2.48871E-07 6.79895E-08 1.70937E-08 3.95647E-09 + -5.98697E-09 -2.58664E-08 -1.02883E-07 -3.76595E-07 -1.26811E-06 -3.92624E-06 + -1.11705E-05 -2.91829E-05 -6.99426E-05 -1.53606E-04 -3.08648E-04 -5.66279E-04 + -9.46035E-04 -1.43364E-03 -1.96083E-03 -2.40518E-03 -2.61959E-03 -2.46353E-03 + -1.81814E-03 -6.80011E-04 6.80011E-04 1.81814E-03 2.46353E-03 2.61959E-03 + 2.40518E-03 1.96083E-03 1.43364E-03 9.46035E-04 5.66279E-04 3.08648E-04 + 1.53606E-04 6.99426E-05 2.91829E-05 1.11705E-05 3.92624E-06 1.26811E-06 + 3.76595E-07 1.02883E-07 2.58664E-08 5.98697E-09 + -8.15226E-09 -3.52214E-08 -1.40092E-07 -5.12797E-07 -1.72675E-06 -5.34623E-06 + -1.52105E-05 -3.97373E-05 -9.52386E-05 -2.09160E-04 -4.20276E-04 -7.71085E-04 + -1.28820E-03 -1.95220E-03 -2.67011E-03 -3.27477E-03 -3.56430E-03 -3.34634E-03 + -2.46380E-03 -9.19838E-04 9.19838E-04 2.46380E-03 3.34634E-03 3.56430E-03 + 3.27477E-03 2.67011E-03 1.95220E-03 1.28820E-03 7.71085E-04 4.20276E-04 + 2.09160E-04 9.52386E-05 3.97373E-05 1.52105E-05 5.34623E-06 1.72675E-06 + 5.12797E-07 1.40092E-07 3.52214E-08 8.15226E-09 + -1.00961E-08 -4.36198E-08 -1.73496E-07 -6.35071E-07 -2.13848E-06 -6.62101E-06 + -1.88374E-05 -4.92125E-05 -1.17948E-04 -2.59033E-04 -5.20489E-04 -9.54948E-04 + -1.59535E-03 -2.41751E-03 -3.30500E-03 -4.04487E-03 -4.37391E-03 -4.05167E-03 + -2.93058E-03 -1.07991E-03 1.07991E-03 2.93058E-03 4.05167E-03 4.37391E-03 + 4.04487E-03 3.30500E-03 2.41751E-03 1.59535E-03 9.54948E-04 5.20489E-04 + 2.59033E-04 1.17948E-04 4.92125E-05 1.88374E-05 6.62101E-06 2.13848E-06 + 6.35071E-07 1.73496E-07 4.36198E-08 1.00961E-08 + -1.15181E-08 -4.97634E-08 -1.97932E-07 -7.24517E-07 -2.43967E-06 -7.55354E-06 + -2.14905E-05 -5.61438E-05 -1.34560E-04 -2.95516E-04 -5.93797E-04 -1.08944E-03 + -1.82003E-03 -2.75775E-03 -3.76839E-03 -4.60295E-03 -4.94831E-03 -4.52867E-03 + -3.22262E-03 -1.17303E-03 1.17303E-03 3.22262E-03 4.52867E-03 4.94831E-03 + 4.60295E-03 3.76839E-03 2.75775E-03 1.82003E-03 1.08944E-03 5.93797E-04 + 2.95516E-04 1.34560E-04 5.61438E-05 2.14905E-05 7.55354E-06 2.43967E-06 + 7.24517E-07 1.97932E-07 4.97634E-08 1.15181E-08 + -1.22546E-08 -5.29453E-08 -2.10588E-07 -7.70844E-07 -2.59567E-06 -8.03653E-06 + -2.28647E-05 -5.97337E-05 -1.43164E-04 -3.14412E-04 -6.31765E-04 -1.15910E-03 + -1.93638E-03 -2.93392E-03 -4.00820E-03 -4.89155E-03 -5.24531E-03 -4.77600E-03 + -3.37517E-03 -1.22209E-03 1.22209E-03 3.37517E-03 4.77600E-03 5.24531E-03 + 4.89155E-03 4.00820E-03 2.93392E-03 1.93638E-03 1.15910E-03 6.31765E-04 + 3.14412E-04 1.43164E-04 5.97337E-05 2.28647E-05 8.03653E-06 2.59567E-06 + 7.70844E-07 2.10588E-07 5.29453E-08 1.22546E-08 + -1.22546E-08 -5.29453E-08 -2.10588E-07 -7.70844E-07 -2.59567E-06 -8.03653E-06 + -2.28647E-05 -5.97337E-05 -1.43164E-04 -3.14412E-04 -6.31765E-04 -1.15910E-03 + -1.93638E-03 -2.93392E-03 -4.00820E-03 -4.89155E-03 -5.24531E-03 -4.77600E-03 + -3.37517E-03 -1.22209E-03 1.22209E-03 3.37517E-03 4.77600E-03 5.24531E-03 + 4.89155E-03 4.00820E-03 2.93392E-03 1.93638E-03 1.15910E-03 6.31765E-04 + 3.14412E-04 1.43164E-04 5.97337E-05 2.28647E-05 8.03653E-06 2.59567E-06 + 7.70844E-07 2.10588E-07 5.29453E-08 1.22546E-08 + -1.15181E-08 -4.97634E-08 -1.97932E-07 -7.24517E-07 -2.43967E-06 -7.55354E-06 + -2.14905E-05 -5.61438E-05 -1.34560E-04 -2.95516E-04 -5.93797E-04 -1.08944E-03 + -1.82003E-03 -2.75775E-03 -3.76839E-03 -4.60295E-03 -4.94831E-03 -4.52867E-03 + -3.22262E-03 -1.17303E-03 1.17303E-03 3.22262E-03 4.52867E-03 4.94831E-03 + 4.60295E-03 3.76839E-03 2.75775E-03 1.82003E-03 1.08944E-03 5.93797E-04 + 2.95516E-04 1.34560E-04 5.61438E-05 2.14905E-05 7.55354E-06 2.43967E-06 + 7.24517E-07 1.97932E-07 4.97634E-08 1.15181E-08 + -1.00961E-08 -4.36198E-08 -1.73496E-07 -6.35071E-07 -2.13848E-06 -6.62101E-06 + -1.88374E-05 -4.92125E-05 -1.17948E-04 -2.59033E-04 -5.20489E-04 -9.54948E-04 + -1.59535E-03 -2.41751E-03 -3.30500E-03 -4.04487E-03 -4.37391E-03 -4.05167E-03 + -2.93058E-03 -1.07991E-03 1.07991E-03 2.93058E-03 4.05167E-03 4.37391E-03 + 4.04487E-03 3.30500E-03 2.41751E-03 1.59535E-03 9.54948E-04 5.20489E-04 + 2.59033E-04 1.17948E-04 4.92125E-05 1.88374E-05 6.62101E-06 2.13848E-06 + 6.35071E-07 1.73496E-07 4.36198E-08 1.00961E-08 + -8.15226E-09 -3.52214E-08 -1.40092E-07 -5.12797E-07 -1.72675E-06 -5.34623E-06 + -1.52105E-05 -3.97373E-05 -9.52386E-05 -2.09160E-04 -4.20276E-04 -7.71085E-04 + -1.28820E-03 -1.95220E-03 -2.67011E-03 -3.27477E-03 -3.56430E-03 -3.34634E-03 + -2.46380E-03 -9.19838E-04 9.19838E-04 2.46380E-03 3.34634E-03 3.56430E-03 + 3.27477E-03 2.67011E-03 1.95220E-03 1.28820E-03 7.71085E-04 4.20276E-04 + 2.09160E-04 9.52386E-05 3.97373E-05 1.52105E-05 5.34623E-06 1.72675E-06 + 5.12797E-07 1.40092E-07 3.52214E-08 8.15226E-09 + -5.98697E-09 -2.58664E-08 -1.02883E-07 -3.76595E-07 -1.26811E-06 -3.92624E-06 + -1.11705E-05 -2.91829E-05 -6.99426E-05 -1.53606E-04 -3.08648E-04 -5.66279E-04 + -9.46035E-04 -1.43364E-03 -1.96083E-03 -2.40518E-03 -2.61959E-03 -2.46353E-03 + -1.81814E-03 -6.80011E-04 6.80011E-04 1.81814E-03 2.46353E-03 2.61959E-03 + 2.40518E-03 1.96083E-03 1.43364E-03 9.46035E-04 5.66279E-04 3.08648E-04 + 1.53606E-04 6.99426E-05 2.91829E-05 1.11705E-05 3.92624E-06 1.26811E-06 + 3.76595E-07 1.02883E-07 2.58664E-08 5.98697E-09 + -3.95647E-09 -1.70937E-08 -6.79895E-08 -2.48871E-07 -8.38026E-07 -2.59464E-06 + -7.38199E-06 -1.92854E-05 -4.62213E-05 -1.01510E-04 -2.03969E-04 -3.74222E-04 + -6.25172E-04 -9.47300E-04 -1.29494E-03 -1.58496E-03 -1.71556E-03 -1.59359E-03 + -1.15757E-03 -4.28006E-04 4.28006E-04 1.15757E-03 1.59359E-03 1.71556E-03 + 1.58496E-03 1.29494E-03 9.47300E-04 6.25172E-04 3.74222E-04 2.03969E-04 + 1.01510E-04 4.62213E-05 1.92854E-05 7.38199E-06 2.59464E-06 8.38026E-07 + 2.48871E-07 6.79895E-08 1.70937E-08 3.95647E-09 + -2.33442E-09 -1.00857E-08 -4.01155E-08 -1.46840E-07 -4.94457E-07 -1.53090E-06 + -4.35556E-06 -1.13789E-05 -2.72717E-05 -5.98933E-05 -1.20347E-04 -2.20800E-04 + -3.68862E-04 -5.58867E-04 -7.63531E-04 -9.32371E-04 -1.00231E-03 -9.18125E-04 + -6.54572E-04 -2.38668E-04 2.38668E-04 6.54572E-04 9.18125E-04 1.00231E-03 + 9.32371E-04 7.63531E-04 5.58867E-04 3.68862E-04 2.20800E-04 1.20347E-04 + 5.98933E-05 2.72717E-05 1.13789E-05 4.35556E-06 1.53090E-06 4.94457E-07 + 1.46840E-07 4.01155E-08 1.00857E-08 2.33442E-09 + -1.22326E-09 -5.28505E-09 -2.10211E-08 -7.69463E-08 -2.59102E-07 -8.02213E-07 + -2.28237E-06 -5.96267E-06 -1.42907E-05 -3.13849E-05 -6.30633E-05 -1.15702E-04 + -1.93287E-04 -2.92837E-04 -3.99969E-04 -4.87859E-04 -5.22675E-04 -4.75393E-04 + -3.35649E-04 -1.21475E-04 1.21475E-04 3.35649E-04 4.75393E-04 5.22675E-04 + 4.87859E-04 3.99969E-04 2.92837E-04 1.93287E-04 1.15702E-04 6.30633E-05 + 3.13849E-05 1.42907E-05 5.96267E-06 2.28237E-06 8.02213E-07 2.59102E-07 + 7.69463E-08 2.10211E-08 5.28505E-09 1.22326E-09 + -5.67355E-10 -2.45123E-09 -9.74966E-09 -3.56880E-08 -1.20173E-07 -3.72070E-07 + -1.05857E-06 -2.76551E-06 -6.62811E-06 -1.45564E-05 -2.92490E-05 -5.36632E-05 + -8.96471E-05 -1.35817E-04 -1.85491E-04 -2.26181E-04 -2.42098E-04 -2.19770E-04 + -1.54749E-04 -5.58881E-05 5.58881E-05 1.54749E-04 2.19770E-04 2.42098E-04 + 2.26181E-04 1.85491E-04 1.35817E-04 8.96471E-05 5.36632E-05 2.92490E-05 + 1.45564E-05 6.62811E-06 2.76551E-06 1.05857E-06 3.72070E-07 1.20173E-07 + 3.56880E-08 9.74966E-09 2.45123E-09 5.67355E-10 + -2.32412E-10 -1.00413E-09 -3.99387E-09 -1.46193E-08 -4.92277E-08 -1.52415E-07 + -4.33636E-07 -1.13287E-06 -2.71515E-06 -5.96293E-06 -1.19816E-05 -2.19827E-05 + -3.67232E-05 -5.56363E-05 -7.59838E-05 -9.26475E-05 -9.91527E-05 -8.99801E-05 + -6.33317E-05 -2.28648E-05 2.28648E-05 6.33317E-05 8.99801E-05 9.91527E-05 + 9.26475E-05 7.59838E-05 5.56363E-05 3.67232E-05 2.19827E-05 1.19816E-05 + 5.96293E-06 2.71515E-06 1.13287E-06 4.33636E-07 1.52415E-07 4.92277E-08 + 1.46193E-08 3.99387E-09 1.00413E-09 2.32412E-10 + -8.39787E-11 -3.62826E-10 -1.44312E-09 -5.28247E-09 -1.77877E-08 -5.50730E-08 + -1.56688E-07 -4.09345E-07 -9.81079E-07 -2.15461E-06 -4.32938E-06 -7.94311E-06 + -1.32694E-05 -2.01033E-05 -2.74556E-05 -3.34766E-05 -3.58266E-05 -3.25114E-05 + -2.28819E-05 -8.26083E-06 8.26083E-06 2.28819E-05 3.25114E-05 3.58266E-05 + 3.34766E-05 2.74556E-05 2.01033E-05 1.32694E-05 7.94311E-06 4.32938E-06 + 2.15461E-06 9.81079E-07 4.09345E-07 1.56688E-07 5.50730E-08 1.77877E-08 + 5.28247E-09 1.44312E-09 3.62826E-10 8.39787E-11 + -2.67450E-11 -1.15550E-10 -4.59597E-10 -1.68233E-09 -5.66491E-09 -1.75393E-08 + -4.99009E-08 -1.30366E-07 -3.12448E-07 -6.86188E-07 -1.37879E-06 -2.52967E-06 + -4.22595E-06 -6.40238E-06 -8.74388E-06 -1.06614E-05 -1.14098E-05 -1.03540E-05 + -7.28724E-06 -2.63084E-06 2.63084E-06 7.28724E-06 1.03540E-05 1.14098E-05 + 1.06614E-05 8.74388E-06 6.40238E-06 4.22595E-06 2.52967E-06 1.37879E-06 + 6.86188E-07 3.12448E-07 1.30366E-07 4.99009E-08 1.75393E-08 5.66491E-09 + 1.68233E-09 4.59597E-10 1.15550E-10 2.67450E-11 + -7.50369E-12 -3.24193E-11 -1.28946E-10 -4.72000E-10 -1.58937E-09 -4.92090E-09 + -1.40004E-08 -3.65759E-08 -8.76616E-08 -1.92520E-07 -3.86840E-07 -7.09735E-07 + -1.18565E-06 -1.79628E-06 -2.45322E-06 -2.99121E-06 -3.20119E-06 -2.90496E-06 + -2.04454E-06 -7.38119E-07 7.38119E-07 2.04454E-06 2.90496E-06 3.20119E-06 + 2.99121E-06 2.45322E-06 1.79628E-06 1.18565E-06 7.09735E-07 3.86840E-07 + 1.92520E-07 8.76616E-08 3.65759E-08 1.40004E-08 4.92090E-09 1.58937E-09 + 4.72000E-10 1.28946E-10 3.24193E-11 7.50369E-12 + -1.85414E-12 -8.01071E-12 -3.18623E-11 -1.16630E-10 -3.92729E-10 -1.21594E-09 + -3.45946E-09 -9.03780E-09 -2.16609E-08 -4.75710E-08 -9.55869E-08 -1.75373E-07 + -2.92970E-07 -4.43855E-07 -6.06182E-07 -7.39118E-07 -7.91003E-07 -7.17806E-07 + -5.05199E-07 -1.82387E-07 1.82387E-07 5.05199E-07 7.17806E-07 7.91003E-07 + 7.39118E-07 6.06182E-07 4.43855E-07 2.92970E-07 1.75373E-07 9.55869E-08 + 4.75710E-08 2.16609E-08 9.03780E-09 3.45946E-09 1.21594E-09 3.92729E-10 + 1.16630E-10 3.18623E-11 8.01071E-12 1.85414E-12 + -4.03433E-13 -1.74301E-12 -6.93275E-12 -2.53769E-11 -8.54519E-11 -2.64570E-10 + -7.52726E-10 -1.96649E-09 -4.71309E-09 -1.03507E-08 -2.07983E-08 -3.81586E-08 + -6.37459E-08 -9.65762E-08 -1.31896E-07 -1.60821E-07 -1.72111E-07 -1.56184E-07 + -1.09924E-07 -3.96846E-08 3.96846E-08 1.09924E-07 1.56184E-07 1.72111E-07 + 1.60821E-07 1.31896E-07 9.65762E-08 6.37459E-08 3.81586E-08 2.07983E-08 + 1.03507E-08 4.71309E-09 1.96649E-09 7.52726E-10 2.64570E-10 8.54519E-11 + 2.53769E-11 6.93275E-12 1.74301E-12 4.03433E-13 + -7.72891E-14 -3.33924E-13 -1.32817E-12 -4.86167E-12 -1.63708E-11 -5.06860E-11 + -1.44206E-10 -3.76738E-10 -9.02928E-10 -1.98298E-09 -3.98451E-09 -7.31038E-09 + -1.22124E-08 -1.85019E-08 -2.52685E-08 -3.08099E-08 -3.29727E-08 -2.99215E-08 + -2.10590E-08 -7.60273E-09 7.60273E-09 2.10590E-08 2.99215E-08 3.29727E-08 + 3.08099E-08 2.52685E-08 1.85019E-08 1.22124E-08 7.31038E-09 3.98451E-09 + 1.98298E-09 9.02928E-10 3.76738E-10 1.44206E-10 5.06860E-11 1.63708E-11 + 4.86167E-12 1.32817E-12 3.33924E-13 7.72891E-14 + -1.30364E-14 -5.63230E-14 -2.24023E-13 -8.20021E-13 -2.76126E-12 -8.54922E-12 + -2.43233E-11 -6.35445E-11 -1.52297E-10 -3.34470E-10 -6.72069E-10 -1.23304E-09 + -2.05986E-09 -3.12073E-09 -4.26205E-09 -5.19672E-09 -5.56152E-09 -5.04687E-09 + -3.55204E-09 -1.28236E-09 1.28236E-09 3.55204E-09 5.04687E-09 5.56152E-09 + 5.19672E-09 4.26205E-09 3.12073E-09 2.05986E-09 1.23304E-09 6.72069E-10 + 3.34470E-10 1.52297E-10 6.35445E-11 2.43233E-11 8.54922E-12 2.76126E-12 + 8.20021E-13 2.24023E-13 5.63230E-14 1.30364E-14 + -1.93585E-15 -8.36375E-15 -3.32665E-14 -1.21770E-13 -4.10037E-13 -1.26953E-12 + -3.61192E-12 -9.43611E-12 -2.26155E-11 -4.96675E-11 -9.97996E-11 -1.83102E-10 + -3.05882E-10 -4.63416E-10 -6.32898E-10 -7.71692E-10 -8.25864E-10 -7.49440E-10 + -5.27464E-10 -1.90425E-10 1.90425E-10 5.27464E-10 7.49440E-10 8.25864E-10 + 7.71692E-10 6.32898E-10 4.63416E-10 3.05882E-10 1.83102E-10 9.97996E-11 + 4.96675E-11 2.26155E-11 9.43611E-12 3.61192E-12 1.26953E-12 4.10037E-13 + 1.21770E-13 3.32665E-14 8.36375E-15 1.93585E-15 + -2.53078E-16 -1.09341E-15 -4.34900E-15 -1.59192E-14 -5.36049E-14 -1.65968E-13 + -4.72194E-13 -1.23360E-12 -2.95658E-12 -6.49314E-12 -1.30470E-11 -2.39373E-11 + -3.99886E-11 -6.05833E-11 -8.27400E-11 -1.00885E-10 -1.07967E-10 -9.79759E-11 + -6.89564E-11 -2.48946E-11 2.48946E-11 6.89564E-11 9.79759E-11 1.07967E-10 + 1.00885E-10 8.27400E-11 6.05833E-11 3.99886E-11 2.39373E-11 1.30470E-11 + 6.49314E-12 2.95658E-12 1.23360E-12 4.72194E-13 1.65968E-13 5.36049E-14 + 1.59192E-14 4.34900E-15 1.09341E-15 2.53078E-16 + -2.91272E-17 -1.25842E-16 -5.00533E-16 -1.83217E-15 -6.16948E-15 -1.91015E-14 + -5.43455E-14 -1.41977E-13 -3.40277E-13 -7.47306E-13 -1.50160E-12 -2.75499E-12 + -4.60235E-12 -6.97263E-12 -9.52268E-12 -1.16110E-11 -1.24261E-11 -1.12762E-11 + -7.93631E-12 -2.86516E-12 2.86516E-12 7.93631E-12 1.12762E-11 1.24261E-11 + 1.16110E-11 9.52268E-12 6.97263E-12 4.60235E-12 2.75499E-12 1.50160E-12 + 7.47306E-13 3.40277E-13 1.41977E-13 5.43455E-14 1.91015E-14 6.16948E-15 + 1.83217E-15 5.00533E-16 1.25842E-16 2.91272E-17 + -6.24293E-17 -2.69722E-16 -1.07281E-15 -3.92695E-15 -1.32233E-14 -4.09409E-14 + -1.16481E-13 -3.04305E-13 -7.29328E-13 -1.60173E-12 -3.21843E-12 -5.90486E-12 + -9.86437E-12 -1.49447E-11 -2.04103E-11 -2.48863E-11 -2.66333E-11 -2.41687E-11 + -1.70102E-11 -6.14100E-12 6.14100E-12 1.70102E-11 2.41687E-11 2.66333E-11 + 2.48863E-11 2.04103E-11 1.49447E-11 9.86437E-12 5.90486E-12 3.21843E-12 + 1.60173E-12 7.29328E-13 3.04305E-13 1.16481E-13 4.09409E-14 1.32233E-14 + 3.92695E-15 1.07281E-15 2.69722E-16 6.24293E-17 + -5.42431E-16 -2.34354E-15 -9.32135E-15 -3.41202E-14 -1.14893E-13 -3.55725E-13 + -1.01207E-12 -2.64402E-12 -6.33693E-12 -1.39170E-11 -2.79641E-11 -5.13057E-11 + -8.57089E-11 -1.29850E-10 -1.77340E-10 -2.16230E-10 -2.31409E-10 -2.09995E-10 + -1.47797E-10 -5.33575E-11 5.33575E-11 1.47797E-10 2.09995E-10 2.31409E-10 + 2.16230E-10 1.77340E-10 1.29850E-10 8.57089E-11 5.13057E-11 2.79641E-11 + 1.39170E-11 6.33693E-12 2.64402E-12 1.01207E-12 3.55725E-13 1.14893E-13 + 3.41202E-14 9.32135E-15 2.34354E-15 5.42431E-16 + -4.14918E-15 -1.79263E-14 -7.13012E-14 -2.60994E-13 -8.78846E-13 -2.72102E-12 + -7.74156E-12 -2.02247E-11 -4.84727E-11 -1.06454E-10 -2.13904E-10 -3.92449E-10 + -6.55607E-10 -9.93256E-10 -1.35651E-09 -1.65400E-09 -1.77010E-09 -1.60630E-09 + -1.13053E-09 -4.08144E-10 4.08144E-10 1.13053E-09 1.60630E-09 1.77010E-09 + 1.65400E-09 1.35651E-09 9.93256E-10 6.55607E-10 3.92449E-10 2.13904E-10 + 1.06454E-10 4.84727E-11 2.02247E-11 7.74156E-12 2.72102E-12 8.78846E-13 + 2.60994E-13 7.13012E-14 1.79263E-14 4.14918E-15 + -2.79413E-14 -1.20719E-13 -4.80155E-13 -1.75758E-12 -5.91831E-12 -1.83238E-11 + -5.21330E-11 -1.36197E-10 -3.26424E-10 -7.16882E-10 -1.44047E-09 -2.64283E-09 + -4.41498E-09 -6.68876E-09 -9.13500E-09 -1.11383E-08 -1.19202E-08 -1.08171E-08 + -7.61321E-09 -2.74852E-09 2.74852E-09 7.61321E-09 1.08171E-08 1.19202E-08 + 1.11383E-08 9.13500E-09 6.68876E-09 4.41498E-09 2.64283E-09 1.44047E-09 + 7.16882E-10 3.26424E-10 1.36197E-10 5.21330E-11 1.83238E-11 5.91831E-12 + 1.75758E-12 4.80155E-13 1.20719E-13 2.79413E-14 + -1.65656E-13 -7.15710E-13 -2.84671E-12 -1.04202E-11 -3.50880E-11 -1.08637E-10 + -3.09082E-10 -8.07475E-10 -1.93528E-09 -4.25019E-09 -8.54013E-09 -1.56686E-08 + -2.61752E-08 -3.96558E-08 -5.41589E-08 -6.60359E-08 -7.06715E-08 -6.41317E-08 + -4.51366E-08 -1.62952E-08 1.62952E-08 4.51366E-08 6.41317E-08 7.06715E-08 + 6.60359E-08 5.41589E-08 3.96558E-08 2.61752E-08 1.56686E-08 8.54013E-09 + 4.25019E-09 1.93528E-09 8.07475E-10 3.09082E-10 1.08637E-10 3.50880E-11 + 1.04202E-11 2.84671E-12 7.15710E-13 1.65656E-13 + -8.64692E-13 -3.73586E-12 -1.48592E-11 -5.43912E-11 -1.83152E-10 -5.67062E-10 + -1.61334E-09 -4.21485E-09 -1.01017E-08 -2.21851E-08 -4.45777E-08 -8.17867E-08 + -1.36629E-07 -2.06995E-07 -2.82698E-07 -3.44694E-07 -3.68890E-07 -3.34754E-07 + -2.35603E-07 -8.50575E-08 8.50575E-08 2.35603E-07 3.34754E-07 3.68890E-07 + 3.44694E-07 2.82698E-07 2.06995E-07 1.36629E-07 8.17867E-08 4.45777E-08 + 2.21851E-08 1.01017E-08 4.21485E-09 1.61334E-09 5.67062E-10 1.83152E-10 + 5.43912E-11 1.48592E-11 3.73586E-12 8.64692E-13 + -3.97404E-12 -1.71696E-11 -6.82915E-11 -2.49977E-10 -8.41749E-10 -2.60616E-09 + -7.41478E-09 -1.93710E-08 -4.64266E-08 -1.01961E-07 -2.04875E-07 -3.75884E-07 + -6.27933E-07 -9.51329E-07 -1.29925E-06 -1.58418E-06 -1.69539E-06 -1.53850E-06 + -1.08281E-06 -3.90916E-07 3.90916E-07 1.08281E-06 1.53850E-06 1.69539E-06 + 1.58418E-06 1.29925E-06 9.51329E-07 6.27933E-07 3.75884E-07 2.04875E-07 + 1.01961E-07 4.64266E-08 1.93710E-08 7.41478E-09 2.60616E-09 8.41749E-10 + 2.49977E-10 6.82915E-11 1.71696E-11 3.97404E-12 + -1.60829E-11 -6.94854E-11 -2.76375E-10 -1.01166E-09 -3.40655E-09 -1.05471E-08 + -3.00076E-08 -7.83945E-08 -1.87888E-07 -4.12634E-07 -8.29127E-07 -1.52120E-06 + -2.54124E-06 -3.85002E-06 -5.25807E-06 -6.41116E-06 -6.86122E-06 -6.22629E-06 + -4.38213E-06 -1.58204E-06 1.58204E-06 4.38213E-06 6.22629E-06 6.86122E-06 + 6.41116E-06 5.25807E-06 3.85002E-06 2.54124E-06 1.52120E-06 8.29127E-07 + 4.12634E-07 1.87888E-07 7.83945E-08 3.00076E-08 1.05471E-08 3.40655E-09 + 1.01166E-09 2.76375E-10 6.94854E-11 1.60829E-11 + -5.73235E-11 -2.47663E-10 -9.85071E-10 -3.60579E-09 -1.21418E-08 -3.75926E-08 + -1.06954E-07 -2.79417E-07 -6.69680E-07 -1.47073E-06 -2.95522E-06 -5.42193E-06 + -9.05762E-06 -1.37224E-05 -1.87411E-05 -2.28510E-05 -2.44551E-05 -2.21921E-05 + -1.56190E-05 -5.63877E-06 5.63877E-06 1.56190E-05 2.21921E-05 2.44551E-05 + 2.28510E-05 1.87411E-05 1.37224E-05 9.05762E-06 5.42193E-06 2.95522E-06 + 1.47073E-06 6.69680E-07 2.79417E-07 1.06954E-07 3.75926E-08 1.21418E-08 + 3.60579E-09 9.85071E-10 2.47663E-10 5.73235E-11 + -1.79995E-10 -7.77657E-10 -3.09310E-09 -1.13221E-08 -3.81250E-08 -1.18040E-07 + -3.35834E-07 -8.77364E-07 -2.10278E-06 -4.61806E-06 -9.27931E-06 -1.70247E-05 + -2.84407E-05 -4.30882E-05 -5.88465E-05 -7.17516E-05 -7.67886E-05 -6.96831E-05 + -4.90440E-05 -1.77060E-05 1.77060E-05 4.90440E-05 6.96831E-05 7.67886E-05 + 7.17516E-05 5.88465E-05 4.30882E-05 2.84407E-05 1.70247E-05 9.27931E-06 + 4.61806E-06 2.10278E-06 8.77364E-07 3.35834E-07 1.18040E-07 3.81250E-08 + 1.13221E-08 3.09310E-09 7.77657E-10 1.79995E-10 + -4.98138E-10 -2.15218E-09 -8.56020E-09 -3.13341E-08 -1.05511E-07 -3.26677E-07 + -9.29427E-07 -2.42812E-06 -5.81948E-06 -1.27805E-05 -2.56806E-05 -4.71162E-05 + -7.87101E-05 -1.19247E-04 -1.62859E-04 -1.98577E-04 -2.12526E-04 -1.92876E-04 + -1.35764E-04 -4.90183E-05 4.90183E-05 1.35764E-04 1.92876E-04 2.12526E-04 + 1.98577E-04 1.62859E-04 1.19247E-04 7.87101E-05 4.71162E-05 2.56806E-05 + 1.27805E-05 5.81948E-06 2.42812E-06 9.29427E-07 3.26677E-07 1.05511E-07 + 3.13341E-08 8.56020E-09 2.15218E-09 4.98138E-10 + -1.21603E-09 -5.25380E-09 -2.08968E-08 -7.64914E-08 -2.57570E-07 -7.97470E-07 + -2.26888E-06 -5.92742E-06 -1.42063E-05 -3.11993E-05 -6.26904E-05 -1.15018E-04 + -1.92144E-04 -2.91103E-04 -3.97580E-04 -4.84844E-04 -5.19116E-04 -4.71528E-04 + -3.32307E-04 -1.20093E-04 1.20093E-04 3.32307E-04 4.71528E-04 5.19116E-04 + 4.84844E-04 3.97580E-04 2.91103E-04 1.92144E-04 1.15018E-04 6.26904E-05 + 3.11993E-05 1.42063E-05 5.92742E-06 2.26888E-06 7.97470E-07 2.57570E-07 + 7.64914E-08 2.08968E-08 5.25380E-09 1.21603E-09 + -2.62187E-09 -1.13276E-08 -4.50552E-08 -1.64922E-07 -5.55342E-07 -1.71941E-06 + -4.89189E-06 -1.27800E-05 -3.06299E-05 -6.72683E-05 -1.35166E-04 -2.47989E-04 + -4.14281E-04 -6.27670E-04 -8.57436E-04 -1.04655E-03 -1.12346E-03 -1.02604E-03 + -7.28541E-04 -2.64814E-04 2.64814E-04 7.28541E-04 1.02604E-03 1.12346E-03 + 1.04655E-03 8.57436E-04 6.27670E-04 4.14281E-04 2.47989E-04 1.35166E-04 + 6.72683E-05 3.06299E-05 1.27800E-05 4.89189E-06 1.71941E-06 5.55342E-07 + 1.64922E-07 4.50552E-08 1.13276E-08 2.62187E-09 + -5.00344E-09 -2.16171E-08 -8.59811E-08 -3.14728E-07 -1.05979E-06 -3.28124E-06 + -9.33543E-06 -2.43887E-05 -5.84525E-05 -1.28371E-04 -2.57944E-04 -4.73251E-04 + -7.90610E-04 -1.19801E-03 -1.63787E-03 -2.00563E-03 -2.17375E-03 -2.02445E-03 + -1.47548E-03 -5.46880E-04 5.46880E-04 1.47548E-03 2.02445E-03 2.17375E-03 + 2.00563E-03 1.63787E-03 1.19801E-03 7.90610E-04 4.73251E-04 2.57944E-04 + 1.28371E-04 5.84525E-05 2.43887E-05 9.33543E-06 3.28124E-06 1.05979E-06 + 3.14728E-07 8.59811E-08 2.16171E-08 5.00344E-09 + -8.48003E-09 -3.66375E-08 -1.45724E-07 -5.33415E-07 -1.79617E-06 -5.56118E-06 + -1.58221E-05 -4.13350E-05 -9.90677E-05 -2.17569E-04 -4.37174E-04 -8.02090E-04 + -1.34003E-03 -2.03121E-03 -2.78169E-03 -3.42936E-03 -3.78899E-03 -3.66285E-03 + -2.79671E-03 -1.07092E-03 1.07092E-03 2.79671E-03 3.66285E-03 3.78899E-03 + 3.42936E-03 2.78169E-03 2.03121E-03 1.34003E-03 8.02090E-04 4.37174E-04 + 2.17569E-04 9.90677E-05 4.13350E-05 1.58221E-05 5.56118E-06 1.79617E-06 + 5.33415E-07 1.45724E-07 3.66375E-08 8.48003E-09 + -1.28321E-08 -5.54404E-08 -2.20512E-07 -8.07170E-07 -2.71799E-06 -8.41524E-06 + -2.39421E-05 -6.25486E-05 -1.49910E-04 -3.29229E-04 -6.61538E-04 -1.21375E-03 + -2.02792E-03 -3.07512E-03 -4.21909E-03 -5.23680E-03 -5.89126E-03 -5.88224E-03 + -4.65949E-03 -1.82722E-03 1.82722E-03 4.65949E-03 5.88224E-03 5.89126E-03 + 5.23680E-03 4.21909E-03 3.07512E-03 2.02792E-03 1.21375E-03 6.61538E-04 + 3.29229E-04 1.49910E-04 6.25486E-05 2.39421E-05 8.41524E-06 2.71799E-06 + 8.07170E-07 2.20512E-07 5.54404E-08 1.28321E-08 + -1.74730E-08 -7.54913E-08 -3.00264E-07 -1.09910E-06 -3.70100E-06 -1.14588E-05 + -3.26012E-05 -8.51704E-05 -2.04128E-04 -4.48300E-04 -9.00797E-04 -1.65275E-03 + -2.76156E-03 -4.18849E-03 -5.74986E-03 -7.14343E-03 -8.04084E-03 -8.02023E-03 + -6.33670E-03 -2.47961E-03 2.47961E-03 6.33670E-03 8.02023E-03 8.04084E-03 + 7.14343E-03 5.74986E-03 4.18849E-03 2.76156E-03 1.65275E-03 9.00797E-04 + 4.48300E-04 2.04128E-04 8.51704E-05 3.26012E-05 1.14588E-05 3.70100E-06 + 1.09910E-06 3.00264E-07 7.54913E-08 1.74730E-08 + -2.16394E-08 -9.34919E-08 -3.71860E-07 -1.36117E-06 -4.58348E-06 -1.41910E-05 + -4.03749E-05 -1.05479E-04 -2.52802E-04 -5.55195E-04 -1.11559E-03 -2.04685E-03 + -3.42013E-03 -5.18705E-03 -7.11433E-03 -8.79657E-03 -9.75203E-03 -9.43769E-03 + -7.18847E-03 -2.74431E-03 2.74431E-03 7.18847E-03 9.43769E-03 9.75203E-03 + 8.79657E-03 7.11433E-03 5.18705E-03 3.42013E-03 2.04685E-03 1.11559E-03 + 5.55195E-04 2.52802E-04 1.05479E-04 4.03749E-05 1.41910E-05 4.58348E-06 + 1.36117E-06 3.71860E-07 9.34919E-08 2.16394E-08 + -2.46872E-08 -1.06660E-07 -4.24234E-07 -1.55288E-06 -5.22903E-06 -1.61898E-05 + -4.60614E-05 -1.20335E-04 -2.88407E-04 -6.33390E-04 -1.27271E-03 -2.33513E-03 + -3.90171E-03 -5.91610E-03 -8.10378E-03 -9.96616E-03 -1.08768E-02 -1.02075E-02 + -7.47987E-03 -2.77853E-03 2.77853E-03 7.47987E-03 1.02075E-02 1.08768E-02 + 9.96616E-03 8.10378E-03 5.91610E-03 3.90171E-03 2.33513E-03 1.27271E-03 + 6.33390E-04 2.88407E-04 1.20335E-04 4.60614E-05 1.61898E-05 5.22903E-06 + 1.55288E-06 4.24234E-07 1.06660E-07 2.46872E-08 + -2.62657E-08 -1.13480E-07 -4.51360E-07 -1.65218E-06 -5.56339E-06 -1.72250E-05 + -4.90066E-05 -1.28029E-04 -3.06848E-04 -6.73891E-04 -1.35409E-03 -2.48442E-03 + -4.15100E-03 -6.29281E-03 -8.61227E-03 -1.05595E-02 -1.14327E-02 -1.05679E-02 + -7.59590E-03 -2.78229E-03 2.78229E-03 7.59590E-03 1.05679E-02 1.14327E-02 + 1.05595E-02 8.61227E-03 6.29281E-03 4.15100E-03 2.48442E-03 1.35409E-03 + 6.73891E-04 3.06848E-04 1.28029E-04 4.90066E-05 1.72250E-05 5.56339E-06 + 1.65218E-06 4.51360E-07 1.13480E-07 2.62657E-08 + -2.62657E-08 -1.13480E-07 -4.51360E-07 -1.65218E-06 -5.56339E-06 -1.72250E-05 + -4.90066E-05 -1.28029E-04 -3.06848E-04 -6.73891E-04 -1.35409E-03 -2.48442E-03 + -4.15100E-03 -6.29281E-03 -8.61227E-03 -1.05595E-02 -1.14327E-02 -1.05679E-02 + -7.59590E-03 -2.78229E-03 2.78229E-03 7.59590E-03 1.05679E-02 1.14327E-02 + 1.05595E-02 8.61227E-03 6.29281E-03 4.15100E-03 2.48442E-03 1.35409E-03 + 6.73891E-04 3.06848E-04 1.28029E-04 4.90066E-05 1.72250E-05 5.56339E-06 + 1.65218E-06 4.51360E-07 1.13480E-07 2.62657E-08 + -2.46872E-08 -1.06660E-07 -4.24234E-07 -1.55288E-06 -5.22903E-06 -1.61898E-05 + -4.60614E-05 -1.20335E-04 -2.88407E-04 -6.33390E-04 -1.27271E-03 -2.33513E-03 + -3.90171E-03 -5.91610E-03 -8.10378E-03 -9.96616E-03 -1.08768E-02 -1.02075E-02 + -7.47987E-03 -2.77853E-03 2.77853E-03 7.47987E-03 1.02075E-02 1.08768E-02 + 9.96616E-03 8.10378E-03 5.91610E-03 3.90171E-03 2.33513E-03 1.27271E-03 + 6.33390E-04 2.88407E-04 1.20335E-04 4.60614E-05 1.61898E-05 5.22903E-06 + 1.55288E-06 4.24234E-07 1.06660E-07 2.46872E-08 + -2.16394E-08 -9.34919E-08 -3.71860E-07 -1.36117E-06 -4.58348E-06 -1.41910E-05 + -4.03749E-05 -1.05479E-04 -2.52802E-04 -5.55195E-04 -1.11559E-03 -2.04685E-03 + -3.42013E-03 -5.18705E-03 -7.11433E-03 -8.79657E-03 -9.75203E-03 -9.43769E-03 + -7.18847E-03 -2.74431E-03 2.74431E-03 7.18847E-03 9.43769E-03 9.75203E-03 + 8.79657E-03 7.11433E-03 5.18705E-03 3.42013E-03 2.04685E-03 1.11559E-03 + 5.55195E-04 2.52802E-04 1.05479E-04 4.03749E-05 1.41910E-05 4.58348E-06 + 1.36117E-06 3.71860E-07 9.34919E-08 2.16394E-08 + -1.74730E-08 -7.54913E-08 -3.00264E-07 -1.09910E-06 -3.70100E-06 -1.14588E-05 + -3.26012E-05 -8.51704E-05 -2.04128E-04 -4.48300E-04 -9.00797E-04 -1.65275E-03 + -2.76156E-03 -4.18849E-03 -5.74986E-03 -7.14343E-03 -8.04084E-03 -8.02023E-03 + -6.33670E-03 -2.47961E-03 2.47961E-03 6.33670E-03 8.02023E-03 8.04084E-03 + 7.14343E-03 5.74986E-03 4.18849E-03 2.76156E-03 1.65275E-03 9.00797E-04 + 4.48300E-04 2.04128E-04 8.51704E-05 3.26012E-05 1.14588E-05 3.70100E-06 + 1.09910E-06 3.00264E-07 7.54913E-08 1.74730E-08 + -1.28321E-08 -5.54404E-08 -2.20512E-07 -8.07170E-07 -2.71799E-06 -8.41524E-06 + -2.39421E-05 -6.25486E-05 -1.49910E-04 -3.29229E-04 -6.61538E-04 -1.21375E-03 + -2.02792E-03 -3.07512E-03 -4.21909E-03 -5.23680E-03 -5.89126E-03 -5.88224E-03 + -4.65949E-03 -1.82722E-03 1.82722E-03 4.65949E-03 5.88224E-03 5.89126E-03 + 5.23680E-03 4.21909E-03 3.07512E-03 2.02792E-03 1.21375E-03 6.61538E-04 + 3.29229E-04 1.49910E-04 6.25486E-05 2.39421E-05 8.41524E-06 2.71799E-06 + 8.07170E-07 2.20512E-07 5.54404E-08 1.28321E-08 + -8.48003E-09 -3.66375E-08 -1.45724E-07 -5.33415E-07 -1.79617E-06 -5.56118E-06 + -1.58221E-05 -4.13350E-05 -9.90677E-05 -2.17569E-04 -4.37174E-04 -8.02090E-04 + -1.34003E-03 -2.03121E-03 -2.78169E-03 -3.42936E-03 -3.78899E-03 -3.66285E-03 + -2.79671E-03 -1.07092E-03 1.07092E-03 2.79671E-03 3.66285E-03 3.78899E-03 + 3.42936E-03 2.78169E-03 2.03121E-03 1.34003E-03 8.02090E-04 4.37174E-04 + 2.17569E-04 9.90677E-05 4.13350E-05 1.58221E-05 5.56118E-06 1.79617E-06 + 5.33415E-07 1.45724E-07 3.66375E-08 8.48003E-09 + -5.00344E-09 -2.16171E-08 -8.59811E-08 -3.14728E-07 -1.05979E-06 -3.28124E-06 + -9.33543E-06 -2.43887E-05 -5.84525E-05 -1.28371E-04 -2.57944E-04 -4.73251E-04 + -7.90610E-04 -1.19801E-03 -1.63787E-03 -2.00563E-03 -2.17375E-03 -2.02445E-03 + -1.47548E-03 -5.46880E-04 5.46880E-04 1.47548E-03 2.02445E-03 2.17375E-03 + 2.00563E-03 1.63787E-03 1.19801E-03 7.90610E-04 4.73251E-04 2.57944E-04 + 1.28371E-04 5.84525E-05 2.43887E-05 9.33543E-06 3.28124E-06 1.05979E-06 + 3.14728E-07 8.59811E-08 2.16171E-08 5.00344E-09 + -2.62187E-09 -1.13276E-08 -4.50552E-08 -1.64922E-07 -5.55342E-07 -1.71941E-06 + -4.89189E-06 -1.27800E-05 -3.06299E-05 -6.72683E-05 -1.35166E-04 -2.47989E-04 + -4.14281E-04 -6.27670E-04 -8.57436E-04 -1.04655E-03 -1.12346E-03 -1.02604E-03 + -7.28541E-04 -2.64814E-04 2.64814E-04 7.28541E-04 1.02604E-03 1.12346E-03 + 1.04655E-03 8.57436E-04 6.27670E-04 4.14281E-04 2.47989E-04 1.35166E-04 + 6.72683E-05 3.06299E-05 1.27800E-05 4.89189E-06 1.71941E-06 5.55342E-07 + 1.64922E-07 4.50552E-08 1.13276E-08 2.62187E-09 + -1.21603E-09 -5.25380E-09 -2.08968E-08 -7.64914E-08 -2.57570E-07 -7.97470E-07 + -2.26888E-06 -5.92742E-06 -1.42063E-05 -3.11993E-05 -6.26904E-05 -1.15018E-04 + -1.92144E-04 -2.91103E-04 -3.97580E-04 -4.84844E-04 -5.19116E-04 -4.71528E-04 + -3.32307E-04 -1.20093E-04 1.20093E-04 3.32307E-04 4.71528E-04 5.19116E-04 + 4.84844E-04 3.97580E-04 2.91103E-04 1.92144E-04 1.15018E-04 6.26904E-05 + 3.11993E-05 1.42063E-05 5.92742E-06 2.26888E-06 7.97470E-07 2.57570E-07 + 7.64914E-08 2.08968E-08 5.25380E-09 1.21603E-09 + -4.98138E-10 -2.15218E-09 -8.56020E-09 -3.13341E-08 -1.05511E-07 -3.26677E-07 + -9.29427E-07 -2.42812E-06 -5.81948E-06 -1.27805E-05 -2.56806E-05 -4.71162E-05 + -7.87101E-05 -1.19247E-04 -1.62859E-04 -1.98577E-04 -2.12526E-04 -1.92876E-04 + -1.35764E-04 -4.90183E-05 4.90183E-05 1.35764E-04 1.92876E-04 2.12526E-04 + 1.98577E-04 1.62859E-04 1.19247E-04 7.87101E-05 4.71162E-05 2.56806E-05 + 1.27805E-05 5.81948E-06 2.42812E-06 9.29427E-07 3.26677E-07 1.05511E-07 + 3.13341E-08 8.56020E-09 2.15218E-09 4.98138E-10 + -1.79995E-10 -7.77657E-10 -3.09310E-09 -1.13221E-08 -3.81250E-08 -1.18040E-07 + -3.35834E-07 -8.77364E-07 -2.10278E-06 -4.61806E-06 -9.27931E-06 -1.70247E-05 + -2.84407E-05 -4.30882E-05 -5.88465E-05 -7.17516E-05 -7.67886E-05 -6.96831E-05 + -4.90440E-05 -1.77060E-05 1.77060E-05 4.90440E-05 6.96831E-05 7.67886E-05 + 7.17516E-05 5.88465E-05 4.30882E-05 2.84407E-05 1.70247E-05 9.27931E-06 + 4.61806E-06 2.10278E-06 8.77364E-07 3.35834E-07 1.18040E-07 3.81250E-08 + 1.13221E-08 3.09310E-09 7.77657E-10 1.79995E-10 + -5.73235E-11 -2.47663E-10 -9.85071E-10 -3.60579E-09 -1.21418E-08 -3.75926E-08 + -1.06954E-07 -2.79417E-07 -6.69680E-07 -1.47073E-06 -2.95522E-06 -5.42193E-06 + -9.05762E-06 -1.37224E-05 -1.87411E-05 -2.28510E-05 -2.44551E-05 -2.21921E-05 + -1.56190E-05 -5.63877E-06 5.63877E-06 1.56190E-05 2.21921E-05 2.44551E-05 + 2.28510E-05 1.87411E-05 1.37224E-05 9.05762E-06 5.42193E-06 2.95522E-06 + 1.47073E-06 6.69680E-07 2.79417E-07 1.06954E-07 3.75926E-08 1.21418E-08 + 3.60579E-09 9.85071E-10 2.47663E-10 5.73235E-11 + -1.60829E-11 -6.94854E-11 -2.76375E-10 -1.01166E-09 -3.40655E-09 -1.05471E-08 + -3.00076E-08 -7.83945E-08 -1.87888E-07 -4.12634E-07 -8.29127E-07 -1.52120E-06 + -2.54124E-06 -3.85002E-06 -5.25807E-06 -6.41116E-06 -6.86122E-06 -6.22629E-06 + -4.38213E-06 -1.58204E-06 1.58204E-06 4.38213E-06 6.22629E-06 6.86122E-06 + 6.41116E-06 5.25807E-06 3.85002E-06 2.54124E-06 1.52120E-06 8.29127E-07 + 4.12634E-07 1.87888E-07 7.83945E-08 3.00076E-08 1.05471E-08 3.40655E-09 + 1.01166E-09 2.76375E-10 6.94854E-11 1.60829E-11 + -3.97404E-12 -1.71696E-11 -6.82915E-11 -2.49977E-10 -8.41749E-10 -2.60616E-09 + -7.41478E-09 -1.93710E-08 -4.64266E-08 -1.01961E-07 -2.04875E-07 -3.75884E-07 + -6.27933E-07 -9.51329E-07 -1.29925E-06 -1.58418E-06 -1.69539E-06 -1.53850E-06 + -1.08281E-06 -3.90916E-07 3.90916E-07 1.08281E-06 1.53850E-06 1.69539E-06 + 1.58418E-06 1.29925E-06 9.51329E-07 6.27933E-07 3.75884E-07 2.04875E-07 + 1.01961E-07 4.64266E-08 1.93710E-08 7.41478E-09 2.60616E-09 8.41749E-10 + 2.49977E-10 6.82915E-11 1.71696E-11 3.97404E-12 + -8.64692E-13 -3.73586E-12 -1.48592E-11 -5.43912E-11 -1.83152E-10 -5.67062E-10 + -1.61334E-09 -4.21485E-09 -1.01017E-08 -2.21851E-08 -4.45777E-08 -8.17867E-08 + -1.36629E-07 -2.06995E-07 -2.82698E-07 -3.44694E-07 -3.68890E-07 -3.34754E-07 + -2.35603E-07 -8.50575E-08 8.50575E-08 2.35603E-07 3.34754E-07 3.68890E-07 + 3.44694E-07 2.82698E-07 2.06995E-07 1.36629E-07 8.17867E-08 4.45777E-08 + 2.21851E-08 1.01017E-08 4.21485E-09 1.61334E-09 5.67062E-10 1.83152E-10 + 5.43912E-11 1.48592E-11 3.73586E-12 8.64692E-13 + -1.65656E-13 -7.15710E-13 -2.84671E-12 -1.04202E-11 -3.50880E-11 -1.08637E-10 + -3.09082E-10 -8.07475E-10 -1.93528E-09 -4.25019E-09 -8.54013E-09 -1.56686E-08 + -2.61752E-08 -3.96558E-08 -5.41589E-08 -6.60359E-08 -7.06715E-08 -6.41317E-08 + -4.51366E-08 -1.62952E-08 1.62952E-08 4.51366E-08 6.41317E-08 7.06715E-08 + 6.60359E-08 5.41589E-08 3.96558E-08 2.61752E-08 1.56686E-08 8.54013E-09 + 4.25019E-09 1.93528E-09 8.07475E-10 3.09082E-10 1.08637E-10 3.50880E-11 + 1.04202E-11 2.84671E-12 7.15710E-13 1.65656E-13 + -2.79413E-14 -1.20719E-13 -4.80155E-13 -1.75758E-12 -5.91831E-12 -1.83238E-11 + -5.21330E-11 -1.36197E-10 -3.26424E-10 -7.16882E-10 -1.44047E-09 -2.64283E-09 + -4.41498E-09 -6.68876E-09 -9.13500E-09 -1.11383E-08 -1.19202E-08 -1.08171E-08 + -7.61321E-09 -2.74852E-09 2.74852E-09 7.61321E-09 1.08171E-08 1.19202E-08 + 1.11383E-08 9.13500E-09 6.68876E-09 4.41498E-09 2.64283E-09 1.44047E-09 + 7.16882E-10 3.26424E-10 1.36197E-10 5.21330E-11 1.83238E-11 5.91831E-12 + 1.75758E-12 4.80155E-13 1.20719E-13 2.79413E-14 + -4.14918E-15 -1.79263E-14 -7.13012E-14 -2.60994E-13 -8.78846E-13 -2.72102E-12 + -7.74156E-12 -2.02247E-11 -4.84727E-11 -1.06454E-10 -2.13904E-10 -3.92449E-10 + -6.55607E-10 -9.93256E-10 -1.35651E-09 -1.65400E-09 -1.77010E-09 -1.60630E-09 + -1.13053E-09 -4.08144E-10 4.08144E-10 1.13053E-09 1.60630E-09 1.77010E-09 + 1.65400E-09 1.35651E-09 9.93256E-10 6.55607E-10 3.92449E-10 2.13904E-10 + 1.06454E-10 4.84727E-11 2.02247E-11 7.74156E-12 2.72102E-12 8.78846E-13 + 2.60994E-13 7.13012E-14 1.79263E-14 4.14918E-15 + -5.42431E-16 -2.34354E-15 -9.32135E-15 -3.41202E-14 -1.14893E-13 -3.55725E-13 + -1.01207E-12 -2.64402E-12 -6.33693E-12 -1.39170E-11 -2.79641E-11 -5.13057E-11 + -8.57089E-11 -1.29850E-10 -1.77340E-10 -2.16230E-10 -2.31409E-10 -2.09995E-10 + -1.47797E-10 -5.33575E-11 5.33575E-11 1.47797E-10 2.09995E-10 2.31409E-10 + 2.16230E-10 1.77340E-10 1.29850E-10 8.57089E-11 5.13057E-11 2.79641E-11 + 1.39170E-11 6.33693E-12 2.64402E-12 1.01207E-12 3.55725E-13 1.14893E-13 + 3.41202E-14 9.32135E-15 2.34354E-15 5.42431E-16 + -6.24293E-17 -2.69722E-16 -1.07281E-15 -3.92695E-15 -1.32233E-14 -4.09409E-14 + -1.16481E-13 -3.04305E-13 -7.29328E-13 -1.60173E-12 -3.21843E-12 -5.90486E-12 + -9.86437E-12 -1.49447E-11 -2.04103E-11 -2.48863E-11 -2.66333E-11 -2.41687E-11 + -1.70102E-11 -6.14100E-12 6.14100E-12 1.70102E-11 2.41687E-11 2.66333E-11 + 2.48863E-11 2.04103E-11 1.49447E-11 9.86437E-12 5.90486E-12 3.21843E-12 + 1.60173E-12 7.29328E-13 3.04305E-13 1.16481E-13 4.09409E-14 1.32233E-14 + 3.92695E-15 1.07281E-15 2.69722E-16 6.24293E-17 + -1.14201E-16 -4.93398E-16 -1.96247E-15 -7.18350E-15 -2.41890E-14 -7.48924E-14 + -2.13076E-13 -5.56659E-13 -1.33415E-12 -2.93001E-12 -5.88742E-12 -1.08016E-11 + -1.80447E-11 -2.73380E-11 -3.73361E-11 -4.55240E-11 -4.87197E-11 -4.42113E-11 + -3.11164E-11 -1.12336E-11 1.12336E-11 3.11164E-11 4.42113E-11 4.87197E-11 + 4.55240E-11 3.73361E-11 2.73380E-11 1.80447E-11 1.08016E-11 5.88742E-12 + 2.93001E-12 1.33415E-12 5.56659E-13 2.13076E-13 7.48924E-14 2.41890E-14 + 7.18350E-15 1.96247E-15 4.93398E-16 1.14201E-16 + -9.92259E-16 -4.28700E-15 -1.70514E-14 -6.24155E-14 -2.10172E-13 -6.50720E-13 + -1.85136E-12 -4.83666E-12 -1.15920E-11 -2.54580E-11 -5.11542E-11 -9.38526E-11 + -1.56786E-10 -2.37533E-10 -3.24404E-10 -3.95546E-10 -4.23312E-10 -3.84140E-10 + -2.70362E-10 -9.76059E-11 9.76059E-11 2.70362E-10 3.84140E-10 4.23312E-10 + 3.95546E-10 3.24404E-10 2.37533E-10 1.56786E-10 9.38526E-11 5.11542E-11 + 2.54580E-11 1.15920E-11 4.83666E-12 1.85136E-12 6.50720E-13 2.10172E-13 + 6.24155E-14 1.70514E-14 4.28700E-15 9.92259E-16 + -7.59002E-15 -3.27923E-14 -1.30430E-13 -4.77431E-13 -1.60766E-12 -4.97751E-12 + -1.41615E-11 -3.69967E-11 -8.86701E-11 -1.94734E-10 -3.91290E-10 -7.17900E-10 + -1.19929E-09 -1.81694E-09 -2.48144E-09 -3.02562E-09 -3.23801E-09 -2.93838E-09 + -2.06806E-09 -7.46610E-10 7.46610E-10 2.06806E-09 2.93838E-09 3.23801E-09 + 3.02562E-09 2.48144E-09 1.81694E-09 1.19929E-09 7.17900E-10 3.91290E-10 + 1.94734E-10 8.86701E-11 3.69967E-11 1.41615E-11 4.97751E-12 1.60766E-12 + 4.77431E-13 1.30430E-13 3.27923E-14 7.59002E-15 + -5.11126E-14 -2.20829E-13 -8.78339E-13 -3.21510E-12 -1.08262E-11 -3.35195E-11 + -9.53660E-11 -2.49143E-10 -5.97121E-10 -1.31138E-09 -2.63502E-09 -4.83447E-09 + -8.07623E-09 -1.22356E-08 -1.67105E-08 -2.03751E-08 -2.18054E-08 -1.97876E-08 + -1.39267E-08 -5.02781E-09 5.02781E-09 1.39267E-08 1.97876E-08 2.18054E-08 + 2.03751E-08 1.67105E-08 1.22356E-08 8.07623E-09 4.83447E-09 2.63502E-09 + 1.31138E-09 5.97121E-10 2.49143E-10 9.53660E-11 3.35195E-11 1.08262E-11 + 3.21510E-12 8.78339E-13 2.20829E-13 5.11126E-14 + -3.03032E-13 -1.30923E-12 -5.20743E-12 -1.90615E-11 -6.41858E-11 -1.98728E-10 + -5.65398E-10 -1.47710E-09 -3.54016E-09 -7.77479E-09 -1.56223E-08 -2.86622E-08 + -4.78817E-08 -7.25416E-08 -9.90717E-08 -1.20798E-07 -1.29278E-07 -1.17315E-07 + -8.25675E-08 -2.98085E-08 2.98085E-08 8.25675E-08 1.17315E-07 1.29278E-07 + 1.20798E-07 9.90717E-08 7.25416E-08 4.78817E-08 2.86622E-08 1.56223E-08 + 7.77479E-09 3.54016E-09 1.47710E-09 5.65398E-10 1.98728E-10 6.41858E-11 + 1.90615E-11 5.20743E-12 1.30923E-12 3.03032E-13 + -1.58176E-12 -6.83393E-12 -2.71817E-11 -9.94968E-11 -3.35036E-10 -1.03732E-09 + -2.95126E-09 -7.71014E-09 -1.84789E-08 -4.05828E-08 -8.15451E-08 -1.49611E-07 + -2.49933E-07 -3.78652E-07 -5.17134E-07 -6.30541E-07 -6.74804E-07 -6.12359E-07 + -4.30985E-07 -1.55594E-07 1.55594E-07 4.30985E-07 6.12359E-07 6.74804E-07 + 6.30541E-07 5.17134E-07 3.78652E-07 2.49933E-07 1.49611E-07 8.15451E-08 + 4.05828E-08 1.84789E-08 7.71014E-09 2.95126E-09 1.03732E-09 3.35036E-10 + 9.94968E-11 2.71817E-11 6.83393E-12 1.58176E-12 + -7.26963E-12 -3.14081E-11 -1.24924E-10 -4.57278E-10 -1.53979E-09 -4.76740E-09 + -1.35637E-08 -3.54350E-08 -8.49273E-08 -1.86515E-07 -3.74773E-07 -6.87597E-07 + -1.14867E-06 -1.74025E-06 -2.37670E-06 -2.89791E-06 -3.10133E-06 -2.81434E-06 + -1.98076E-06 -7.15095E-07 7.15095E-07 1.98076E-06 2.81434E-06 3.10133E-06 + 2.89791E-06 2.37670E-06 1.74025E-06 1.14867E-06 6.87597E-07 3.74773E-07 + 1.86515E-07 8.49273E-08 3.54350E-08 1.35637E-08 4.76740E-09 1.53979E-09 + 4.57278E-10 1.24924E-10 3.14081E-11 7.26963E-12 + -2.94202E-11 -1.27108E-10 -5.05568E-10 -1.85060E-09 -6.23154E-09 -1.92937E-08 + -5.48923E-08 -1.43405E-07 -3.43700E-07 -7.54823E-07 -1.51671E-06 -2.78270E-06 + -4.64865E-06 -7.04277E-06 -9.61848E-06 -1.17278E-05 -1.25511E-05 -1.13896E-05 + -8.01614E-06 -2.89399E-06 2.89399E-06 8.01614E-06 1.13896E-05 1.25511E-05 + 1.17278E-05 9.61848E-06 7.04277E-06 4.64865E-06 2.78270E-06 1.51671E-06 + 7.54823E-07 3.43700E-07 1.43405E-07 5.48923E-08 1.92937E-08 6.23154E-09 + 1.85060E-09 5.05568E-10 1.27108E-10 2.94202E-11 + -1.04861E-10 -4.53046E-10 -1.80197E-09 -6.59600E-09 -2.22108E-08 -6.87674E-08 + -1.95650E-07 -5.11133E-07 -1.22503E-06 -2.69038E-06 -5.40592E-06 -9.91824E-06 + -1.65689E-05 -2.51022E-05 -3.42826E-05 -4.18008E-05 -4.47352E-05 -4.05955E-05 + -2.85716E-05 -1.03149E-05 1.03149E-05 2.85716E-05 4.05955E-05 4.47352E-05 + 4.18008E-05 3.42826E-05 2.51022E-05 1.65689E-05 9.91824E-06 5.40592E-06 + 2.69038E-06 1.22503E-06 5.11133E-07 1.95650E-07 6.87674E-08 2.22108E-08 + 6.59600E-09 1.80197E-09 4.53046E-10 1.04861E-10 + -3.29260E-10 -1.42255E-09 -5.65814E-09 -2.07113E-08 -6.97413E-08 -2.15928E-07 + -6.14335E-07 -1.60494E-06 -3.84657E-06 -8.44772E-06 -1.69745E-05 -3.11430E-05 + -5.20260E-05 -7.88203E-05 -1.07647E-04 -1.31254E-04 -1.40468E-04 -1.27471E-04 + -8.97161E-05 -3.23895E-05 3.23895E-05 8.97161E-05 1.27471E-04 1.40468E-04 + 1.31254E-04 1.07647E-04 7.88203E-05 5.20260E-05 3.11430E-05 1.69745E-05 + 8.44772E-06 3.84657E-06 1.60494E-06 6.14335E-07 2.15928E-07 6.97413E-08 + 2.07113E-08 5.65814E-09 1.42255E-09 3.29260E-10 + -9.11233E-10 -3.93694E-09 -1.56590E-08 -5.73188E-08 -1.93010E-07 -5.97584E-07 + -1.70018E-06 -4.44171E-06 -1.06455E-05 -2.33792E-05 -4.69771E-05 -8.61888E-05 + -1.43983E-04 -2.18137E-04 -2.97916E-04 -3.63257E-04 -3.88783E-04 -3.52854E-04 + -2.48390E-04 -8.96869E-05 8.96869E-05 2.48390E-04 3.52854E-04 3.88783E-04 + 3.63257E-04 2.97916E-04 2.18137E-04 1.43983E-04 8.61888E-05 4.69771E-05 + 2.33792E-05 1.06455E-05 4.44171E-06 1.70018E-06 5.97584E-07 1.93010E-07 + 5.73188E-08 1.56590E-08 3.93694E-09 9.11233E-10 + -2.22446E-09 -9.61067E-09 -3.82261E-08 -1.39924E-07 -4.71168E-07 -1.45880E-06 + -4.15041E-06 -1.08429E-05 -2.59872E-05 -5.70723E-05 -1.14678E-04 -2.10400E-04 + -3.51485E-04 -5.32512E-04 -7.27309E-04 -8.87026E-04 -9.49982E-04 -8.63370E-04 + -6.08911E-04 -2.20182E-04 2.20182E-04 6.08911E-04 8.63370E-04 9.49982E-04 + 8.87026E-04 7.27309E-04 5.32512E-04 3.51485E-04 2.10400E-04 1.14678E-04 + 5.70723E-05 2.59872E-05 1.08429E-05 4.15041E-06 1.45880E-06 4.71168E-07 + 1.39924E-07 3.82261E-08 9.61067E-09 2.22446E-09 + -4.79613E-09 -2.07214E-08 -8.24186E-08 -3.01688E-07 -1.01588E-06 -3.14529E-06 + -8.94863E-06 -2.33782E-05 -5.60306E-05 -1.23053E-04 -2.47256E-04 -4.53642E-04 + -7.57841E-04 -1.14823E-03 -1.56883E-03 -1.91609E-03 -2.06068E-03 -1.88893E-03 + -1.34786E-03 -4.91756E-04 4.91756E-04 1.34786E-03 1.88893E-03 2.06068E-03 + 1.91609E-03 1.56883E-03 1.14823E-03 7.57841E-04 4.53642E-04 2.47256E-04 + 1.23053E-04 5.60306E-05 2.33782E-05 8.94863E-06 3.14529E-06 1.01588E-06 + 3.01688E-07 8.24186E-08 2.07214E-08 4.79613E-09 + -9.15269E-09 -3.95437E-08 -1.57283E-07 -5.75726E-07 -1.93865E-06 -6.00230E-06 + -1.70771E-05 -4.46138E-05 -1.06926E-04 -2.34827E-04 -4.71852E-04 -8.65713E-04 + -1.44630E-03 -2.19197E-03 -2.99912E-03 -3.68306E-03 -4.02289E-03 -3.80247E-03 + -2.82330E-03 -1.06033E-03 1.06033E-03 2.82330E-03 3.80247E-03 4.02289E-03 + 3.68306E-03 2.99912E-03 2.19197E-03 1.44630E-03 8.65713E-04 4.71852E-04 + 2.34827E-04 1.06926E-04 4.46138E-05 1.70771E-05 6.00230E-06 1.93865E-06 + 5.75726E-07 1.57283E-07 3.95437E-08 9.15269E-09 + -1.55124E-08 -6.70203E-08 -2.66571E-07 -9.75765E-07 -3.28570E-06 -1.01730E-05 + -2.89430E-05 -7.56133E-05 -1.81223E-04 -3.97995E-04 -7.99716E-04 -1.46728E-03 + -2.45164E-03 -3.71829E-03 -5.10438E-03 -6.34438E-03 -7.15536E-03 -7.16745E-03 + -5.69287E-03 -2.23557E-03 2.23557E-03 5.69287E-03 7.16745E-03 7.15536E-03 + 6.34438E-03 5.10438E-03 3.71829E-03 2.45164E-03 1.46728E-03 7.99716E-04 + 3.97995E-04 1.81223E-04 7.56133E-05 2.89430E-05 1.01730E-05 3.28570E-06 + 9.75765E-07 2.66571E-07 6.70203E-08 1.55124E-08 + -2.34735E-08 -1.01416E-07 -4.03378E-07 -1.47654E-06 -4.97196E-06 -1.53938E-05 + -4.37969E-05 -1.14419E-04 -2.74228E-04 -6.02252E-04 -1.21015E-03 -2.22043E-03 + -3.71095E-03 -5.63478E-03 -7.77089E-03 -9.80001E-03 -1.14328E-02 -1.20731E-02 + -1.01061E-02 -4.09254E-03 4.09254E-03 1.01061E-02 1.20731E-02 1.14328E-02 + 9.80001E-03 7.77089E-03 5.63478E-03 3.71095E-03 2.22043E-03 1.21015E-03 + 6.02252E-04 2.74228E-04 1.14419E-04 4.37969E-05 1.53938E-05 4.97196E-06 + 1.47654E-06 4.03378E-07 1.01416E-07 2.34735E-08 + -3.19631E-08 -1.38095E-07 -5.49266E-07 -2.01056E-06 -6.77016E-06 -2.09613E-05 + -5.96368E-05 -1.55801E-04 -3.73408E-04 -8.20068E-04 -1.64784E-03 -3.02370E-03 + -5.05500E-03 -7.68472E-03 -1.06359E-02 -1.35203E-02 -1.59648E-02 -1.70505E-02 + -1.43579E-02 -5.82395E-03 5.82395E-03 1.43579E-02 1.70505E-02 1.59648E-02 + 1.35203E-02 1.06359E-02 7.68472E-03 5.05500E-03 3.02370E-03 1.64784E-03 + 8.20068E-04 3.73408E-04 1.55801E-04 5.96368E-05 2.09613E-05 6.77016E-06 + 2.01056E-06 5.49266E-07 1.38095E-07 3.19631E-08 + -3.95845E-08 -1.71023E-07 -6.80236E-07 -2.48996E-06 -8.38447E-06 -2.59594E-05 + -7.38569E-05 -1.92950E-04 -4.62445E-04 -1.01561E-03 -2.04078E-03 -3.74489E-03 + -6.26190E-03 -9.52510E-03 -1.31939E-02 -1.67420E-02 -1.95338E-02 -2.03036E-02 + -1.65464E-02 -6.56964E-03 6.56964E-03 1.65464E-02 2.03036E-02 1.95338E-02 + 1.67420E-02 1.31939E-02 9.52510E-03 6.26190E-03 3.74489E-03 2.04078E-03 + 1.01561E-03 4.62445E-04 1.92950E-04 7.38569E-05 2.59594E-05 8.38447E-06 + 2.48996E-06 6.80236E-07 1.71023E-07 3.95845E-08 + -4.51597E-08 -1.95110E-07 -7.76043E-07 -2.84066E-06 -9.56537E-06 -2.96156E-05 + -8.42592E-05 -2.20126E-04 -5.27577E-04 -1.15865E-03 -2.32821E-03 -4.27231E-03 + -7.14349E-03 -1.08624E-02 -1.50170E-02 -1.89064E-02 -2.15906E-02 -2.16012E-02 + -1.68626E-02 -6.51057E-03 6.51057E-03 1.68626E-02 2.16012E-02 2.15906E-02 + 1.89064E-02 1.50170E-02 1.08624E-02 7.14349E-03 4.27231E-03 2.32821E-03 + 1.15865E-03 5.27577E-04 2.20126E-04 8.42592E-05 2.96156E-05 9.56537E-06 + 2.84066E-06 7.76043E-07 1.95110E-07 4.51597E-08 + -4.80473E-08 -2.07586E-07 -8.25665E-07 -3.02229E-06 -1.01770E-05 -3.15093E-05 + -8.96469E-05 -2.34202E-04 -5.61312E-04 -1.23274E-03 -2.47706E-03 -4.54533E-03 + -7.59879E-03 -1.15467E-02 -1.59225E-02 -1.98980E-02 -2.23493E-02 -2.17741E-02 + -1.65115E-02 -6.25543E-03 6.25543E-03 1.65115E-02 2.17741E-02 2.23493E-02 + 1.98980E-02 1.59225E-02 1.15467E-02 7.59879E-03 4.54533E-03 2.47706E-03 + 1.23274E-03 5.61312E-04 2.34202E-04 8.96469E-05 3.15093E-05 1.01770E-05 + 3.02229E-06 8.25665E-07 2.07586E-07 4.80473E-08 + -4.80473E-08 -2.07586E-07 -8.25665E-07 -3.02229E-06 -1.01770E-05 -3.15093E-05 + -8.96469E-05 -2.34202E-04 -5.61312E-04 -1.23274E-03 -2.47706E-03 -4.54533E-03 + -7.59879E-03 -1.15467E-02 -1.59225E-02 -1.98980E-02 -2.23493E-02 -2.17741E-02 + -1.65115E-02 -6.25543E-03 6.25543E-03 1.65115E-02 2.17741E-02 2.23493E-02 + 1.98980E-02 1.59225E-02 1.15467E-02 7.59879E-03 4.54533E-03 2.47706E-03 + 1.23274E-03 5.61312E-04 2.34202E-04 8.96469E-05 3.15093E-05 1.01770E-05 + 3.02229E-06 8.25665E-07 2.07586E-07 4.80473E-08 + -4.51597E-08 -1.95110E-07 -7.76043E-07 -2.84066E-06 -9.56537E-06 -2.96156E-05 + -8.42592E-05 -2.20126E-04 -5.27577E-04 -1.15865E-03 -2.32821E-03 -4.27231E-03 + -7.14349E-03 -1.08624E-02 -1.50170E-02 -1.89064E-02 -2.15906E-02 -2.16012E-02 + -1.68626E-02 -6.51057E-03 6.51057E-03 1.68626E-02 2.16012E-02 2.15906E-02 + 1.89064E-02 1.50170E-02 1.08624E-02 7.14349E-03 4.27231E-03 2.32821E-03 + 1.15865E-03 5.27577E-04 2.20126E-04 8.42592E-05 2.96156E-05 9.56537E-06 + 2.84066E-06 7.76043E-07 1.95110E-07 4.51597E-08 + -3.95845E-08 -1.71023E-07 -6.80236E-07 -2.48996E-06 -8.38447E-06 -2.59594E-05 + -7.38569E-05 -1.92950E-04 -4.62445E-04 -1.01561E-03 -2.04078E-03 -3.74489E-03 + -6.26190E-03 -9.52510E-03 -1.31939E-02 -1.67420E-02 -1.95338E-02 -2.03036E-02 + -1.65464E-02 -6.56964E-03 6.56964E-03 1.65464E-02 2.03036E-02 1.95338E-02 + 1.67420E-02 1.31939E-02 9.52510E-03 6.26190E-03 3.74489E-03 2.04078E-03 + 1.01561E-03 4.62445E-04 1.92950E-04 7.38569E-05 2.59594E-05 8.38447E-06 + 2.48996E-06 6.80236E-07 1.71023E-07 3.95845E-08 + -3.19631E-08 -1.38095E-07 -5.49266E-07 -2.01056E-06 -6.77016E-06 -2.09613E-05 + -5.96368E-05 -1.55801E-04 -3.73408E-04 -8.20068E-04 -1.64784E-03 -3.02370E-03 + -5.05500E-03 -7.68472E-03 -1.06359E-02 -1.35203E-02 -1.59648E-02 -1.70505E-02 + -1.43579E-02 -5.82395E-03 5.82395E-03 1.43579E-02 1.70505E-02 1.59648E-02 + 1.35203E-02 1.06359E-02 7.68472E-03 5.05500E-03 3.02370E-03 1.64784E-03 + 8.20068E-04 3.73408E-04 1.55801E-04 5.96368E-05 2.09613E-05 6.77016E-06 + 2.01056E-06 5.49266E-07 1.38095E-07 3.19631E-08 + -2.34735E-08 -1.01416E-07 -4.03378E-07 -1.47654E-06 -4.97196E-06 -1.53938E-05 + -4.37969E-05 -1.14419E-04 -2.74228E-04 -6.02252E-04 -1.21015E-03 -2.22043E-03 + -3.71095E-03 -5.63478E-03 -7.77089E-03 -9.80001E-03 -1.14328E-02 -1.20731E-02 + -1.01061E-02 -4.09254E-03 4.09254E-03 1.01061E-02 1.20731E-02 1.14328E-02 + 9.80001E-03 7.77089E-03 5.63478E-03 3.71095E-03 2.22043E-03 1.21015E-03 + 6.02252E-04 2.74228E-04 1.14419E-04 4.37969E-05 1.53938E-05 4.97196E-06 + 1.47654E-06 4.03378E-07 1.01416E-07 2.34735E-08 + -1.55124E-08 -6.70203E-08 -2.66571E-07 -9.75765E-07 -3.28570E-06 -1.01730E-05 + -2.89430E-05 -7.56133E-05 -1.81223E-04 -3.97995E-04 -7.99716E-04 -1.46728E-03 + -2.45164E-03 -3.71829E-03 -5.10438E-03 -6.34438E-03 -7.15536E-03 -7.16745E-03 + -5.69287E-03 -2.23557E-03 2.23557E-03 5.69287E-03 7.16745E-03 7.15536E-03 + 6.34438E-03 5.10438E-03 3.71829E-03 2.45164E-03 1.46728E-03 7.99716E-04 + 3.97995E-04 1.81223E-04 7.56133E-05 2.89430E-05 1.01730E-05 3.28570E-06 + 9.75765E-07 2.66571E-07 6.70203E-08 1.55124E-08 + -9.15269E-09 -3.95437E-08 -1.57283E-07 -5.75726E-07 -1.93865E-06 -6.00230E-06 + -1.70771E-05 -4.46138E-05 -1.06926E-04 -2.34827E-04 -4.71852E-04 -8.65713E-04 + -1.44630E-03 -2.19197E-03 -2.99912E-03 -3.68306E-03 -4.02289E-03 -3.80247E-03 + -2.82330E-03 -1.06033E-03 1.06033E-03 2.82330E-03 3.80247E-03 4.02289E-03 + 3.68306E-03 2.99912E-03 2.19197E-03 1.44630E-03 8.65713E-04 4.71852E-04 + 2.34827E-04 1.06926E-04 4.46138E-05 1.70771E-05 6.00230E-06 1.93865E-06 + 5.75726E-07 1.57283E-07 3.95437E-08 9.15269E-09 + -4.79613E-09 -2.07214E-08 -8.24186E-08 -3.01688E-07 -1.01588E-06 -3.14529E-06 + -8.94863E-06 -2.33782E-05 -5.60306E-05 -1.23053E-04 -2.47256E-04 -4.53642E-04 + -7.57841E-04 -1.14823E-03 -1.56883E-03 -1.91609E-03 -2.06068E-03 -1.88893E-03 + -1.34786E-03 -4.91756E-04 4.91756E-04 1.34786E-03 1.88893E-03 2.06068E-03 + 1.91609E-03 1.56883E-03 1.14823E-03 7.57841E-04 4.53642E-04 2.47256E-04 + 1.23053E-04 5.60306E-05 2.33782E-05 8.94863E-06 3.14529E-06 1.01588E-06 + 3.01688E-07 8.24186E-08 2.07214E-08 4.79613E-09 + -2.22446E-09 -9.61067E-09 -3.82261E-08 -1.39924E-07 -4.71168E-07 -1.45880E-06 + -4.15041E-06 -1.08429E-05 -2.59872E-05 -5.70723E-05 -1.14678E-04 -2.10400E-04 + -3.51485E-04 -5.32512E-04 -7.27309E-04 -8.87026E-04 -9.49982E-04 -8.63370E-04 + -6.08911E-04 -2.20182E-04 2.20182E-04 6.08911E-04 8.63370E-04 9.49982E-04 + 8.87026E-04 7.27309E-04 5.32512E-04 3.51485E-04 2.10400E-04 1.14678E-04 + 5.70723E-05 2.59872E-05 1.08429E-05 4.15041E-06 1.45880E-06 4.71168E-07 + 1.39924E-07 3.82261E-08 9.61067E-09 2.22446E-09 + -9.11233E-10 -3.93694E-09 -1.56590E-08 -5.73188E-08 -1.93010E-07 -5.97584E-07 + -1.70018E-06 -4.44171E-06 -1.06455E-05 -2.33792E-05 -4.69771E-05 -8.61888E-05 + -1.43983E-04 -2.18137E-04 -2.97916E-04 -3.63257E-04 -3.88783E-04 -3.52854E-04 + -2.48390E-04 -8.96869E-05 8.96869E-05 2.48390E-04 3.52854E-04 3.88783E-04 + 3.63257E-04 2.97916E-04 2.18137E-04 1.43983E-04 8.61888E-05 4.69771E-05 + 2.33792E-05 1.06455E-05 4.44171E-06 1.70018E-06 5.97584E-07 1.93010E-07 + 5.73188E-08 1.56590E-08 3.93694E-09 9.11233E-10 + -3.29260E-10 -1.42255E-09 -5.65814E-09 -2.07113E-08 -6.97413E-08 -2.15928E-07 + -6.14335E-07 -1.60494E-06 -3.84657E-06 -8.44772E-06 -1.69745E-05 -3.11430E-05 + -5.20260E-05 -7.88203E-05 -1.07647E-04 -1.31254E-04 -1.40468E-04 -1.27471E-04 + -8.97161E-05 -3.23895E-05 3.23895E-05 8.97161E-05 1.27471E-04 1.40468E-04 + 1.31254E-04 1.07647E-04 7.88203E-05 5.20260E-05 3.11430E-05 1.69745E-05 + 8.44772E-06 3.84657E-06 1.60494E-06 6.14335E-07 2.15928E-07 6.97413E-08 + 2.07113E-08 5.65814E-09 1.42255E-09 3.29260E-10 + -1.04861E-10 -4.53046E-10 -1.80197E-09 -6.59600E-09 -2.22108E-08 -6.87674E-08 + -1.95650E-07 -5.11133E-07 -1.22503E-06 -2.69038E-06 -5.40592E-06 -9.91824E-06 + -1.65689E-05 -2.51022E-05 -3.42826E-05 -4.18008E-05 -4.47352E-05 -4.05955E-05 + -2.85716E-05 -1.03149E-05 1.03149E-05 2.85716E-05 4.05955E-05 4.47352E-05 + 4.18008E-05 3.42826E-05 2.51022E-05 1.65689E-05 9.91824E-06 5.40592E-06 + 2.69038E-06 1.22503E-06 5.11133E-07 1.95650E-07 6.87674E-08 2.22108E-08 + 6.59600E-09 1.80197E-09 4.53046E-10 1.04861E-10 + -2.94202E-11 -1.27108E-10 -5.05568E-10 -1.85060E-09 -6.23154E-09 -1.92937E-08 + -5.48923E-08 -1.43405E-07 -3.43700E-07 -7.54823E-07 -1.51671E-06 -2.78270E-06 + -4.64865E-06 -7.04277E-06 -9.61848E-06 -1.17278E-05 -1.25511E-05 -1.13896E-05 + -8.01614E-06 -2.89399E-06 2.89399E-06 8.01614E-06 1.13896E-05 1.25511E-05 + 1.17278E-05 9.61848E-06 7.04277E-06 4.64865E-06 2.78270E-06 1.51671E-06 + 7.54823E-07 3.43700E-07 1.43405E-07 5.48923E-08 1.92937E-08 6.23154E-09 + 1.85060E-09 5.05568E-10 1.27108E-10 2.94202E-11 + -7.26963E-12 -3.14081E-11 -1.24924E-10 -4.57278E-10 -1.53979E-09 -4.76740E-09 + -1.35637E-08 -3.54350E-08 -8.49273E-08 -1.86515E-07 -3.74773E-07 -6.87597E-07 + -1.14867E-06 -1.74025E-06 -2.37670E-06 -2.89791E-06 -3.10133E-06 -2.81434E-06 + -1.98076E-06 -7.15095E-07 7.15095E-07 1.98076E-06 2.81434E-06 3.10133E-06 + 2.89791E-06 2.37670E-06 1.74025E-06 1.14867E-06 6.87597E-07 3.74773E-07 + 1.86515E-07 8.49273E-08 3.54350E-08 1.35637E-08 4.76740E-09 1.53979E-09 + 4.57278E-10 1.24924E-10 3.14081E-11 7.26963E-12 + -1.58176E-12 -6.83393E-12 -2.71817E-11 -9.94968E-11 -3.35036E-10 -1.03732E-09 + -2.95126E-09 -7.71014E-09 -1.84789E-08 -4.05828E-08 -8.15451E-08 -1.49611E-07 + -2.49933E-07 -3.78652E-07 -5.17134E-07 -6.30541E-07 -6.74804E-07 -6.12359E-07 + -4.30985E-07 -1.55594E-07 1.55594E-07 4.30985E-07 6.12359E-07 6.74804E-07 + 6.30541E-07 5.17134E-07 3.78652E-07 2.49933E-07 1.49611E-07 8.15451E-08 + 4.05828E-08 1.84789E-08 7.71014E-09 2.95126E-09 1.03732E-09 3.35036E-10 + 9.94968E-11 2.71817E-11 6.83393E-12 1.58176E-12 + -3.03032E-13 -1.30923E-12 -5.20743E-12 -1.90615E-11 -6.41858E-11 -1.98728E-10 + -5.65398E-10 -1.47710E-09 -3.54016E-09 -7.77479E-09 -1.56223E-08 -2.86622E-08 + -4.78817E-08 -7.25416E-08 -9.90717E-08 -1.20798E-07 -1.29278E-07 -1.17315E-07 + -8.25675E-08 -2.98085E-08 2.98085E-08 8.25675E-08 1.17315E-07 1.29278E-07 + 1.20798E-07 9.90717E-08 7.25416E-08 4.78817E-08 2.86622E-08 1.56223E-08 + 7.77479E-09 3.54016E-09 1.47710E-09 5.65398E-10 1.98728E-10 6.41858E-11 + 1.90615E-11 5.20743E-12 1.30923E-12 3.03032E-13 + -5.11126E-14 -2.20829E-13 -8.78339E-13 -3.21510E-12 -1.08262E-11 -3.35195E-11 + -9.53660E-11 -2.49143E-10 -5.97121E-10 -1.31138E-09 -2.63502E-09 -4.83447E-09 + -8.07623E-09 -1.22356E-08 -1.67105E-08 -2.03751E-08 -2.18054E-08 -1.97876E-08 + -1.39267E-08 -5.02781E-09 5.02781E-09 1.39267E-08 1.97876E-08 2.18054E-08 + 2.03751E-08 1.67105E-08 1.22356E-08 8.07623E-09 4.83447E-09 2.63502E-09 + 1.31138E-09 5.97121E-10 2.49143E-10 9.53660E-11 3.35195E-11 1.08262E-11 + 3.21510E-12 8.78339E-13 2.20829E-13 5.11126E-14 + -7.59002E-15 -3.27923E-14 -1.30430E-13 -4.77431E-13 -1.60766E-12 -4.97751E-12 + -1.41615E-11 -3.69967E-11 -8.86701E-11 -1.94734E-10 -3.91290E-10 -7.17900E-10 + -1.19929E-09 -1.81694E-09 -2.48144E-09 -3.02562E-09 -3.23801E-09 -2.93838E-09 + -2.06806E-09 -7.46610E-10 7.46610E-10 2.06806E-09 2.93838E-09 3.23801E-09 + 3.02562E-09 2.48144E-09 1.81694E-09 1.19929E-09 7.17900E-10 3.91290E-10 + 1.94734E-10 8.86701E-11 3.69967E-11 1.41615E-11 4.97751E-12 1.60766E-12 + 4.77431E-13 1.30430E-13 3.27923E-14 7.59002E-15 + -9.92259E-16 -4.28700E-15 -1.70514E-14 -6.24155E-14 -2.10172E-13 -6.50720E-13 + -1.85136E-12 -4.83666E-12 -1.15920E-11 -2.54580E-11 -5.11542E-11 -9.38526E-11 + -1.56786E-10 -2.37533E-10 -3.24404E-10 -3.95546E-10 -4.23312E-10 -3.84140E-10 + -2.70362E-10 -9.76059E-11 9.76059E-11 2.70362E-10 3.84140E-10 4.23312E-10 + 3.95546E-10 3.24404E-10 2.37533E-10 1.56786E-10 9.38526E-11 5.11542E-11 + 2.54580E-11 1.15920E-11 4.83666E-12 1.85136E-12 6.50720E-13 2.10172E-13 + 6.24155E-14 1.70514E-14 4.28700E-15 9.92259E-16 + -1.14201E-16 -4.93398E-16 -1.96247E-15 -7.18350E-15 -2.41890E-14 -7.48924E-14 + -2.13076E-13 -5.56659E-13 -1.33415E-12 -2.93001E-12 -5.88742E-12 -1.08016E-11 + -1.80447E-11 -2.73380E-11 -3.73361E-11 -4.55240E-11 -4.87197E-11 -4.42113E-11 + -3.11164E-11 -1.12336E-11 1.12336E-11 3.11164E-11 4.42113E-11 4.87197E-11 + 4.55240E-11 3.73361E-11 2.73380E-11 1.80447E-11 1.08016E-11 5.88742E-12 + 2.93001E-12 1.33415E-12 5.56659E-13 2.13076E-13 7.48924E-14 2.41890E-14 + 7.18350E-15 1.96247E-15 4.93398E-16 1.14201E-16 + -1.78110E-16 -7.69515E-16 -3.06071E-15 -1.12036E-14 -3.77258E-14 -1.16804E-13 + -3.32318E-13 -8.68178E-13 -2.08076E-12 -4.56971E-12 -9.18216E-12 -1.68465E-11 + -2.81429E-11 -4.26370E-11 -5.82303E-11 -7.10003E-11 -7.59844E-11 -6.89530E-11 + -4.85298E-11 -1.75202E-11 1.75202E-11 4.85298E-11 6.89530E-11 7.59844E-11 + 7.10003E-11 5.82303E-11 4.26370E-11 2.81429E-11 1.68465E-11 9.18216E-12 + 4.56971E-12 2.08076E-12 8.68178E-13 3.32318E-13 1.16804E-13 3.77258E-14 + 1.12036E-14 3.06071E-15 7.69515E-16 1.78110E-16 + -1.54755E-15 -6.68611E-15 -2.65937E-14 -9.73447E-14 -3.27789E-13 -1.01488E-12 + -2.88742E-12 -7.54337E-12 -1.80792E-11 -3.97050E-11 -7.97813E-11 -1.46375E-10 + -2.44526E-10 -3.70462E-10 -5.05948E-10 -6.16902E-10 -6.60208E-10 -5.99114E-10 + -4.21662E-10 -1.52228E-10 1.52228E-10 4.21662E-10 5.99114E-10 6.60208E-10 + 6.16902E-10 5.05948E-10 3.70462E-10 2.44526E-10 1.46375E-10 7.97813E-11 + 3.97050E-11 1.80792E-11 7.54337E-12 2.88742E-12 1.01488E-12 3.27789E-13 + 9.73447E-14 2.65937E-14 6.68611E-15 1.54755E-15 + -1.18376E-14 -5.11436E-14 -2.03422E-13 -7.44612E-13 -2.50734E-12 -7.76304E-12 + -2.20866E-11 -5.77010E-11 -1.38292E-10 -3.03713E-10 -6.10266E-10 -1.11965E-09 + -1.87044E-09 -2.83375E-09 -3.87011E-09 -4.71883E-09 -5.05008E-09 -4.58276E-09 + -3.22539E-09 -1.16443E-09 1.16443E-09 3.22539E-09 4.58276E-09 5.05008E-09 + 4.71883E-09 3.87011E-09 2.83375E-09 1.87044E-09 1.11965E-09 6.10266E-10 + 3.03713E-10 1.38292E-10 5.77010E-11 2.20866E-11 7.76304E-12 2.50734E-12 + 7.44612E-13 2.03422E-13 5.11436E-14 1.18376E-14 + -7.97164E-14 -3.44410E-13 -1.36988E-12 -5.01435E-12 -1.68849E-11 -5.22777E-11 + -1.48735E-10 -3.88569E-10 -9.31284E-10 -2.04526E-09 -4.10964E-09 -7.53995E-09 + -1.25959E-08 -1.90830E-08 -2.60620E-08 -3.17775E-08 -3.40082E-08 -3.08611E-08 + -2.17204E-08 -7.84149E-09 7.84149E-09 2.17204E-08 3.08611E-08 3.40082E-08 + 3.17775E-08 2.60620E-08 1.90830E-08 1.25959E-08 7.53995E-09 4.10964E-09 + 2.04526E-09 9.31284E-10 3.88569E-10 1.48735E-10 5.22777E-11 1.68849E-11 + 5.01435E-12 1.36988E-12 3.44410E-13 7.97164E-14 + -4.72616E-13 -2.04191E-12 -8.12163E-12 -2.97287E-11 -1.00106E-10 -3.09940E-10 + -8.81809E-10 -2.30372E-09 -5.52132E-09 -1.21258E-08 -2.43649E-08 -4.47023E-08 + -7.46775E-08 -1.13138E-07 -1.54515E-07 -1.88400E-07 -2.01625E-07 -1.82967E-07 + -1.28774E-07 -4.64900E-08 4.64900E-08 1.28774E-07 1.82967E-07 2.01625E-07 + 1.88400E-07 1.54515E-07 1.13138E-07 7.46775E-08 4.47023E-08 2.43649E-08 + 1.21258E-08 5.52132E-09 2.30372E-09 8.81809E-10 3.09940E-10 1.00106E-10 + 2.97287E-11 8.12163E-12 2.04191E-12 4.72616E-13 + -2.46696E-12 -1.06584E-11 -4.23932E-11 -1.55178E-10 -5.22531E-10 -1.61782E-09 + -4.60286E-09 -1.20249E-08 -2.88201E-08 -6.32939E-08 -1.27180E-07 -2.33337E-07 + -3.89801E-07 -5.90555E-07 -8.06534E-07 -9.83407E-07 -1.05244E-06 -9.55050E-07 + -6.72174E-07 -2.42668E-07 2.42668E-07 6.72174E-07 9.55050E-07 1.05244E-06 + 9.83407E-07 8.06534E-07 5.90555E-07 3.89801E-07 2.33337E-07 1.27180E-07 + 6.32939E-08 2.88201E-08 1.20249E-08 4.60286E-09 1.61782E-09 5.22531E-10 + 1.55178E-10 4.23932E-11 1.06584E-11 2.46696E-12 + -1.13379E-11 -4.89848E-11 -1.94835E-10 -7.13181E-10 -2.40150E-09 -7.43536E-09 + -2.11543E-08 -5.52653E-08 -1.32455E-07 -2.90892E-07 -5.84506E-07 -1.07239E-06 + -1.79149E-06 -2.71413E-06 -3.70675E-06 -4.51964E-06 -4.83692E-06 -4.38932E-06 + -3.08925E-06 -1.11528E-06 1.11528E-06 3.08925E-06 4.38932E-06 4.83692E-06 + 4.51964E-06 3.70675E-06 2.71413E-06 1.79149E-06 1.07239E-06 5.84506E-07 + 2.90892E-07 1.32455E-07 5.52653E-08 2.11543E-08 7.43536E-09 2.40150E-09 + 7.13181E-10 1.94835E-10 4.89848E-11 1.13379E-11 + -4.58844E-11 -1.98241E-10 -7.88496E-10 -2.88624E-09 -9.71886E-09 -3.00909E-08 + -8.56113E-08 -2.23659E-07 -5.36043E-07 -1.17724E-06 -2.36549E-06 -4.33997E-06 + -7.25014E-06 -1.09841E-05 -1.50012E-05 -1.82910E-05 -1.95750E-05 -1.77635E-05 + -1.25022E-05 -4.51353E-06 4.51353E-06 1.25022E-05 1.77635E-05 1.95750E-05 + 1.82910E-05 1.50012E-05 1.09841E-05 7.25014E-06 4.33997E-06 2.36549E-06 + 1.17724E-06 5.36043E-07 2.23659E-07 8.56113E-08 3.00909E-08 9.71886E-09 + 2.88624E-09 7.88496E-10 1.98241E-10 4.58844E-11 + -1.63543E-10 -7.06581E-10 -2.81040E-09 -1.02873E-08 -3.46404E-08 -1.07251E-07 + -3.05140E-07 -7.97175E-07 -1.91059E-06 -4.19598E-06 -8.43120E-06 -1.54687E-05 + -2.58413E-05 -3.91500E-05 -5.34680E-05 -6.51936E-05 -6.97701E-05 -6.33138E-05 + -4.45609E-05 -1.60874E-05 1.60874E-05 4.45609E-05 6.33138E-05 6.97701E-05 + 6.51936E-05 5.34680E-05 3.91500E-05 2.58413E-05 1.54687E-05 8.43120E-06 + 4.19598E-06 1.91059E-06 7.97175E-07 3.05140E-07 1.07251E-07 3.46404E-08 + 1.02873E-08 2.81040E-09 7.06581E-10 1.63543E-10 + -5.13522E-10 -2.21865E-09 -8.82458E-09 -3.23018E-08 -1.08770E-07 -3.36766E-07 + -9.58132E-07 -2.50311E-06 -5.99921E-06 -1.31753E-05 -2.64738E-05 -4.85714E-05 + -8.11410E-05 -1.22930E-04 -1.67888E-04 -2.04707E-04 -2.19078E-04 -1.98807E-04 + -1.39924E-04 -5.05157E-05 5.05157E-05 1.39924E-04 1.98807E-04 2.19078E-04 + 2.04707E-04 1.67888E-04 1.22930E-04 8.11410E-05 4.85714E-05 2.64738E-05 + 1.31753E-05 5.99921E-06 2.50311E-06 9.58132E-07 3.36766E-07 1.08770E-07 + 3.23018E-08 8.82458E-09 2.21865E-09 5.13522E-10 + -1.42118E-09 -6.14014E-09 -2.44221E-08 -8.93958E-08 -3.01023E-07 -9.32006E-07 + -2.65164E-06 -6.92740E-06 -1.66029E-05 -3.64628E-05 -7.32666E-05 -1.34422E-04 + -2.24559E-04 -3.40211E-04 -4.64638E-04 -5.66548E-04 -6.06360E-04 -5.50324E-04 + -3.87395E-04 -1.39877E-04 1.39877E-04 3.87395E-04 5.50324E-04 6.06360E-04 + 5.66548E-04 4.64638E-04 3.40211E-04 2.24559E-04 1.34422E-04 7.32666E-05 + 3.64628E-05 1.66029E-05 6.92740E-06 2.65164E-06 9.32006E-07 3.01023E-07 + 8.93958E-08 2.44221E-08 6.14014E-09 1.42118E-09 + -3.46933E-09 -1.49890E-08 -5.96183E-08 -2.18229E-07 -7.34844E-07 -2.27517E-06 + -6.47308E-06 -1.69109E-05 -4.05303E-05 -8.90113E-05 -1.78855E-04 -3.28146E-04 + -5.48186E-04 -8.30524E-04 -1.13435E-03 -1.38347E-03 -1.48166E-03 -1.34647E-03 + -9.49494E-04 -3.43293E-04 3.43293E-04 9.49494E-04 1.34647E-03 1.48166E-03 + 1.38347E-03 1.13435E-03 8.30524E-04 5.48186E-04 3.28146E-04 1.78855E-04 + 8.90113E-05 4.05303E-05 1.69109E-05 6.47308E-06 2.27517E-06 7.34844E-07 + 2.18229E-07 5.96183E-08 1.49890E-08 3.46933E-09 + -7.48015E-09 -3.23176E-08 -1.28542E-07 -4.70520E-07 -1.58439E-06 -4.90546E-06 + -1.39565E-05 -3.64612E-05 -8.73867E-05 -1.91916E-04 -3.85627E-04 -7.07512E-04 + -1.18196E-03 -1.79090E-03 -2.44711E-03 -2.98913E-03 -3.21465E-03 -2.94545E-03 + -2.09988E-03 -7.65514E-04 7.65514E-04 2.09988E-03 2.94545E-03 3.21465E-03 + 2.98913E-03 2.44711E-03 1.79090E-03 1.18196E-03 7.07512E-04 3.85627E-04 + 1.91916E-04 8.73867E-05 3.64612E-05 1.39565E-05 4.90546E-06 1.58439E-06 + 4.70520E-07 1.28542E-07 3.23176E-08 7.48015E-09 + -1.42747E-08 -6.16733E-08 -2.45303E-07 -8.97917E-07 -3.02356E-06 -9.36134E-06 + -2.66339E-05 -6.95807E-05 -1.66764E-04 -3.66243E-04 -7.35913E-04 -1.35021E-03 + -2.25585E-03 -3.41958E-03 -4.68129E-03 -5.75438E-03 -6.29079E-03 -5.94374E-03 + -4.40429E-03 -1.65080E-03 1.65080E-03 4.40429E-03 5.94374E-03 6.29079E-03 + 5.75438E-03 4.68129E-03 3.41958E-03 2.25585E-03 1.35021E-03 7.35913E-04 + 3.66243E-04 1.66764E-04 6.95807E-05 2.66339E-05 9.36134E-06 3.02356E-06 + 8.97917E-07 2.45303E-07 6.16733E-08 1.42747E-08 + -2.41934E-08 -1.04526E-07 -4.15750E-07 -1.52183E-06 -5.12446E-06 -1.58660E-05 + -4.51402E-05 -1.17928E-04 -2.82639E-04 -6.20724E-04 -1.24727E-03 -2.28854E-03 + -3.82473E-03 -5.80585E-03 -7.99008E-03 -9.98286E-03 -1.13393E-02 -1.14189E-02 + -9.07827E-03 -3.56085E-03 3.56085E-03 9.07827E-03 1.14189E-02 1.13393E-02 + 9.98286E-03 7.99008E-03 5.80585E-03 3.82473E-03 2.28854E-03 1.24727E-03 + 6.20724E-04 2.82639E-04 1.17928E-04 4.51402E-05 1.58660E-05 5.12446E-06 + 1.52183E-06 4.15750E-07 1.04526E-07 2.41934E-08 + -3.66098E-08 -1.58171E-07 -6.29118E-07 -2.30285E-06 -7.75439E-06 -2.40086E-05 + -6.83067E-05 -1.78451E-04 -4.27693E-04 -9.39290E-04 -1.88743E-03 -3.46359E-03 + -5.79253E-03 -8.81852E-03 -1.22573E-02 -1.57285E-02 -1.88352E-02 -2.03795E-02 + -1.72820E-02 -7.02519E-03 7.02519E-03 1.72820E-02 2.03795E-02 1.88352E-02 + 1.57285E-02 1.22573E-02 8.81852E-03 5.79253E-03 3.46359E-03 1.88743E-03 + 9.39290E-04 4.27693E-04 1.78451E-04 6.83067E-05 2.40086E-05 7.75439E-06 + 2.30285E-06 6.29118E-07 1.58171E-07 3.66098E-08 + -4.98504E-08 -2.15376E-07 -8.56649E-07 -3.13571E-06 -1.05589E-05 -3.26917E-05 + -9.30110E-05 -2.42990E-04 -5.82376E-04 -1.27901E-03 -2.57014E-03 -4.71738E-03 + -7.89726E-03 -1.20705E-02 -1.69835E-02 -2.24087E-02 -2.80329E-02 -3.17076E-02 + -2.77061E-02 -1.14210E-02 1.14210E-02 2.77061E-02 3.17076E-02 2.80329E-02 + 2.24087E-02 1.69835E-02 1.20705E-02 7.89726E-03 4.71738E-03 2.57014E-03 + 1.27901E-03 5.82376E-04 2.42990E-04 9.30110E-05 3.26917E-05 1.05589E-05 + 3.13571E-06 8.56649E-07 2.15376E-07 4.98504E-08 + -6.17370E-08 -2.66731E-07 -1.06091E-06 -3.88341E-06 -1.30766E-05 -4.04869E-05 + -1.15189E-04 -3.00930E-04 -7.21241E-04 -1.58398E-03 -3.18307E-03 -5.84328E-03 + -9.78947E-03 -1.50051E-02 -2.12800E-02 -2.85002E-02 -3.62508E-02 -4.13511E-02 + -3.61689E-02 -1.49240E-02 1.49240E-02 3.61689E-02 4.13511E-02 3.62508E-02 + 2.85002E-02 2.12800E-02 1.50051E-02 9.78947E-03 5.84328E-03 3.18307E-03 + 1.58398E-03 7.21241E-04 3.00930E-04 1.15189E-04 4.04869E-05 1.30766E-05 + 3.88341E-06 1.06091E-06 2.66731E-07 6.17370E-08 + -7.04322E-08 -3.04299E-07 -1.21033E-06 -4.43036E-06 -1.49184E-05 -4.61892E-05 + -1.31413E-04 -3.43314E-04 -8.22823E-04 -1.80708E-03 -3.63138E-03 -6.66623E-03 + -1.11677E-02 -1.71128E-02 -2.42317E-02 -3.22656E-02 -4.04637E-02 -4.51558E-02 + -3.86250E-02 -1.57167E-02 1.57167E-02 3.86250E-02 4.51558E-02 4.04637E-02 + 3.22656E-02 2.42317E-02 1.71128E-02 1.11677E-02 6.66623E-03 3.63138E-03 + 1.80708E-03 8.22823E-04 3.43314E-04 1.31413E-04 4.61892E-05 1.49184E-05 + 4.43036E-06 1.21033E-06 3.04299E-07 7.04322E-08 + -7.49358E-08 -3.23756E-07 -1.28773E-06 -4.71364E-06 -1.58723E-05 -4.91426E-05 + -1.39815E-04 -3.65266E-04 -8.75436E-04 -1.92262E-03 -3.86351E-03 -7.09170E-03 + -1.18749E-02 -1.81618E-02 -2.55601E-02 -3.35328E-02 -4.09854E-02 -4.43201E-02 + -3.68123E-02 -1.46854E-02 1.46854E-02 3.68123E-02 4.43201E-02 4.09854E-02 + 3.35328E-02 2.55601E-02 1.81618E-02 1.18749E-02 7.09170E-03 3.86351E-03 + 1.92262E-03 8.75436E-04 3.65266E-04 1.39815E-04 4.91426E-05 1.58723E-05 + 4.71364E-06 1.28773E-06 3.23756E-07 7.49358E-08 + -7.49358E-08 -3.23756E-07 -1.28773E-06 -4.71364E-06 -1.58723E-05 -4.91426E-05 + -1.39815E-04 -3.65266E-04 -8.75436E-04 -1.92262E-03 -3.86351E-03 -7.09170E-03 + -1.18749E-02 -1.81618E-02 -2.55601E-02 -3.35328E-02 -4.09854E-02 -4.43201E-02 + -3.68123E-02 -1.46854E-02 1.46854E-02 3.68123E-02 4.43201E-02 4.09854E-02 + 3.35328E-02 2.55601E-02 1.81618E-02 1.18749E-02 7.09170E-03 3.86351E-03 + 1.92262E-03 8.75436E-04 3.65266E-04 1.39815E-04 4.91426E-05 1.58723E-05 + 4.71364E-06 1.28773E-06 3.23756E-07 7.49358E-08 + -7.04322E-08 -3.04299E-07 -1.21033E-06 -4.43036E-06 -1.49184E-05 -4.61892E-05 + -1.31413E-04 -3.43314E-04 -8.22823E-04 -1.80708E-03 -3.63138E-03 -6.66623E-03 + -1.11677E-02 -1.71128E-02 -2.42317E-02 -3.22656E-02 -4.04637E-02 -4.51558E-02 + -3.86250E-02 -1.57167E-02 1.57167E-02 3.86250E-02 4.51558E-02 4.04637E-02 + 3.22656E-02 2.42317E-02 1.71128E-02 1.11677E-02 6.66623E-03 3.63138E-03 + 1.80708E-03 8.22823E-04 3.43314E-04 1.31413E-04 4.61892E-05 1.49184E-05 + 4.43036E-06 1.21033E-06 3.04299E-07 7.04322E-08 + -6.17370E-08 -2.66731E-07 -1.06091E-06 -3.88341E-06 -1.30766E-05 -4.04869E-05 + -1.15189E-04 -3.00930E-04 -7.21241E-04 -1.58398E-03 -3.18307E-03 -5.84328E-03 + -9.78947E-03 -1.50051E-02 -2.12800E-02 -2.85002E-02 -3.62508E-02 -4.13511E-02 + -3.61689E-02 -1.49240E-02 1.49240E-02 3.61689E-02 4.13511E-02 3.62508E-02 + 2.85002E-02 2.12800E-02 1.50051E-02 9.78947E-03 5.84328E-03 3.18307E-03 + 1.58398E-03 7.21241E-04 3.00930E-04 1.15189E-04 4.04869E-05 1.30766E-05 + 3.88341E-06 1.06091E-06 2.66731E-07 6.17370E-08 + -4.98504E-08 -2.15376E-07 -8.56649E-07 -3.13571E-06 -1.05589E-05 -3.26917E-05 + -9.30110E-05 -2.42990E-04 -5.82376E-04 -1.27901E-03 -2.57014E-03 -4.71738E-03 + -7.89726E-03 -1.20705E-02 -1.69835E-02 -2.24087E-02 -2.80329E-02 -3.17076E-02 + -2.77061E-02 -1.14210E-02 1.14210E-02 2.77061E-02 3.17076E-02 2.80329E-02 + 2.24087E-02 1.69835E-02 1.20705E-02 7.89726E-03 4.71738E-03 2.57014E-03 + 1.27901E-03 5.82376E-04 2.42990E-04 9.30110E-05 3.26917E-05 1.05589E-05 + 3.13571E-06 8.56649E-07 2.15376E-07 4.98504E-08 + -3.66098E-08 -1.58171E-07 -6.29118E-07 -2.30285E-06 -7.75439E-06 -2.40086E-05 + -6.83067E-05 -1.78451E-04 -4.27693E-04 -9.39290E-04 -1.88743E-03 -3.46359E-03 + -5.79253E-03 -8.81852E-03 -1.22573E-02 -1.57285E-02 -1.88352E-02 -2.03795E-02 + -1.72820E-02 -7.02519E-03 7.02519E-03 1.72820E-02 2.03795E-02 1.88352E-02 + 1.57285E-02 1.22573E-02 8.81852E-03 5.79253E-03 3.46359E-03 1.88743E-03 + 9.39290E-04 4.27693E-04 1.78451E-04 6.83067E-05 2.40086E-05 7.75439E-06 + 2.30285E-06 6.29118E-07 1.58171E-07 3.66098E-08 + -2.41934E-08 -1.04526E-07 -4.15750E-07 -1.52183E-06 -5.12446E-06 -1.58660E-05 + -4.51402E-05 -1.17928E-04 -2.82639E-04 -6.20724E-04 -1.24727E-03 -2.28854E-03 + -3.82473E-03 -5.80585E-03 -7.99008E-03 -9.98286E-03 -1.13393E-02 -1.14189E-02 + -9.07827E-03 -3.56085E-03 3.56085E-03 9.07827E-03 1.14189E-02 1.13393E-02 + 9.98286E-03 7.99008E-03 5.80585E-03 3.82473E-03 2.28854E-03 1.24727E-03 + 6.20724E-04 2.82639E-04 1.17928E-04 4.51402E-05 1.58660E-05 5.12446E-06 + 1.52183E-06 4.15750E-07 1.04526E-07 2.41934E-08 + -1.42747E-08 -6.16733E-08 -2.45303E-07 -8.97917E-07 -3.02356E-06 -9.36134E-06 + -2.66339E-05 -6.95807E-05 -1.66764E-04 -3.66243E-04 -7.35913E-04 -1.35021E-03 + -2.25585E-03 -3.41958E-03 -4.68129E-03 -5.75438E-03 -6.29079E-03 -5.94374E-03 + -4.40429E-03 -1.65080E-03 1.65080E-03 4.40429E-03 5.94374E-03 6.29079E-03 + 5.75438E-03 4.68129E-03 3.41958E-03 2.25585E-03 1.35021E-03 7.35913E-04 + 3.66243E-04 1.66764E-04 6.95807E-05 2.66339E-05 9.36134E-06 3.02356E-06 + 8.97917E-07 2.45303E-07 6.16733E-08 1.42747E-08 + -7.48015E-09 -3.23176E-08 -1.28542E-07 -4.70520E-07 -1.58439E-06 -4.90546E-06 + -1.39565E-05 -3.64612E-05 -8.73867E-05 -1.91916E-04 -3.85627E-04 -7.07512E-04 + -1.18196E-03 -1.79090E-03 -2.44711E-03 -2.98913E-03 -3.21465E-03 -2.94545E-03 + -2.09988E-03 -7.65514E-04 7.65514E-04 2.09988E-03 2.94545E-03 3.21465E-03 + 2.98913E-03 2.44711E-03 1.79090E-03 1.18196E-03 7.07512E-04 3.85627E-04 + 1.91916E-04 8.73867E-05 3.64612E-05 1.39565E-05 4.90546E-06 1.58439E-06 + 4.70520E-07 1.28542E-07 3.23176E-08 7.48015E-09 + -3.46933E-09 -1.49890E-08 -5.96183E-08 -2.18229E-07 -7.34844E-07 -2.27517E-06 + -6.47308E-06 -1.69109E-05 -4.05303E-05 -8.90113E-05 -1.78855E-04 -3.28146E-04 + -5.48186E-04 -8.30524E-04 -1.13435E-03 -1.38347E-03 -1.48166E-03 -1.34647E-03 + -9.49494E-04 -3.43293E-04 3.43293E-04 9.49494E-04 1.34647E-03 1.48166E-03 + 1.38347E-03 1.13435E-03 8.30524E-04 5.48186E-04 3.28146E-04 1.78855E-04 + 8.90113E-05 4.05303E-05 1.69109E-05 6.47308E-06 2.27517E-06 7.34844E-07 + 2.18229E-07 5.96183E-08 1.49890E-08 3.46933E-09 + -1.42118E-09 -6.14014E-09 -2.44221E-08 -8.93958E-08 -3.01023E-07 -9.32006E-07 + -2.65164E-06 -6.92740E-06 -1.66029E-05 -3.64628E-05 -7.32666E-05 -1.34422E-04 + -2.24559E-04 -3.40211E-04 -4.64638E-04 -5.66548E-04 -6.06360E-04 -5.50324E-04 + -3.87395E-04 -1.39877E-04 1.39877E-04 3.87395E-04 5.50324E-04 6.06360E-04 + 5.66548E-04 4.64638E-04 3.40211E-04 2.24559E-04 1.34422E-04 7.32666E-05 + 3.64628E-05 1.66029E-05 6.92740E-06 2.65164E-06 9.32006E-07 3.01023E-07 + 8.93958E-08 2.44221E-08 6.14014E-09 1.42118E-09 + -5.13522E-10 -2.21865E-09 -8.82458E-09 -3.23018E-08 -1.08770E-07 -3.36766E-07 + -9.58132E-07 -2.50311E-06 -5.99921E-06 -1.31753E-05 -2.64738E-05 -4.85714E-05 + -8.11410E-05 -1.22930E-04 -1.67888E-04 -2.04707E-04 -2.19078E-04 -1.98807E-04 + -1.39924E-04 -5.05157E-05 5.05157E-05 1.39924E-04 1.98807E-04 2.19078E-04 + 2.04707E-04 1.67888E-04 1.22930E-04 8.11410E-05 4.85714E-05 2.64738E-05 + 1.31753E-05 5.99921E-06 2.50311E-06 9.58132E-07 3.36766E-07 1.08770E-07 + 3.23018E-08 8.82458E-09 2.21865E-09 5.13522E-10 + -1.63543E-10 -7.06581E-10 -2.81040E-09 -1.02873E-08 -3.46404E-08 -1.07251E-07 + -3.05140E-07 -7.97175E-07 -1.91059E-06 -4.19598E-06 -8.43120E-06 -1.54687E-05 + -2.58413E-05 -3.91500E-05 -5.34680E-05 -6.51936E-05 -6.97701E-05 -6.33138E-05 + -4.45609E-05 -1.60874E-05 1.60874E-05 4.45609E-05 6.33138E-05 6.97701E-05 + 6.51936E-05 5.34680E-05 3.91500E-05 2.58413E-05 1.54687E-05 8.43120E-06 + 4.19598E-06 1.91059E-06 7.97175E-07 3.05140E-07 1.07251E-07 3.46404E-08 + 1.02873E-08 2.81040E-09 7.06581E-10 1.63543E-10 + -4.58844E-11 -1.98241E-10 -7.88496E-10 -2.88624E-09 -9.71886E-09 -3.00909E-08 + -8.56113E-08 -2.23659E-07 -5.36043E-07 -1.17724E-06 -2.36549E-06 -4.33997E-06 + -7.25014E-06 -1.09841E-05 -1.50012E-05 -1.82910E-05 -1.95750E-05 -1.77635E-05 + -1.25022E-05 -4.51353E-06 4.51353E-06 1.25022E-05 1.77635E-05 1.95750E-05 + 1.82910E-05 1.50012E-05 1.09841E-05 7.25014E-06 4.33997E-06 2.36549E-06 + 1.17724E-06 5.36043E-07 2.23659E-07 8.56113E-08 3.00909E-08 9.71886E-09 + 2.88624E-09 7.88496E-10 1.98241E-10 4.58844E-11 + -1.13379E-11 -4.89848E-11 -1.94835E-10 -7.13181E-10 -2.40150E-09 -7.43536E-09 + -2.11543E-08 -5.52653E-08 -1.32455E-07 -2.90892E-07 -5.84506E-07 -1.07239E-06 + -1.79149E-06 -2.71413E-06 -3.70675E-06 -4.51964E-06 -4.83692E-06 -4.38932E-06 + -3.08925E-06 -1.11528E-06 1.11528E-06 3.08925E-06 4.38932E-06 4.83692E-06 + 4.51964E-06 3.70675E-06 2.71413E-06 1.79149E-06 1.07239E-06 5.84506E-07 + 2.90892E-07 1.32455E-07 5.52653E-08 2.11543E-08 7.43536E-09 2.40150E-09 + 7.13181E-10 1.94835E-10 4.89848E-11 1.13379E-11 + -2.46696E-12 -1.06584E-11 -4.23932E-11 -1.55178E-10 -5.22531E-10 -1.61782E-09 + -4.60286E-09 -1.20249E-08 -2.88201E-08 -6.32939E-08 -1.27180E-07 -2.33337E-07 + -3.89801E-07 -5.90555E-07 -8.06534E-07 -9.83407E-07 -1.05244E-06 -9.55050E-07 + -6.72174E-07 -2.42668E-07 2.42668E-07 6.72174E-07 9.55050E-07 1.05244E-06 + 9.83407E-07 8.06534E-07 5.90555E-07 3.89801E-07 2.33337E-07 1.27180E-07 + 6.32939E-08 2.88201E-08 1.20249E-08 4.60286E-09 1.61782E-09 5.22531E-10 + 1.55178E-10 4.23932E-11 1.06584E-11 2.46696E-12 + -4.72616E-13 -2.04191E-12 -8.12163E-12 -2.97287E-11 -1.00106E-10 -3.09940E-10 + -8.81809E-10 -2.30372E-09 -5.52132E-09 -1.21258E-08 -2.43649E-08 -4.47023E-08 + -7.46775E-08 -1.13138E-07 -1.54515E-07 -1.88400E-07 -2.01625E-07 -1.82967E-07 + -1.28774E-07 -4.64900E-08 4.64900E-08 1.28774E-07 1.82967E-07 2.01625E-07 + 1.88400E-07 1.54515E-07 1.13138E-07 7.46775E-08 4.47023E-08 2.43649E-08 + 1.21258E-08 5.52132E-09 2.30372E-09 8.81809E-10 3.09940E-10 1.00106E-10 + 2.97287E-11 8.12163E-12 2.04191E-12 4.72616E-13 + -7.97164E-14 -3.44410E-13 -1.36988E-12 -5.01435E-12 -1.68849E-11 -5.22777E-11 + -1.48735E-10 -3.88569E-10 -9.31284E-10 -2.04526E-09 -4.10964E-09 -7.53995E-09 + -1.25959E-08 -1.90830E-08 -2.60620E-08 -3.17775E-08 -3.40082E-08 -3.08611E-08 + -2.17204E-08 -7.84149E-09 7.84149E-09 2.17204E-08 3.08611E-08 3.40082E-08 + 3.17775E-08 2.60620E-08 1.90830E-08 1.25959E-08 7.53995E-09 4.10964E-09 + 2.04526E-09 9.31284E-10 3.88569E-10 1.48735E-10 5.22777E-11 1.68849E-11 + 5.01435E-12 1.36988E-12 3.44410E-13 7.97164E-14 + -1.18376E-14 -5.11436E-14 -2.03422E-13 -7.44612E-13 -2.50734E-12 -7.76304E-12 + -2.20866E-11 -5.77010E-11 -1.38292E-10 -3.03713E-10 -6.10266E-10 -1.11965E-09 + -1.87044E-09 -2.83375E-09 -3.87011E-09 -4.71883E-09 -5.05008E-09 -4.58276E-09 + -3.22539E-09 -1.16443E-09 1.16443E-09 3.22539E-09 4.58276E-09 5.05008E-09 + 4.71883E-09 3.87011E-09 2.83375E-09 1.87044E-09 1.11965E-09 6.10266E-10 + 3.03713E-10 1.38292E-10 5.77010E-11 2.20866E-11 7.76304E-12 2.50734E-12 + 7.44612E-13 2.03422E-13 5.11436E-14 1.18376E-14 + -1.54755E-15 -6.68611E-15 -2.65937E-14 -9.73447E-14 -3.27789E-13 -1.01488E-12 + -2.88742E-12 -7.54337E-12 -1.80792E-11 -3.97050E-11 -7.97813E-11 -1.46375E-10 + -2.44526E-10 -3.70462E-10 -5.05948E-10 -6.16902E-10 -6.60208E-10 -5.99114E-10 + -4.21662E-10 -1.52228E-10 1.52228E-10 4.21662E-10 5.99114E-10 6.60208E-10 + 6.16902E-10 5.05948E-10 3.70462E-10 2.44526E-10 1.46375E-10 7.97813E-11 + 3.97050E-11 1.80792E-11 7.54337E-12 2.88742E-12 1.01488E-12 3.27789E-13 + 9.73447E-14 2.65937E-14 6.68611E-15 1.54755E-15 + -1.78110E-16 -7.69515E-16 -3.06071E-15 -1.12036E-14 -3.77258E-14 -1.16804E-13 + -3.32318E-13 -8.68178E-13 -2.08076E-12 -4.56971E-12 -9.18216E-12 -1.68465E-11 + -2.81429E-11 -4.26370E-11 -5.82303E-11 -7.10003E-11 -7.59844E-11 -6.89530E-11 + -4.85298E-11 -1.75202E-11 1.75202E-11 4.85298E-11 6.89530E-11 7.59844E-11 + 7.10003E-11 5.82303E-11 4.26370E-11 2.81429E-11 1.68465E-11 9.18216E-12 + 4.56971E-12 2.08076E-12 8.68178E-13 3.32318E-13 1.16804E-13 3.77258E-14 + 1.12036E-14 3.06071E-15 7.69515E-16 1.78110E-16 + -2.36163E-16 -1.02033E-15 -4.05832E-15 -1.48552E-14 -5.00221E-14 -1.54875E-13 + -4.40633E-13 -1.15115E-12 -2.75897E-12 -6.05915E-12 -1.21750E-11 -2.23374E-11 + -3.73158E-11 -5.65341E-11 -7.72098E-11 -9.41420E-11 -1.00751E-10 -9.14274E-11 + -6.43475E-11 -2.32307E-11 2.32307E-11 6.43475E-11 9.14274E-11 1.00751E-10 + 9.41420E-11 7.72098E-11 5.65341E-11 3.73158E-11 2.23374E-11 1.21750E-11 + 6.05915E-12 2.75897E-12 1.15115E-12 4.40633E-13 1.54875E-13 5.00221E-14 + 1.48552E-14 4.05832E-15 1.02033E-15 2.36163E-16 + -2.05196E-15 -8.86537E-15 -3.52616E-14 -1.29073E-13 -4.34629E-13 -1.34567E-12 + -3.82855E-12 -1.00020E-11 -2.39719E-11 -5.26463E-11 -1.05785E-10 -1.94084E-10 + -3.24227E-10 -4.91209E-10 -6.70856E-10 -8.17975E-10 -8.75395E-10 -7.94388E-10 + -5.59098E-10 -2.01846E-10 2.01846E-10 5.59098E-10 7.94388E-10 8.75395E-10 + 8.17975E-10 6.70856E-10 4.91209E-10 3.24227E-10 1.94084E-10 1.05785E-10 + 5.26463E-11 2.39719E-11 1.00020E-11 3.82855E-12 1.34567E-12 4.34629E-13 + 1.29073E-13 3.52616E-14 8.86537E-15 2.05196E-15 + -1.56959E-14 -6.78133E-14 -2.69724E-13 -9.87310E-13 -3.32458E-12 -1.02933E-11 + -2.92854E-11 -7.65079E-11 -1.83367E-10 -4.02704E-10 -8.09175E-10 -1.48459E-09 + -2.48009E-09 -3.75737E-09 -5.13153E-09 -6.25688E-09 -6.69610E-09 -6.07646E-09 + -4.27667E-09 -1.54396E-09 1.54396E-09 4.27667E-09 6.07646E-09 6.69610E-09 + 6.25688E-09 5.13153E-09 3.75737E-09 2.48009E-09 1.48459E-09 8.09175E-10 + 4.02704E-10 1.83367E-10 7.65079E-11 2.92854E-11 1.02933E-11 3.32458E-12 + 9.87310E-13 2.69724E-13 6.78133E-14 1.56959E-14 + -1.05699E-13 -4.56667E-13 -1.81637E-12 -6.64872E-12 -2.23883E-11 -6.93171E-11 + -1.97213E-10 -5.15218E-10 -1.23482E-09 -2.71188E-09 -5.44913E-09 -9.99752E-09 + -1.67014E-08 -2.53028E-08 -3.45567E-08 -4.21350E-08 -4.50928E-08 -4.09200E-08 + -2.87999E-08 -1.03973E-08 1.03973E-08 2.87999E-08 4.09200E-08 4.50928E-08 + 4.21350E-08 3.45567E-08 2.53028E-08 1.67014E-08 9.99752E-09 5.44913E-09 + 2.71188E-09 1.23482E-09 5.15218E-10 1.97213E-10 6.93171E-11 2.23883E-11 + 6.64872E-12 1.81637E-12 4.56667E-13 1.05699E-13 + -6.26660E-13 -2.70745E-12 -1.07688E-11 -3.94184E-11 -1.32734E-10 -4.10962E-10 + -1.16922E-09 -3.05459E-09 -7.32093E-09 -1.60780E-08 -3.23064E-08 -5.92725E-08 + -9.90177E-08 -1.50014E-07 -2.04877E-07 -2.49806E-07 -2.67342E-07 -2.42603E-07 + -1.70747E-07 -6.16429E-08 6.16429E-08 1.70747E-07 2.42603E-07 2.67342E-07 + 2.49806E-07 2.04877E-07 1.50014E-07 9.90177E-08 5.92725E-08 3.23064E-08 + 1.60780E-08 7.32093E-09 3.05459E-09 1.16922E-09 4.10962E-10 1.32734E-10 + 3.94184E-11 1.07688E-11 2.70745E-12 6.26660E-13 + -3.27103E-12 -1.41323E-11 -5.62107E-11 -2.05756E-10 -6.92843E-10 -2.14513E-09 + -6.10310E-09 -1.59443E-08 -3.82137E-08 -8.39238E-08 -1.68632E-07 -3.09390E-07 + -5.16852E-07 -7.83039E-07 -1.06941E-06 -1.30394E-06 -1.39547E-06 -1.26634E-06 + -8.91261E-07 -3.21763E-07 3.21763E-07 8.91261E-07 1.26634E-06 1.39547E-06 + 1.30394E-06 1.06941E-06 7.83039E-07 5.16852E-07 3.09390E-07 1.68632E-07 + 8.39238E-08 3.82137E-08 1.59443E-08 6.10310E-09 2.14513E-09 6.92843E-10 + 2.05756E-10 5.62107E-11 1.41323E-11 3.27103E-12 + -1.50333E-11 -6.49508E-11 -2.58339E-10 -9.45634E-10 -3.18424E-09 -9.85882E-09 + -2.80493E-08 -7.32784E-08 -1.75627E-07 -3.85706E-07 -7.75018E-07 -1.42193E-06 + -2.37540E-06 -3.59877E-06 -4.91492E-06 -5.99277E-06 -6.41345E-06 -5.81996E-06 + -4.09615E-06 -1.47879E-06 1.47879E-06 4.09615E-06 5.81996E-06 6.41345E-06 + 5.99277E-06 4.91492E-06 3.59877E-06 2.37540E-06 1.42193E-06 7.75018E-07 + 3.85706E-07 1.75627E-07 7.32784E-08 2.80493E-08 9.85882E-09 3.18424E-09 + 9.45634E-10 2.58339E-10 6.49508E-11 1.50333E-11 + -6.08399E-11 -2.62856E-10 -1.04550E-09 -3.82698E-09 -1.28866E-08 -3.98986E-08 + -1.13515E-07 -2.96558E-07 -7.10760E-07 -1.56095E-06 -3.13650E-06 -5.75453E-06 + -9.61324E-06 -1.45642E-05 -1.98907E-05 -2.42527E-05 -2.59552E-05 -2.35534E-05 + -1.65771E-05 -5.98467E-06 5.98467E-06 1.65771E-05 2.35534E-05 2.59552E-05 + 2.42527E-05 1.98907E-05 1.45642E-05 9.61324E-06 5.75453E-06 3.13650E-06 + 1.56095E-06 7.10760E-07 2.96558E-07 1.13515E-07 3.98986E-08 1.28866E-08 + 3.82698E-09 1.04550E-09 2.62856E-10 6.08399E-11 + -2.16849E-10 -9.36882E-10 -3.72641E-09 -1.36403E-08 -4.59311E-08 -1.42209E-07 + -4.04597E-07 -1.05700E-06 -2.53333E-06 -5.56361E-06 -1.11793E-05 -2.05106E-05 + -3.42640E-05 -5.19105E-05 -7.08953E-05 -8.64428E-05 -9.25111E-05 -8.39505E-05 + -5.90854E-05 -2.13310E-05 2.13310E-05 5.90854E-05 8.39505E-05 9.25111E-05 + 8.64428E-05 7.08953E-05 5.19105E-05 3.42640E-05 2.05106E-05 1.11793E-05 + 5.56361E-06 2.53333E-06 1.05700E-06 4.04597E-07 1.42209E-07 4.59311E-08 + 1.36403E-08 3.72641E-09 9.36882E-10 2.16849E-10 + -6.80899E-10 -2.94179E-09 -1.17008E-08 -4.28302E-08 -1.44222E-07 -4.46532E-07 + -1.27042E-06 -3.31897E-06 -7.95458E-06 -1.74696E-05 -3.51026E-05 -6.44027E-05 + -1.07588E-04 -1.62998E-04 -2.22610E-04 -2.71431E-04 -2.90489E-04 -2.63614E-04 + -1.85540E-04 -6.69848E-05 6.69848E-05 1.85540E-04 2.63614E-04 2.90489E-04 + 2.71431E-04 2.22610E-04 1.62998E-04 1.07588E-04 6.44027E-05 3.51026E-05 + 1.74696E-05 7.95458E-06 3.31897E-06 1.27042E-06 4.46532E-07 1.44222E-07 + 4.28302E-08 1.17008E-08 2.94179E-09 6.80899E-10 + -1.88440E-09 -8.14145E-09 -3.23823E-08 -1.18533E-07 -3.99138E-07 -1.23578E-06 + -3.51592E-06 -9.18530E-06 -2.20144E-05 -4.83474E-05 -9.71469E-05 -1.78236E-04 + -2.97752E-04 -4.51102E-04 -6.16092E-04 -7.51241E-04 -8.04069E-04 -7.29802E-04 + -5.13758E-04 -1.85507E-04 1.85507E-04 5.13758E-04 7.29802E-04 8.04069E-04 + 7.51241E-04 6.16092E-04 4.51102E-04 2.97752E-04 1.78236E-04 9.71469E-05 + 4.83474E-05 2.20144E-05 9.18530E-06 3.51592E-06 1.23578E-06 3.99138E-07 + 1.18533E-07 3.23823E-08 8.14145E-09 1.88440E-09 + -4.60011E-09 -1.98745E-08 -7.90502E-08 -2.89358E-07 -9.74358E-07 -3.01674E-06 + -8.58290E-06 -2.24227E-05 -5.37407E-05 -1.18023E-04 -2.37151E-04 -4.35101E-04 + -7.26865E-04 -1.10125E-03 -1.50419E-03 -1.83470E-03 -1.96504E-03 -1.78563E-03 + -1.25884E-03 -4.55017E-04 4.55017E-04 1.25884E-03 1.78563E-03 1.96504E-03 + 1.83470E-03 1.50419E-03 1.10125E-03 7.26865E-04 4.35101E-04 2.37151E-04 + 1.18023E-04 5.37407E-05 2.24227E-05 8.58290E-06 3.01674E-06 9.74358E-07 + 2.89358E-07 7.90502E-08 1.98745E-08 4.60011E-09 + -9.91822E-09 -4.28512E-08 -1.70439E-07 -6.23881E-07 -2.10080E-06 -6.50434E-06 + -1.85055E-05 -4.83453E-05 -1.15869E-04 -2.54469E-04 -5.11318E-04 -9.38123E-04 + -1.56725E-03 -2.37488E-03 -3.24567E-03 -3.96536E-03 -4.26322E-03 -3.89977E-03 + -2.77187E-03 -1.00788E-03 1.00788E-03 2.77187E-03 3.89977E-03 4.26322E-03 + 3.96536E-03 3.24567E-03 2.37488E-03 1.56725E-03 9.38123E-04 5.11318E-04 + 2.54469E-04 1.15869E-04 4.83453E-05 1.85055E-05 6.50434E-06 2.10080E-06 + 6.23881E-07 1.70439E-07 4.28512E-08 9.91822E-09 + -1.89274E-08 -8.17750E-08 -3.25257E-07 -1.19058E-06 -4.00906E-06 -1.24126E-05 + -3.53149E-05 -9.22598E-05 -2.21119E-04 -4.85615E-04 -9.75779E-04 -1.79034E-03 + -2.99150E-03 -4.53636E-03 -6.21533E-03 -7.64759E-03 -8.35266E-03 -7.84449E-03 + -5.75068E-03 -2.13643E-03 2.13643E-03 5.75068E-03 7.84449E-03 8.35266E-03 + 7.64759E-03 6.21533E-03 4.53636E-03 2.99150E-03 1.79034E-03 9.75779E-04 + 4.85615E-04 2.21119E-04 9.22598E-05 3.53149E-05 1.24126E-05 4.00906E-06 + 1.19058E-06 3.25257E-07 8.17750E-08 1.89274E-08 + -3.20790E-08 -1.38596E-07 -5.51259E-07 -2.01785E-06 -6.79471E-06 -2.10373E-05 + -5.98531E-05 -1.56366E-04 -3.74762E-04 -8.23043E-04 -1.65383E-03 -3.03476E-03 + -5.07383E-03 -7.71290E-03 -1.06543E-02 -1.33968E-02 -1.52913E-02 -1.53336E-02 + -1.20278E-02 -4.66246E-03 4.66246E-03 1.20278E-02 1.53336E-02 1.52913E-02 + 1.33968E-02 1.06543E-02 7.71290E-03 5.07383E-03 3.03476E-03 1.65383E-03 + 8.23043E-04 3.74762E-04 1.56366E-04 5.98531E-05 2.10373E-05 6.79471E-06 + 2.01785E-06 5.51259E-07 1.38596E-07 3.20790E-08 + -4.85424E-08 -2.09725E-07 -8.34171E-07 -3.05343E-06 -1.02818E-05 -3.18339E-05 + -9.05705E-05 -2.36614E-04 -5.67095E-04 -1.24545E-03 -2.50272E-03 -4.59376E-03 + -7.69123E-03 -1.17587E-02 -1.65416E-02 -2.17413E-02 -2.68290E-02 -2.96086E-02 + -2.52204E-02 -1.02444E-02 1.02444E-02 2.52204E-02 2.96086E-02 2.68290E-02 + 2.17413E-02 1.65416E-02 1.17587E-02 7.69123E-03 4.59376E-03 2.50272E-03 + 1.24545E-03 5.67095E-04 2.36614E-04 9.05705E-05 3.18339E-05 1.02818E-05 + 3.05343E-06 8.34171E-07 2.09725E-07 4.85424E-08 + -6.60985E-08 -2.85575E-07 -1.13586E-06 -4.15776E-06 -1.40005E-05 -4.33472E-05 + -1.23327E-04 -3.22190E-04 -7.72195E-04 -1.69590E-03 -3.40814E-03 -6.25835E-03 + -1.05007E-02 -1.61906E-02 -2.33699E-02 -3.24999E-02 -4.36197E-02 -5.25587E-02 + -4.87050E-02 -2.12104E-02 2.12104E-02 4.87050E-02 5.25587E-02 4.36197E-02 + 3.24999E-02 2.33699E-02 1.61906E-02 1.05007E-02 6.25835E-03 3.40814E-03 + 1.69590E-03 7.72195E-04 3.22190E-04 1.23327E-04 4.33472E-05 1.40005E-05 + 4.15776E-06 1.13586E-06 2.85575E-07 6.60985E-08 + -8.18594E-08 -3.53669E-07 -1.40670E-06 -5.14916E-06 -1.73388E-05 -5.36831E-05 + -1.52734E-04 -3.99015E-04 -9.56323E-04 -2.10030E-03 -4.22105E-03 -7.75370E-03 + -1.30314E-02 -2.02236E-02 -2.97484E-02 -4.29646E-02 -6.05819E-02 -7.71450E-02 + -7.83895E-02 -3.78235E-02 3.78235E-02 7.83895E-02 7.71450E-02 6.05819E-02 + 4.29646E-02 2.97484E-02 2.02236E-02 1.30314E-02 7.75370E-03 4.22105E-03 + 2.10030E-03 9.56323E-04 3.99015E-04 1.52734E-04 5.36831E-05 1.73388E-05 + 5.14916E-06 1.40670E-06 3.53669E-07 8.18594E-08 + -9.33887E-08 -4.03481E-07 -1.60483E-06 -5.87438E-06 -1.97808E-05 -6.12440E-05 + -1.74245E-04 -4.55213E-04 -1.09101E-03 -2.39611E-03 -4.81555E-03 -8.84568E-03 + -1.48662E-02 -2.30677E-02 -3.39099E-02 -4.88709E-02 -6.85831E-02 -8.64899E-02 + -8.60988E-02 -4.06566E-02 4.06566E-02 8.60988E-02 8.64899E-02 6.85831E-02 + 4.88709E-02 3.39099E-02 2.30677E-02 1.48662E-02 8.84568E-03 4.81555E-03 + 2.39611E-03 1.09101E-03 4.55213E-04 1.74245E-04 6.12440E-05 1.97808E-05 + 5.87438E-06 1.60483E-06 4.03481E-07 9.33887E-08 + -9.93602E-08 -4.29280E-07 -1.70745E-06 -6.25000E-06 -2.10457E-05 -6.51601E-05 + -1.85387E-04 -4.84321E-04 -1.16077E-03 -2.54931E-03 -5.12328E-03 -9.40910E-03 + -1.57976E-02 -2.44191E-02 -3.54911E-02 -4.99610E-02 -6.78349E-02 -8.18232E-02 + -7.45615E-02 -3.16924E-02 3.16924E-02 7.45615E-02 8.18232E-02 6.78349E-02 + 4.99610E-02 3.54911E-02 2.44191E-02 1.57976E-02 9.40910E-03 5.12328E-03 + 2.54931E-03 1.16077E-03 4.84321E-04 1.85387E-04 6.51601E-05 2.10457E-05 + 6.25000E-06 1.70745E-06 4.29280E-07 9.93602E-08 + -9.93602E-08 -4.29280E-07 -1.70745E-06 -6.25000E-06 -2.10457E-05 -6.51601E-05 + -1.85387E-04 -4.84321E-04 -1.16077E-03 -2.54931E-03 -5.12328E-03 -9.40910E-03 + -1.57976E-02 -2.44191E-02 -3.54911E-02 -4.99610E-02 -6.78349E-02 -8.18232E-02 + -7.45615E-02 -3.16924E-02 3.16924E-02 7.45615E-02 8.18232E-02 6.78349E-02 + 4.99610E-02 3.54911E-02 2.44191E-02 1.57976E-02 9.40910E-03 5.12328E-03 + 2.54931E-03 1.16077E-03 4.84321E-04 1.85387E-04 6.51601E-05 2.10457E-05 + 6.25000E-06 1.70745E-06 4.29280E-07 9.93602E-08 + -9.33887E-08 -4.03481E-07 -1.60483E-06 -5.87438E-06 -1.97808E-05 -6.12440E-05 + -1.74245E-04 -4.55213E-04 -1.09101E-03 -2.39611E-03 -4.81555E-03 -8.84568E-03 + -1.48662E-02 -2.30677E-02 -3.39099E-02 -4.88709E-02 -6.85831E-02 -8.64899E-02 + -8.60988E-02 -4.06566E-02 4.06566E-02 8.60988E-02 8.64899E-02 6.85831E-02 + 4.88709E-02 3.39099E-02 2.30677E-02 1.48662E-02 8.84568E-03 4.81555E-03 + 2.39611E-03 1.09101E-03 4.55213E-04 1.74245E-04 6.12440E-05 1.97808E-05 + 5.87438E-06 1.60483E-06 4.03481E-07 9.33887E-08 + -8.18594E-08 -3.53669E-07 -1.40670E-06 -5.14916E-06 -1.73388E-05 -5.36831E-05 + -1.52734E-04 -3.99015E-04 -9.56323E-04 -2.10030E-03 -4.22105E-03 -7.75370E-03 + -1.30314E-02 -2.02236E-02 -2.97484E-02 -4.29646E-02 -6.05819E-02 -7.71450E-02 + -7.83895E-02 -3.78235E-02 3.78235E-02 7.83895E-02 7.71450E-02 6.05819E-02 + 4.29646E-02 2.97484E-02 2.02236E-02 1.30314E-02 7.75370E-03 4.22105E-03 + 2.10030E-03 9.56323E-04 3.99015E-04 1.52734E-04 5.36831E-05 1.73388E-05 + 5.14916E-06 1.40670E-06 3.53669E-07 8.18594E-08 + -6.60985E-08 -2.85575E-07 -1.13586E-06 -4.15776E-06 -1.40005E-05 -4.33472E-05 + -1.23327E-04 -3.22190E-04 -7.72195E-04 -1.69590E-03 -3.40814E-03 -6.25835E-03 + -1.05007E-02 -1.61906E-02 -2.33699E-02 -3.24999E-02 -4.36197E-02 -5.25587E-02 + -4.87050E-02 -2.12104E-02 2.12104E-02 4.87050E-02 5.25587E-02 4.36197E-02 + 3.24999E-02 2.33699E-02 1.61906E-02 1.05007E-02 6.25835E-03 3.40814E-03 + 1.69590E-03 7.72195E-04 3.22190E-04 1.23327E-04 4.33472E-05 1.40005E-05 + 4.15776E-06 1.13586E-06 2.85575E-07 6.60985E-08 + -4.85424E-08 -2.09725E-07 -8.34171E-07 -3.05343E-06 -1.02818E-05 -3.18339E-05 + -9.05705E-05 -2.36614E-04 -5.67095E-04 -1.24545E-03 -2.50272E-03 -4.59376E-03 + -7.69123E-03 -1.17587E-02 -1.65416E-02 -2.17413E-02 -2.68290E-02 -2.96086E-02 + -2.52204E-02 -1.02444E-02 1.02444E-02 2.52204E-02 2.96086E-02 2.68290E-02 + 2.17413E-02 1.65416E-02 1.17587E-02 7.69123E-03 4.59376E-03 2.50272E-03 + 1.24545E-03 5.67095E-04 2.36614E-04 9.05705E-05 3.18339E-05 1.02818E-05 + 3.05343E-06 8.34171E-07 2.09725E-07 4.85424E-08 + -3.20790E-08 -1.38596E-07 -5.51259E-07 -2.01785E-06 -6.79471E-06 -2.10373E-05 + -5.98531E-05 -1.56366E-04 -3.74762E-04 -8.23043E-04 -1.65383E-03 -3.03476E-03 + -5.07383E-03 -7.71290E-03 -1.06543E-02 -1.33968E-02 -1.52913E-02 -1.53336E-02 + -1.20278E-02 -4.66246E-03 4.66246E-03 1.20278E-02 1.53336E-02 1.52913E-02 + 1.33968E-02 1.06543E-02 7.71290E-03 5.07383E-03 3.03476E-03 1.65383E-03 + 8.23043E-04 3.74762E-04 1.56366E-04 5.98531E-05 2.10373E-05 6.79471E-06 + 2.01785E-06 5.51259E-07 1.38596E-07 3.20790E-08 + -1.89274E-08 -8.17750E-08 -3.25257E-07 -1.19058E-06 -4.00906E-06 -1.24126E-05 + -3.53149E-05 -9.22598E-05 -2.21119E-04 -4.85615E-04 -9.75779E-04 -1.79034E-03 + -2.99150E-03 -4.53636E-03 -6.21533E-03 -7.64759E-03 -8.35266E-03 -7.84449E-03 + -5.75068E-03 -2.13643E-03 2.13643E-03 5.75068E-03 7.84449E-03 8.35266E-03 + 7.64759E-03 6.21533E-03 4.53636E-03 2.99150E-03 1.79034E-03 9.75779E-04 + 4.85615E-04 2.21119E-04 9.22598E-05 3.53149E-05 1.24126E-05 4.00906E-06 + 1.19058E-06 3.25257E-07 8.17750E-08 1.89274E-08 + -9.91822E-09 -4.28512E-08 -1.70439E-07 -6.23881E-07 -2.10080E-06 -6.50434E-06 + -1.85055E-05 -4.83453E-05 -1.15869E-04 -2.54469E-04 -5.11318E-04 -9.38123E-04 + -1.56725E-03 -2.37488E-03 -3.24567E-03 -3.96536E-03 -4.26322E-03 -3.89977E-03 + -2.77187E-03 -1.00788E-03 1.00788E-03 2.77187E-03 3.89977E-03 4.26322E-03 + 3.96536E-03 3.24567E-03 2.37488E-03 1.56725E-03 9.38123E-04 5.11318E-04 + 2.54469E-04 1.15869E-04 4.83453E-05 1.85055E-05 6.50434E-06 2.10080E-06 + 6.23881E-07 1.70439E-07 4.28512E-08 9.91822E-09 + -4.60011E-09 -1.98745E-08 -7.90502E-08 -2.89358E-07 -9.74358E-07 -3.01674E-06 + -8.58290E-06 -2.24227E-05 -5.37407E-05 -1.18023E-04 -2.37151E-04 -4.35101E-04 + -7.26865E-04 -1.10125E-03 -1.50419E-03 -1.83470E-03 -1.96504E-03 -1.78563E-03 + -1.25884E-03 -4.55017E-04 4.55017E-04 1.25884E-03 1.78563E-03 1.96504E-03 + 1.83470E-03 1.50419E-03 1.10125E-03 7.26865E-04 4.35101E-04 2.37151E-04 + 1.18023E-04 5.37407E-05 2.24227E-05 8.58290E-06 3.01674E-06 9.74358E-07 + 2.89358E-07 7.90502E-08 1.98745E-08 4.60011E-09 + -1.88440E-09 -8.14145E-09 -3.23823E-08 -1.18533E-07 -3.99138E-07 -1.23578E-06 + -3.51592E-06 -9.18530E-06 -2.20144E-05 -4.83474E-05 -9.71469E-05 -1.78236E-04 + -2.97752E-04 -4.51102E-04 -6.16092E-04 -7.51241E-04 -8.04069E-04 -7.29802E-04 + -5.13758E-04 -1.85507E-04 1.85507E-04 5.13758E-04 7.29802E-04 8.04069E-04 + 7.51241E-04 6.16092E-04 4.51102E-04 2.97752E-04 1.78236E-04 9.71469E-05 + 4.83474E-05 2.20144E-05 9.18530E-06 3.51592E-06 1.23578E-06 3.99138E-07 + 1.18533E-07 3.23823E-08 8.14145E-09 1.88440E-09 + -6.80899E-10 -2.94179E-09 -1.17008E-08 -4.28302E-08 -1.44222E-07 -4.46532E-07 + -1.27042E-06 -3.31897E-06 -7.95458E-06 -1.74696E-05 -3.51026E-05 -6.44027E-05 + -1.07588E-04 -1.62998E-04 -2.22610E-04 -2.71431E-04 -2.90489E-04 -2.63614E-04 + -1.85540E-04 -6.69848E-05 6.69848E-05 1.85540E-04 2.63614E-04 2.90489E-04 + 2.71431E-04 2.22610E-04 1.62998E-04 1.07588E-04 6.44027E-05 3.51026E-05 + 1.74696E-05 7.95458E-06 3.31897E-06 1.27042E-06 4.46532E-07 1.44222E-07 + 4.28302E-08 1.17008E-08 2.94179E-09 6.80899E-10 + -2.16849E-10 -9.36882E-10 -3.72641E-09 -1.36403E-08 -4.59311E-08 -1.42209E-07 + -4.04597E-07 -1.05700E-06 -2.53333E-06 -5.56361E-06 -1.11793E-05 -2.05106E-05 + -3.42640E-05 -5.19105E-05 -7.08953E-05 -8.64428E-05 -9.25111E-05 -8.39505E-05 + -5.90854E-05 -2.13310E-05 2.13310E-05 5.90854E-05 8.39505E-05 9.25111E-05 + 8.64428E-05 7.08953E-05 5.19105E-05 3.42640E-05 2.05106E-05 1.11793E-05 + 5.56361E-06 2.53333E-06 1.05700E-06 4.04597E-07 1.42209E-07 4.59311E-08 + 1.36403E-08 3.72641E-09 9.36882E-10 2.16849E-10 + -6.08399E-11 -2.62856E-10 -1.04550E-09 -3.82698E-09 -1.28866E-08 -3.98986E-08 + -1.13515E-07 -2.96558E-07 -7.10760E-07 -1.56095E-06 -3.13650E-06 -5.75453E-06 + -9.61324E-06 -1.45642E-05 -1.98907E-05 -2.42527E-05 -2.59552E-05 -2.35534E-05 + -1.65771E-05 -5.98467E-06 5.98467E-06 1.65771E-05 2.35534E-05 2.59552E-05 + 2.42527E-05 1.98907E-05 1.45642E-05 9.61324E-06 5.75453E-06 3.13650E-06 + 1.56095E-06 7.10760E-07 2.96558E-07 1.13515E-07 3.98986E-08 1.28866E-08 + 3.82698E-09 1.04550E-09 2.62856E-10 6.08399E-11 + -1.50333E-11 -6.49508E-11 -2.58339E-10 -9.45634E-10 -3.18424E-09 -9.85882E-09 + -2.80493E-08 -7.32784E-08 -1.75627E-07 -3.85706E-07 -7.75018E-07 -1.42193E-06 + -2.37540E-06 -3.59877E-06 -4.91492E-06 -5.99277E-06 -6.41345E-06 -5.81996E-06 + -4.09615E-06 -1.47879E-06 1.47879E-06 4.09615E-06 5.81996E-06 6.41345E-06 + 5.99277E-06 4.91492E-06 3.59877E-06 2.37540E-06 1.42193E-06 7.75018E-07 + 3.85706E-07 1.75627E-07 7.32784E-08 2.80493E-08 9.85882E-09 3.18424E-09 + 9.45634E-10 2.58339E-10 6.49508E-11 1.50333E-11 + -3.27103E-12 -1.41323E-11 -5.62107E-11 -2.05756E-10 -6.92843E-10 -2.14513E-09 + -6.10310E-09 -1.59443E-08 -3.82137E-08 -8.39238E-08 -1.68632E-07 -3.09390E-07 + -5.16852E-07 -7.83039E-07 -1.06941E-06 -1.30394E-06 -1.39547E-06 -1.26634E-06 + -8.91261E-07 -3.21763E-07 3.21763E-07 8.91261E-07 1.26634E-06 1.39547E-06 + 1.30394E-06 1.06941E-06 7.83039E-07 5.16852E-07 3.09390E-07 1.68632E-07 + 8.39238E-08 3.82137E-08 1.59443E-08 6.10310E-09 2.14513E-09 6.92843E-10 + 2.05756E-10 5.62107E-11 1.41323E-11 3.27103E-12 + -6.26660E-13 -2.70745E-12 -1.07688E-11 -3.94184E-11 -1.32734E-10 -4.10962E-10 + -1.16922E-09 -3.05459E-09 -7.32093E-09 -1.60780E-08 -3.23064E-08 -5.92725E-08 + -9.90177E-08 -1.50014E-07 -2.04877E-07 -2.49806E-07 -2.67342E-07 -2.42603E-07 + -1.70747E-07 -6.16429E-08 6.16429E-08 1.70747E-07 2.42603E-07 2.67342E-07 + 2.49806E-07 2.04877E-07 1.50014E-07 9.90177E-08 5.92725E-08 3.23064E-08 + 1.60780E-08 7.32093E-09 3.05459E-09 1.16922E-09 4.10962E-10 1.32734E-10 + 3.94184E-11 1.07688E-11 2.70745E-12 6.26660E-13 + -1.05699E-13 -4.56667E-13 -1.81637E-12 -6.64872E-12 -2.23883E-11 -6.93171E-11 + -1.97213E-10 -5.15218E-10 -1.23482E-09 -2.71188E-09 -5.44913E-09 -9.99752E-09 + -1.67014E-08 -2.53028E-08 -3.45567E-08 -4.21350E-08 -4.50928E-08 -4.09200E-08 + -2.87999E-08 -1.03973E-08 1.03973E-08 2.87999E-08 4.09200E-08 4.50928E-08 + 4.21350E-08 3.45567E-08 2.53028E-08 1.67014E-08 9.99752E-09 5.44913E-09 + 2.71188E-09 1.23482E-09 5.15218E-10 1.97213E-10 6.93171E-11 2.23883E-11 + 6.64872E-12 1.81637E-12 4.56667E-13 1.05699E-13 + -1.56959E-14 -6.78133E-14 -2.69724E-13 -9.87310E-13 -3.32458E-12 -1.02933E-11 + -2.92854E-11 -7.65079E-11 -1.83367E-10 -4.02704E-10 -8.09175E-10 -1.48459E-09 + -2.48009E-09 -3.75737E-09 -5.13153E-09 -6.25688E-09 -6.69610E-09 -6.07646E-09 + -4.27667E-09 -1.54396E-09 1.54396E-09 4.27667E-09 6.07646E-09 6.69610E-09 + 6.25688E-09 5.13153E-09 3.75737E-09 2.48009E-09 1.48459E-09 8.09175E-10 + 4.02704E-10 1.83367E-10 7.65079E-11 2.92854E-11 1.02933E-11 3.32458E-12 + 9.87310E-13 2.69724E-13 6.78133E-14 1.56959E-14 + -2.05196E-15 -8.86537E-15 -3.52616E-14 -1.29073E-13 -4.34629E-13 -1.34567E-12 + -3.82855E-12 -1.00020E-11 -2.39719E-11 -5.26463E-11 -1.05785E-10 -1.94084E-10 + -3.24227E-10 -4.91209E-10 -6.70856E-10 -8.17975E-10 -8.75395E-10 -7.94388E-10 + -5.59098E-10 -2.01846E-10 2.01846E-10 5.59098E-10 7.94388E-10 8.75395E-10 + 8.17975E-10 6.70856E-10 4.91209E-10 3.24227E-10 1.94084E-10 1.05785E-10 + 5.26463E-11 2.39719E-11 1.00020E-11 3.82855E-12 1.34567E-12 4.34629E-13 + 1.29073E-13 3.52616E-14 8.86537E-15 2.05196E-15 + -2.36163E-16 -1.02033E-15 -4.05832E-15 -1.48552E-14 -5.00221E-14 -1.54875E-13 + -4.40633E-13 -1.15115E-12 -2.75897E-12 -6.05915E-12 -1.21750E-11 -2.23374E-11 + -3.73158E-11 -5.65341E-11 -7.72098E-11 -9.41420E-11 -1.00751E-10 -9.14274E-11 + -6.43475E-11 -2.32307E-11 2.32307E-11 6.43475E-11 9.14274E-11 1.00751E-10 + 9.41420E-11 7.72098E-11 5.65341E-11 3.73158E-11 2.23374E-11 1.21750E-11 + 6.05915E-12 2.75897E-12 1.15115E-12 4.40633E-13 1.54875E-13 5.00221E-14 + 1.48552E-14 4.05832E-15 1.02033E-15 2.36163E-16 + -2.64116E-16 -1.14110E-15 -4.53867E-15 -1.66135E-14 -5.59429E-14 -1.73206E-13 + -4.92788E-13 -1.28740E-12 -3.08552E-12 -6.77633E-12 -1.36160E-11 -2.49813E-11 + -4.17326E-11 -6.32256E-11 -8.63486E-11 -1.05285E-10 -1.12676E-10 -1.02249E-10 + -7.19639E-11 -2.59804E-11 2.59804E-11 7.19639E-11 1.02249E-10 1.12676E-10 + 1.05285E-10 8.63486E-11 6.32256E-11 4.17326E-11 2.49813E-11 1.36160E-11 + 6.77633E-12 3.08552E-12 1.28740E-12 4.92788E-13 1.73206E-13 5.59429E-14 + 1.66135E-14 4.53867E-15 1.14110E-15 2.64116E-16 + -2.29483E-15 -9.91470E-15 -3.94353E-14 -1.44351E-13 -4.86073E-13 -1.50494E-12 + -4.28170E-12 -1.11859E-11 -2.68093E-11 -5.88777E-11 -1.18306E-10 -2.17056E-10 + -3.62603E-10 -5.49350E-10 -7.50260E-10 -9.14793E-10 -9.79010E-10 -8.88414E-10 + -6.25275E-10 -2.25737E-10 2.25737E-10 6.25275E-10 8.88414E-10 9.79010E-10 + 9.14793E-10 7.50260E-10 5.49350E-10 3.62603E-10 2.17056E-10 1.18306E-10 + 5.88777E-11 2.68093E-11 1.11859E-11 4.28170E-12 1.50494E-12 4.86073E-13 + 1.44351E-13 3.94353E-14 9.91470E-15 2.29483E-15 + -1.75537E-14 -7.58398E-14 -3.01650E-13 -1.10417E-12 -3.71808E-12 -1.15117E-11 + -3.27517E-11 -8.55636E-11 -2.05071E-10 -4.50369E-10 -9.04951E-10 -1.66031E-09 + -2.77364E-09 -4.20211E-09 -5.73891E-09 -6.99746E-09 -7.48867E-09 -6.79569E-09 + -4.78287E-09 -1.72671E-09 1.72671E-09 4.78287E-09 6.79569E-09 7.48867E-09 + 6.99746E-09 5.73891E-09 4.20211E-09 2.77364E-09 1.66031E-09 9.04951E-10 + 4.50369E-10 2.05071E-10 8.55636E-11 3.27517E-11 1.15117E-11 3.71808E-12 + 1.10417E-12 3.01650E-13 7.58398E-14 1.75537E-14 + -1.18210E-13 -5.10719E-13 -2.03136E-12 -7.43569E-12 -2.50382E-11 -7.75216E-11 + -2.20556E-10 -5.76201E-10 -1.38098E-09 -3.03287E-09 -6.09410E-09 -1.11809E-08 + -1.86782E-08 -2.82978E-08 -3.86469E-08 -4.71222E-08 -5.04301E-08 -4.57634E-08 + -3.22087E-08 -1.16280E-08 1.16280E-08 3.22087E-08 4.57634E-08 5.04301E-08 + 4.71222E-08 3.86469E-08 2.82978E-08 1.86782E-08 1.11809E-08 6.09410E-09 + 3.03287E-09 1.38098E-09 5.76201E-10 2.20556E-10 7.75216E-11 2.50382E-11 + 7.43569E-12 2.03136E-12 5.10719E-13 1.18210E-13 + -7.00833E-13 -3.02791E-12 -1.20434E-11 -4.40841E-11 -1.48445E-10 -4.59604E-10 + -1.30762E-09 -3.41614E-09 -8.18746E-09 -1.79810E-08 -3.61302E-08 -6.62882E-08 + -1.10738E-07 -1.67770E-07 -2.29127E-07 -2.79374E-07 -2.98986E-07 -2.71318E-07 + -1.90957E-07 -6.89391E-08 6.89391E-08 1.90957E-07 2.71318E-07 2.98986E-07 + 2.79374E-07 2.29127E-07 1.67770E-07 1.10738E-07 6.62882E-08 3.61302E-08 + 1.79810E-08 8.18746E-09 3.41614E-09 1.30762E-09 4.59604E-10 1.48445E-10 + 4.40841E-11 1.20434E-11 3.02791E-12 7.00833E-13 + -3.65820E-12 -1.58051E-11 -6.28640E-11 -2.30110E-10 -7.74850E-10 -2.39904E-09 + -6.82548E-09 -1.78315E-08 -4.27368E-08 -9.38572E-08 -1.88592E-07 -3.46010E-07 + -5.78028E-07 -8.75722E-07 -1.19599E-06 -1.45827E-06 -1.56064E-06 -1.41622E-06 + -9.96754E-07 -3.59848E-07 3.59848E-07 9.96754E-07 1.41622E-06 1.56064E-06 + 1.45827E-06 1.19599E-06 8.75722E-07 5.78028E-07 3.46010E-07 1.88592E-07 + 9.38572E-08 4.27368E-08 1.78315E-08 6.82548E-09 2.39904E-09 7.74850E-10 + 2.30110E-10 6.28640E-11 1.58051E-11 3.65820E-12 + -1.68127E-11 -7.26386E-11 -2.88917E-10 -1.05756E-09 -3.56114E-09 -1.10257E-08 + -3.13693E-08 -8.19519E-08 -1.96414E-07 -4.31359E-07 -8.66752E-07 -1.59023E-06 + -2.65656E-06 -4.02473E-06 -5.49667E-06 -6.70209E-06 -7.17257E-06 -6.50883E-06 + -4.58099E-06 -1.65383E-06 1.65383E-06 4.58099E-06 6.50883E-06 7.17257E-06 + 6.70209E-06 5.49667E-06 4.02473E-06 2.65656E-06 1.59023E-06 8.66752E-07 + 4.31359E-07 1.96414E-07 8.19519E-08 3.13693E-08 1.10257E-08 3.56114E-09 + 1.05756E-09 2.88917E-10 7.26386E-11 1.68127E-11 + -6.80411E-11 -2.93968E-10 -1.16925E-09 -4.27995E-09 -1.44119E-08 -4.46211E-08 + -1.26951E-07 -3.31659E-07 -7.94888E-07 -1.74571E-06 -3.50774E-06 -6.43565E-06 + -1.07511E-05 -1.62881E-05 -2.22450E-05 -2.71234E-05 -2.90274E-05 -2.63413E-05 + -1.85393E-05 -6.69307E-06 6.69307E-06 1.85393E-05 2.63413E-05 2.90274E-05 + 2.71234E-05 2.22450E-05 1.62881E-05 1.07511E-05 6.43565E-06 3.50774E-06 + 1.74571E-06 7.94888E-07 3.31659E-07 1.26951E-07 4.46211E-08 1.44119E-08 + 4.27995E-09 1.16925E-09 2.93968E-10 6.80411E-11 + -2.42515E-10 -1.04777E-09 -4.16748E-09 -1.52548E-08 -5.13676E-08 -1.59041E-07 + -4.52486E-07 -1.18211E-06 -2.83318E-06 -6.22213E-06 -1.25025E-05 -2.29383E-05 + -3.83196E-05 -5.80548E-05 -7.92869E-05 -9.66751E-05 -1.03463E-04 -9.38901E-05 + -6.60821E-05 -2.38572E-05 2.38572E-05 6.60821E-05 9.38901E-05 1.03463E-04 + 9.66751E-05 7.92869E-05 5.80548E-05 3.83196E-05 2.29383E-05 1.25025E-05 + 6.22213E-06 2.83318E-06 1.18211E-06 4.52486E-07 1.59041E-07 5.13676E-08 + 1.52548E-08 4.16748E-09 1.04777E-09 2.42515E-10 + -7.61492E-10 -3.28999E-09 -1.30858E-08 -4.78997E-08 -1.61293E-07 -4.99384E-07 + -1.42079E-06 -3.71181E-06 -8.89611E-06 -1.95373E-05 -3.92574E-05 -7.20256E-05 + -1.20323E-04 -1.82292E-04 -2.48964E-04 -3.03575E-04 -3.24914E-04 -2.94887E-04 + -2.07576E-04 -7.49468E-05 7.49468E-05 2.07576E-04 2.94887E-04 3.24914E-04 + 3.03575E-04 2.48964E-04 1.82292E-04 1.20323E-04 7.20256E-05 3.92574E-05 + 1.95373E-05 8.89611E-06 3.71181E-06 1.42079E-06 4.99384E-07 1.61293E-07 + 4.78997E-08 1.30858E-08 3.28999E-09 7.61492E-10 + -2.10744E-09 -9.10509E-09 -3.62151E-08 -1.32563E-07 -4.46381E-07 -1.38205E-06 + -3.93207E-06 -1.02725E-05 -2.46201E-05 -5.40699E-05 -1.08646E-04 -1.99332E-04 + -3.32997E-04 -5.04512E-04 -6.89090E-04 -8.40422E-04 -8.99882E-04 -8.17259E-04 + -5.75708E-04 -2.07968E-04 2.07968E-04 5.75708E-04 8.17259E-04 8.99882E-04 + 8.40422E-04 6.89090E-04 5.04512E-04 3.32997E-04 1.99332E-04 1.08646E-04 + 5.40699E-05 2.46201E-05 1.02725E-05 3.93207E-06 1.38205E-06 4.46381E-07 + 1.32563E-07 3.62151E-08 9.10509E-09 2.10744E-09 + -5.14459E-09 -2.22269E-08 -8.84068E-08 -3.23608E-07 -1.08969E-06 -3.37381E-06 + -9.59880E-06 -2.50768E-05 -6.01016E-05 -1.31993E-04 -2.65221E-04 -4.86604E-04 + -8.12924E-04 -1.23176E-03 -1.68298E-03 -2.05441E-03 -2.20375E-03 -2.00704E-03 + -1.41829E-03 -5.13444E-04 5.13444E-04 1.41829E-03 2.00704E-03 2.20375E-03 + 2.05441E-03 1.68298E-03 1.23176E-03 8.12924E-04 4.86604E-04 2.65221E-04 + 1.31993E-04 6.01016E-05 2.50768E-05 9.59880E-06 3.37381E-06 1.08969E-06 + 3.23608E-07 8.84068E-08 2.22269E-08 5.14459E-09 + -1.10922E-08 -4.79232E-08 -1.90612E-07 -6.97725E-07 -2.34945E-06 -7.27421E-06 + -2.06958E-05 -5.40676E-05 -1.29584E-04 -2.84588E-04 -5.71841E-04 -1.04918E-03 + -1.75293E-03 -2.65706E-03 -3.63481E-03 -4.45097E-03 -4.80508E-03 -4.41958E-03 + -3.15766E-03 -1.15168E-03 1.15168E-03 3.15766E-03 4.41958E-03 4.80508E-03 + 4.45097E-03 3.63481E-03 2.65706E-03 1.75293E-03 1.04918E-03 5.71841E-04 + 2.84588E-04 1.29584E-04 5.40676E-05 2.06958E-05 7.27421E-06 2.34945E-06 + 6.97725E-07 1.90612E-07 4.79232E-08 1.10922E-08 + -2.11677E-08 -9.14541E-08 -3.63755E-07 -1.33150E-06 -4.48358E-06 -1.38817E-05 + -3.94948E-05 -1.03180E-04 -2.47292E-04 -5.43095E-04 -1.09128E-03 -2.00235E-03 + -3.34644E-03 -5.07865E-03 -6.97492E-03 -8.62786E-03 -9.50349E-03 -9.00803E-03 + -6.64643E-03 -2.47577E-03 2.47577E-03 6.64643E-03 9.00803E-03 9.50349E-03 + 8.62786E-03 6.97492E-03 5.07865E-03 3.34644E-03 2.00235E-03 1.09128E-03 + 5.43095E-04 2.47292E-04 1.03180E-04 3.94948E-05 1.38817E-05 4.48358E-06 + 1.33150E-06 3.63755E-07 9.14541E-08 2.11677E-08 + -3.58760E-08 -1.55000E-07 -6.16507E-07 -2.25669E-06 -7.59896E-06 -2.35274E-05 + -6.69375E-05 -1.74874E-04 -4.19120E-04 -9.20463E-04 -1.84961E-03 -3.39437E-03 + -5.67791E-03 -8.64772E-03 -1.20125E-02 -1.52843E-02 -1.77448E-02 -1.80662E-02 + -1.42771E-02 -5.54282E-03 5.54282E-03 1.42771E-02 1.80662E-02 1.77448E-02 + 1.52843E-02 1.20125E-02 8.64772E-03 5.67791E-03 3.39437E-03 1.84961E-03 + 9.20463E-04 4.19120E-04 1.74874E-04 6.69375E-05 2.35274E-05 7.59896E-06 + 2.25669E-06 6.16507E-07 1.55000E-07 3.58760E-08 + -5.42880E-08 -2.34548E-07 -9.32906E-07 -3.41485E-06 -1.14988E-05 -3.56019E-05 + -1.01291E-04 -2.64621E-04 -6.34218E-04 -1.39287E-03 -2.79907E-03 -5.13886E-03 + -8.61338E-03 -1.32246E-02 -1.88344E-02 -2.53894E-02 -3.24156E-02 -3.68428E-02 + -3.20593E-02 -1.32335E-02 1.32335E-02 3.20593E-02 3.68428E-02 3.24156E-02 + 2.53894E-02 1.88344E-02 1.32246E-02 8.61338E-03 5.13886E-03 2.79907E-03 + 1.39287E-03 6.34218E-04 2.64621E-04 1.01291E-04 3.56019E-05 1.14988E-05 + 3.41485E-06 9.32906E-07 2.34548E-07 5.42880E-08 + -7.39221E-08 -3.19377E-07 -1.27031E-06 -4.64988E-06 -1.56576E-05 -4.84779E-05 + -1.37924E-04 -3.60326E-04 -8.63596E-04 -1.89665E-03 -3.81182E-03 -7.00245E-03 + -1.17726E-02 -1.82918E-02 -2.69908E-02 -3.91886E-02 -5.55563E-02 -7.12417E-02 + -7.38391E-02 -3.64853E-02 3.64853E-02 7.38391E-02 7.12417E-02 5.55563E-02 + 3.91886E-02 2.69908E-02 1.82918E-02 1.17726E-02 7.00245E-03 3.81182E-03 + 1.89665E-03 8.63596E-04 3.60326E-04 1.37924E-04 4.84779E-05 1.56576E-05 + 4.64988E-06 1.27031E-06 3.19377E-07 7.39221E-08 + -9.15485E-08 -3.95531E-07 -1.57321E-06 -5.75863E-06 -1.93911E-05 -6.00372E-05 + -1.70812E-04 -4.46244E-04 -1.06952E-03 -2.34892E-03 -4.72114E-03 -8.67699E-03 + -1.46222E-02 -2.29284E-02 -3.47284E-02 -5.30065E-02 -8.01936E-02 -1.14678E-01 + -1.51069E-01 -1.04880E-01 1.04880E-01 1.51069E-01 1.14678E-01 8.01936E-02 + 5.30065E-02 3.47284E-02 2.29284E-02 1.46222E-02 8.67699E-03 4.72114E-03 + 2.34892E-03 1.06952E-03 4.46244E-04 1.70812E-04 6.00372E-05 1.93911E-05 + 5.75863E-06 1.57321E-06 3.95531E-07 9.15485E-08 + -1.04443E-07 -4.51238E-07 -1.79478E-06 -6.56969E-06 -2.21222E-05 -6.84931E-05 + -1.94869E-04 -5.09094E-04 -1.22015E-03 -2.67975E-03 -5.38606E-03 -9.89889E-03 + -1.66802E-02 -2.61495E-02 -3.95841E-02 -6.03502E-02 -9.10564E-02 -1.28148E-01 + -1.61137E-01 -1.04367E-01 1.04367E-01 1.61137E-01 1.28148E-01 9.10564E-02 + 6.03502E-02 3.95841E-02 2.61495E-02 1.66802E-02 9.89889E-03 5.38606E-03 + 2.67975E-03 1.22015E-03 5.09094E-04 1.94869E-04 6.84931E-05 2.21222E-05 + 6.56969E-06 1.79478E-06 4.51238E-07 1.04443E-07 + -1.11121E-07 -4.80091E-07 -1.90954E-06 -6.98977E-06 -2.35367E-05 -7.28727E-05 + -2.07329E-04 -5.41646E-04 -1.29817E-03 -2.85108E-03 -5.73015E-03 -1.05283E-02 + -1.77158E-02 -2.76220E-02 -4.11733E-02 -6.09691E-02 -8.84361E-02 -1.14061E-01 + -1.13062E-01 -5.23166E-02 5.23166E-02 1.13062E-01 1.14061E-01 8.84361E-02 + 6.09691E-02 4.11733E-02 2.76220E-02 1.77158E-02 1.05283E-02 5.73015E-03 + 2.85108E-03 1.29817E-03 5.41646E-04 2.07329E-04 7.28727E-05 2.35367E-05 + 6.98977E-06 1.90954E-06 4.80091E-07 1.11121E-07 + -1.11121E-07 -4.80091E-07 -1.90954E-06 -6.98977E-06 -2.35367E-05 -7.28727E-05 + -2.07329E-04 -5.41646E-04 -1.29817E-03 -2.85108E-03 -5.73015E-03 -1.05283E-02 + -1.77158E-02 -2.76220E-02 -4.11733E-02 -6.09691E-02 -8.84361E-02 -1.14061E-01 + -1.13062E-01 -5.23166E-02 5.23166E-02 1.13062E-01 1.14061E-01 8.84361E-02 + 6.09691E-02 4.11733E-02 2.76220E-02 1.77158E-02 1.05283E-02 5.73015E-03 + 2.85108E-03 1.29817E-03 5.41646E-04 2.07329E-04 7.28727E-05 2.35367E-05 + 6.98977E-06 1.90954E-06 4.80091E-07 1.11121E-07 + -1.04443E-07 -4.51238E-07 -1.79478E-06 -6.56969E-06 -2.21222E-05 -6.84931E-05 + -1.94869E-04 -5.09094E-04 -1.22015E-03 -2.67975E-03 -5.38606E-03 -9.89889E-03 + -1.66802E-02 -2.61495E-02 -3.95841E-02 -6.03502E-02 -9.10564E-02 -1.28148E-01 + -1.61137E-01 -1.04367E-01 1.04367E-01 1.61137E-01 1.28148E-01 9.10564E-02 + 6.03502E-02 3.95841E-02 2.61495E-02 1.66802E-02 9.89889E-03 5.38606E-03 + 2.67975E-03 1.22015E-03 5.09094E-04 1.94869E-04 6.84931E-05 2.21222E-05 + 6.56969E-06 1.79478E-06 4.51238E-07 1.04443E-07 + -9.15485E-08 -3.95531E-07 -1.57321E-06 -5.75863E-06 -1.93911E-05 -6.00372E-05 + -1.70812E-04 -4.46244E-04 -1.06952E-03 -2.34892E-03 -4.72114E-03 -8.67699E-03 + -1.46222E-02 -2.29284E-02 -3.47284E-02 -5.30065E-02 -8.01936E-02 -1.14678E-01 + -1.51069E-01 -1.04880E-01 1.04880E-01 1.51069E-01 1.14678E-01 8.01936E-02 + 5.30065E-02 3.47284E-02 2.29284E-02 1.46222E-02 8.67699E-03 4.72114E-03 + 2.34892E-03 1.06952E-03 4.46244E-04 1.70812E-04 6.00372E-05 1.93911E-05 + 5.75863E-06 1.57321E-06 3.95531E-07 9.15485E-08 + -7.39221E-08 -3.19377E-07 -1.27031E-06 -4.64988E-06 -1.56576E-05 -4.84779E-05 + -1.37924E-04 -3.60326E-04 -8.63596E-04 -1.89665E-03 -3.81182E-03 -7.00245E-03 + -1.17726E-02 -1.82918E-02 -2.69908E-02 -3.91886E-02 -5.55563E-02 -7.12417E-02 + -7.38391E-02 -3.64853E-02 3.64853E-02 7.38391E-02 7.12417E-02 5.55563E-02 + 3.91886E-02 2.69908E-02 1.82918E-02 1.17726E-02 7.00245E-03 3.81182E-03 + 1.89665E-03 8.63596E-04 3.60326E-04 1.37924E-04 4.84779E-05 1.56576E-05 + 4.64988E-06 1.27031E-06 3.19377E-07 7.39221E-08 + -5.42880E-08 -2.34548E-07 -9.32906E-07 -3.41485E-06 -1.14988E-05 -3.56019E-05 + -1.01291E-04 -2.64621E-04 -6.34218E-04 -1.39287E-03 -2.79907E-03 -5.13886E-03 + -8.61338E-03 -1.32246E-02 -1.88344E-02 -2.53894E-02 -3.24156E-02 -3.68428E-02 + -3.20593E-02 -1.32335E-02 1.32335E-02 3.20593E-02 3.68428E-02 3.24156E-02 + 2.53894E-02 1.88344E-02 1.32246E-02 8.61338E-03 5.13886E-03 2.79907E-03 + 1.39287E-03 6.34218E-04 2.64621E-04 1.01291E-04 3.56019E-05 1.14988E-05 + 3.41485E-06 9.32906E-07 2.34548E-07 5.42880E-08 + -3.58760E-08 -1.55000E-07 -6.16507E-07 -2.25669E-06 -7.59896E-06 -2.35274E-05 + -6.69375E-05 -1.74874E-04 -4.19120E-04 -9.20463E-04 -1.84961E-03 -3.39437E-03 + -5.67791E-03 -8.64772E-03 -1.20125E-02 -1.52843E-02 -1.77448E-02 -1.80662E-02 + -1.42771E-02 -5.54282E-03 5.54282E-03 1.42771E-02 1.80662E-02 1.77448E-02 + 1.52843E-02 1.20125E-02 8.64772E-03 5.67791E-03 3.39437E-03 1.84961E-03 + 9.20463E-04 4.19120E-04 1.74874E-04 6.69375E-05 2.35274E-05 7.59896E-06 + 2.25669E-06 6.16507E-07 1.55000E-07 3.58760E-08 + -2.11677E-08 -9.14541E-08 -3.63755E-07 -1.33150E-06 -4.48358E-06 -1.38817E-05 + -3.94948E-05 -1.03180E-04 -2.47292E-04 -5.43095E-04 -1.09128E-03 -2.00235E-03 + -3.34644E-03 -5.07865E-03 -6.97492E-03 -8.62786E-03 -9.50349E-03 -9.00803E-03 + -6.64643E-03 -2.47577E-03 2.47577E-03 6.64643E-03 9.00803E-03 9.50349E-03 + 8.62786E-03 6.97492E-03 5.07865E-03 3.34644E-03 2.00235E-03 1.09128E-03 + 5.43095E-04 2.47292E-04 1.03180E-04 3.94948E-05 1.38817E-05 4.48358E-06 + 1.33150E-06 3.63755E-07 9.14541E-08 2.11677E-08 + -1.10922E-08 -4.79232E-08 -1.90612E-07 -6.97725E-07 -2.34945E-06 -7.27421E-06 + -2.06958E-05 -5.40676E-05 -1.29584E-04 -2.84588E-04 -5.71841E-04 -1.04918E-03 + -1.75293E-03 -2.65706E-03 -3.63481E-03 -4.45097E-03 -4.80508E-03 -4.41958E-03 + -3.15766E-03 -1.15168E-03 1.15168E-03 3.15766E-03 4.41958E-03 4.80508E-03 + 4.45097E-03 3.63481E-03 2.65706E-03 1.75293E-03 1.04918E-03 5.71841E-04 + 2.84588E-04 1.29584E-04 5.40676E-05 2.06958E-05 7.27421E-06 2.34945E-06 + 6.97725E-07 1.90612E-07 4.79232E-08 1.10922E-08 + -5.14459E-09 -2.22269E-08 -8.84068E-08 -3.23608E-07 -1.08969E-06 -3.37381E-06 + -9.59880E-06 -2.50768E-05 -6.01016E-05 -1.31993E-04 -2.65221E-04 -4.86604E-04 + -8.12924E-04 -1.23176E-03 -1.68298E-03 -2.05441E-03 -2.20375E-03 -2.00704E-03 + -1.41829E-03 -5.13444E-04 5.13444E-04 1.41829E-03 2.00704E-03 2.20375E-03 + 2.05441E-03 1.68298E-03 1.23176E-03 8.12924E-04 4.86604E-04 2.65221E-04 + 1.31993E-04 6.01016E-05 2.50768E-05 9.59880E-06 3.37381E-06 1.08969E-06 + 3.23608E-07 8.84068E-08 2.22269E-08 5.14459E-09 + -2.10744E-09 -9.10509E-09 -3.62151E-08 -1.32563E-07 -4.46381E-07 -1.38205E-06 + -3.93207E-06 -1.02725E-05 -2.46201E-05 -5.40699E-05 -1.08646E-04 -1.99332E-04 + -3.32997E-04 -5.04512E-04 -6.89090E-04 -8.40422E-04 -8.99882E-04 -8.17259E-04 + -5.75708E-04 -2.07968E-04 2.07968E-04 5.75708E-04 8.17259E-04 8.99882E-04 + 8.40422E-04 6.89090E-04 5.04512E-04 3.32997E-04 1.99332E-04 1.08646E-04 + 5.40699E-05 2.46201E-05 1.02725E-05 3.93207E-06 1.38205E-06 4.46381E-07 + 1.32563E-07 3.62151E-08 9.10509E-09 2.10744E-09 + -7.61492E-10 -3.28999E-09 -1.30858E-08 -4.78997E-08 -1.61293E-07 -4.99384E-07 + -1.42079E-06 -3.71181E-06 -8.89611E-06 -1.95373E-05 -3.92574E-05 -7.20256E-05 + -1.20323E-04 -1.82292E-04 -2.48964E-04 -3.03575E-04 -3.24914E-04 -2.94887E-04 + -2.07576E-04 -7.49468E-05 7.49468E-05 2.07576E-04 2.94887E-04 3.24914E-04 + 3.03575E-04 2.48964E-04 1.82292E-04 1.20323E-04 7.20256E-05 3.92574E-05 + 1.95373E-05 8.89611E-06 3.71181E-06 1.42079E-06 4.99384E-07 1.61293E-07 + 4.78997E-08 1.30858E-08 3.28999E-09 7.61492E-10 + -2.42515E-10 -1.04777E-09 -4.16748E-09 -1.52548E-08 -5.13676E-08 -1.59041E-07 + -4.52486E-07 -1.18211E-06 -2.83318E-06 -6.22213E-06 -1.25025E-05 -2.29383E-05 + -3.83196E-05 -5.80548E-05 -7.92869E-05 -9.66751E-05 -1.03463E-04 -9.38901E-05 + -6.60821E-05 -2.38572E-05 2.38572E-05 6.60821E-05 9.38901E-05 1.03463E-04 + 9.66751E-05 7.92869E-05 5.80548E-05 3.83196E-05 2.29383E-05 1.25025E-05 + 6.22213E-06 2.83318E-06 1.18211E-06 4.52486E-07 1.59041E-07 5.13676E-08 + 1.52548E-08 4.16748E-09 1.04777E-09 2.42515E-10 + -6.80411E-11 -2.93968E-10 -1.16925E-09 -4.27995E-09 -1.44119E-08 -4.46211E-08 + -1.26951E-07 -3.31659E-07 -7.94888E-07 -1.74571E-06 -3.50774E-06 -6.43565E-06 + -1.07511E-05 -1.62881E-05 -2.22450E-05 -2.71234E-05 -2.90274E-05 -2.63413E-05 + -1.85393E-05 -6.69307E-06 6.69307E-06 1.85393E-05 2.63413E-05 2.90274E-05 + 2.71234E-05 2.22450E-05 1.62881E-05 1.07511E-05 6.43565E-06 3.50774E-06 + 1.74571E-06 7.94888E-07 3.31659E-07 1.26951E-07 4.46211E-08 1.44119E-08 + 4.27995E-09 1.16925E-09 2.93968E-10 6.80411E-11 + -1.68127E-11 -7.26386E-11 -2.88917E-10 -1.05756E-09 -3.56114E-09 -1.10257E-08 + -3.13693E-08 -8.19519E-08 -1.96414E-07 -4.31359E-07 -8.66752E-07 -1.59023E-06 + -2.65656E-06 -4.02473E-06 -5.49667E-06 -6.70209E-06 -7.17257E-06 -6.50883E-06 + -4.58099E-06 -1.65383E-06 1.65383E-06 4.58099E-06 6.50883E-06 7.17257E-06 + 6.70209E-06 5.49667E-06 4.02473E-06 2.65656E-06 1.59023E-06 8.66752E-07 + 4.31359E-07 1.96414E-07 8.19519E-08 3.13693E-08 1.10257E-08 3.56114E-09 + 1.05756E-09 2.88917E-10 7.26386E-11 1.68127E-11 + -3.65820E-12 -1.58051E-11 -6.28640E-11 -2.30110E-10 -7.74850E-10 -2.39904E-09 + -6.82548E-09 -1.78315E-08 -4.27368E-08 -9.38572E-08 -1.88592E-07 -3.46010E-07 + -5.78028E-07 -8.75722E-07 -1.19599E-06 -1.45827E-06 -1.56064E-06 -1.41622E-06 + -9.96754E-07 -3.59848E-07 3.59848E-07 9.96754E-07 1.41622E-06 1.56064E-06 + 1.45827E-06 1.19599E-06 8.75722E-07 5.78028E-07 3.46010E-07 1.88592E-07 + 9.38572E-08 4.27368E-08 1.78315E-08 6.82548E-09 2.39904E-09 7.74850E-10 + 2.30110E-10 6.28640E-11 1.58051E-11 3.65820E-12 + -7.00833E-13 -3.02791E-12 -1.20434E-11 -4.40841E-11 -1.48445E-10 -4.59604E-10 + -1.30762E-09 -3.41614E-09 -8.18746E-09 -1.79810E-08 -3.61302E-08 -6.62882E-08 + -1.10738E-07 -1.67770E-07 -2.29127E-07 -2.79374E-07 -2.98986E-07 -2.71318E-07 + -1.90957E-07 -6.89391E-08 6.89391E-08 1.90957E-07 2.71318E-07 2.98986E-07 + 2.79374E-07 2.29127E-07 1.67770E-07 1.10738E-07 6.62882E-08 3.61302E-08 + 1.79810E-08 8.18746E-09 3.41614E-09 1.30762E-09 4.59604E-10 1.48445E-10 + 4.40841E-11 1.20434E-11 3.02791E-12 7.00833E-13 + -1.18210E-13 -5.10719E-13 -2.03136E-12 -7.43569E-12 -2.50382E-11 -7.75216E-11 + -2.20556E-10 -5.76201E-10 -1.38098E-09 -3.03287E-09 -6.09410E-09 -1.11809E-08 + -1.86782E-08 -2.82978E-08 -3.86469E-08 -4.71222E-08 -5.04301E-08 -4.57634E-08 + -3.22087E-08 -1.16280E-08 1.16280E-08 3.22087E-08 4.57634E-08 5.04301E-08 + 4.71222E-08 3.86469E-08 2.82978E-08 1.86782E-08 1.11809E-08 6.09410E-09 + 3.03287E-09 1.38098E-09 5.76201E-10 2.20556E-10 7.75216E-11 2.50382E-11 + 7.43569E-12 2.03136E-12 5.10719E-13 1.18210E-13 + -1.75537E-14 -7.58398E-14 -3.01650E-13 -1.10417E-12 -3.71808E-12 -1.15117E-11 + -3.27517E-11 -8.55636E-11 -2.05071E-10 -4.50369E-10 -9.04951E-10 -1.66031E-09 + -2.77364E-09 -4.20211E-09 -5.73891E-09 -6.99746E-09 -7.48867E-09 -6.79569E-09 + -4.78287E-09 -1.72671E-09 1.72671E-09 4.78287E-09 6.79569E-09 7.48867E-09 + 6.99746E-09 5.73891E-09 4.20211E-09 2.77364E-09 1.66031E-09 9.04951E-10 + 4.50369E-10 2.05071E-10 8.55636E-11 3.27517E-11 1.15117E-11 3.71808E-12 + 1.10417E-12 3.01650E-13 7.58398E-14 1.75537E-14 + -2.29483E-15 -9.91470E-15 -3.94353E-14 -1.44351E-13 -4.86073E-13 -1.50494E-12 + -4.28170E-12 -1.11859E-11 -2.68093E-11 -5.88777E-11 -1.18306E-10 -2.17056E-10 + -3.62603E-10 -5.49350E-10 -7.50260E-10 -9.14793E-10 -9.79010E-10 -8.88414E-10 + -6.25275E-10 -2.25737E-10 2.25737E-10 6.25275E-10 8.88414E-10 9.79010E-10 + 9.14793E-10 7.50260E-10 5.49350E-10 3.62603E-10 2.17056E-10 1.18306E-10 + 5.88777E-11 2.68093E-11 1.11859E-11 4.28170E-12 1.50494E-12 4.86073E-13 + 1.44351E-13 3.94353E-14 9.91470E-15 2.29483E-15 + -2.64116E-16 -1.14110E-15 -4.53867E-15 -1.66135E-14 -5.59429E-14 -1.73206E-13 + -4.92788E-13 -1.28740E-12 -3.08552E-12 -6.77633E-12 -1.36160E-11 -2.49813E-11 + -4.17326E-11 -6.32256E-11 -8.63486E-11 -1.05285E-10 -1.12676E-10 -1.02249E-10 + -7.19639E-11 -2.59804E-11 2.59804E-11 7.19639E-11 1.02249E-10 1.12676E-10 + 1.05285E-10 8.63486E-11 6.32256E-11 4.17326E-11 2.49813E-11 1.36160E-11 + 6.77633E-12 3.08552E-12 1.28740E-12 4.92788E-13 1.73206E-13 5.59429E-14 + 1.66135E-14 4.53867E-15 1.14110E-15 2.64116E-16 + -2.43452E-16 -1.05182E-15 -4.18357E-15 -1.53137E-14 -5.15660E-14 -1.59655E-13 + -4.54233E-13 -1.18668E-12 -2.84412E-12 -6.24616E-12 -1.25507E-11 -2.30268E-11 + -3.84675E-11 -5.82789E-11 -7.95928E-11 -9.70475E-11 -1.03860E-10 -9.42491E-11 + -6.63335E-11 -2.39477E-11 2.39477E-11 6.63335E-11 9.42491E-11 1.03860E-10 + 9.70475E-11 7.95928E-11 5.82789E-11 3.84675E-11 2.30268E-11 1.25507E-11 + 6.24616E-12 2.84412E-12 1.18668E-12 4.54233E-13 1.59655E-13 5.15660E-14 + 1.53137E-14 4.18357E-15 1.05182E-15 2.43452E-16 + -2.11529E-15 -9.13898E-15 -3.63499E-14 -1.33057E-13 -4.48043E-13 -1.38720E-12 + -3.94671E-12 -1.03107E-11 -2.47118E-11 -5.42712E-11 -1.09050E-10 -2.00074E-10 + -3.34234E-10 -5.06370E-10 -6.91561E-10 -8.43220E-10 -9.02413E-10 -8.18905E-10 + -5.76354E-10 -2.08075E-10 2.08075E-10 5.76354E-10 8.18905E-10 9.02413E-10 + 8.43220E-10 6.91561E-10 5.06370E-10 3.34234E-10 2.00074E-10 1.09050E-10 + 5.42712E-11 2.47118E-11 1.03107E-11 3.94671E-12 1.38720E-12 4.48043E-13 + 1.33057E-13 3.63499E-14 9.13898E-15 2.11529E-15 + -1.61803E-14 -6.99062E-14 -2.78049E-13 -1.01778E-12 -3.42718E-12 -1.06110E-11 + -3.01893E-11 -7.88692E-11 -1.89026E-10 -4.15133E-10 -8.34148E-10 -1.53041E-09 + -2.55663E-09 -3.87334E-09 -5.28991E-09 -6.44999E-09 -6.90277E-09 -6.26400E-09 + -4.40867E-09 -1.59162E-09 1.59162E-09 4.40867E-09 6.26400E-09 6.90277E-09 + 6.44999E-09 5.28991E-09 3.87334E-09 2.55663E-09 1.53041E-09 8.34148E-10 + 4.15133E-10 1.89026E-10 7.88692E-11 3.01893E-11 1.06110E-11 3.42718E-12 + 1.01778E-12 2.78049E-13 6.99062E-14 1.61803E-14 + -1.08961E-13 -4.70761E-13 -1.87243E-12 -6.85393E-12 -2.30793E-11 -7.14564E-11 + -2.03300E-10 -5.31120E-10 -1.27294E-09 -2.79558E-09 -5.61731E-09 -1.03061E-08 + -1.72168E-08 -2.60838E-08 -3.56232E-08 -4.34354E-08 -4.64845E-08 -4.21829E-08 + -2.96888E-08 -1.07182E-08 1.07182E-08 2.96888E-08 4.21829E-08 4.64845E-08 + 4.34354E-08 3.56232E-08 2.60838E-08 1.72168E-08 1.03061E-08 5.61731E-09 + 2.79558E-09 1.27294E-09 5.31120E-10 2.03300E-10 7.14564E-11 2.30793E-11 + 6.85393E-12 1.87243E-12 4.70761E-13 1.08961E-13 + -6.46001E-13 -2.79101E-12 -1.11011E-11 -4.06350E-11 -1.36831E-10 -4.23645E-10 + -1.20531E-09 -3.14886E-09 -7.54688E-09 -1.65742E-08 -3.33035E-08 -6.11018E-08 + -1.02074E-07 -1.54643E-07 -2.11200E-07 -2.57516E-07 -2.75594E-07 -2.50091E-07 + -1.76016E-07 -6.35454E-08 6.35454E-08 1.76016E-07 2.50091E-07 2.75594E-07 + 2.57516E-07 2.11200E-07 1.54643E-07 1.02074E-07 6.11018E-08 3.33035E-08 + 1.65742E-08 7.54688E-09 3.14886E-09 1.20531E-09 4.23645E-10 1.36831E-10 + 4.06350E-11 1.11011E-11 2.79101E-12 6.46001E-13 + -3.37199E-12 -1.45685E-11 -5.79456E-11 -2.12106E-10 -7.14227E-10 -2.21134E-09 + -6.29146E-09 -1.64364E-08 -3.93931E-08 -8.65139E-08 -1.73837E-07 -3.18939E-07 + -5.32804E-07 -8.07206E-07 -1.10242E-06 -1.34418E-06 -1.43854E-06 -1.30542E-06 + -9.18769E-07 -3.31694E-07 3.31694E-07 9.18769E-07 1.30542E-06 1.43854E-06 + 1.34418E-06 1.10242E-06 8.07206E-07 5.32804E-07 3.18939E-07 1.73837E-07 + 8.65139E-08 3.93931E-08 1.64364E-08 6.29146E-09 2.21134E-09 7.14227E-10 + 2.12106E-10 5.79456E-11 1.45685E-11 3.37199E-12 + -1.54973E-11 -6.69554E-11 -2.66312E-10 -9.74820E-10 -3.28252E-09 -1.01631E-08 + -2.89150E-08 -7.55401E-08 -1.81047E-07 -3.97610E-07 -7.98938E-07 -1.46581E-06 + -2.44871E-06 -3.70984E-06 -5.06661E-06 -6.17773E-06 -6.61140E-06 -5.99959E-06 + -4.22258E-06 -1.52443E-06 1.52443E-06 4.22258E-06 5.99959E-06 6.61140E-06 + 6.17773E-06 5.06661E-06 3.70984E-06 2.44871E-06 1.46581E-06 7.98938E-07 + 3.97610E-07 1.81047E-07 7.55401E-08 2.89150E-08 1.01631E-08 3.28252E-09 + 9.74820E-10 2.66312E-10 6.69554E-11 1.54973E-11 + -6.27176E-11 -2.70968E-10 -1.07776E-09 -3.94509E-09 -1.32843E-08 -4.11300E-08 + -1.17019E-07 -3.05710E-07 -7.32697E-07 -1.60912E-06 -3.23330E-06 -5.93213E-06 + -9.90993E-06 -1.50137E-05 -2.05046E-05 -2.50013E-05 -2.67565E-05 -2.42807E-05 + -1.70891E-05 -6.16953E-06 6.16953E-06 1.70891E-05 2.42807E-05 2.67565E-05 + 2.50013E-05 2.05046E-05 1.50137E-05 9.90993E-06 5.93213E-06 3.23330E-06 + 1.60912E-06 7.32697E-07 3.05710E-07 1.17019E-07 4.11300E-08 1.32843E-08 + 3.94509E-09 1.07776E-09 2.70968E-10 6.27176E-11 + -2.23541E-10 -9.65798E-10 -3.84142E-09 -1.40613E-08 -4.73487E-08 -1.46598E-07 + -4.17084E-07 -1.08963E-06 -2.61151E-06 -5.73532E-06 -1.15243E-05 -2.11436E-05 + -3.53215E-05 -5.35128E-05 -7.30843E-05 -8.91138E-05 -9.53740E-05 -8.65546E-05 + -6.09230E-05 -2.19956E-05 2.19956E-05 6.09230E-05 8.65546E-05 9.53740E-05 + 8.91138E-05 7.30843E-05 5.35128E-05 3.53215E-05 2.11436E-05 1.15243E-05 + 5.73532E-06 2.61151E-06 1.08963E-06 4.17084E-07 1.46598E-07 4.73487E-08 + 1.40613E-08 3.84142E-09 9.65798E-10 2.23541E-10 + -7.01914E-10 -3.03258E-09 -1.20620E-08 -4.41521E-08 -1.48674E-07 -4.60313E-07 + -1.30963E-06 -3.42140E-06 -8.20009E-06 -1.80088E-05 -3.61860E-05 -6.63905E-05 + -1.10909E-04 -1.68033E-04 -2.29503E-04 -2.79884E-04 -2.99643E-04 -2.72071E-04 + -1.91608E-04 -6.92045E-05 6.92045E-05 1.91608E-04 2.72071E-04 2.99643E-04 + 2.79884E-04 2.29503E-04 1.68033E-04 1.10909E-04 6.63905E-05 3.61860E-05 + 1.80088E-05 8.20009E-06 3.42140E-06 1.30963E-06 4.60313E-07 1.48674E-07 + 4.41521E-08 1.20620E-08 3.03258E-09 7.01914E-10 + -1.94256E-09 -8.39272E-09 -3.33817E-08 -1.22192E-07 -4.11457E-07 -1.27392E-06 + -3.62443E-06 -9.46879E-06 -2.26939E-05 -4.98395E-05 -1.00145E-04 -1.83738E-04 + -3.06952E-04 -4.65095E-04 -6.35446E-04 -7.75605E-04 -8.31792E-04 -7.57254E-04 + -5.34874E-04 -1.93570E-04 1.93570E-04 5.34874E-04 7.57254E-04 8.31792E-04 + 7.75605E-04 6.35446E-04 4.65095E-04 3.06952E-04 1.83738E-04 1.00145E-04 + 4.98395E-05 2.26939E-05 9.46879E-06 3.62443E-06 1.27392E-06 4.11457E-07 + 1.22192E-07 3.33817E-08 8.39272E-09 1.94256E-09 + -4.74209E-09 -2.04879E-08 -8.14899E-08 -2.98289E-07 -1.00443E-06 -3.10985E-06 + -8.84780E-06 -2.31148E-05 -5.53993E-05 -1.21666E-04 -2.44471E-04 -4.48542E-04 + -7.49405E-04 -1.13594E-03 -1.55393E-03 -1.90279E-03 -2.05381E-03 -1.88815E-03 + -1.34806E-03 -4.91384E-04 4.91384E-04 1.34806E-03 1.88815E-03 2.05381E-03 + 1.90279E-03 1.55393E-03 1.13594E-03 7.49405E-04 4.48542E-04 2.44471E-04 + 1.21666E-04 5.53993E-05 2.31148E-05 8.84780E-06 3.10985E-06 1.00443E-06 + 2.98289E-07 8.14899E-08 2.04879E-08 4.74209E-09 + -1.02243E-08 -4.41737E-08 -1.75699E-07 -6.43136E-07 -2.16564E-06 -6.70509E-06 + -1.90766E-05 -4.98374E-05 -1.19445E-04 -2.62323E-04 -5.27105E-04 -9.67152E-04 + -1.61629E-03 -2.45253E-03 -3.36648E-03 -4.15826E-03 -4.56573E-03 -4.30482E-03 + -3.15659E-03 -1.17076E-03 1.17076E-03 3.15659E-03 4.30482E-03 4.56573E-03 + 4.15826E-03 3.36648E-03 2.45253E-03 1.61629E-03 9.67152E-04 5.27105E-04 + 2.62323E-04 1.19445E-04 4.98374E-05 1.90766E-05 6.70509E-06 2.16564E-06 + 6.43136E-07 1.75699E-07 4.41737E-08 1.02243E-08 + -1.95116E-08 -8.42988E-08 -3.35295E-07 -1.22733E-06 -4.13279E-06 -1.27956E-05 + -3.64048E-05 -9.51072E-05 -2.27944E-04 -5.00605E-04 -1.00592E-03 -1.84591E-03 + -3.08659E-03 -4.69420E-03 -6.49071E-03 -8.16455E-03 -9.27767E-03 -9.17328E-03 + -7.04777E-03 -2.68974E-03 2.68974E-03 7.04777E-03 9.17328E-03 9.27767E-03 + 8.16455E-03 6.49071E-03 4.69420E-03 3.08659E-03 1.84591E-03 1.00592E-03 + 5.00605E-04 2.27944E-04 9.51072E-05 3.64048E-05 1.27956E-05 4.13279E-06 + 1.22733E-06 3.35295E-07 8.42988E-08 1.95116E-08 + -3.30691E-08 -1.42873E-07 -5.68272E-07 -2.08013E-06 -7.00442E-06 -2.16866E-05 + -6.17004E-05 -1.61192E-04 -3.86329E-04 -8.48450E-04 -1.70495E-03 -3.12933E-03 + -5.23843E-03 -8.00215E-03 -1.12198E-02 -1.45913E-02 -1.75746E-02 -1.86791E-02 + -1.52868E-02 -6.04503E-03 6.04503E-03 1.52868E-02 1.86791E-02 1.75746E-02 + 1.45913E-02 1.12198E-02 8.00215E-03 5.23843E-03 3.12933E-03 1.70495E-03 + 8.48450E-04 3.86329E-04 1.61192E-04 6.17004E-05 2.16866E-05 7.00442E-06 + 2.08013E-06 5.68272E-07 1.42873E-07 3.30691E-08 + -5.00405E-08 -2.16197E-07 -8.59917E-07 -3.14767E-06 -1.05992E-05 -3.28164E-05 + -9.33658E-05 -2.43917E-04 -5.84598E-04 -1.28390E-03 -2.58014E-03 -4.73760E-03 + -7.94660E-03 -1.22361E-02 -1.75787E-02 -2.41406E-02 -3.16437E-02 -3.68409E-02 + -3.24735E-02 -1.34324E-02 1.34324E-02 3.24735E-02 3.68409E-02 3.16437E-02 + 2.41406E-02 1.75787E-02 1.22361E-02 7.94660E-03 4.73760E-03 2.58014E-03 + 1.28390E-03 5.84598E-04 2.43917E-04 9.33658E-05 3.28164E-05 1.05992E-05 + 3.14767E-06 8.59917E-07 2.16197E-07 5.00405E-08 + -6.81385E-08 -2.94389E-07 -1.17092E-06 -4.28608E-06 -1.44326E-05 -4.46850E-05 + -1.27133E-04 -3.32134E-04 -7.96029E-04 -1.74826E-03 -3.51365E-03 -6.45531E-03 + -1.08579E-02 -1.69020E-02 -2.50728E-02 -3.67713E-02 -5.27151E-02 -6.76865E-02 + -6.83366E-02 -3.25667E-02 3.25667E-02 6.83366E-02 6.76865E-02 5.27151E-02 + 3.67713E-02 2.50728E-02 1.69020E-02 1.08579E-02 6.45531E-03 3.51365E-03 + 1.74826E-03 7.96029E-04 3.32134E-04 1.27133E-04 4.46850E-05 1.44326E-05 + 4.28608E-06 1.17092E-06 2.94389E-07 6.81385E-08 + -8.43859E-08 -3.64585E-07 -1.45012E-06 -5.30808E-06 -1.78739E-05 -5.53400E-05 + -1.57447E-04 -4.11330E-04 -9.85839E-04 -2.16515E-03 -4.35179E-03 -7.99845E-03 + -1.34812E-02 -2.11540E-02 -3.21021E-02 -4.91574E-02 -7.44778E-02 -1.04484E-01 + -1.28715E-01 -7.67531E-02 7.67531E-02 1.28715E-01 1.04484E-01 7.44778E-02 + 4.91574E-02 3.21021E-02 2.11540E-02 1.34812E-02 7.99845E-03 4.35179E-03 + 2.16515E-03 9.85839E-04 4.11330E-04 1.57447E-04 5.53400E-05 1.78739E-05 + 5.30808E-06 1.45012E-06 3.64585E-07 8.43859E-08 + -9.62710E-08 -4.15934E-07 -1.65436E-06 -6.05568E-06 -2.03913E-05 -6.31342E-05 + -1.79623E-04 -4.69263E-04 -1.12469E-03 -2.47009E-03 -4.96466E-03 -9.12442E-03 + -1.53753E-02 -2.41042E-02 -3.64898E-02 -5.56316E-02 -8.38015E-02 -1.15907E-01 + -1.37547E-01 -7.87138E-02 7.87138E-02 1.37547E-01 1.15907E-01 8.38015E-02 + 5.56316E-02 3.64898E-02 2.41042E-02 1.53753E-02 9.12442E-03 4.96466E-03 + 2.47009E-03 1.12469E-03 4.69263E-04 1.79623E-04 6.31342E-05 2.03913E-05 + 6.05568E-06 1.65436E-06 4.15934E-07 9.62710E-08 + -1.02427E-07 -4.42530E-07 -1.76014E-06 -6.44290E-06 -2.16952E-05 -6.71712E-05 + -1.91108E-04 -4.99268E-04 -1.19660E-03 -2.62802E-03 -5.28182E-03 -9.70445E-03 + -1.63287E-02 -2.54544E-02 -3.79216E-02 -5.60937E-02 -8.12340E-02 -1.04297E-01 + -1.01788E-01 -4.61438E-02 4.61438E-02 1.01788E-01 1.04297E-01 8.12340E-02 + 5.60937E-02 3.79216E-02 2.54544E-02 1.63287E-02 9.70445E-03 5.28182E-03 + 2.62802E-03 1.19660E-03 4.99268E-04 1.91108E-04 6.71712E-05 2.16952E-05 + 6.44290E-06 1.76014E-06 4.42530E-07 1.02427E-07 + -1.02427E-07 -4.42530E-07 -1.76014E-06 -6.44290E-06 -2.16952E-05 -6.71712E-05 + -1.91108E-04 -4.99268E-04 -1.19660E-03 -2.62802E-03 -5.28182E-03 -9.70445E-03 + -1.63287E-02 -2.54544E-02 -3.79216E-02 -5.60937E-02 -8.12340E-02 -1.04297E-01 + -1.01788E-01 -4.61438E-02 4.61438E-02 1.01788E-01 1.04297E-01 8.12340E-02 + 5.60937E-02 3.79216E-02 2.54544E-02 1.63287E-02 9.70445E-03 5.28182E-03 + 2.62802E-03 1.19660E-03 4.99268E-04 1.91108E-04 6.71712E-05 2.16952E-05 + 6.44290E-06 1.76014E-06 4.42530E-07 1.02427E-07 + -9.62710E-08 -4.15934E-07 -1.65436E-06 -6.05568E-06 -2.03913E-05 -6.31342E-05 + -1.79623E-04 -4.69263E-04 -1.12469E-03 -2.47009E-03 -4.96466E-03 -9.12442E-03 + -1.53753E-02 -2.41042E-02 -3.64898E-02 -5.56316E-02 -8.38015E-02 -1.15907E-01 + -1.37547E-01 -7.87138E-02 7.87138E-02 1.37547E-01 1.15907E-01 8.38015E-02 + 5.56316E-02 3.64898E-02 2.41042E-02 1.53753E-02 9.12442E-03 4.96466E-03 + 2.47009E-03 1.12469E-03 4.69263E-04 1.79623E-04 6.31342E-05 2.03913E-05 + 6.05568E-06 1.65436E-06 4.15934E-07 9.62710E-08 + -8.43859E-08 -3.64585E-07 -1.45012E-06 -5.30808E-06 -1.78739E-05 -5.53400E-05 + -1.57447E-04 -4.11330E-04 -9.85839E-04 -2.16515E-03 -4.35179E-03 -7.99845E-03 + -1.34812E-02 -2.11540E-02 -3.21021E-02 -4.91574E-02 -7.44778E-02 -1.04484E-01 + -1.28715E-01 -7.67531E-02 7.67531E-02 1.28715E-01 1.04484E-01 7.44778E-02 + 4.91574E-02 3.21021E-02 2.11540E-02 1.34812E-02 7.99845E-03 4.35179E-03 + 2.16515E-03 9.85839E-04 4.11330E-04 1.57447E-04 5.53400E-05 1.78739E-05 + 5.30808E-06 1.45012E-06 3.64585E-07 8.43859E-08 + -6.81385E-08 -2.94389E-07 -1.17092E-06 -4.28608E-06 -1.44326E-05 -4.46850E-05 + -1.27133E-04 -3.32134E-04 -7.96029E-04 -1.74826E-03 -3.51365E-03 -6.45531E-03 + -1.08579E-02 -1.69020E-02 -2.50728E-02 -3.67713E-02 -5.27151E-02 -6.76865E-02 + -6.83366E-02 -3.25667E-02 3.25667E-02 6.83366E-02 6.76865E-02 5.27151E-02 + 3.67713E-02 2.50728E-02 1.69020E-02 1.08579E-02 6.45531E-03 3.51365E-03 + 1.74826E-03 7.96029E-04 3.32134E-04 1.27133E-04 4.46850E-05 1.44326E-05 + 4.28608E-06 1.17092E-06 2.94389E-07 6.81385E-08 + -5.00405E-08 -2.16197E-07 -8.59917E-07 -3.14767E-06 -1.05992E-05 -3.28164E-05 + -9.33658E-05 -2.43917E-04 -5.84598E-04 -1.28390E-03 -2.58014E-03 -4.73760E-03 + -7.94660E-03 -1.22361E-02 -1.75787E-02 -2.41406E-02 -3.16437E-02 -3.68409E-02 + -3.24735E-02 -1.34324E-02 1.34324E-02 3.24735E-02 3.68409E-02 3.16437E-02 + 2.41406E-02 1.75787E-02 1.22361E-02 7.94660E-03 4.73760E-03 2.58014E-03 + 1.28390E-03 5.84598E-04 2.43917E-04 9.33658E-05 3.28164E-05 1.05992E-05 + 3.14767E-06 8.59917E-07 2.16197E-07 5.00405E-08 + -3.30691E-08 -1.42873E-07 -5.68272E-07 -2.08013E-06 -7.00442E-06 -2.16866E-05 + -6.17004E-05 -1.61192E-04 -3.86329E-04 -8.48450E-04 -1.70495E-03 -3.12933E-03 + -5.23843E-03 -8.00215E-03 -1.12198E-02 -1.45913E-02 -1.75746E-02 -1.86791E-02 + -1.52868E-02 -6.04503E-03 6.04503E-03 1.52868E-02 1.86791E-02 1.75746E-02 + 1.45913E-02 1.12198E-02 8.00215E-03 5.23843E-03 3.12933E-03 1.70495E-03 + 8.48450E-04 3.86329E-04 1.61192E-04 6.17004E-05 2.16866E-05 7.00442E-06 + 2.08013E-06 5.68272E-07 1.42873E-07 3.30691E-08 + -1.95116E-08 -8.42988E-08 -3.35295E-07 -1.22733E-06 -4.13279E-06 -1.27956E-05 + -3.64048E-05 -9.51072E-05 -2.27944E-04 -5.00605E-04 -1.00592E-03 -1.84591E-03 + -3.08659E-03 -4.69420E-03 -6.49071E-03 -8.16455E-03 -9.27767E-03 -9.17328E-03 + -7.04777E-03 -2.68974E-03 2.68974E-03 7.04777E-03 9.17328E-03 9.27767E-03 + 8.16455E-03 6.49071E-03 4.69420E-03 3.08659E-03 1.84591E-03 1.00592E-03 + 5.00605E-04 2.27944E-04 9.51072E-05 3.64048E-05 1.27956E-05 4.13279E-06 + 1.22733E-06 3.35295E-07 8.42988E-08 1.95116E-08 + -1.02243E-08 -4.41737E-08 -1.75699E-07 -6.43136E-07 -2.16564E-06 -6.70509E-06 + -1.90766E-05 -4.98374E-05 -1.19445E-04 -2.62323E-04 -5.27105E-04 -9.67152E-04 + -1.61629E-03 -2.45253E-03 -3.36648E-03 -4.15826E-03 -4.56573E-03 -4.30482E-03 + -3.15659E-03 -1.17076E-03 1.17076E-03 3.15659E-03 4.30482E-03 4.56573E-03 + 4.15826E-03 3.36648E-03 2.45253E-03 1.61629E-03 9.67152E-04 5.27105E-04 + 2.62323E-04 1.19445E-04 4.98374E-05 1.90766E-05 6.70509E-06 2.16564E-06 + 6.43136E-07 1.75699E-07 4.41737E-08 1.02243E-08 + -4.74209E-09 -2.04879E-08 -8.14899E-08 -2.98289E-07 -1.00443E-06 -3.10985E-06 + -8.84780E-06 -2.31148E-05 -5.53993E-05 -1.21666E-04 -2.44471E-04 -4.48542E-04 + -7.49405E-04 -1.13594E-03 -1.55393E-03 -1.90279E-03 -2.05381E-03 -1.88815E-03 + -1.34806E-03 -4.91384E-04 4.91384E-04 1.34806E-03 1.88815E-03 2.05381E-03 + 1.90279E-03 1.55393E-03 1.13594E-03 7.49405E-04 4.48542E-04 2.44471E-04 + 1.21666E-04 5.53993E-05 2.31148E-05 8.84780E-06 3.10985E-06 1.00443E-06 + 2.98289E-07 8.14899E-08 2.04879E-08 4.74209E-09 + -1.94256E-09 -8.39272E-09 -3.33817E-08 -1.22192E-07 -4.11457E-07 -1.27392E-06 + -3.62443E-06 -9.46879E-06 -2.26939E-05 -4.98395E-05 -1.00145E-04 -1.83738E-04 + -3.06952E-04 -4.65095E-04 -6.35446E-04 -7.75605E-04 -8.31792E-04 -7.57254E-04 + -5.34874E-04 -1.93570E-04 1.93570E-04 5.34874E-04 7.57254E-04 8.31792E-04 + 7.75605E-04 6.35446E-04 4.65095E-04 3.06952E-04 1.83738E-04 1.00145E-04 + 4.98395E-05 2.26939E-05 9.46879E-06 3.62443E-06 1.27392E-06 4.11457E-07 + 1.22192E-07 3.33817E-08 8.39272E-09 1.94256E-09 + -7.01914E-10 -3.03258E-09 -1.20620E-08 -4.41521E-08 -1.48674E-07 -4.60313E-07 + -1.30963E-06 -3.42140E-06 -8.20009E-06 -1.80088E-05 -3.61860E-05 -6.63905E-05 + -1.10909E-04 -1.68033E-04 -2.29503E-04 -2.79884E-04 -2.99643E-04 -2.72071E-04 + -1.91608E-04 -6.92045E-05 6.92045E-05 1.91608E-04 2.72071E-04 2.99643E-04 + 2.79884E-04 2.29503E-04 1.68033E-04 1.10909E-04 6.63905E-05 3.61860E-05 + 1.80088E-05 8.20009E-06 3.42140E-06 1.30963E-06 4.60313E-07 1.48674E-07 + 4.41521E-08 1.20620E-08 3.03258E-09 7.01914E-10 + -2.23541E-10 -9.65798E-10 -3.84142E-09 -1.40613E-08 -4.73487E-08 -1.46598E-07 + -4.17084E-07 -1.08963E-06 -2.61151E-06 -5.73532E-06 -1.15243E-05 -2.11436E-05 + -3.53215E-05 -5.35128E-05 -7.30843E-05 -8.91138E-05 -9.53740E-05 -8.65546E-05 + -6.09230E-05 -2.19956E-05 2.19956E-05 6.09230E-05 8.65546E-05 9.53740E-05 + 8.91138E-05 7.30843E-05 5.35128E-05 3.53215E-05 2.11436E-05 1.15243E-05 + 5.73532E-06 2.61151E-06 1.08963E-06 4.17084E-07 1.46598E-07 4.73487E-08 + 1.40613E-08 3.84142E-09 9.65798E-10 2.23541E-10 + -6.27176E-11 -2.70968E-10 -1.07776E-09 -3.94509E-09 -1.32843E-08 -4.11300E-08 + -1.17019E-07 -3.05710E-07 -7.32697E-07 -1.60912E-06 -3.23330E-06 -5.93213E-06 + -9.90993E-06 -1.50137E-05 -2.05046E-05 -2.50013E-05 -2.67565E-05 -2.42807E-05 + -1.70891E-05 -6.16953E-06 6.16953E-06 1.70891E-05 2.42807E-05 2.67565E-05 + 2.50013E-05 2.05046E-05 1.50137E-05 9.90993E-06 5.93213E-06 3.23330E-06 + 1.60912E-06 7.32697E-07 3.05710E-07 1.17019E-07 4.11300E-08 1.32843E-08 + 3.94509E-09 1.07776E-09 2.70968E-10 6.27176E-11 + -1.54973E-11 -6.69554E-11 -2.66312E-10 -9.74820E-10 -3.28252E-09 -1.01631E-08 + -2.89150E-08 -7.55401E-08 -1.81047E-07 -3.97610E-07 -7.98938E-07 -1.46581E-06 + -2.44871E-06 -3.70984E-06 -5.06661E-06 -6.17773E-06 -6.61140E-06 -5.99959E-06 + -4.22258E-06 -1.52443E-06 1.52443E-06 4.22258E-06 5.99959E-06 6.61140E-06 + 6.17773E-06 5.06661E-06 3.70984E-06 2.44871E-06 1.46581E-06 7.98938E-07 + 3.97610E-07 1.81047E-07 7.55401E-08 2.89150E-08 1.01631E-08 3.28252E-09 + 9.74820E-10 2.66312E-10 6.69554E-11 1.54973E-11 + -3.37199E-12 -1.45685E-11 -5.79456E-11 -2.12106E-10 -7.14227E-10 -2.21134E-09 + -6.29146E-09 -1.64364E-08 -3.93931E-08 -8.65139E-08 -1.73837E-07 -3.18939E-07 + -5.32804E-07 -8.07206E-07 -1.10242E-06 -1.34418E-06 -1.43854E-06 -1.30542E-06 + -9.18769E-07 -3.31694E-07 3.31694E-07 9.18769E-07 1.30542E-06 1.43854E-06 + 1.34418E-06 1.10242E-06 8.07206E-07 5.32804E-07 3.18939E-07 1.73837E-07 + 8.65139E-08 3.93931E-08 1.64364E-08 6.29146E-09 2.21134E-09 7.14227E-10 + 2.12106E-10 5.79456E-11 1.45685E-11 3.37199E-12 + -6.46001E-13 -2.79101E-12 -1.11011E-11 -4.06350E-11 -1.36831E-10 -4.23645E-10 + -1.20531E-09 -3.14886E-09 -7.54688E-09 -1.65742E-08 -3.33035E-08 -6.11018E-08 + -1.02074E-07 -1.54643E-07 -2.11200E-07 -2.57516E-07 -2.75594E-07 -2.50091E-07 + -1.76016E-07 -6.35454E-08 6.35454E-08 1.76016E-07 2.50091E-07 2.75594E-07 + 2.57516E-07 2.11200E-07 1.54643E-07 1.02074E-07 6.11018E-08 3.33035E-08 + 1.65742E-08 7.54688E-09 3.14886E-09 1.20531E-09 4.23645E-10 1.36831E-10 + 4.06350E-11 1.11011E-11 2.79101E-12 6.46001E-13 + -1.08961E-13 -4.70761E-13 -1.87243E-12 -6.85393E-12 -2.30793E-11 -7.14564E-11 + -2.03300E-10 -5.31120E-10 -1.27294E-09 -2.79558E-09 -5.61731E-09 -1.03061E-08 + -1.72168E-08 -2.60838E-08 -3.56232E-08 -4.34354E-08 -4.64845E-08 -4.21829E-08 + -2.96888E-08 -1.07182E-08 1.07182E-08 2.96888E-08 4.21829E-08 4.64845E-08 + 4.34354E-08 3.56232E-08 2.60838E-08 1.72168E-08 1.03061E-08 5.61731E-09 + 2.79558E-09 1.27294E-09 5.31120E-10 2.03300E-10 7.14564E-11 2.30793E-11 + 6.85393E-12 1.87243E-12 4.70761E-13 1.08961E-13 + -1.61803E-14 -6.99062E-14 -2.78049E-13 -1.01778E-12 -3.42718E-12 -1.06110E-11 + -3.01893E-11 -7.88692E-11 -1.89026E-10 -4.15133E-10 -8.34148E-10 -1.53041E-09 + -2.55663E-09 -3.87334E-09 -5.28991E-09 -6.44999E-09 -6.90277E-09 -6.26400E-09 + -4.40867E-09 -1.59162E-09 1.59162E-09 4.40867E-09 6.26400E-09 6.90277E-09 + 6.44999E-09 5.28991E-09 3.87334E-09 2.55663E-09 1.53041E-09 8.34148E-10 + 4.15133E-10 1.89026E-10 7.88692E-11 3.01893E-11 1.06110E-11 3.42718E-12 + 1.01778E-12 2.78049E-13 6.99062E-14 1.61803E-14 + -2.11529E-15 -9.13898E-15 -3.63499E-14 -1.33057E-13 -4.48043E-13 -1.38720E-12 + -3.94671E-12 -1.03107E-11 -2.47118E-11 -5.42712E-11 -1.09050E-10 -2.00074E-10 + -3.34234E-10 -5.06370E-10 -6.91561E-10 -8.43220E-10 -9.02413E-10 -8.18905E-10 + -5.76354E-10 -2.08075E-10 2.08075E-10 5.76354E-10 8.18905E-10 9.02413E-10 + 8.43220E-10 6.91561E-10 5.06370E-10 3.34234E-10 2.00074E-10 1.09050E-10 + 5.42712E-11 2.47118E-11 1.03107E-11 3.94671E-12 1.38720E-12 4.48043E-13 + 1.33057E-13 3.63499E-14 9.13898E-15 2.11529E-15 + -2.43452E-16 -1.05182E-15 -4.18357E-15 -1.53137E-14 -5.15660E-14 -1.59655E-13 + -4.54233E-13 -1.18668E-12 -2.84412E-12 -6.24616E-12 -1.25507E-11 -2.30268E-11 + -3.84675E-11 -5.82789E-11 -7.95928E-11 -9.70475E-11 -1.03860E-10 -9.42491E-11 + -6.63335E-11 -2.39477E-11 2.39477E-11 6.63335E-11 9.42491E-11 1.03860E-10 + 9.70475E-11 7.95928E-11 5.82789E-11 3.84675E-11 2.30268E-11 1.25507E-11 + 6.24616E-12 2.84412E-12 1.18668E-12 4.54233E-13 1.59655E-13 5.15660E-14 + 1.53137E-14 4.18357E-15 1.05182E-15 2.43452E-16 + -1.71360E-16 -7.40351E-16 -2.94472E-15 -1.07790E-14 -3.62960E-14 -1.12377E-13 + -3.19724E-13 -8.35275E-13 -2.00191E-12 -4.39652E-12 -8.83416E-12 -1.62080E-11 + -2.70764E-11 -4.10211E-11 -5.60235E-11 -6.83095E-11 -7.31047E-11 -6.63397E-11 + -4.66906E-11 -1.68562E-11 1.68562E-11 4.66906E-11 6.63397E-11 7.31047E-11 + 6.83095E-11 5.60235E-11 4.10211E-11 2.70764E-11 1.62080E-11 8.83416E-12 + 4.39652E-12 2.00191E-12 8.35275E-13 3.19724E-13 1.12377E-13 3.62960E-14 + 1.07790E-14 2.94472E-15 7.40351E-16 1.71360E-16 + -1.48890E-15 -6.43271E-15 -2.55859E-14 -9.36554E-14 -3.15367E-13 -9.76416E-13 + -2.77799E-12 -7.25748E-12 -1.73940E-11 -3.82002E-11 -7.67577E-11 -1.40827E-10 + -2.35259E-10 -3.56422E-10 -4.86773E-10 -5.93523E-10 -6.35187E-10 -5.76408E-10 + -4.05682E-10 -1.46459E-10 1.46459E-10 4.05682E-10 5.76408E-10 6.35187E-10 + 5.93523E-10 4.86773E-10 3.56422E-10 2.35259E-10 1.40827E-10 7.67577E-11 + 3.82002E-11 1.73940E-11 7.25748E-12 2.77799E-12 9.76416E-13 3.15367E-13 + 9.36554E-14 2.55859E-14 6.43271E-15 1.48890E-15 + -1.13889E-14 -4.92053E-14 -1.95712E-13 -7.16392E-13 -2.41231E-12 -7.46883E-12 + -2.12495E-11 -5.55142E-11 -1.33051E-10 -2.92202E-10 -5.87137E-10 -1.07722E-09 + -1.79955E-09 -2.72635E-09 -3.72344E-09 -4.53999E-09 -4.85869E-09 -4.40908E-09 + -3.10316E-09 -1.12030E-09 1.12030E-09 3.10316E-09 4.40908E-09 4.85869E-09 + 4.53999E-09 3.72344E-09 2.72635E-09 1.79955E-09 1.07722E-09 5.87137E-10 + 2.92202E-10 1.33051E-10 5.55142E-11 2.12495E-11 7.46883E-12 2.41231E-12 + 7.16392E-13 1.95712E-13 4.92053E-14 1.13889E-14 + -7.66952E-14 -3.31358E-13 -1.31796E-12 -4.82432E-12 -1.62450E-11 -5.02965E-11 + -1.43098E-10 -3.73842E-10 -8.95989E-10 -1.96774E-09 -3.95389E-09 -7.25420E-09 + -1.21185E-08 -1.83597E-08 -2.50743E-08 -3.05731E-08 -3.27193E-08 -2.96915E-08 + -2.08972E-08 -7.54431E-09 7.54431E-09 2.08972E-08 2.96915E-08 3.27193E-08 + 3.05731E-08 2.50743E-08 1.83597E-08 1.21185E-08 7.25420E-09 3.95389E-09 + 1.96774E-09 8.95989E-10 3.73842E-10 1.43098E-10 5.02965E-11 1.62450E-11 + 4.82432E-12 1.31796E-12 3.31358E-13 7.66952E-14 + -4.54705E-13 -1.96453E-12 -7.81383E-12 -2.86020E-11 -9.63118E-11 -2.98194E-10 + -8.48389E-10 -2.21641E-09 -5.31207E-09 -1.16662E-08 -2.34415E-08 -4.30081E-08 + -7.18473E-08 -1.08850E-07 -1.48659E-07 -1.81260E-07 -1.93984E-07 -1.76033E-07 + -1.23894E-07 -4.47281E-08 4.47281E-08 1.23894E-07 1.76033E-07 1.93984E-07 + 1.81260E-07 1.48659E-07 1.08850E-07 7.18473E-08 4.30081E-08 2.34415E-08 + 1.16662E-08 5.31207E-09 2.21641E-09 8.48389E-10 2.98194E-10 9.63118E-11 + 2.86020E-11 7.81383E-12 1.96453E-12 4.54705E-13 + -2.37346E-12 -1.02544E-11 -4.07865E-11 -1.49297E-10 -5.02727E-10 -1.55651E-09 + -4.42841E-09 -1.15692E-08 -2.77279E-08 -6.08951E-08 -1.22360E-07 -2.24493E-07 + -3.75028E-07 -5.68173E-07 -7.75967E-07 -9.46137E-07 -1.01255E-06 -9.18855E-07 + -6.46700E-07 -2.33471E-07 2.33471E-07 6.46700E-07 9.18855E-07 1.01255E-06 + 9.46137E-07 7.75967E-07 5.68173E-07 3.75028E-07 2.24493E-07 1.22360E-07 + 6.08951E-08 2.77279E-08 1.15692E-08 4.42841E-09 1.55651E-09 5.02727E-10 + 1.49297E-10 4.07865E-11 1.02544E-11 2.37346E-12 + -1.09082E-11 -4.71283E-11 -1.87451E-10 -6.86152E-10 -2.31049E-09 -7.15356E-09 + -2.03526E-08 -5.31709E-08 -1.27435E-07 -2.79868E-07 -5.62354E-07 -1.03175E-06 + -1.72359E-06 -2.61127E-06 -3.56627E-06 -4.34836E-06 -4.65361E-06 -4.22298E-06 + -2.97218E-06 -1.07302E-06 1.07302E-06 2.97218E-06 4.22298E-06 4.65361E-06 + 4.34836E-06 3.56627E-06 2.61127E-06 1.72359E-06 1.03175E-06 5.62354E-07 + 2.79868E-07 1.27435E-07 5.31709E-08 2.03526E-08 7.15356E-09 2.31049E-09 + 6.86152E-10 1.87451E-10 4.71283E-11 1.09082E-11 + -4.41454E-11 -1.90728E-10 -7.58613E-10 -2.77686E-09 -9.35053E-09 -2.89504E-08 + -8.23667E-08 -2.15182E-07 -5.15728E-07 -1.13262E-06 -2.27584E-06 -4.17549E-06 + -6.97537E-06 -1.05678E-05 -1.44327E-05 -1.75979E-05 -1.88335E-05 -1.70910E-05 + -1.20290E-05 -4.34278E-06 4.34278E-06 1.20290E-05 1.70910E-05 1.88335E-05 + 1.75979E-05 1.44327E-05 1.05678E-05 6.97537E-06 4.17549E-06 2.27584E-06 + 1.13262E-06 5.15728E-07 2.15182E-07 8.23667E-08 2.89504E-08 9.35053E-09 + 2.77686E-09 7.58613E-10 1.90728E-10 4.41454E-11 + -1.57345E-10 -6.79802E-10 -2.70389E-09 -9.89740E-09 -3.33276E-08 -1.03187E-07 + -2.93575E-07 -7.66963E-07 -1.83818E-06 -4.03696E-06 -8.11167E-06 -1.48825E-05 + -2.48620E-05 -3.76666E-05 -5.14434E-05 -6.27289E-05 -6.71408E-05 -6.09397E-05 + -4.28993E-05 -1.54898E-05 1.54898E-05 4.28993E-05 6.09397E-05 6.71408E-05 + 6.27289E-05 5.14434E-05 3.76666E-05 2.48620E-05 1.48825E-05 8.11167E-06 + 4.03696E-06 1.83818E-06 7.66963E-07 2.93575E-07 1.03187E-07 3.33276E-08 + 9.89740E-09 2.70389E-09 6.79802E-10 1.57345E-10 + -4.94060E-10 -2.13456E-09 -8.49013E-09 -3.10776E-08 -1.04648E-07 -3.24003E-07 + -9.21820E-07 -2.40824E-06 -5.77185E-06 -1.26759E-05 -2.54705E-05 -4.67308E-05 + -7.80672E-05 -1.18280E-04 -1.61568E-04 -1.97097E-04 -2.11142E-04 -1.91896E-04 + -1.35288E-04 -4.88981E-05 4.88981E-05 1.35288E-04 1.91896E-04 2.11142E-04 + 1.97097E-04 1.61568E-04 1.18280E-04 7.80672E-05 4.67308E-05 2.54705E-05 + 1.26759E-05 5.77185E-06 2.40824E-06 9.21820E-07 3.24003E-07 1.04648E-07 + 3.10776E-08 8.49013E-09 2.13456E-09 4.94060E-10 + -1.36732E-09 -5.90743E-09 -2.34966E-08 -8.60078E-08 -2.89615E-07 -8.96684E-07 + -2.55115E-06 -6.66485E-06 -1.59737E-05 -3.50809E-05 -7.04900E-05 -1.29330E-04 + -2.16070E-04 -3.27456E-04 -4.47690E-04 -5.47370E-04 -5.89040E-04 -5.39071E-04 + -3.82968E-04 -1.39135E-04 1.39135E-04 3.82968E-04 5.39071E-04 5.89040E-04 + 5.47370E-04 4.47690E-04 3.27456E-04 2.16070E-04 1.29330E-04 7.04900E-05 + 3.50809E-05 1.59737E-05 6.66485E-06 2.55115E-06 8.96684E-07 2.89615E-07 + 8.60078E-08 2.34966E-08 5.90743E-09 1.36732E-09 + -3.33784E-09 -1.44210E-08 -5.73588E-08 -2.09958E-07 -7.06994E-07 -2.18895E-06 + -6.22776E-06 -1.62700E-05 -3.89942E-05 -8.56380E-05 -1.72079E-04 -3.15732E-04 + -5.27616E-04 -8.00396E-04 -1.09780E-03 -1.35330E-03 -1.48020E-03 -1.38784E-03 + -1.01179E-03 -3.73885E-04 3.73885E-04 1.01179E-03 1.38784E-03 1.48020E-03 + 1.35330E-03 1.09780E-03 8.00396E-04 5.27616E-04 3.15732E-04 1.72079E-04 + 8.56380E-05 3.89942E-05 1.62700E-05 6.22776E-06 2.18895E-06 7.06994E-07 + 2.09958E-07 5.73588E-08 1.44210E-08 3.33784E-09 + -7.19667E-09 -3.10928E-08 -1.23670E-07 -4.52688E-07 -1.52434E-06 -4.71955E-06 + -1.34276E-05 -3.50794E-05 -8.40748E-05 -1.84643E-04 -3.71024E-04 -6.80842E-04 + -1.13844E-03 -1.73135E-03 -2.39396E-03 -3.01162E-03 -3.42330E-03 -3.38656E-03 + -2.60327E-03 -9.93843E-04 9.93843E-04 2.60327E-03 3.38656E-03 3.42330E-03 + 3.01162E-03 2.39396E-03 1.73135E-03 1.13844E-03 6.80842E-04 3.71024E-04 + 1.84643E-04 8.40748E-05 3.50794E-05 1.34276E-05 4.71955E-06 1.52434E-06 + 4.52688E-07 1.23670E-07 3.10928E-08 7.19667E-09 + -1.37338E-08 -5.93359E-08 -2.36006E-07 -8.63887E-07 -2.90897E-06 -9.00655E-06 + -2.56245E-05 -6.69437E-05 -1.60444E-04 -3.52365E-04 -7.08070E-04 -1.29961E-03 + -2.17545E-03 -3.32301E-03 -4.65933E-03 -6.06210E-03 -7.31034E-03 -7.78358E-03 + -6.38003E-03 -2.52491E-03 2.52491E-03 6.38003E-03 7.78358E-03 7.31034E-03 + 6.06210E-03 4.65933E-03 3.32301E-03 2.17545E-03 1.29961E-03 7.08070E-04 + 3.52365E-04 1.60444E-04 6.69437E-05 2.56245E-05 9.00655E-06 2.90897E-06 + 8.63887E-07 2.36006E-07 5.93359E-08 1.37338E-08 + -2.32765E-08 -1.00565E-07 -3.99993E-07 -1.46415E-06 -4.93025E-06 -1.52647E-05 + -4.34294E-05 -1.13459E-04 -2.71928E-04 -5.97207E-04 -1.20013E-03 -2.20335E-03 + -3.69337E-03 -5.67314E-03 -8.09294E-03 -1.09515E-02 -1.40568E-02 -1.60172E-02 + -1.38291E-02 -5.62030E-03 5.62030E-03 1.38291E-02 1.60172E-02 1.40568E-02 + 1.09515E-02 8.09294E-03 5.67314E-03 3.69337E-03 2.20335E-03 1.20013E-03 + 5.97207E-04 2.71928E-04 1.13459E-04 4.34294E-05 1.52647E-05 4.93025E-06 + 1.46415E-06 3.99993E-07 1.00565E-07 2.32765E-08 + -3.52223E-08 -1.52176E-07 -6.05275E-07 -2.21557E-06 -7.46051E-06 -2.30987E-05 + -6.57179E-05 -1.71688E-04 -4.11485E-04 -9.03707E-04 -1.81615E-03 -3.33532E-03 + -5.59924E-03 -8.65162E-03 -1.25626E-02 -1.76567E-02 -2.39265E-02 -2.87239E-02 + -2.57204E-02 -1.06452E-02 1.06452E-02 2.57204E-02 2.87239E-02 2.39265E-02 + 1.76567E-02 1.25626E-02 8.65162E-03 5.59924E-03 3.33532E-03 1.81615E-03 + 9.03707E-04 4.11485E-04 1.71688E-04 6.57179E-05 2.30987E-05 7.46051E-06 + 2.21557E-06 6.05275E-07 1.52176E-07 3.52223E-08 + -4.79611E-08 -2.07213E-07 -8.24183E-07 -3.01687E-06 -1.01587E-05 -3.14527E-05 + -8.94860E-05 -2.33781E-04 -5.60306E-04 -1.23056E-03 -2.47313E-03 -4.54321E-03 + -7.63830E-03 -1.18703E-02 -1.75272E-02 -2.54802E-02 -3.60920E-02 -4.51339E-02 + -4.18994E-02 -1.78587E-02 1.78587E-02 4.18994E-02 4.51339E-02 3.60920E-02 + 2.54802E-02 1.75272E-02 1.18703E-02 7.63830E-03 4.54321E-03 2.47313E-03 + 1.23056E-03 5.60306E-04 2.33781E-04 8.94860E-05 3.14527E-05 1.01587E-05 + 3.01687E-06 8.24183E-07 2.07213E-07 4.79611E-08 + -5.93972E-08 -2.56622E-07 -1.02071E-06 -3.73623E-06 -1.25810E-05 -3.89525E-05 + -1.10823E-04 -2.89525E-04 -6.93908E-04 -1.52398E-03 -3.06293E-03 -5.62763E-03 + -9.46916E-03 -1.47617E-02 -2.19925E-02 -3.25307E-02 -4.70998E-02 -6.03833E-02 + -5.85896E-02 -2.63510E-02 2.63510E-02 5.85896E-02 6.03833E-02 4.70998E-02 + 3.25307E-02 2.19925E-02 1.47617E-02 9.46916E-03 5.62763E-03 3.06293E-03 + 1.52398E-03 6.93908E-04 2.89525E-04 1.10823E-04 3.89525E-05 1.25810E-05 + 3.73623E-06 1.02071E-06 2.56622E-07 5.93972E-08 + -6.77629E-08 -2.92766E-07 -1.16446E-06 -4.26245E-06 -1.43530E-05 -4.44387E-05 + -1.26432E-04 -3.30303E-04 -7.91640E-04 -1.73862E-03 -3.49424E-03 -6.41928E-03 + -1.07944E-02 -1.67864E-02 -2.48325E-02 -3.62272E-02 -5.15548E-02 -6.50867E-02 + -6.22833E-02 -2.77064E-02 2.77064E-02 6.22833E-02 6.50867E-02 5.15548E-02 + 3.62272E-02 2.48325E-02 1.67864E-02 1.07944E-02 6.41928E-03 3.49424E-03 + 1.73862E-03 7.91640E-04 3.30303E-04 1.26432E-04 4.44387E-05 1.43530E-05 + 4.26245E-06 1.16446E-06 2.92766E-07 6.77629E-08 + -7.20958E-08 -3.11486E-07 -1.23892E-06 -4.53500E-06 -1.52707E-05 -4.72802E-05 + -1.34517E-04 -3.51423E-04 -8.42259E-04 -1.84978E-03 -3.71749E-03 -6.82771E-03 + -1.14669E-02 -1.77454E-02 -2.58796E-02 -3.66869E-02 -5.02725E-02 -6.10209E-02 + -5.53743E-02 -2.32516E-02 2.32516E-02 5.53743E-02 6.10209E-02 5.02725E-02 + 3.66869E-02 2.58796E-02 1.77454E-02 1.14669E-02 6.82771E-03 3.71749E-03 + 1.84978E-03 8.42259E-04 3.51423E-04 1.34517E-04 4.72802E-05 1.52707E-05 + 4.53500E-06 1.23892E-06 3.11486E-07 7.20958E-08 + -7.20958E-08 -3.11486E-07 -1.23892E-06 -4.53500E-06 -1.52707E-05 -4.72802E-05 + -1.34517E-04 -3.51423E-04 -8.42259E-04 -1.84978E-03 -3.71749E-03 -6.82771E-03 + -1.14669E-02 -1.77454E-02 -2.58796E-02 -3.66869E-02 -5.02725E-02 -6.10209E-02 + -5.53743E-02 -2.32516E-02 2.32516E-02 5.53743E-02 6.10209E-02 5.02725E-02 + 3.66869E-02 2.58796E-02 1.77454E-02 1.14669E-02 6.82771E-03 3.71749E-03 + 1.84978E-03 8.42259E-04 3.51423E-04 1.34517E-04 4.72802E-05 1.52707E-05 + 4.53500E-06 1.23892E-06 3.11486E-07 7.20958E-08 + -6.77629E-08 -2.92766E-07 -1.16446E-06 -4.26245E-06 -1.43530E-05 -4.44387E-05 + -1.26432E-04 -3.30303E-04 -7.91640E-04 -1.73862E-03 -3.49424E-03 -6.41928E-03 + -1.07944E-02 -1.67864E-02 -2.48325E-02 -3.62272E-02 -5.15548E-02 -6.50867E-02 + -6.22833E-02 -2.77064E-02 2.77064E-02 6.22833E-02 6.50867E-02 5.15548E-02 + 3.62272E-02 2.48325E-02 1.67864E-02 1.07944E-02 6.41928E-03 3.49424E-03 + 1.73862E-03 7.91640E-04 3.30303E-04 1.26432E-04 4.44387E-05 1.43530E-05 + 4.26245E-06 1.16446E-06 2.92766E-07 6.77629E-08 + -5.93972E-08 -2.56622E-07 -1.02071E-06 -3.73623E-06 -1.25810E-05 -3.89525E-05 + -1.10823E-04 -2.89525E-04 -6.93908E-04 -1.52398E-03 -3.06293E-03 -5.62763E-03 + -9.46916E-03 -1.47617E-02 -2.19925E-02 -3.25307E-02 -4.70998E-02 -6.03833E-02 + -5.85896E-02 -2.63510E-02 2.63510E-02 5.85896E-02 6.03833E-02 4.70998E-02 + 3.25307E-02 2.19925E-02 1.47617E-02 9.46916E-03 5.62763E-03 3.06293E-03 + 1.52398E-03 6.93908E-04 2.89525E-04 1.10823E-04 3.89525E-05 1.25810E-05 + 3.73623E-06 1.02071E-06 2.56622E-07 5.93972E-08 + -4.79611E-08 -2.07213E-07 -8.24183E-07 -3.01687E-06 -1.01587E-05 -3.14527E-05 + -8.94860E-05 -2.33781E-04 -5.60306E-04 -1.23056E-03 -2.47313E-03 -4.54321E-03 + -7.63830E-03 -1.18703E-02 -1.75272E-02 -2.54802E-02 -3.60920E-02 -4.51339E-02 + -4.18994E-02 -1.78587E-02 1.78587E-02 4.18994E-02 4.51339E-02 3.60920E-02 + 2.54802E-02 1.75272E-02 1.18703E-02 7.63830E-03 4.54321E-03 2.47313E-03 + 1.23056E-03 5.60306E-04 2.33781E-04 8.94860E-05 3.14527E-05 1.01587E-05 + 3.01687E-06 8.24183E-07 2.07213E-07 4.79611E-08 + -3.52223E-08 -1.52176E-07 -6.05275E-07 -2.21557E-06 -7.46051E-06 -2.30987E-05 + -6.57179E-05 -1.71688E-04 -4.11485E-04 -9.03707E-04 -1.81615E-03 -3.33532E-03 + -5.59924E-03 -8.65162E-03 -1.25626E-02 -1.76567E-02 -2.39265E-02 -2.87239E-02 + -2.57204E-02 -1.06452E-02 1.06452E-02 2.57204E-02 2.87239E-02 2.39265E-02 + 1.76567E-02 1.25626E-02 8.65162E-03 5.59924E-03 3.33532E-03 1.81615E-03 + 9.03707E-04 4.11485E-04 1.71688E-04 6.57179E-05 2.30987E-05 7.46051E-06 + 2.21557E-06 6.05275E-07 1.52176E-07 3.52223E-08 + -2.32765E-08 -1.00565E-07 -3.99993E-07 -1.46415E-06 -4.93025E-06 -1.52647E-05 + -4.34294E-05 -1.13459E-04 -2.71928E-04 -5.97207E-04 -1.20013E-03 -2.20335E-03 + -3.69337E-03 -5.67314E-03 -8.09294E-03 -1.09515E-02 -1.40568E-02 -1.60172E-02 + -1.38291E-02 -5.62030E-03 5.62030E-03 1.38291E-02 1.60172E-02 1.40568E-02 + 1.09515E-02 8.09294E-03 5.67314E-03 3.69337E-03 2.20335E-03 1.20013E-03 + 5.97207E-04 2.71928E-04 1.13459E-04 4.34294E-05 1.52647E-05 4.93025E-06 + 1.46415E-06 3.99993E-07 1.00565E-07 2.32765E-08 + -1.37338E-08 -5.93359E-08 -2.36006E-07 -8.63887E-07 -2.90897E-06 -9.00655E-06 + -2.56245E-05 -6.69437E-05 -1.60444E-04 -3.52365E-04 -7.08070E-04 -1.29961E-03 + -2.17545E-03 -3.32301E-03 -4.65933E-03 -6.06210E-03 -7.31034E-03 -7.78358E-03 + -6.38003E-03 -2.52491E-03 2.52491E-03 6.38003E-03 7.78358E-03 7.31034E-03 + 6.06210E-03 4.65933E-03 3.32301E-03 2.17545E-03 1.29961E-03 7.08070E-04 + 3.52365E-04 1.60444E-04 6.69437E-05 2.56245E-05 9.00655E-06 2.90897E-06 + 8.63887E-07 2.36006E-07 5.93359E-08 1.37338E-08 + -7.19667E-09 -3.10928E-08 -1.23670E-07 -4.52688E-07 -1.52434E-06 -4.71955E-06 + -1.34276E-05 -3.50794E-05 -8.40748E-05 -1.84643E-04 -3.71024E-04 -6.80842E-04 + -1.13844E-03 -1.73135E-03 -2.39396E-03 -3.01162E-03 -3.42330E-03 -3.38656E-03 + -2.60327E-03 -9.93843E-04 9.93843E-04 2.60327E-03 3.38656E-03 3.42330E-03 + 3.01162E-03 2.39396E-03 1.73135E-03 1.13844E-03 6.80842E-04 3.71024E-04 + 1.84643E-04 8.40748E-05 3.50794E-05 1.34276E-05 4.71955E-06 1.52434E-06 + 4.52688E-07 1.23670E-07 3.10928E-08 7.19667E-09 + -3.33784E-09 -1.44210E-08 -5.73588E-08 -2.09958E-07 -7.06994E-07 -2.18895E-06 + -6.22776E-06 -1.62700E-05 -3.89942E-05 -8.56380E-05 -1.72079E-04 -3.15732E-04 + -5.27616E-04 -8.00396E-04 -1.09780E-03 -1.35330E-03 -1.48020E-03 -1.38784E-03 + -1.01179E-03 -3.73885E-04 3.73885E-04 1.01179E-03 1.38784E-03 1.48020E-03 + 1.35330E-03 1.09780E-03 8.00396E-04 5.27616E-04 3.15732E-04 1.72079E-04 + 8.56380E-05 3.89942E-05 1.62700E-05 6.22776E-06 2.18895E-06 7.06994E-07 + 2.09958E-07 5.73588E-08 1.44210E-08 3.33784E-09 + -1.36732E-09 -5.90743E-09 -2.34966E-08 -8.60078E-08 -2.89615E-07 -8.96684E-07 + -2.55115E-06 -6.66485E-06 -1.59737E-05 -3.50809E-05 -7.04900E-05 -1.29330E-04 + -2.16070E-04 -3.27456E-04 -4.47690E-04 -5.47370E-04 -5.89040E-04 -5.39071E-04 + -3.82968E-04 -1.39135E-04 1.39135E-04 3.82968E-04 5.39071E-04 5.89040E-04 + 5.47370E-04 4.47690E-04 3.27456E-04 2.16070E-04 1.29330E-04 7.04900E-05 + 3.50809E-05 1.59737E-05 6.66485E-06 2.55115E-06 8.96684E-07 2.89615E-07 + 8.60078E-08 2.34966E-08 5.90743E-09 1.36732E-09 + -4.94060E-10 -2.13456E-09 -8.49013E-09 -3.10776E-08 -1.04648E-07 -3.24003E-07 + -9.21820E-07 -2.40824E-06 -5.77185E-06 -1.26759E-05 -2.54705E-05 -4.67308E-05 + -7.80672E-05 -1.18280E-04 -1.61568E-04 -1.97097E-04 -2.11142E-04 -1.91896E-04 + -1.35288E-04 -4.88981E-05 4.88981E-05 1.35288E-04 1.91896E-04 2.11142E-04 + 1.97097E-04 1.61568E-04 1.18280E-04 7.80672E-05 4.67308E-05 2.54705E-05 + 1.26759E-05 5.77185E-06 2.40824E-06 9.21820E-07 3.24003E-07 1.04648E-07 + 3.10776E-08 8.49013E-09 2.13456E-09 4.94060E-10 + -1.57345E-10 -6.79802E-10 -2.70389E-09 -9.89740E-09 -3.33276E-08 -1.03187E-07 + -2.93575E-07 -7.66963E-07 -1.83818E-06 -4.03696E-06 -8.11167E-06 -1.48825E-05 + -2.48620E-05 -3.76666E-05 -5.14434E-05 -6.27289E-05 -6.71408E-05 -6.09397E-05 + -4.28993E-05 -1.54898E-05 1.54898E-05 4.28993E-05 6.09397E-05 6.71408E-05 + 6.27289E-05 5.14434E-05 3.76666E-05 2.48620E-05 1.48825E-05 8.11167E-06 + 4.03696E-06 1.83818E-06 7.66963E-07 2.93575E-07 1.03187E-07 3.33276E-08 + 9.89740E-09 2.70389E-09 6.79802E-10 1.57345E-10 + -4.41454E-11 -1.90728E-10 -7.58613E-10 -2.77686E-09 -9.35053E-09 -2.89504E-08 + -8.23667E-08 -2.15182E-07 -5.15728E-07 -1.13262E-06 -2.27584E-06 -4.17549E-06 + -6.97537E-06 -1.05678E-05 -1.44327E-05 -1.75979E-05 -1.88335E-05 -1.70910E-05 + -1.20290E-05 -4.34278E-06 4.34278E-06 1.20290E-05 1.70910E-05 1.88335E-05 + 1.75979E-05 1.44327E-05 1.05678E-05 6.97537E-06 4.17549E-06 2.27584E-06 + 1.13262E-06 5.15728E-07 2.15182E-07 8.23667E-08 2.89504E-08 9.35053E-09 + 2.77686E-09 7.58613E-10 1.90728E-10 4.41454E-11 + -1.09082E-11 -4.71283E-11 -1.87451E-10 -6.86152E-10 -2.31049E-09 -7.15356E-09 + -2.03526E-08 -5.31709E-08 -1.27435E-07 -2.79868E-07 -5.62354E-07 -1.03175E-06 + -1.72359E-06 -2.61127E-06 -3.56627E-06 -4.34836E-06 -4.65361E-06 -4.22298E-06 + -2.97218E-06 -1.07302E-06 1.07302E-06 2.97218E-06 4.22298E-06 4.65361E-06 + 4.34836E-06 3.56627E-06 2.61127E-06 1.72359E-06 1.03175E-06 5.62354E-07 + 2.79868E-07 1.27435E-07 5.31709E-08 2.03526E-08 7.15356E-09 2.31049E-09 + 6.86152E-10 1.87451E-10 4.71283E-11 1.09082E-11 + -2.37346E-12 -1.02544E-11 -4.07865E-11 -1.49297E-10 -5.02727E-10 -1.55651E-09 + -4.42841E-09 -1.15692E-08 -2.77279E-08 -6.08951E-08 -1.22360E-07 -2.24493E-07 + -3.75028E-07 -5.68173E-07 -7.75967E-07 -9.46137E-07 -1.01255E-06 -9.18855E-07 + -6.46700E-07 -2.33471E-07 2.33471E-07 6.46700E-07 9.18855E-07 1.01255E-06 + 9.46137E-07 7.75967E-07 5.68173E-07 3.75028E-07 2.24493E-07 1.22360E-07 + 6.08951E-08 2.77279E-08 1.15692E-08 4.42841E-09 1.55651E-09 5.02727E-10 + 1.49297E-10 4.07865E-11 1.02544E-11 2.37346E-12 + -4.54705E-13 -1.96453E-12 -7.81383E-12 -2.86020E-11 -9.63118E-11 -2.98194E-10 + -8.48389E-10 -2.21641E-09 -5.31207E-09 -1.16662E-08 -2.34415E-08 -4.30081E-08 + -7.18473E-08 -1.08850E-07 -1.48659E-07 -1.81260E-07 -1.93984E-07 -1.76033E-07 + -1.23894E-07 -4.47281E-08 4.47281E-08 1.23894E-07 1.76033E-07 1.93984E-07 + 1.81260E-07 1.48659E-07 1.08850E-07 7.18473E-08 4.30081E-08 2.34415E-08 + 1.16662E-08 5.31207E-09 2.21641E-09 8.48389E-10 2.98194E-10 9.63118E-11 + 2.86020E-11 7.81383E-12 1.96453E-12 4.54705E-13 + -7.66952E-14 -3.31358E-13 -1.31796E-12 -4.82432E-12 -1.62450E-11 -5.02965E-11 + -1.43098E-10 -3.73842E-10 -8.95989E-10 -1.96774E-09 -3.95389E-09 -7.25420E-09 + -1.21185E-08 -1.83597E-08 -2.50743E-08 -3.05731E-08 -3.27193E-08 -2.96915E-08 + -2.08972E-08 -7.54431E-09 7.54431E-09 2.08972E-08 2.96915E-08 3.27193E-08 + 3.05731E-08 2.50743E-08 1.83597E-08 1.21185E-08 7.25420E-09 3.95389E-09 + 1.96774E-09 8.95989E-10 3.73842E-10 1.43098E-10 5.02965E-11 1.62450E-11 + 4.82432E-12 1.31796E-12 3.31358E-13 7.66952E-14 + -1.13889E-14 -4.92053E-14 -1.95712E-13 -7.16392E-13 -2.41231E-12 -7.46883E-12 + -2.12495E-11 -5.55142E-11 -1.33051E-10 -2.92202E-10 -5.87137E-10 -1.07722E-09 + -1.79955E-09 -2.72635E-09 -3.72344E-09 -4.53999E-09 -4.85869E-09 -4.40908E-09 + -3.10316E-09 -1.12030E-09 1.12030E-09 3.10316E-09 4.40908E-09 4.85869E-09 + 4.53999E-09 3.72344E-09 2.72635E-09 1.79955E-09 1.07722E-09 5.87137E-10 + 2.92202E-10 1.33051E-10 5.55142E-11 2.12495E-11 7.46883E-12 2.41231E-12 + 7.16392E-13 1.95712E-13 4.92053E-14 1.13889E-14 + -1.48890E-15 -6.43271E-15 -2.55859E-14 -9.36554E-14 -3.15367E-13 -9.76416E-13 + -2.77799E-12 -7.25748E-12 -1.73940E-11 -3.82002E-11 -7.67577E-11 -1.40827E-10 + -2.35259E-10 -3.56422E-10 -4.86773E-10 -5.93523E-10 -6.35187E-10 -5.76408E-10 + -4.05682E-10 -1.46459E-10 1.46459E-10 4.05682E-10 5.76408E-10 6.35187E-10 + 5.93523E-10 4.86773E-10 3.56422E-10 2.35259E-10 1.40827E-10 7.67577E-11 + 3.82002E-11 1.73940E-11 7.25748E-12 2.77799E-12 9.76416E-13 3.15367E-13 + 9.36554E-14 2.55859E-14 6.43271E-15 1.48890E-15 + -1.71360E-16 -7.40351E-16 -2.94472E-15 -1.07790E-14 -3.62960E-14 -1.12377E-13 + -3.19724E-13 -8.35275E-13 -2.00191E-12 -4.39652E-12 -8.83416E-12 -1.62080E-11 + -2.70764E-11 -4.10211E-11 -5.60235E-11 -6.83095E-11 -7.31047E-11 -6.63397E-11 + -4.66906E-11 -1.68562E-11 1.68562E-11 4.66906E-11 6.63397E-11 7.31047E-11 + 6.83095E-11 5.60235E-11 4.10211E-11 2.70764E-11 1.62080E-11 8.83416E-12 + 4.39652E-12 2.00191E-12 8.35275E-13 3.19724E-13 1.12377E-13 3.62960E-14 + 1.07790E-14 2.94472E-15 7.40351E-16 1.71360E-16 + -6.16415E-17 -2.66319E-16 -1.05927E-15 -3.87740E-15 -1.30564E-14 -4.04243E-14 + -1.15011E-13 -3.00465E-13 -7.20125E-13 -1.58152E-12 -3.17782E-12 -5.83035E-12 + -9.73990E-12 -1.47561E-11 -2.01528E-11 -2.45723E-11 -2.62972E-11 -2.38637E-11 + -1.67955E-11 -6.06352E-12 6.06352E-12 1.67955E-11 2.38637E-11 2.62972E-11 + 2.45723E-11 2.01528E-11 1.47561E-11 9.73990E-12 5.83035E-12 3.17782E-12 + 1.58152E-12 7.20125E-13 3.00465E-13 1.15011E-13 4.04243E-14 1.30564E-14 + 3.87740E-15 1.05927E-15 2.66319E-16 6.16415E-17 + -5.35587E-16 -2.31397E-15 -9.20374E-15 -3.36897E-14 -1.13444E-13 -3.51236E-13 + -9.99299E-13 -2.61066E-12 -6.25697E-12 -1.37414E-11 -2.76112E-11 -5.06584E-11 + -8.46274E-11 -1.28212E-10 -1.75102E-10 -2.13502E-10 -2.28489E-10 -2.07345E-10 + -1.45932E-10 -5.26843E-11 5.26843E-11 1.45932E-10 2.07345E-10 2.28489E-10 + 2.13502E-10 1.75102E-10 1.28212E-10 8.46274E-11 5.06584E-11 2.76112E-11 + 1.37414E-11 6.25697E-12 2.61066E-12 9.99299E-13 3.51236E-13 1.13444E-13 + 3.36897E-14 9.20374E-15 2.31397E-15 5.35587E-16 + -4.09683E-15 -1.77001E-14 -7.04015E-14 -2.57700E-13 -8.67757E-13 -2.68669E-12 + -7.64387E-12 -1.99695E-11 -4.78610E-11 -1.05111E-10 -2.11205E-10 -3.87498E-10 + -6.47335E-10 -9.80723E-10 -1.33939E-09 -1.63312E-09 -1.74777E-09 -1.58603E-09 + -1.11627E-09 -4.02994E-10 4.02994E-10 1.11627E-09 1.58603E-09 1.74777E-09 + 1.63312E-09 1.33939E-09 9.80723E-10 6.47335E-10 3.87498E-10 2.11205E-10 + 1.05111E-10 4.78610E-11 1.99695E-11 7.64387E-12 2.68669E-12 8.67757E-13 + 2.57700E-13 7.04015E-14 1.77001E-14 4.09683E-15 + -2.75888E-14 -1.19196E-13 -4.74097E-13 -1.73540E-12 -5.84363E-12 -1.80926E-11 + -5.14752E-11 -1.34479E-10 -3.22305E-10 -7.07836E-10 -1.42229E-09 -2.60948E-09 + -4.35927E-09 -6.60436E-09 -9.01973E-09 -1.09978E-08 -1.17698E-08 -1.06806E-08 + -7.51714E-09 -2.71384E-09 2.71384E-09 7.51714E-09 1.06806E-08 1.17698E-08 + 1.09978E-08 9.01973E-09 6.60436E-09 4.35927E-09 2.60948E-09 1.42229E-09 + 7.07836E-10 3.22305E-10 1.34479E-10 5.14752E-11 1.80926E-11 5.84363E-12 + 1.73540E-12 4.74097E-13 1.19196E-13 2.75888E-14 + -1.63566E-13 -7.06679E-13 -2.81079E-12 -1.02887E-11 -3.46453E-11 -1.07266E-10 + -3.05182E-10 -7.97286E-10 -1.91086E-09 -4.19656E-09 -8.43237E-09 -1.54709E-08 + -2.58449E-08 -3.91554E-08 -5.34755E-08 -6.52027E-08 -6.97798E-08 -6.33225E-08 + -4.45670E-08 -1.60896E-08 1.60896E-08 4.45670E-08 6.33225E-08 6.97798E-08 + 6.52027E-08 5.34755E-08 3.91554E-08 2.58449E-08 1.54709E-08 8.43237E-09 + 4.19656E-09 1.91086E-09 7.97286E-10 3.05182E-10 1.07266E-10 3.46453E-11 + 1.02887E-11 2.81079E-12 7.06679E-13 1.63566E-13 + -8.53781E-13 -3.68872E-12 -1.46717E-11 -5.37049E-11 -1.80841E-10 -5.59907E-10 + -1.59299E-09 -4.16166E-09 -9.97427E-09 -2.19052E-08 -4.40152E-08 -8.07547E-08 + -1.34905E-07 -2.04383E-07 -2.79131E-07 -3.40344E-07 -3.64236E-07 -3.30530E-07 + -2.32631E-07 -8.39842E-08 8.39842E-08 2.32631E-07 3.30530E-07 3.64236E-07 + 3.40344E-07 2.79131E-07 2.04383E-07 1.34905E-07 8.07547E-08 4.40152E-08 + 2.19052E-08 9.97427E-09 4.16166E-09 1.59299E-09 5.59907E-10 1.80841E-10 + 5.37049E-11 1.46717E-11 3.68872E-12 8.53781E-13 + -3.92390E-12 -1.69530E-11 -6.74298E-11 -2.46823E-10 -8.31128E-10 -2.57328E-09 + -7.32122E-09 -1.91266E-08 -4.58408E-08 -1.00674E-07 -2.02290E-07 -3.71141E-07 + -6.20010E-07 -9.39325E-07 -1.28286E-06 -1.56419E-06 -1.67400E-06 -1.51909E-06 + -1.06915E-06 -3.85986E-07 3.85986E-07 1.06915E-06 1.51909E-06 1.67400E-06 + 1.56419E-06 1.28286E-06 9.39325E-07 6.20010E-07 3.71141E-07 2.02290E-07 + 1.00674E-07 4.58408E-08 1.91266E-08 7.32122E-09 2.57328E-09 8.31128E-10 + 2.46823E-10 6.74298E-11 1.69530E-11 3.92390E-12 + -1.58800E-11 -6.86086E-11 -2.72888E-10 -9.98890E-10 -3.36357E-09 -1.04140E-08 + -2.96289E-08 -7.74053E-08 -1.85517E-07 -4.07427E-07 -8.18665E-07 -1.50201E-06 + -2.50918E-06 -3.80145E-06 -5.19175E-06 -6.33036E-06 -6.77487E-06 -6.14811E-06 + -4.32725E-06 -1.56226E-06 1.56226E-06 4.32725E-06 6.14811E-06 6.77487E-06 + 6.33036E-06 5.19175E-06 3.80145E-06 2.50918E-06 1.50201E-06 8.18665E-07 + 4.07427E-07 1.85517E-07 7.74053E-08 2.96289E-08 1.04140E-08 3.36357E-09 + 9.98890E-10 2.72888E-10 6.86086E-11 1.58800E-11 + -5.66002E-11 -2.44538E-10 -9.72641E-10 -3.56029E-09 -1.19886E-08 -3.71183E-08 + -1.05605E-07 -2.75892E-07 -6.61230E-07 -1.45217E-06 -2.91793E-06 -5.35352E-06 + -8.94336E-06 -1.35495E-05 -1.85056E-05 -2.25662E-05 -2.41553E-05 -2.19271E-05 + -1.54380E-05 -5.57479E-06 5.57479E-06 1.54380E-05 2.19271E-05 2.41553E-05 + 2.25662E-05 1.85056E-05 1.35495E-05 8.94336E-06 5.35352E-06 2.91793E-06 + 1.45217E-06 6.61230E-07 2.75892E-07 1.05605E-07 3.71183E-08 1.19886E-08 + 3.56029E-09 9.72641E-10 2.44538E-10 5.66002E-11 + -1.77723E-10 -7.67844E-10 -3.05407E-09 -1.11792E-08 -3.76439E-08 -1.16550E-07 + -3.31597E-07 -8.66293E-07 -2.07625E-06 -4.55979E-06 -9.16223E-06 -1.68100E-05 + -2.80826E-05 -4.25497E-05 -5.81292E-05 -7.09341E-05 -7.60369E-05 -6.91733E-05 + -4.88204E-05 -1.76585E-05 1.76585E-05 4.88204E-05 6.91733E-05 7.60369E-05 + 7.09341E-05 5.81292E-05 4.25497E-05 2.80826E-05 1.68100E-05 9.16223E-06 + 4.55979E-06 2.07625E-06 8.66293E-07 3.31597E-07 1.16550E-07 3.76439E-08 + 1.11792E-08 3.05407E-09 7.67844E-10 1.77723E-10 + -4.91852E-10 -2.12502E-09 -8.45218E-09 -3.09387E-08 -1.04180E-07 -3.22555E-07 + -9.17699E-07 -2.39748E-06 -5.74605E-06 -1.26193E-05 -2.53567E-05 -4.65231E-05 + -7.77294E-05 -1.17824E-04 -1.61196E-04 -1.97431E-04 -2.13203E-04 -1.96150E-04 + -1.40153E-04 -5.11144E-05 5.11144E-05 1.40153E-04 1.96150E-04 2.13203E-04 + 1.97431E-04 1.61196E-04 1.17824E-04 7.77294E-05 4.65231E-05 2.53567E-05 + 1.26193E-05 5.74605E-06 2.39748E-06 9.17699E-07 3.22555E-07 1.04180E-07 + 3.09387E-08 8.45218E-09 2.12502E-09 4.91852E-10 + -1.20069E-09 -5.18751E-09 -2.06331E-08 -7.55262E-08 -2.54320E-07 -7.87407E-07 + -2.24025E-06 -5.85262E-06 -1.40270E-05 -3.08057E-05 -6.19005E-05 -1.13580E-04 + -1.89841E-04 -2.88227E-04 -3.96384E-04 -4.91969E-04 -5.45223E-04 -5.20955E-04 + -3.87208E-04 -1.44842E-04 1.44842E-04 3.87208E-04 5.20955E-04 5.45223E-04 + 4.91969E-04 3.96384E-04 2.88227E-04 1.89841E-04 1.13580E-04 6.19005E-05 + 3.08057E-05 1.40270E-05 5.85262E-06 2.24025E-06 7.87407E-07 2.54320E-07 + 7.55262E-08 2.06331E-08 5.18751E-09 1.20069E-09 + -2.58878E-09 -1.11847E-08 -4.44867E-08 -1.62841E-07 -5.48335E-07 -1.69772E-06 + -4.83016E-06 -1.26187E-05 -3.02434E-05 -6.64199E-05 -1.33467E-04 -2.44944E-04 + -4.09806E-04 -6.24680E-04 -8.70173E-04 -1.11470E-03 -1.30903E-03 -1.35026E-03 + -1.07776E-03 -4.20416E-04 4.20416E-04 1.07776E-03 1.35026E-03 1.30903E-03 + 1.11470E-03 8.70173E-04 6.24680E-04 4.09806E-04 2.44944E-04 1.33467E-04 + 6.64199E-05 3.02434E-05 1.26187E-05 4.83016E-06 1.69772E-06 5.48335E-07 + 1.62841E-07 4.44867E-08 1.11847E-08 2.58878E-09 + -4.94030E-09 -2.13443E-08 -8.48961E-08 -3.10757E-07 -1.04641E-06 -3.23984E-06 + -9.21763E-06 -2.40810E-05 -5.77150E-05 -1.26753E-04 -2.54717E-04 -4.67615E-04 + -7.83621E-04 -1.20238E-03 -1.70983E-03 -2.29816E-03 -2.92057E-03 -3.29504E-03 + -2.82503E-03 -1.14423E-03 1.14423E-03 2.82503E-03 3.29504E-03 2.92057E-03 + 2.29816E-03 1.70983E-03 1.20238E-03 7.83621E-04 4.67615E-04 2.54717E-04 + 1.26753E-04 5.77150E-05 2.40810E-05 9.21763E-06 3.23984E-06 1.04641E-06 + 3.10757E-07 8.48961E-08 2.13443E-08 4.94030E-09 + -8.37303E-09 -3.61752E-08 -1.43885E-07 -5.26684E-07 -1.77351E-06 -5.49101E-06 + -1.56224E-05 -4.08134E-05 -9.78178E-05 -2.14828E-04 -4.31731E-04 -7.92850E-04 + -1.33092E-03 -2.05620E-03 -2.98563E-03 -4.19888E-03 -5.69952E-03 -6.85721E-03 + -6.14791E-03 -2.54425E-03 2.54425E-03 6.14791E-03 6.85721E-03 5.69952E-03 + 4.19888E-03 2.98563E-03 2.05620E-03 1.33092E-03 7.92850E-04 4.31731E-04 + 2.14828E-04 9.78178E-05 4.08134E-05 1.56224E-05 5.49101E-06 1.77351E-06 + 5.26684E-07 1.43885E-07 3.61752E-08 8.37303E-09 + -1.26702E-08 -5.47408E-08 -2.17729E-07 -7.96985E-07 -2.68369E-06 -8.30906E-06 + -2.36400E-05 -6.17594E-05 -1.48019E-04 -3.25083E-04 -6.53326E-04 -1.20005E-03 + -2.01662E-03 -3.12858E-03 -4.59879E-03 -6.63137E-03 -9.30432E-03 -1.15240E-02 + -1.05251E-02 -4.39272E-03 4.39272E-03 1.05251E-02 1.15240E-02 9.30432E-03 + 6.63137E-03 4.59879E-03 3.12858E-03 2.01662E-03 1.20005E-03 6.53326E-04 + 3.25083E-04 1.48019E-04 6.17594E-05 2.36400E-05 8.30906E-06 2.68369E-06 + 7.96985E-07 2.17729E-07 5.47408E-08 1.26702E-08 + -1.72526E-08 -7.45388E-08 -2.96475E-07 -1.08523E-06 -3.65430E-06 -1.13142E-05 + -3.21899E-05 -8.40957E-05 -2.01553E-04 -4.42655E-04 -8.89624E-04 -1.63419E-03 + -2.74693E-03 -4.26582E-03 -6.28730E-03 -9.11116E-03 -1.28584E-02 -1.59987E-02 + -1.46539E-02 -6.12577E-03 6.12577E-03 1.46539E-02 1.59987E-02 1.28584E-02 + 9.11116E-03 6.28730E-03 4.26582E-03 2.74693E-03 1.63419E-03 8.89624E-04 + 4.42655E-04 2.01553E-04 8.40957E-05 3.21899E-05 1.13142E-05 3.65430E-06 + 1.08523E-06 2.96475E-07 7.45388E-08 1.72526E-08 + -2.13663E-08 -9.23122E-08 -3.67168E-07 -1.34400E-06 -4.52565E-06 -1.40120E-05 + -3.98654E-05 -1.04148E-04 -2.49612E-04 -5.48204E-04 -1.10174E-03 -2.02370E-03 + -3.40041E-03 -5.27269E-03 -7.73542E-03 -1.11015E-02 -1.54647E-02 -1.90246E-02 + -1.73166E-02 -7.22821E-03 7.22821E-03 1.73166E-02 1.90246E-02 1.54647E-02 + 1.11015E-02 7.73542E-03 5.27269E-03 3.40041E-03 2.02370E-03 1.10174E-03 + 5.48204E-04 2.49612E-04 1.04148E-04 3.98654E-05 1.40120E-05 4.52565E-06 + 1.34400E-06 3.67168E-07 9.23122E-08 2.13663E-08 + -2.43756E-08 -1.05314E-07 -4.18881E-07 -1.53329E-06 -5.16305E-06 -1.59855E-05 + -4.54802E-05 -1.18816E-04 -2.84768E-04 -6.25411E-04 -1.25686E-03 -2.30817E-03 + -3.87444E-03 -5.98336E-03 -8.67234E-03 -1.21372E-02 -1.63416E-02 -1.94950E-02 + -1.73903E-02 -7.19067E-03 7.19067E-03 1.73903E-02 1.94950E-02 1.63416E-02 + 1.21372E-02 8.67234E-03 5.98336E-03 3.87444E-03 2.30817E-03 1.25686E-03 + 6.25411E-04 2.84768E-04 1.18816E-04 4.54802E-05 1.59855E-05 5.16305E-06 + 1.53329E-06 4.18881E-07 1.05314E-07 2.43756E-08 + -2.59343E-08 -1.12048E-07 -4.45665E-07 -1.63133E-06 -5.49319E-06 -1.70076E-05 + -4.83883E-05 -1.26414E-04 -3.02977E-04 -6.65398E-04 -1.33718E-03 -2.45513E-03 + -4.11668E-03 -6.33035E-03 -9.05800E-03 -1.23321E-02 -1.59596E-02 -1.83228E-02 + -1.59009E-02 -6.47951E-03 6.47951E-03 1.59009E-02 1.83228E-02 1.59596E-02 + 1.23321E-02 9.05800E-03 6.33035E-03 4.11668E-03 2.45513E-03 1.33718E-03 + 6.65398E-04 3.02977E-04 1.26414E-04 4.83883E-05 1.70076E-05 5.49319E-06 + 1.63133E-06 4.45665E-07 1.12048E-07 2.59343E-08 + -2.59343E-08 -1.12048E-07 -4.45665E-07 -1.63133E-06 -5.49319E-06 -1.70076E-05 + -4.83883E-05 -1.26414E-04 -3.02977E-04 -6.65398E-04 -1.33718E-03 -2.45513E-03 + -4.11668E-03 -6.33035E-03 -9.05800E-03 -1.23321E-02 -1.59596E-02 -1.83228E-02 + -1.59009E-02 -6.47951E-03 6.47951E-03 1.59009E-02 1.83228E-02 1.59596E-02 + 1.23321E-02 9.05800E-03 6.33035E-03 4.11668E-03 2.45513E-03 1.33718E-03 + 6.65398E-04 3.02977E-04 1.26414E-04 4.83883E-05 1.70076E-05 5.49319E-06 + 1.63133E-06 4.45665E-07 1.12048E-07 2.59343E-08 + -2.43756E-08 -1.05314E-07 -4.18881E-07 -1.53329E-06 -5.16305E-06 -1.59855E-05 + -4.54802E-05 -1.18816E-04 -2.84768E-04 -6.25411E-04 -1.25686E-03 -2.30817E-03 + -3.87444E-03 -5.98336E-03 -8.67234E-03 -1.21372E-02 -1.63416E-02 -1.94950E-02 + -1.73903E-02 -7.19067E-03 7.19067E-03 1.73903E-02 1.94950E-02 1.63416E-02 + 1.21372E-02 8.67234E-03 5.98336E-03 3.87444E-03 2.30817E-03 1.25686E-03 + 6.25411E-04 2.84768E-04 1.18816E-04 4.54802E-05 1.59855E-05 5.16305E-06 + 1.53329E-06 4.18881E-07 1.05314E-07 2.43756E-08 + -2.13663E-08 -9.23122E-08 -3.67168E-07 -1.34400E-06 -4.52565E-06 -1.40120E-05 + -3.98654E-05 -1.04148E-04 -2.49612E-04 -5.48204E-04 -1.10174E-03 -2.02370E-03 + -3.40041E-03 -5.27269E-03 -7.73542E-03 -1.11015E-02 -1.54647E-02 -1.90246E-02 + -1.73166E-02 -7.22821E-03 7.22821E-03 1.73166E-02 1.90246E-02 1.54647E-02 + 1.11015E-02 7.73542E-03 5.27269E-03 3.40041E-03 2.02370E-03 1.10174E-03 + 5.48204E-04 2.49612E-04 1.04148E-04 3.98654E-05 1.40120E-05 4.52565E-06 + 1.34400E-06 3.67168E-07 9.23122E-08 2.13663E-08 + -1.72526E-08 -7.45388E-08 -2.96475E-07 -1.08523E-06 -3.65430E-06 -1.13142E-05 + -3.21899E-05 -8.40957E-05 -2.01553E-04 -4.42655E-04 -8.89624E-04 -1.63419E-03 + -2.74693E-03 -4.26582E-03 -6.28730E-03 -9.11116E-03 -1.28584E-02 -1.59987E-02 + -1.46539E-02 -6.12577E-03 6.12577E-03 1.46539E-02 1.59987E-02 1.28584E-02 + 9.11116E-03 6.28730E-03 4.26582E-03 2.74693E-03 1.63419E-03 8.89624E-04 + 4.42655E-04 2.01553E-04 8.40957E-05 3.21899E-05 1.13142E-05 3.65430E-06 + 1.08523E-06 2.96475E-07 7.45388E-08 1.72526E-08 + -1.26702E-08 -5.47408E-08 -2.17729E-07 -7.96985E-07 -2.68369E-06 -8.30906E-06 + -2.36400E-05 -6.17594E-05 -1.48019E-04 -3.25083E-04 -6.53326E-04 -1.20005E-03 + -2.01662E-03 -3.12858E-03 -4.59879E-03 -6.63137E-03 -9.30432E-03 -1.15240E-02 + -1.05251E-02 -4.39272E-03 4.39272E-03 1.05251E-02 1.15240E-02 9.30432E-03 + 6.63137E-03 4.59879E-03 3.12858E-03 2.01662E-03 1.20005E-03 6.53326E-04 + 3.25083E-04 1.48019E-04 6.17594E-05 2.36400E-05 8.30906E-06 2.68369E-06 + 7.96985E-07 2.17729E-07 5.47408E-08 1.26702E-08 + -8.37303E-09 -3.61752E-08 -1.43885E-07 -5.26684E-07 -1.77351E-06 -5.49101E-06 + -1.56224E-05 -4.08134E-05 -9.78178E-05 -2.14828E-04 -4.31731E-04 -7.92850E-04 + -1.33092E-03 -2.05620E-03 -2.98563E-03 -4.19888E-03 -5.69952E-03 -6.85721E-03 + -6.14791E-03 -2.54425E-03 2.54425E-03 6.14791E-03 6.85721E-03 5.69952E-03 + 4.19888E-03 2.98563E-03 2.05620E-03 1.33092E-03 7.92850E-04 4.31731E-04 + 2.14828E-04 9.78178E-05 4.08134E-05 1.56224E-05 5.49101E-06 1.77351E-06 + 5.26684E-07 1.43885E-07 3.61752E-08 8.37303E-09 + -4.94030E-09 -2.13443E-08 -8.48961E-08 -3.10757E-07 -1.04641E-06 -3.23984E-06 + -9.21763E-06 -2.40810E-05 -5.77150E-05 -1.26753E-04 -2.54717E-04 -4.67615E-04 + -7.83621E-04 -1.20238E-03 -1.70983E-03 -2.29816E-03 -2.92057E-03 -3.29504E-03 + -2.82503E-03 -1.14423E-03 1.14423E-03 2.82503E-03 3.29504E-03 2.92057E-03 + 2.29816E-03 1.70983E-03 1.20238E-03 7.83621E-04 4.67615E-04 2.54717E-04 + 1.26753E-04 5.77150E-05 2.40810E-05 9.21763E-06 3.23984E-06 1.04641E-06 + 3.10757E-07 8.48961E-08 2.13443E-08 4.94030E-09 + -2.58878E-09 -1.11847E-08 -4.44867E-08 -1.62841E-07 -5.48335E-07 -1.69772E-06 + -4.83016E-06 -1.26187E-05 -3.02434E-05 -6.64199E-05 -1.33467E-04 -2.44944E-04 + -4.09806E-04 -6.24680E-04 -8.70173E-04 -1.11470E-03 -1.30903E-03 -1.35026E-03 + -1.07776E-03 -4.20416E-04 4.20416E-04 1.07776E-03 1.35026E-03 1.30903E-03 + 1.11470E-03 8.70173E-04 6.24680E-04 4.09806E-04 2.44944E-04 1.33467E-04 + 6.64199E-05 3.02434E-05 1.26187E-05 4.83016E-06 1.69772E-06 5.48335E-07 + 1.62841E-07 4.44867E-08 1.11847E-08 2.58878E-09 + -1.20069E-09 -5.18751E-09 -2.06331E-08 -7.55262E-08 -2.54320E-07 -7.87407E-07 + -2.24025E-06 -5.85262E-06 -1.40270E-05 -3.08057E-05 -6.19005E-05 -1.13580E-04 + -1.89841E-04 -2.88227E-04 -3.96384E-04 -4.91969E-04 -5.45223E-04 -5.20955E-04 + -3.87208E-04 -1.44842E-04 1.44842E-04 3.87208E-04 5.20955E-04 5.45223E-04 + 4.91969E-04 3.96384E-04 2.88227E-04 1.89841E-04 1.13580E-04 6.19005E-05 + 3.08057E-05 1.40270E-05 5.85262E-06 2.24025E-06 7.87407E-07 2.54320E-07 + 7.55262E-08 2.06331E-08 5.18751E-09 1.20069E-09 + -4.91852E-10 -2.12502E-09 -8.45218E-09 -3.09387E-08 -1.04180E-07 -3.22555E-07 + -9.17699E-07 -2.39748E-06 -5.74605E-06 -1.26193E-05 -2.53567E-05 -4.65231E-05 + -7.77294E-05 -1.17824E-04 -1.61196E-04 -1.97431E-04 -2.13203E-04 -1.96150E-04 + -1.40153E-04 -5.11144E-05 5.11144E-05 1.40153E-04 1.96150E-04 2.13203E-04 + 1.97431E-04 1.61196E-04 1.17824E-04 7.77294E-05 4.65231E-05 2.53567E-05 + 1.26193E-05 5.74605E-06 2.39748E-06 9.17699E-07 3.22555E-07 1.04180E-07 + 3.09387E-08 8.45218E-09 2.12502E-09 4.91852E-10 + -1.77723E-10 -7.67844E-10 -3.05407E-09 -1.11792E-08 -3.76439E-08 -1.16550E-07 + -3.31597E-07 -8.66293E-07 -2.07625E-06 -4.55979E-06 -9.16223E-06 -1.68100E-05 + -2.80826E-05 -4.25497E-05 -5.81292E-05 -7.09341E-05 -7.60369E-05 -6.91733E-05 + -4.88204E-05 -1.76585E-05 1.76585E-05 4.88204E-05 6.91733E-05 7.60369E-05 + 7.09341E-05 5.81292E-05 4.25497E-05 2.80826E-05 1.68100E-05 9.16223E-06 + 4.55979E-06 2.07625E-06 8.66293E-07 3.31597E-07 1.16550E-07 3.76439E-08 + 1.11792E-08 3.05407E-09 7.67844E-10 1.77723E-10 + -5.66002E-11 -2.44538E-10 -9.72641E-10 -3.56029E-09 -1.19886E-08 -3.71183E-08 + -1.05605E-07 -2.75892E-07 -6.61230E-07 -1.45217E-06 -2.91793E-06 -5.35352E-06 + -8.94336E-06 -1.35495E-05 -1.85056E-05 -2.25662E-05 -2.41553E-05 -2.19271E-05 + -1.54380E-05 -5.57479E-06 5.57479E-06 1.54380E-05 2.19271E-05 2.41553E-05 + 2.25662E-05 1.85056E-05 1.35495E-05 8.94336E-06 5.35352E-06 2.91793E-06 + 1.45217E-06 6.61230E-07 2.75892E-07 1.05605E-07 3.71183E-08 1.19886E-08 + 3.56029E-09 9.72641E-10 2.44538E-10 5.66002E-11 + -1.58800E-11 -6.86086E-11 -2.72888E-10 -9.98890E-10 -3.36357E-09 -1.04140E-08 + -2.96289E-08 -7.74053E-08 -1.85517E-07 -4.07427E-07 -8.18665E-07 -1.50201E-06 + -2.50918E-06 -3.80145E-06 -5.19175E-06 -6.33036E-06 -6.77487E-06 -6.14811E-06 + -4.32725E-06 -1.56226E-06 1.56226E-06 4.32725E-06 6.14811E-06 6.77487E-06 + 6.33036E-06 5.19175E-06 3.80145E-06 2.50918E-06 1.50201E-06 8.18665E-07 + 4.07427E-07 1.85517E-07 7.74053E-08 2.96289E-08 1.04140E-08 3.36357E-09 + 9.98890E-10 2.72888E-10 6.86086E-11 1.58800E-11 + -3.92390E-12 -1.69530E-11 -6.74298E-11 -2.46823E-10 -8.31128E-10 -2.57328E-09 + -7.32122E-09 -1.91266E-08 -4.58408E-08 -1.00674E-07 -2.02290E-07 -3.71141E-07 + -6.20010E-07 -9.39325E-07 -1.28286E-06 -1.56419E-06 -1.67400E-06 -1.51909E-06 + -1.06915E-06 -3.85986E-07 3.85986E-07 1.06915E-06 1.51909E-06 1.67400E-06 + 1.56419E-06 1.28286E-06 9.39325E-07 6.20010E-07 3.71141E-07 2.02290E-07 + 1.00674E-07 4.58408E-08 1.91266E-08 7.32122E-09 2.57328E-09 8.31128E-10 + 2.46823E-10 6.74298E-11 1.69530E-11 3.92390E-12 + -8.53781E-13 -3.68872E-12 -1.46717E-11 -5.37049E-11 -1.80841E-10 -5.59907E-10 + -1.59299E-09 -4.16166E-09 -9.97427E-09 -2.19052E-08 -4.40152E-08 -8.07547E-08 + -1.34905E-07 -2.04383E-07 -2.79131E-07 -3.40344E-07 -3.64236E-07 -3.30530E-07 + -2.32631E-07 -8.39842E-08 8.39842E-08 2.32631E-07 3.30530E-07 3.64236E-07 + 3.40344E-07 2.79131E-07 2.04383E-07 1.34905E-07 8.07547E-08 4.40152E-08 + 2.19052E-08 9.97427E-09 4.16166E-09 1.59299E-09 5.59907E-10 1.80841E-10 + 5.37049E-11 1.46717E-11 3.68872E-12 8.53781E-13 + -1.63566E-13 -7.06679E-13 -2.81079E-12 -1.02887E-11 -3.46453E-11 -1.07266E-10 + -3.05182E-10 -7.97286E-10 -1.91086E-09 -4.19656E-09 -8.43237E-09 -1.54709E-08 + -2.58449E-08 -3.91554E-08 -5.34755E-08 -6.52027E-08 -6.97798E-08 -6.33225E-08 + -4.45670E-08 -1.60896E-08 1.60896E-08 4.45670E-08 6.33225E-08 6.97798E-08 + 6.52027E-08 5.34755E-08 3.91554E-08 2.58449E-08 1.54709E-08 8.43237E-09 + 4.19656E-09 1.91086E-09 7.97286E-10 3.05182E-10 1.07266E-10 3.46453E-11 + 1.02887E-11 2.81079E-12 7.06679E-13 1.63566E-13 + -2.75888E-14 -1.19196E-13 -4.74097E-13 -1.73540E-12 -5.84363E-12 -1.80926E-11 + -5.14752E-11 -1.34479E-10 -3.22305E-10 -7.07836E-10 -1.42229E-09 -2.60948E-09 + -4.35927E-09 -6.60436E-09 -9.01973E-09 -1.09978E-08 -1.17698E-08 -1.06806E-08 + -7.51714E-09 -2.71384E-09 2.71384E-09 7.51714E-09 1.06806E-08 1.17698E-08 + 1.09978E-08 9.01973E-09 6.60436E-09 4.35927E-09 2.60948E-09 1.42229E-09 + 7.07836E-10 3.22305E-10 1.34479E-10 5.14752E-11 1.80926E-11 5.84363E-12 + 1.73540E-12 4.74097E-13 1.19196E-13 2.75888E-14 + -4.09683E-15 -1.77001E-14 -7.04015E-14 -2.57700E-13 -8.67757E-13 -2.68669E-12 + -7.64387E-12 -1.99695E-11 -4.78610E-11 -1.05111E-10 -2.11205E-10 -3.87498E-10 + -6.47335E-10 -9.80723E-10 -1.33939E-09 -1.63312E-09 -1.74777E-09 -1.58603E-09 + -1.11627E-09 -4.02994E-10 4.02994E-10 1.11627E-09 1.58603E-09 1.74777E-09 + 1.63312E-09 1.33939E-09 9.80723E-10 6.47335E-10 3.87498E-10 2.11205E-10 + 1.05111E-10 4.78610E-11 1.99695E-11 7.64387E-12 2.68669E-12 8.67757E-13 + 2.57700E-13 7.04015E-14 1.77001E-14 4.09683E-15 + -5.35587E-16 -2.31397E-15 -9.20374E-15 -3.36897E-14 -1.13444E-13 -3.51236E-13 + -9.99299E-13 -2.61066E-12 -6.25697E-12 -1.37414E-11 -2.76112E-11 -5.06584E-11 + -8.46274E-11 -1.28212E-10 -1.75102E-10 -2.13502E-10 -2.28489E-10 -2.07345E-10 + -1.45932E-10 -5.26843E-11 5.26843E-11 1.45932E-10 2.07345E-10 2.28489E-10 + 2.13502E-10 1.75102E-10 1.28212E-10 8.46274E-11 5.06584E-11 2.76112E-11 + 1.37414E-11 6.25697E-12 2.61066E-12 9.99299E-13 3.51236E-13 1.13444E-13 + 3.36897E-14 9.20374E-15 2.31397E-15 5.35587E-16 + -6.16415E-17 -2.66319E-16 -1.05927E-15 -3.87740E-15 -1.30564E-14 -4.04243E-14 + -1.15011E-13 -3.00465E-13 -7.20125E-13 -1.58152E-12 -3.17782E-12 -5.83035E-12 + -9.73990E-12 -1.47561E-11 -2.01528E-11 -2.45723E-11 -2.62972E-11 -2.38637E-11 + -1.67955E-11 -6.06352E-12 6.06352E-12 1.67955E-11 2.38637E-11 2.62972E-11 + 2.45723E-11 2.01528E-11 1.47561E-11 9.73990E-12 5.83035E-12 3.17782E-12 + 1.58152E-12 7.20125E-13 3.00465E-13 1.15011E-13 4.04243E-14 1.30564E-14 + 3.87740E-15 1.05927E-15 2.66319E-16 6.16415E-17 + 6.16415E-17 2.66319E-16 1.05927E-15 3.87740E-15 1.30564E-14 4.04243E-14 + 1.15011E-13 3.00465E-13 7.20125E-13 1.58152E-12 3.17782E-12 5.83035E-12 + 9.73990E-12 1.47561E-11 2.01528E-11 2.45723E-11 2.62972E-11 2.38637E-11 + 1.67955E-11 6.06352E-12 -6.06352E-12 -1.67955E-11 -2.38637E-11 -2.62972E-11 + -2.45723E-11 -2.01528E-11 -1.47561E-11 -9.73990E-12 -5.83035E-12 -3.17782E-12 + -1.58152E-12 -7.20125E-13 -3.00465E-13 -1.15011E-13 -4.04243E-14 -1.30564E-14 + -3.87740E-15 -1.05927E-15 -2.66319E-16 -6.16415E-17 + 5.35587E-16 2.31397E-15 9.20374E-15 3.36897E-14 1.13444E-13 3.51236E-13 + 9.99299E-13 2.61066E-12 6.25697E-12 1.37414E-11 2.76112E-11 5.06584E-11 + 8.46274E-11 1.28212E-10 1.75102E-10 2.13502E-10 2.28489E-10 2.07345E-10 + 1.45932E-10 5.26843E-11 -5.26843E-11 -1.45932E-10 -2.07345E-10 -2.28489E-10 + -2.13502E-10 -1.75102E-10 -1.28212E-10 -8.46274E-11 -5.06584E-11 -2.76112E-11 + -1.37414E-11 -6.25697E-12 -2.61066E-12 -9.99299E-13 -3.51236E-13 -1.13444E-13 + -3.36897E-14 -9.20374E-15 -2.31397E-15 -5.35587E-16 + 4.09683E-15 1.77001E-14 7.04015E-14 2.57700E-13 8.67757E-13 2.68669E-12 + 7.64387E-12 1.99695E-11 4.78610E-11 1.05111E-10 2.11205E-10 3.87498E-10 + 6.47335E-10 9.80723E-10 1.33939E-09 1.63312E-09 1.74777E-09 1.58603E-09 + 1.11627E-09 4.02994E-10 -4.02994E-10 -1.11627E-09 -1.58603E-09 -1.74777E-09 + -1.63312E-09 -1.33939E-09 -9.80723E-10 -6.47335E-10 -3.87498E-10 -2.11205E-10 + -1.05111E-10 -4.78610E-11 -1.99695E-11 -7.64387E-12 -2.68669E-12 -8.67757E-13 + -2.57700E-13 -7.04015E-14 -1.77001E-14 -4.09683E-15 + 2.75888E-14 1.19196E-13 4.74097E-13 1.73540E-12 5.84363E-12 1.80926E-11 + 5.14752E-11 1.34479E-10 3.22305E-10 7.07836E-10 1.42229E-09 2.60948E-09 + 4.35927E-09 6.60436E-09 9.01973E-09 1.09978E-08 1.17698E-08 1.06806E-08 + 7.51714E-09 2.71384E-09 -2.71384E-09 -7.51714E-09 -1.06806E-08 -1.17698E-08 + -1.09978E-08 -9.01973E-09 -6.60436E-09 -4.35927E-09 -2.60948E-09 -1.42229E-09 + -7.07836E-10 -3.22305E-10 -1.34479E-10 -5.14752E-11 -1.80926E-11 -5.84363E-12 + -1.73540E-12 -4.74097E-13 -1.19196E-13 -2.75888E-14 + 1.63566E-13 7.06679E-13 2.81079E-12 1.02887E-11 3.46453E-11 1.07266E-10 + 3.05182E-10 7.97286E-10 1.91086E-09 4.19656E-09 8.43237E-09 1.54709E-08 + 2.58449E-08 3.91554E-08 5.34755E-08 6.52027E-08 6.97798E-08 6.33225E-08 + 4.45670E-08 1.60896E-08 -1.60896E-08 -4.45670E-08 -6.33225E-08 -6.97798E-08 + -6.52027E-08 -5.34755E-08 -3.91554E-08 -2.58449E-08 -1.54709E-08 -8.43237E-09 + -4.19656E-09 -1.91086E-09 -7.97286E-10 -3.05182E-10 -1.07266E-10 -3.46453E-11 + -1.02887E-11 -2.81079E-12 -7.06679E-13 -1.63566E-13 + 8.53781E-13 3.68872E-12 1.46717E-11 5.37049E-11 1.80841E-10 5.59907E-10 + 1.59299E-09 4.16166E-09 9.97427E-09 2.19052E-08 4.40152E-08 8.07547E-08 + 1.34905E-07 2.04383E-07 2.79131E-07 3.40344E-07 3.64236E-07 3.30530E-07 + 2.32631E-07 8.39842E-08 -8.39842E-08 -2.32631E-07 -3.30530E-07 -3.64236E-07 + -3.40344E-07 -2.79131E-07 -2.04383E-07 -1.34905E-07 -8.07547E-08 -4.40152E-08 + -2.19052E-08 -9.97427E-09 -4.16166E-09 -1.59299E-09 -5.59907E-10 -1.80841E-10 + -5.37049E-11 -1.46717E-11 -3.68872E-12 -8.53781E-13 + 3.92390E-12 1.69530E-11 6.74298E-11 2.46823E-10 8.31128E-10 2.57328E-09 + 7.32122E-09 1.91266E-08 4.58408E-08 1.00674E-07 2.02290E-07 3.71141E-07 + 6.20010E-07 9.39325E-07 1.28286E-06 1.56419E-06 1.67400E-06 1.51909E-06 + 1.06915E-06 3.85986E-07 -3.85986E-07 -1.06915E-06 -1.51909E-06 -1.67400E-06 + -1.56419E-06 -1.28286E-06 -9.39325E-07 -6.20010E-07 -3.71141E-07 -2.02290E-07 + -1.00674E-07 -4.58408E-08 -1.91266E-08 -7.32122E-09 -2.57328E-09 -8.31128E-10 + -2.46823E-10 -6.74298E-11 -1.69530E-11 -3.92390E-12 + 1.58800E-11 6.86086E-11 2.72888E-10 9.98890E-10 3.36357E-09 1.04140E-08 + 2.96289E-08 7.74053E-08 1.85517E-07 4.07427E-07 8.18665E-07 1.50201E-06 + 2.50918E-06 3.80145E-06 5.19175E-06 6.33036E-06 6.77487E-06 6.14811E-06 + 4.32725E-06 1.56226E-06 -1.56226E-06 -4.32725E-06 -6.14811E-06 -6.77487E-06 + -6.33036E-06 -5.19175E-06 -3.80145E-06 -2.50918E-06 -1.50201E-06 -8.18665E-07 + -4.07427E-07 -1.85517E-07 -7.74053E-08 -2.96289E-08 -1.04140E-08 -3.36357E-09 + -9.98890E-10 -2.72888E-10 -6.86086E-11 -1.58800E-11 + 5.66002E-11 2.44538E-10 9.72641E-10 3.56029E-09 1.19886E-08 3.71183E-08 + 1.05605E-07 2.75892E-07 6.61230E-07 1.45217E-06 2.91793E-06 5.35352E-06 + 8.94336E-06 1.35495E-05 1.85056E-05 2.25662E-05 2.41553E-05 2.19271E-05 + 1.54380E-05 5.57479E-06 -5.57479E-06 -1.54380E-05 -2.19271E-05 -2.41553E-05 + -2.25662E-05 -1.85056E-05 -1.35495E-05 -8.94336E-06 -5.35352E-06 -2.91793E-06 + -1.45217E-06 -6.61230E-07 -2.75892E-07 -1.05605E-07 -3.71183E-08 -1.19886E-08 + -3.56029E-09 -9.72641E-10 -2.44538E-10 -5.66002E-11 + 1.77723E-10 7.67844E-10 3.05407E-09 1.11792E-08 3.76439E-08 1.16550E-07 + 3.31597E-07 8.66293E-07 2.07625E-06 4.55979E-06 9.16223E-06 1.68100E-05 + 2.80826E-05 4.25497E-05 5.81292E-05 7.09341E-05 7.60369E-05 6.91733E-05 + 4.88204E-05 1.76585E-05 -1.76585E-05 -4.88204E-05 -6.91733E-05 -7.60369E-05 + -7.09341E-05 -5.81292E-05 -4.25497E-05 -2.80826E-05 -1.68100E-05 -9.16223E-06 + -4.55979E-06 -2.07625E-06 -8.66293E-07 -3.31597E-07 -1.16550E-07 -3.76439E-08 + -1.11792E-08 -3.05407E-09 -7.67844E-10 -1.77723E-10 + 4.91852E-10 2.12502E-09 8.45218E-09 3.09387E-08 1.04180E-07 3.22555E-07 + 9.17699E-07 2.39748E-06 5.74605E-06 1.26193E-05 2.53567E-05 4.65231E-05 + 7.77294E-05 1.17824E-04 1.61196E-04 1.97431E-04 2.13203E-04 1.96150E-04 + 1.40153E-04 5.11144E-05 -5.11144E-05 -1.40153E-04 -1.96150E-04 -2.13203E-04 + -1.97431E-04 -1.61196E-04 -1.17824E-04 -7.77294E-05 -4.65231E-05 -2.53567E-05 + -1.26193E-05 -5.74605E-06 -2.39748E-06 -9.17699E-07 -3.22555E-07 -1.04180E-07 + -3.09387E-08 -8.45218E-09 -2.12502E-09 -4.91852E-10 + 1.20069E-09 5.18751E-09 2.06331E-08 7.55262E-08 2.54320E-07 7.87407E-07 + 2.24025E-06 5.85262E-06 1.40270E-05 3.08057E-05 6.19005E-05 1.13580E-04 + 1.89841E-04 2.88227E-04 3.96384E-04 4.91969E-04 5.45223E-04 5.20955E-04 + 3.87208E-04 1.44842E-04 -1.44842E-04 -3.87208E-04 -5.20955E-04 -5.45223E-04 + -4.91969E-04 -3.96384E-04 -2.88227E-04 -1.89841E-04 -1.13580E-04 -6.19005E-05 + -3.08057E-05 -1.40270E-05 -5.85262E-06 -2.24025E-06 -7.87407E-07 -2.54320E-07 + -7.55262E-08 -2.06331E-08 -5.18751E-09 -1.20069E-09 + 2.58878E-09 1.11847E-08 4.44867E-08 1.62841E-07 5.48335E-07 1.69772E-06 + 4.83016E-06 1.26187E-05 3.02434E-05 6.64199E-05 1.33467E-04 2.44944E-04 + 4.09806E-04 6.24680E-04 8.70173E-04 1.11470E-03 1.30903E-03 1.35026E-03 + 1.07776E-03 4.20416E-04 -4.20416E-04 -1.07776E-03 -1.35026E-03 -1.30903E-03 + -1.11470E-03 -8.70173E-04 -6.24680E-04 -4.09806E-04 -2.44944E-04 -1.33467E-04 + -6.64199E-05 -3.02434E-05 -1.26187E-05 -4.83016E-06 -1.69772E-06 -5.48335E-07 + -1.62841E-07 -4.44867E-08 -1.11847E-08 -2.58878E-09 + 4.94030E-09 2.13443E-08 8.48961E-08 3.10757E-07 1.04641E-06 3.23984E-06 + 9.21763E-06 2.40810E-05 5.77150E-05 1.26753E-04 2.54717E-04 4.67615E-04 + 7.83621E-04 1.20238E-03 1.70983E-03 2.29816E-03 2.92057E-03 3.29504E-03 + 2.82503E-03 1.14423E-03 -1.14423E-03 -2.82503E-03 -3.29504E-03 -2.92057E-03 + -2.29816E-03 -1.70983E-03 -1.20238E-03 -7.83621E-04 -4.67615E-04 -2.54717E-04 + -1.26753E-04 -5.77150E-05 -2.40810E-05 -9.21763E-06 -3.23984E-06 -1.04641E-06 + -3.10757E-07 -8.48961E-08 -2.13443E-08 -4.94030E-09 + 8.37303E-09 3.61752E-08 1.43885E-07 5.26684E-07 1.77351E-06 5.49101E-06 + 1.56224E-05 4.08134E-05 9.78178E-05 2.14828E-04 4.31731E-04 7.92850E-04 + 1.33092E-03 2.05620E-03 2.98563E-03 4.19888E-03 5.69952E-03 6.85721E-03 + 6.14791E-03 2.54425E-03 -2.54425E-03 -6.14791E-03 -6.85721E-03 -5.69952E-03 + -4.19888E-03 -2.98563E-03 -2.05620E-03 -1.33092E-03 -7.92850E-04 -4.31731E-04 + -2.14828E-04 -9.78178E-05 -4.08134E-05 -1.56224E-05 -5.49101E-06 -1.77351E-06 + -5.26684E-07 -1.43885E-07 -3.61752E-08 -8.37303E-09 + 1.26702E-08 5.47408E-08 2.17729E-07 7.96985E-07 2.68369E-06 8.30906E-06 + 2.36400E-05 6.17594E-05 1.48019E-04 3.25083E-04 6.53326E-04 1.20005E-03 + 2.01662E-03 3.12858E-03 4.59879E-03 6.63137E-03 9.30432E-03 1.15240E-02 + 1.05251E-02 4.39272E-03 -4.39272E-03 -1.05251E-02 -1.15240E-02 -9.30432E-03 + -6.63137E-03 -4.59879E-03 -3.12858E-03 -2.01662E-03 -1.20005E-03 -6.53326E-04 + -3.25083E-04 -1.48019E-04 -6.17594E-05 -2.36400E-05 -8.30906E-06 -2.68369E-06 + -7.96985E-07 -2.17729E-07 -5.47408E-08 -1.26702E-08 + 1.72526E-08 7.45388E-08 2.96475E-07 1.08523E-06 3.65430E-06 1.13142E-05 + 3.21899E-05 8.40957E-05 2.01553E-04 4.42655E-04 8.89624E-04 1.63419E-03 + 2.74693E-03 4.26582E-03 6.28730E-03 9.11116E-03 1.28584E-02 1.59987E-02 + 1.46539E-02 6.12577E-03 -6.12577E-03 -1.46539E-02 -1.59987E-02 -1.28584E-02 + -9.11116E-03 -6.28730E-03 -4.26582E-03 -2.74693E-03 -1.63419E-03 -8.89624E-04 + -4.42655E-04 -2.01553E-04 -8.40957E-05 -3.21899E-05 -1.13142E-05 -3.65430E-06 + -1.08523E-06 -2.96475E-07 -7.45388E-08 -1.72526E-08 + 2.13663E-08 9.23122E-08 3.67168E-07 1.34400E-06 4.52565E-06 1.40120E-05 + 3.98654E-05 1.04148E-04 2.49612E-04 5.48204E-04 1.10174E-03 2.02370E-03 + 3.40041E-03 5.27269E-03 7.73542E-03 1.11015E-02 1.54647E-02 1.90246E-02 + 1.73166E-02 7.22821E-03 -7.22821E-03 -1.73166E-02 -1.90246E-02 -1.54647E-02 + -1.11015E-02 -7.73542E-03 -5.27269E-03 -3.40041E-03 -2.02370E-03 -1.10174E-03 + -5.48204E-04 -2.49612E-04 -1.04148E-04 -3.98654E-05 -1.40120E-05 -4.52565E-06 + -1.34400E-06 -3.67168E-07 -9.23122E-08 -2.13663E-08 + 2.43756E-08 1.05314E-07 4.18881E-07 1.53329E-06 5.16305E-06 1.59855E-05 + 4.54802E-05 1.18816E-04 2.84768E-04 6.25411E-04 1.25686E-03 2.30817E-03 + 3.87444E-03 5.98336E-03 8.67234E-03 1.21372E-02 1.63416E-02 1.94950E-02 + 1.73903E-02 7.19067E-03 -7.19067E-03 -1.73903E-02 -1.94950E-02 -1.63416E-02 + -1.21372E-02 -8.67234E-03 -5.98336E-03 -3.87444E-03 -2.30817E-03 -1.25686E-03 + -6.25411E-04 -2.84768E-04 -1.18816E-04 -4.54802E-05 -1.59855E-05 -5.16305E-06 + -1.53329E-06 -4.18881E-07 -1.05314E-07 -2.43756E-08 + 2.59343E-08 1.12048E-07 4.45665E-07 1.63133E-06 5.49319E-06 1.70076E-05 + 4.83883E-05 1.26414E-04 3.02977E-04 6.65398E-04 1.33718E-03 2.45513E-03 + 4.11668E-03 6.33035E-03 9.05800E-03 1.23321E-02 1.59596E-02 1.83228E-02 + 1.59009E-02 6.47951E-03 -6.47951E-03 -1.59009E-02 -1.83228E-02 -1.59596E-02 + -1.23321E-02 -9.05800E-03 -6.33035E-03 -4.11668E-03 -2.45513E-03 -1.33718E-03 + -6.65398E-04 -3.02977E-04 -1.26414E-04 -4.83883E-05 -1.70076E-05 -5.49319E-06 + -1.63133E-06 -4.45665E-07 -1.12048E-07 -2.59343E-08 + 2.59343E-08 1.12048E-07 4.45665E-07 1.63133E-06 5.49319E-06 1.70076E-05 + 4.83883E-05 1.26414E-04 3.02977E-04 6.65398E-04 1.33718E-03 2.45513E-03 + 4.11668E-03 6.33035E-03 9.05800E-03 1.23321E-02 1.59596E-02 1.83228E-02 + 1.59009E-02 6.47951E-03 -6.47951E-03 -1.59009E-02 -1.83228E-02 -1.59596E-02 + -1.23321E-02 -9.05800E-03 -6.33035E-03 -4.11668E-03 -2.45513E-03 -1.33718E-03 + -6.65398E-04 -3.02977E-04 -1.26414E-04 -4.83883E-05 -1.70076E-05 -5.49319E-06 + -1.63133E-06 -4.45665E-07 -1.12048E-07 -2.59343E-08 + 2.43756E-08 1.05314E-07 4.18881E-07 1.53329E-06 5.16305E-06 1.59855E-05 + 4.54802E-05 1.18816E-04 2.84768E-04 6.25411E-04 1.25686E-03 2.30817E-03 + 3.87444E-03 5.98336E-03 8.67234E-03 1.21372E-02 1.63416E-02 1.94950E-02 + 1.73903E-02 7.19067E-03 -7.19067E-03 -1.73903E-02 -1.94950E-02 -1.63416E-02 + -1.21372E-02 -8.67234E-03 -5.98336E-03 -3.87444E-03 -2.30817E-03 -1.25686E-03 + -6.25411E-04 -2.84768E-04 -1.18816E-04 -4.54802E-05 -1.59855E-05 -5.16305E-06 + -1.53329E-06 -4.18881E-07 -1.05314E-07 -2.43756E-08 + 2.13663E-08 9.23122E-08 3.67168E-07 1.34400E-06 4.52565E-06 1.40120E-05 + 3.98654E-05 1.04148E-04 2.49612E-04 5.48204E-04 1.10174E-03 2.02370E-03 + 3.40041E-03 5.27269E-03 7.73542E-03 1.11015E-02 1.54647E-02 1.90246E-02 + 1.73166E-02 7.22821E-03 -7.22821E-03 -1.73166E-02 -1.90246E-02 -1.54647E-02 + -1.11015E-02 -7.73542E-03 -5.27269E-03 -3.40041E-03 -2.02370E-03 -1.10174E-03 + -5.48204E-04 -2.49612E-04 -1.04148E-04 -3.98654E-05 -1.40120E-05 -4.52565E-06 + -1.34400E-06 -3.67168E-07 -9.23122E-08 -2.13663E-08 + 1.72526E-08 7.45388E-08 2.96475E-07 1.08523E-06 3.65430E-06 1.13142E-05 + 3.21899E-05 8.40957E-05 2.01553E-04 4.42655E-04 8.89624E-04 1.63419E-03 + 2.74693E-03 4.26582E-03 6.28730E-03 9.11116E-03 1.28584E-02 1.59987E-02 + 1.46539E-02 6.12577E-03 -6.12577E-03 -1.46539E-02 -1.59987E-02 -1.28584E-02 + -9.11116E-03 -6.28730E-03 -4.26582E-03 -2.74693E-03 -1.63419E-03 -8.89624E-04 + -4.42655E-04 -2.01553E-04 -8.40957E-05 -3.21899E-05 -1.13142E-05 -3.65430E-06 + -1.08523E-06 -2.96475E-07 -7.45388E-08 -1.72526E-08 + 1.26702E-08 5.47408E-08 2.17729E-07 7.96985E-07 2.68369E-06 8.30906E-06 + 2.36400E-05 6.17594E-05 1.48019E-04 3.25083E-04 6.53326E-04 1.20005E-03 + 2.01662E-03 3.12858E-03 4.59879E-03 6.63137E-03 9.30432E-03 1.15240E-02 + 1.05251E-02 4.39272E-03 -4.39272E-03 -1.05251E-02 -1.15240E-02 -9.30432E-03 + -6.63137E-03 -4.59879E-03 -3.12858E-03 -2.01662E-03 -1.20005E-03 -6.53326E-04 + -3.25083E-04 -1.48019E-04 -6.17594E-05 -2.36400E-05 -8.30906E-06 -2.68369E-06 + -7.96985E-07 -2.17729E-07 -5.47408E-08 -1.26702E-08 + 8.37303E-09 3.61752E-08 1.43885E-07 5.26684E-07 1.77351E-06 5.49101E-06 + 1.56224E-05 4.08134E-05 9.78178E-05 2.14828E-04 4.31731E-04 7.92850E-04 + 1.33092E-03 2.05620E-03 2.98563E-03 4.19888E-03 5.69952E-03 6.85721E-03 + 6.14791E-03 2.54425E-03 -2.54425E-03 -6.14791E-03 -6.85721E-03 -5.69952E-03 + -4.19888E-03 -2.98563E-03 -2.05620E-03 -1.33092E-03 -7.92850E-04 -4.31731E-04 + -2.14828E-04 -9.78178E-05 -4.08134E-05 -1.56224E-05 -5.49101E-06 -1.77351E-06 + -5.26684E-07 -1.43885E-07 -3.61752E-08 -8.37303E-09 + 4.94030E-09 2.13443E-08 8.48961E-08 3.10757E-07 1.04641E-06 3.23984E-06 + 9.21763E-06 2.40810E-05 5.77150E-05 1.26753E-04 2.54717E-04 4.67615E-04 + 7.83621E-04 1.20238E-03 1.70983E-03 2.29816E-03 2.92057E-03 3.29504E-03 + 2.82503E-03 1.14423E-03 -1.14423E-03 -2.82503E-03 -3.29504E-03 -2.92057E-03 + -2.29816E-03 -1.70983E-03 -1.20238E-03 -7.83621E-04 -4.67615E-04 -2.54717E-04 + -1.26753E-04 -5.77150E-05 -2.40810E-05 -9.21763E-06 -3.23984E-06 -1.04641E-06 + -3.10757E-07 -8.48961E-08 -2.13443E-08 -4.94030E-09 + 2.58878E-09 1.11847E-08 4.44867E-08 1.62841E-07 5.48335E-07 1.69772E-06 + 4.83016E-06 1.26187E-05 3.02434E-05 6.64199E-05 1.33467E-04 2.44944E-04 + 4.09806E-04 6.24680E-04 8.70173E-04 1.11470E-03 1.30903E-03 1.35026E-03 + 1.07776E-03 4.20416E-04 -4.20416E-04 -1.07776E-03 -1.35026E-03 -1.30903E-03 + -1.11470E-03 -8.70173E-04 -6.24680E-04 -4.09806E-04 -2.44944E-04 -1.33467E-04 + -6.64199E-05 -3.02434E-05 -1.26187E-05 -4.83016E-06 -1.69772E-06 -5.48335E-07 + -1.62841E-07 -4.44867E-08 -1.11847E-08 -2.58878E-09 + 1.20069E-09 5.18751E-09 2.06331E-08 7.55262E-08 2.54320E-07 7.87407E-07 + 2.24025E-06 5.85262E-06 1.40270E-05 3.08057E-05 6.19005E-05 1.13580E-04 + 1.89841E-04 2.88227E-04 3.96384E-04 4.91969E-04 5.45223E-04 5.20955E-04 + 3.87208E-04 1.44842E-04 -1.44842E-04 -3.87208E-04 -5.20955E-04 -5.45223E-04 + -4.91969E-04 -3.96384E-04 -2.88227E-04 -1.89841E-04 -1.13580E-04 -6.19005E-05 + -3.08057E-05 -1.40270E-05 -5.85262E-06 -2.24025E-06 -7.87407E-07 -2.54320E-07 + -7.55262E-08 -2.06331E-08 -5.18751E-09 -1.20069E-09 + 4.91852E-10 2.12502E-09 8.45218E-09 3.09387E-08 1.04180E-07 3.22555E-07 + 9.17699E-07 2.39748E-06 5.74605E-06 1.26193E-05 2.53567E-05 4.65231E-05 + 7.77294E-05 1.17824E-04 1.61196E-04 1.97431E-04 2.13203E-04 1.96150E-04 + 1.40153E-04 5.11144E-05 -5.11144E-05 -1.40153E-04 -1.96150E-04 -2.13203E-04 + -1.97431E-04 -1.61196E-04 -1.17824E-04 -7.77294E-05 -4.65231E-05 -2.53567E-05 + -1.26193E-05 -5.74605E-06 -2.39748E-06 -9.17699E-07 -3.22555E-07 -1.04180E-07 + -3.09387E-08 -8.45218E-09 -2.12502E-09 -4.91852E-10 + 1.77723E-10 7.67844E-10 3.05407E-09 1.11792E-08 3.76439E-08 1.16550E-07 + 3.31597E-07 8.66293E-07 2.07625E-06 4.55979E-06 9.16223E-06 1.68100E-05 + 2.80826E-05 4.25497E-05 5.81292E-05 7.09341E-05 7.60369E-05 6.91733E-05 + 4.88204E-05 1.76585E-05 -1.76585E-05 -4.88204E-05 -6.91733E-05 -7.60369E-05 + -7.09341E-05 -5.81292E-05 -4.25497E-05 -2.80826E-05 -1.68100E-05 -9.16223E-06 + -4.55979E-06 -2.07625E-06 -8.66293E-07 -3.31597E-07 -1.16550E-07 -3.76439E-08 + -1.11792E-08 -3.05407E-09 -7.67844E-10 -1.77723E-10 + 5.66002E-11 2.44538E-10 9.72641E-10 3.56029E-09 1.19886E-08 3.71183E-08 + 1.05605E-07 2.75892E-07 6.61230E-07 1.45217E-06 2.91793E-06 5.35352E-06 + 8.94336E-06 1.35495E-05 1.85056E-05 2.25662E-05 2.41553E-05 2.19271E-05 + 1.54380E-05 5.57479E-06 -5.57479E-06 -1.54380E-05 -2.19271E-05 -2.41553E-05 + -2.25662E-05 -1.85056E-05 -1.35495E-05 -8.94336E-06 -5.35352E-06 -2.91793E-06 + -1.45217E-06 -6.61230E-07 -2.75892E-07 -1.05605E-07 -3.71183E-08 -1.19886E-08 + -3.56029E-09 -9.72641E-10 -2.44538E-10 -5.66002E-11 + 1.58800E-11 6.86086E-11 2.72888E-10 9.98890E-10 3.36357E-09 1.04140E-08 + 2.96289E-08 7.74053E-08 1.85517E-07 4.07427E-07 8.18665E-07 1.50201E-06 + 2.50918E-06 3.80145E-06 5.19175E-06 6.33036E-06 6.77487E-06 6.14811E-06 + 4.32725E-06 1.56226E-06 -1.56226E-06 -4.32725E-06 -6.14811E-06 -6.77487E-06 + -6.33036E-06 -5.19175E-06 -3.80145E-06 -2.50918E-06 -1.50201E-06 -8.18665E-07 + -4.07427E-07 -1.85517E-07 -7.74053E-08 -2.96289E-08 -1.04140E-08 -3.36357E-09 + -9.98890E-10 -2.72888E-10 -6.86086E-11 -1.58800E-11 + 3.92390E-12 1.69530E-11 6.74298E-11 2.46823E-10 8.31128E-10 2.57328E-09 + 7.32122E-09 1.91266E-08 4.58408E-08 1.00674E-07 2.02290E-07 3.71141E-07 + 6.20010E-07 9.39325E-07 1.28286E-06 1.56419E-06 1.67400E-06 1.51909E-06 + 1.06915E-06 3.85986E-07 -3.85986E-07 -1.06915E-06 -1.51909E-06 -1.67400E-06 + -1.56419E-06 -1.28286E-06 -9.39325E-07 -6.20010E-07 -3.71141E-07 -2.02290E-07 + -1.00674E-07 -4.58408E-08 -1.91266E-08 -7.32122E-09 -2.57328E-09 -8.31128E-10 + -2.46823E-10 -6.74298E-11 -1.69530E-11 -3.92390E-12 + 8.53781E-13 3.68872E-12 1.46717E-11 5.37049E-11 1.80841E-10 5.59907E-10 + 1.59299E-09 4.16166E-09 9.97427E-09 2.19052E-08 4.40152E-08 8.07547E-08 + 1.34905E-07 2.04383E-07 2.79131E-07 3.40344E-07 3.64236E-07 3.30530E-07 + 2.32631E-07 8.39842E-08 -8.39842E-08 -2.32631E-07 -3.30530E-07 -3.64236E-07 + -3.40344E-07 -2.79131E-07 -2.04383E-07 -1.34905E-07 -8.07547E-08 -4.40152E-08 + -2.19052E-08 -9.97427E-09 -4.16166E-09 -1.59299E-09 -5.59907E-10 -1.80841E-10 + -5.37049E-11 -1.46717E-11 -3.68872E-12 -8.53781E-13 + 1.63566E-13 7.06679E-13 2.81079E-12 1.02887E-11 3.46453E-11 1.07266E-10 + 3.05182E-10 7.97286E-10 1.91086E-09 4.19656E-09 8.43237E-09 1.54709E-08 + 2.58449E-08 3.91554E-08 5.34755E-08 6.52027E-08 6.97798E-08 6.33225E-08 + 4.45670E-08 1.60896E-08 -1.60896E-08 -4.45670E-08 -6.33225E-08 -6.97798E-08 + -6.52027E-08 -5.34755E-08 -3.91554E-08 -2.58449E-08 -1.54709E-08 -8.43237E-09 + -4.19656E-09 -1.91086E-09 -7.97286E-10 -3.05182E-10 -1.07266E-10 -3.46453E-11 + -1.02887E-11 -2.81079E-12 -7.06679E-13 -1.63566E-13 + 2.75888E-14 1.19196E-13 4.74097E-13 1.73540E-12 5.84363E-12 1.80926E-11 + 5.14752E-11 1.34479E-10 3.22305E-10 7.07836E-10 1.42229E-09 2.60948E-09 + 4.35927E-09 6.60436E-09 9.01973E-09 1.09978E-08 1.17698E-08 1.06806E-08 + 7.51714E-09 2.71384E-09 -2.71384E-09 -7.51714E-09 -1.06806E-08 -1.17698E-08 + -1.09978E-08 -9.01973E-09 -6.60436E-09 -4.35927E-09 -2.60948E-09 -1.42229E-09 + -7.07836E-10 -3.22305E-10 -1.34479E-10 -5.14752E-11 -1.80926E-11 -5.84363E-12 + -1.73540E-12 -4.74097E-13 -1.19196E-13 -2.75888E-14 + 4.09683E-15 1.77001E-14 7.04015E-14 2.57700E-13 8.67757E-13 2.68669E-12 + 7.64387E-12 1.99695E-11 4.78610E-11 1.05111E-10 2.11205E-10 3.87498E-10 + 6.47335E-10 9.80723E-10 1.33939E-09 1.63312E-09 1.74777E-09 1.58603E-09 + 1.11627E-09 4.02994E-10 -4.02994E-10 -1.11627E-09 -1.58603E-09 -1.74777E-09 + -1.63312E-09 -1.33939E-09 -9.80723E-10 -6.47335E-10 -3.87498E-10 -2.11205E-10 + -1.05111E-10 -4.78610E-11 -1.99695E-11 -7.64387E-12 -2.68669E-12 -8.67757E-13 + -2.57700E-13 -7.04015E-14 -1.77001E-14 -4.09683E-15 + 5.35587E-16 2.31397E-15 9.20374E-15 3.36897E-14 1.13444E-13 3.51236E-13 + 9.99299E-13 2.61066E-12 6.25697E-12 1.37414E-11 2.76112E-11 5.06584E-11 + 8.46274E-11 1.28212E-10 1.75102E-10 2.13502E-10 2.28489E-10 2.07345E-10 + 1.45932E-10 5.26843E-11 -5.26843E-11 -1.45932E-10 -2.07345E-10 -2.28489E-10 + -2.13502E-10 -1.75102E-10 -1.28212E-10 -8.46274E-11 -5.06584E-11 -2.76112E-11 + -1.37414E-11 -6.25697E-12 -2.61066E-12 -9.99299E-13 -3.51236E-13 -1.13444E-13 + -3.36897E-14 -9.20374E-15 -2.31397E-15 -5.35587E-16 + 6.16415E-17 2.66319E-16 1.05927E-15 3.87740E-15 1.30564E-14 4.04243E-14 + 1.15011E-13 3.00465E-13 7.20125E-13 1.58152E-12 3.17782E-12 5.83035E-12 + 9.73990E-12 1.47561E-11 2.01528E-11 2.45723E-11 2.62972E-11 2.38637E-11 + 1.67955E-11 6.06352E-12 -6.06352E-12 -1.67955E-11 -2.38637E-11 -2.62972E-11 + -2.45723E-11 -2.01528E-11 -1.47561E-11 -9.73990E-12 -5.83035E-12 -3.17782E-12 + -1.58152E-12 -7.20125E-13 -3.00465E-13 -1.15011E-13 -4.04243E-14 -1.30564E-14 + -3.87740E-15 -1.05927E-15 -2.66319E-16 -6.16415E-17 + 1.71360E-16 7.40351E-16 2.94472E-15 1.07790E-14 3.62960E-14 1.12377E-13 + 3.19724E-13 8.35275E-13 2.00191E-12 4.39652E-12 8.83416E-12 1.62080E-11 + 2.70764E-11 4.10211E-11 5.60235E-11 6.83095E-11 7.31047E-11 6.63397E-11 + 4.66906E-11 1.68562E-11 -1.68562E-11 -4.66906E-11 -6.63397E-11 -7.31047E-11 + -6.83095E-11 -5.60235E-11 -4.10211E-11 -2.70764E-11 -1.62080E-11 -8.83416E-12 + -4.39652E-12 -2.00191E-12 -8.35275E-13 -3.19724E-13 -1.12377E-13 -3.62960E-14 + -1.07790E-14 -2.94472E-15 -7.40351E-16 -1.71360E-16 + 1.48890E-15 6.43271E-15 2.55859E-14 9.36554E-14 3.15367E-13 9.76416E-13 + 2.77799E-12 7.25748E-12 1.73940E-11 3.82002E-11 7.67577E-11 1.40827E-10 + 2.35259E-10 3.56422E-10 4.86773E-10 5.93523E-10 6.35187E-10 5.76408E-10 + 4.05682E-10 1.46459E-10 -1.46459E-10 -4.05682E-10 -5.76408E-10 -6.35187E-10 + -5.93523E-10 -4.86773E-10 -3.56422E-10 -2.35259E-10 -1.40827E-10 -7.67577E-11 + -3.82002E-11 -1.73940E-11 -7.25748E-12 -2.77799E-12 -9.76416E-13 -3.15367E-13 + -9.36554E-14 -2.55859E-14 -6.43271E-15 -1.48890E-15 + 1.13889E-14 4.92053E-14 1.95712E-13 7.16392E-13 2.41231E-12 7.46883E-12 + 2.12495E-11 5.55142E-11 1.33051E-10 2.92202E-10 5.87137E-10 1.07722E-09 + 1.79955E-09 2.72635E-09 3.72344E-09 4.53999E-09 4.85869E-09 4.40908E-09 + 3.10316E-09 1.12030E-09 -1.12030E-09 -3.10316E-09 -4.40908E-09 -4.85869E-09 + -4.53999E-09 -3.72344E-09 -2.72635E-09 -1.79955E-09 -1.07722E-09 -5.87137E-10 + -2.92202E-10 -1.33051E-10 -5.55142E-11 -2.12495E-11 -7.46883E-12 -2.41231E-12 + -7.16392E-13 -1.95712E-13 -4.92053E-14 -1.13889E-14 + 7.66952E-14 3.31358E-13 1.31796E-12 4.82432E-12 1.62450E-11 5.02965E-11 + 1.43098E-10 3.73842E-10 8.95989E-10 1.96774E-09 3.95389E-09 7.25420E-09 + 1.21185E-08 1.83597E-08 2.50743E-08 3.05731E-08 3.27193E-08 2.96915E-08 + 2.08972E-08 7.54431E-09 -7.54431E-09 -2.08972E-08 -2.96915E-08 -3.27193E-08 + -3.05731E-08 -2.50743E-08 -1.83597E-08 -1.21185E-08 -7.25420E-09 -3.95389E-09 + -1.96774E-09 -8.95989E-10 -3.73842E-10 -1.43098E-10 -5.02965E-11 -1.62450E-11 + -4.82432E-12 -1.31796E-12 -3.31358E-13 -7.66952E-14 + 4.54705E-13 1.96453E-12 7.81383E-12 2.86020E-11 9.63118E-11 2.98194E-10 + 8.48389E-10 2.21641E-09 5.31207E-09 1.16662E-08 2.34415E-08 4.30081E-08 + 7.18473E-08 1.08850E-07 1.48659E-07 1.81260E-07 1.93984E-07 1.76033E-07 + 1.23894E-07 4.47281E-08 -4.47281E-08 -1.23894E-07 -1.76033E-07 -1.93984E-07 + -1.81260E-07 -1.48659E-07 -1.08850E-07 -7.18473E-08 -4.30081E-08 -2.34415E-08 + -1.16662E-08 -5.31207E-09 -2.21641E-09 -8.48389E-10 -2.98194E-10 -9.63118E-11 + -2.86020E-11 -7.81383E-12 -1.96453E-12 -4.54705E-13 + 2.37346E-12 1.02544E-11 4.07865E-11 1.49297E-10 5.02727E-10 1.55651E-09 + 4.42841E-09 1.15692E-08 2.77279E-08 6.08951E-08 1.22360E-07 2.24493E-07 + 3.75028E-07 5.68173E-07 7.75967E-07 9.46137E-07 1.01255E-06 9.18855E-07 + 6.46700E-07 2.33471E-07 -2.33471E-07 -6.46700E-07 -9.18855E-07 -1.01255E-06 + -9.46137E-07 -7.75967E-07 -5.68173E-07 -3.75028E-07 -2.24493E-07 -1.22360E-07 + -6.08951E-08 -2.77279E-08 -1.15692E-08 -4.42841E-09 -1.55651E-09 -5.02727E-10 + -1.49297E-10 -4.07865E-11 -1.02544E-11 -2.37346E-12 + 1.09082E-11 4.71283E-11 1.87451E-10 6.86152E-10 2.31049E-09 7.15356E-09 + 2.03526E-08 5.31709E-08 1.27435E-07 2.79868E-07 5.62354E-07 1.03175E-06 + 1.72359E-06 2.61127E-06 3.56627E-06 4.34836E-06 4.65361E-06 4.22298E-06 + 2.97218E-06 1.07302E-06 -1.07302E-06 -2.97218E-06 -4.22298E-06 -4.65361E-06 + -4.34836E-06 -3.56627E-06 -2.61127E-06 -1.72359E-06 -1.03175E-06 -5.62354E-07 + -2.79868E-07 -1.27435E-07 -5.31709E-08 -2.03526E-08 -7.15356E-09 -2.31049E-09 + -6.86152E-10 -1.87451E-10 -4.71283E-11 -1.09082E-11 + 4.41454E-11 1.90728E-10 7.58613E-10 2.77686E-09 9.35053E-09 2.89504E-08 + 8.23667E-08 2.15182E-07 5.15728E-07 1.13262E-06 2.27584E-06 4.17549E-06 + 6.97537E-06 1.05678E-05 1.44327E-05 1.75979E-05 1.88335E-05 1.70910E-05 + 1.20290E-05 4.34278E-06 -4.34278E-06 -1.20290E-05 -1.70910E-05 -1.88335E-05 + -1.75979E-05 -1.44327E-05 -1.05678E-05 -6.97537E-06 -4.17549E-06 -2.27584E-06 + -1.13262E-06 -5.15728E-07 -2.15182E-07 -8.23667E-08 -2.89504E-08 -9.35053E-09 + -2.77686E-09 -7.58613E-10 -1.90728E-10 -4.41454E-11 + 1.57345E-10 6.79802E-10 2.70389E-09 9.89740E-09 3.33276E-08 1.03187E-07 + 2.93575E-07 7.66963E-07 1.83818E-06 4.03696E-06 8.11167E-06 1.48825E-05 + 2.48620E-05 3.76666E-05 5.14434E-05 6.27289E-05 6.71408E-05 6.09397E-05 + 4.28993E-05 1.54898E-05 -1.54898E-05 -4.28993E-05 -6.09397E-05 -6.71408E-05 + -6.27289E-05 -5.14434E-05 -3.76666E-05 -2.48620E-05 -1.48825E-05 -8.11167E-06 + -4.03696E-06 -1.83818E-06 -7.66963E-07 -2.93575E-07 -1.03187E-07 -3.33276E-08 + -9.89740E-09 -2.70389E-09 -6.79802E-10 -1.57345E-10 + 4.94060E-10 2.13456E-09 8.49013E-09 3.10776E-08 1.04648E-07 3.24003E-07 + 9.21820E-07 2.40824E-06 5.77185E-06 1.26759E-05 2.54705E-05 4.67308E-05 + 7.80672E-05 1.18280E-04 1.61568E-04 1.97097E-04 2.11142E-04 1.91896E-04 + 1.35288E-04 4.88981E-05 -4.88981E-05 -1.35288E-04 -1.91896E-04 -2.11142E-04 + -1.97097E-04 -1.61568E-04 -1.18280E-04 -7.80672E-05 -4.67308E-05 -2.54705E-05 + -1.26759E-05 -5.77185E-06 -2.40824E-06 -9.21820E-07 -3.24003E-07 -1.04648E-07 + -3.10776E-08 -8.49013E-09 -2.13456E-09 -4.94060E-10 + 1.36732E-09 5.90743E-09 2.34966E-08 8.60078E-08 2.89615E-07 8.96684E-07 + 2.55115E-06 6.66485E-06 1.59737E-05 3.50809E-05 7.04900E-05 1.29330E-04 + 2.16070E-04 3.27456E-04 4.47690E-04 5.47370E-04 5.89040E-04 5.39071E-04 + 3.82968E-04 1.39135E-04 -1.39135E-04 -3.82968E-04 -5.39071E-04 -5.89040E-04 + -5.47370E-04 -4.47690E-04 -3.27456E-04 -2.16070E-04 -1.29330E-04 -7.04900E-05 + -3.50809E-05 -1.59737E-05 -6.66485E-06 -2.55115E-06 -8.96684E-07 -2.89615E-07 + -8.60078E-08 -2.34966E-08 -5.90743E-09 -1.36732E-09 + 3.33784E-09 1.44210E-08 5.73588E-08 2.09958E-07 7.06994E-07 2.18895E-06 + 6.22776E-06 1.62700E-05 3.89942E-05 8.56380E-05 1.72079E-04 3.15732E-04 + 5.27616E-04 8.00396E-04 1.09780E-03 1.35330E-03 1.48020E-03 1.38784E-03 + 1.01179E-03 3.73885E-04 -3.73885E-04 -1.01179E-03 -1.38784E-03 -1.48020E-03 + -1.35330E-03 -1.09780E-03 -8.00396E-04 -5.27616E-04 -3.15732E-04 -1.72079E-04 + -8.56380E-05 -3.89942E-05 -1.62700E-05 -6.22776E-06 -2.18895E-06 -7.06994E-07 + -2.09958E-07 -5.73588E-08 -1.44210E-08 -3.33784E-09 + 7.19667E-09 3.10928E-08 1.23670E-07 4.52688E-07 1.52434E-06 4.71955E-06 + 1.34276E-05 3.50794E-05 8.40748E-05 1.84643E-04 3.71024E-04 6.80842E-04 + 1.13844E-03 1.73135E-03 2.39396E-03 3.01162E-03 3.42330E-03 3.38656E-03 + 2.60327E-03 9.93843E-04 -9.93843E-04 -2.60327E-03 -3.38656E-03 -3.42330E-03 + -3.01162E-03 -2.39396E-03 -1.73135E-03 -1.13844E-03 -6.80842E-04 -3.71024E-04 + -1.84643E-04 -8.40748E-05 -3.50794E-05 -1.34276E-05 -4.71955E-06 -1.52434E-06 + -4.52688E-07 -1.23670E-07 -3.10928E-08 -7.19667E-09 + 1.37338E-08 5.93359E-08 2.36006E-07 8.63887E-07 2.90897E-06 9.00655E-06 + 2.56245E-05 6.69437E-05 1.60444E-04 3.52365E-04 7.08070E-04 1.29961E-03 + 2.17545E-03 3.32301E-03 4.65933E-03 6.06210E-03 7.31034E-03 7.78358E-03 + 6.38003E-03 2.52491E-03 -2.52491E-03 -6.38003E-03 -7.78358E-03 -7.31034E-03 + -6.06210E-03 -4.65933E-03 -3.32301E-03 -2.17545E-03 -1.29961E-03 -7.08070E-04 + -3.52365E-04 -1.60444E-04 -6.69437E-05 -2.56245E-05 -9.00655E-06 -2.90897E-06 + -8.63887E-07 -2.36006E-07 -5.93359E-08 -1.37338E-08 + 2.32765E-08 1.00565E-07 3.99993E-07 1.46415E-06 4.93025E-06 1.52647E-05 + 4.34294E-05 1.13459E-04 2.71928E-04 5.97207E-04 1.20013E-03 2.20335E-03 + 3.69337E-03 5.67314E-03 8.09294E-03 1.09515E-02 1.40568E-02 1.60172E-02 + 1.38291E-02 5.62030E-03 -5.62030E-03 -1.38291E-02 -1.60172E-02 -1.40568E-02 + -1.09515E-02 -8.09294E-03 -5.67314E-03 -3.69337E-03 -2.20335E-03 -1.20013E-03 + -5.97207E-04 -2.71928E-04 -1.13459E-04 -4.34294E-05 -1.52647E-05 -4.93025E-06 + -1.46415E-06 -3.99993E-07 -1.00565E-07 -2.32765E-08 + 3.52223E-08 1.52176E-07 6.05275E-07 2.21557E-06 7.46051E-06 2.30987E-05 + 6.57179E-05 1.71688E-04 4.11485E-04 9.03707E-04 1.81615E-03 3.33532E-03 + 5.59924E-03 8.65162E-03 1.25626E-02 1.76567E-02 2.39265E-02 2.87239E-02 + 2.57204E-02 1.06452E-02 -1.06452E-02 -2.57204E-02 -2.87239E-02 -2.39265E-02 + -1.76567E-02 -1.25626E-02 -8.65162E-03 -5.59924E-03 -3.33532E-03 -1.81615E-03 + -9.03707E-04 -4.11485E-04 -1.71688E-04 -6.57179E-05 -2.30987E-05 -7.46051E-06 + -2.21557E-06 -6.05275E-07 -1.52176E-07 -3.52223E-08 + 4.79611E-08 2.07213E-07 8.24183E-07 3.01687E-06 1.01587E-05 3.14527E-05 + 8.94860E-05 2.33781E-04 5.60306E-04 1.23056E-03 2.47313E-03 4.54321E-03 + 7.63830E-03 1.18703E-02 1.75272E-02 2.54802E-02 3.60920E-02 4.51339E-02 + 4.18994E-02 1.78587E-02 -1.78587E-02 -4.18994E-02 -4.51339E-02 -3.60920E-02 + -2.54802E-02 -1.75272E-02 -1.18703E-02 -7.63830E-03 -4.54321E-03 -2.47313E-03 + -1.23056E-03 -5.60306E-04 -2.33781E-04 -8.94860E-05 -3.14527E-05 -1.01587E-05 + -3.01687E-06 -8.24183E-07 -2.07213E-07 -4.79611E-08 + 5.93972E-08 2.56622E-07 1.02071E-06 3.73623E-06 1.25810E-05 3.89525E-05 + 1.10823E-04 2.89525E-04 6.93908E-04 1.52398E-03 3.06293E-03 5.62763E-03 + 9.46916E-03 1.47617E-02 2.19925E-02 3.25307E-02 4.70998E-02 6.03833E-02 + 5.85896E-02 2.63510E-02 -2.63510E-02 -5.85896E-02 -6.03833E-02 -4.70998E-02 + -3.25307E-02 -2.19925E-02 -1.47617E-02 -9.46916E-03 -5.62763E-03 -3.06293E-03 + -1.52398E-03 -6.93908E-04 -2.89525E-04 -1.10823E-04 -3.89525E-05 -1.25810E-05 + -3.73623E-06 -1.02071E-06 -2.56622E-07 -5.93972E-08 + 6.77629E-08 2.92766E-07 1.16446E-06 4.26245E-06 1.43530E-05 4.44387E-05 + 1.26432E-04 3.30303E-04 7.91640E-04 1.73862E-03 3.49424E-03 6.41928E-03 + 1.07944E-02 1.67864E-02 2.48325E-02 3.62272E-02 5.15548E-02 6.50867E-02 + 6.22833E-02 2.77064E-02 -2.77064E-02 -6.22833E-02 -6.50867E-02 -5.15548E-02 + -3.62272E-02 -2.48325E-02 -1.67864E-02 -1.07944E-02 -6.41928E-03 -3.49424E-03 + -1.73862E-03 -7.91640E-04 -3.30303E-04 -1.26432E-04 -4.44387E-05 -1.43530E-05 + -4.26245E-06 -1.16446E-06 -2.92766E-07 -6.77629E-08 + 7.20958E-08 3.11486E-07 1.23892E-06 4.53500E-06 1.52707E-05 4.72802E-05 + 1.34517E-04 3.51423E-04 8.42259E-04 1.84978E-03 3.71749E-03 6.82771E-03 + 1.14669E-02 1.77454E-02 2.58796E-02 3.66869E-02 5.02725E-02 6.10209E-02 + 5.53743E-02 2.32516E-02 -2.32516E-02 -5.53743E-02 -6.10209E-02 -5.02725E-02 + -3.66869E-02 -2.58796E-02 -1.77454E-02 -1.14669E-02 -6.82771E-03 -3.71749E-03 + -1.84978E-03 -8.42259E-04 -3.51423E-04 -1.34517E-04 -4.72802E-05 -1.52707E-05 + -4.53500E-06 -1.23892E-06 -3.11486E-07 -7.20958E-08 + 7.20958E-08 3.11486E-07 1.23892E-06 4.53500E-06 1.52707E-05 4.72802E-05 + 1.34517E-04 3.51423E-04 8.42259E-04 1.84978E-03 3.71749E-03 6.82771E-03 + 1.14669E-02 1.77454E-02 2.58796E-02 3.66869E-02 5.02725E-02 6.10209E-02 + 5.53743E-02 2.32516E-02 -2.32516E-02 -5.53743E-02 -6.10209E-02 -5.02725E-02 + -3.66869E-02 -2.58796E-02 -1.77454E-02 -1.14669E-02 -6.82771E-03 -3.71749E-03 + -1.84978E-03 -8.42259E-04 -3.51423E-04 -1.34517E-04 -4.72802E-05 -1.52707E-05 + -4.53500E-06 -1.23892E-06 -3.11486E-07 -7.20958E-08 + 6.77629E-08 2.92766E-07 1.16446E-06 4.26245E-06 1.43530E-05 4.44387E-05 + 1.26432E-04 3.30303E-04 7.91640E-04 1.73862E-03 3.49424E-03 6.41928E-03 + 1.07944E-02 1.67864E-02 2.48325E-02 3.62272E-02 5.15548E-02 6.50867E-02 + 6.22833E-02 2.77064E-02 -2.77064E-02 -6.22833E-02 -6.50867E-02 -5.15548E-02 + -3.62272E-02 -2.48325E-02 -1.67864E-02 -1.07944E-02 -6.41928E-03 -3.49424E-03 + -1.73862E-03 -7.91640E-04 -3.30303E-04 -1.26432E-04 -4.44387E-05 -1.43530E-05 + -4.26245E-06 -1.16446E-06 -2.92766E-07 -6.77629E-08 + 5.93972E-08 2.56622E-07 1.02071E-06 3.73623E-06 1.25810E-05 3.89525E-05 + 1.10823E-04 2.89525E-04 6.93908E-04 1.52398E-03 3.06293E-03 5.62763E-03 + 9.46916E-03 1.47617E-02 2.19925E-02 3.25307E-02 4.70998E-02 6.03833E-02 + 5.85896E-02 2.63510E-02 -2.63510E-02 -5.85896E-02 -6.03833E-02 -4.70998E-02 + -3.25307E-02 -2.19925E-02 -1.47617E-02 -9.46916E-03 -5.62763E-03 -3.06293E-03 + -1.52398E-03 -6.93908E-04 -2.89525E-04 -1.10823E-04 -3.89525E-05 -1.25810E-05 + -3.73623E-06 -1.02071E-06 -2.56622E-07 -5.93972E-08 + 4.79611E-08 2.07213E-07 8.24183E-07 3.01687E-06 1.01587E-05 3.14527E-05 + 8.94860E-05 2.33781E-04 5.60306E-04 1.23056E-03 2.47313E-03 4.54321E-03 + 7.63830E-03 1.18703E-02 1.75272E-02 2.54802E-02 3.60920E-02 4.51339E-02 + 4.18994E-02 1.78587E-02 -1.78587E-02 -4.18994E-02 -4.51339E-02 -3.60920E-02 + -2.54802E-02 -1.75272E-02 -1.18703E-02 -7.63830E-03 -4.54321E-03 -2.47313E-03 + -1.23056E-03 -5.60306E-04 -2.33781E-04 -8.94860E-05 -3.14527E-05 -1.01587E-05 + -3.01687E-06 -8.24183E-07 -2.07213E-07 -4.79611E-08 + 3.52223E-08 1.52176E-07 6.05275E-07 2.21557E-06 7.46051E-06 2.30987E-05 + 6.57179E-05 1.71688E-04 4.11485E-04 9.03707E-04 1.81615E-03 3.33532E-03 + 5.59924E-03 8.65162E-03 1.25626E-02 1.76567E-02 2.39265E-02 2.87239E-02 + 2.57204E-02 1.06452E-02 -1.06452E-02 -2.57204E-02 -2.87239E-02 -2.39265E-02 + -1.76567E-02 -1.25626E-02 -8.65162E-03 -5.59924E-03 -3.33532E-03 -1.81615E-03 + -9.03707E-04 -4.11485E-04 -1.71688E-04 -6.57179E-05 -2.30987E-05 -7.46051E-06 + -2.21557E-06 -6.05275E-07 -1.52176E-07 -3.52223E-08 + 2.32765E-08 1.00565E-07 3.99993E-07 1.46415E-06 4.93025E-06 1.52647E-05 + 4.34294E-05 1.13459E-04 2.71928E-04 5.97207E-04 1.20013E-03 2.20335E-03 + 3.69337E-03 5.67314E-03 8.09294E-03 1.09515E-02 1.40568E-02 1.60172E-02 + 1.38291E-02 5.62030E-03 -5.62030E-03 -1.38291E-02 -1.60172E-02 -1.40568E-02 + -1.09515E-02 -8.09294E-03 -5.67314E-03 -3.69337E-03 -2.20335E-03 -1.20013E-03 + -5.97207E-04 -2.71928E-04 -1.13459E-04 -4.34294E-05 -1.52647E-05 -4.93025E-06 + -1.46415E-06 -3.99993E-07 -1.00565E-07 -2.32765E-08 + 1.37338E-08 5.93359E-08 2.36006E-07 8.63887E-07 2.90897E-06 9.00655E-06 + 2.56245E-05 6.69437E-05 1.60444E-04 3.52365E-04 7.08070E-04 1.29961E-03 + 2.17545E-03 3.32301E-03 4.65933E-03 6.06210E-03 7.31034E-03 7.78358E-03 + 6.38003E-03 2.52491E-03 -2.52491E-03 -6.38003E-03 -7.78358E-03 -7.31034E-03 + -6.06210E-03 -4.65933E-03 -3.32301E-03 -2.17545E-03 -1.29961E-03 -7.08070E-04 + -3.52365E-04 -1.60444E-04 -6.69437E-05 -2.56245E-05 -9.00655E-06 -2.90897E-06 + -8.63887E-07 -2.36006E-07 -5.93359E-08 -1.37338E-08 + 7.19667E-09 3.10928E-08 1.23670E-07 4.52688E-07 1.52434E-06 4.71955E-06 + 1.34276E-05 3.50794E-05 8.40748E-05 1.84643E-04 3.71024E-04 6.80842E-04 + 1.13844E-03 1.73135E-03 2.39396E-03 3.01162E-03 3.42330E-03 3.38656E-03 + 2.60327E-03 9.93843E-04 -9.93843E-04 -2.60327E-03 -3.38656E-03 -3.42330E-03 + -3.01162E-03 -2.39396E-03 -1.73135E-03 -1.13844E-03 -6.80842E-04 -3.71024E-04 + -1.84643E-04 -8.40748E-05 -3.50794E-05 -1.34276E-05 -4.71955E-06 -1.52434E-06 + -4.52688E-07 -1.23670E-07 -3.10928E-08 -7.19667E-09 + 3.33784E-09 1.44210E-08 5.73588E-08 2.09958E-07 7.06994E-07 2.18895E-06 + 6.22776E-06 1.62700E-05 3.89942E-05 8.56380E-05 1.72079E-04 3.15732E-04 + 5.27616E-04 8.00396E-04 1.09780E-03 1.35330E-03 1.48020E-03 1.38784E-03 + 1.01179E-03 3.73885E-04 -3.73885E-04 -1.01179E-03 -1.38784E-03 -1.48020E-03 + -1.35330E-03 -1.09780E-03 -8.00396E-04 -5.27616E-04 -3.15732E-04 -1.72079E-04 + -8.56380E-05 -3.89942E-05 -1.62700E-05 -6.22776E-06 -2.18895E-06 -7.06994E-07 + -2.09958E-07 -5.73588E-08 -1.44210E-08 -3.33784E-09 + 1.36732E-09 5.90743E-09 2.34966E-08 8.60078E-08 2.89615E-07 8.96684E-07 + 2.55115E-06 6.66485E-06 1.59737E-05 3.50809E-05 7.04900E-05 1.29330E-04 + 2.16070E-04 3.27456E-04 4.47690E-04 5.47370E-04 5.89040E-04 5.39071E-04 + 3.82968E-04 1.39135E-04 -1.39135E-04 -3.82968E-04 -5.39071E-04 -5.89040E-04 + -5.47370E-04 -4.47690E-04 -3.27456E-04 -2.16070E-04 -1.29330E-04 -7.04900E-05 + -3.50809E-05 -1.59737E-05 -6.66485E-06 -2.55115E-06 -8.96684E-07 -2.89615E-07 + -8.60078E-08 -2.34966E-08 -5.90743E-09 -1.36732E-09 + 4.94060E-10 2.13456E-09 8.49013E-09 3.10776E-08 1.04648E-07 3.24003E-07 + 9.21820E-07 2.40824E-06 5.77185E-06 1.26759E-05 2.54705E-05 4.67308E-05 + 7.80672E-05 1.18280E-04 1.61568E-04 1.97097E-04 2.11142E-04 1.91896E-04 + 1.35288E-04 4.88981E-05 -4.88981E-05 -1.35288E-04 -1.91896E-04 -2.11142E-04 + -1.97097E-04 -1.61568E-04 -1.18280E-04 -7.80672E-05 -4.67308E-05 -2.54705E-05 + -1.26759E-05 -5.77185E-06 -2.40824E-06 -9.21820E-07 -3.24003E-07 -1.04648E-07 + -3.10776E-08 -8.49013E-09 -2.13456E-09 -4.94060E-10 + 1.57345E-10 6.79802E-10 2.70389E-09 9.89740E-09 3.33276E-08 1.03187E-07 + 2.93575E-07 7.66963E-07 1.83818E-06 4.03696E-06 8.11167E-06 1.48825E-05 + 2.48620E-05 3.76666E-05 5.14434E-05 6.27289E-05 6.71408E-05 6.09397E-05 + 4.28993E-05 1.54898E-05 -1.54898E-05 -4.28993E-05 -6.09397E-05 -6.71408E-05 + -6.27289E-05 -5.14434E-05 -3.76666E-05 -2.48620E-05 -1.48825E-05 -8.11167E-06 + -4.03696E-06 -1.83818E-06 -7.66963E-07 -2.93575E-07 -1.03187E-07 -3.33276E-08 + -9.89740E-09 -2.70389E-09 -6.79802E-10 -1.57345E-10 + 4.41454E-11 1.90728E-10 7.58613E-10 2.77686E-09 9.35053E-09 2.89504E-08 + 8.23667E-08 2.15182E-07 5.15728E-07 1.13262E-06 2.27584E-06 4.17549E-06 + 6.97537E-06 1.05678E-05 1.44327E-05 1.75979E-05 1.88335E-05 1.70910E-05 + 1.20290E-05 4.34278E-06 -4.34278E-06 -1.20290E-05 -1.70910E-05 -1.88335E-05 + -1.75979E-05 -1.44327E-05 -1.05678E-05 -6.97537E-06 -4.17549E-06 -2.27584E-06 + -1.13262E-06 -5.15728E-07 -2.15182E-07 -8.23667E-08 -2.89504E-08 -9.35053E-09 + -2.77686E-09 -7.58613E-10 -1.90728E-10 -4.41454E-11 + 1.09082E-11 4.71283E-11 1.87451E-10 6.86152E-10 2.31049E-09 7.15356E-09 + 2.03526E-08 5.31709E-08 1.27435E-07 2.79868E-07 5.62354E-07 1.03175E-06 + 1.72359E-06 2.61127E-06 3.56627E-06 4.34836E-06 4.65361E-06 4.22298E-06 + 2.97218E-06 1.07302E-06 -1.07302E-06 -2.97218E-06 -4.22298E-06 -4.65361E-06 + -4.34836E-06 -3.56627E-06 -2.61127E-06 -1.72359E-06 -1.03175E-06 -5.62354E-07 + -2.79868E-07 -1.27435E-07 -5.31709E-08 -2.03526E-08 -7.15356E-09 -2.31049E-09 + -6.86152E-10 -1.87451E-10 -4.71283E-11 -1.09082E-11 + 2.37346E-12 1.02544E-11 4.07865E-11 1.49297E-10 5.02727E-10 1.55651E-09 + 4.42841E-09 1.15692E-08 2.77279E-08 6.08951E-08 1.22360E-07 2.24493E-07 + 3.75028E-07 5.68173E-07 7.75967E-07 9.46137E-07 1.01255E-06 9.18855E-07 + 6.46700E-07 2.33471E-07 -2.33471E-07 -6.46700E-07 -9.18855E-07 -1.01255E-06 + -9.46137E-07 -7.75967E-07 -5.68173E-07 -3.75028E-07 -2.24493E-07 -1.22360E-07 + -6.08951E-08 -2.77279E-08 -1.15692E-08 -4.42841E-09 -1.55651E-09 -5.02727E-10 + -1.49297E-10 -4.07865E-11 -1.02544E-11 -2.37346E-12 + 4.54705E-13 1.96453E-12 7.81383E-12 2.86020E-11 9.63118E-11 2.98194E-10 + 8.48389E-10 2.21641E-09 5.31207E-09 1.16662E-08 2.34415E-08 4.30081E-08 + 7.18473E-08 1.08850E-07 1.48659E-07 1.81260E-07 1.93984E-07 1.76033E-07 + 1.23894E-07 4.47281E-08 -4.47281E-08 -1.23894E-07 -1.76033E-07 -1.93984E-07 + -1.81260E-07 -1.48659E-07 -1.08850E-07 -7.18473E-08 -4.30081E-08 -2.34415E-08 + -1.16662E-08 -5.31207E-09 -2.21641E-09 -8.48389E-10 -2.98194E-10 -9.63118E-11 + -2.86020E-11 -7.81383E-12 -1.96453E-12 -4.54705E-13 + 7.66952E-14 3.31358E-13 1.31796E-12 4.82432E-12 1.62450E-11 5.02965E-11 + 1.43098E-10 3.73842E-10 8.95989E-10 1.96774E-09 3.95389E-09 7.25420E-09 + 1.21185E-08 1.83597E-08 2.50743E-08 3.05731E-08 3.27193E-08 2.96915E-08 + 2.08972E-08 7.54431E-09 -7.54431E-09 -2.08972E-08 -2.96915E-08 -3.27193E-08 + -3.05731E-08 -2.50743E-08 -1.83597E-08 -1.21185E-08 -7.25420E-09 -3.95389E-09 + -1.96774E-09 -8.95989E-10 -3.73842E-10 -1.43098E-10 -5.02965E-11 -1.62450E-11 + -4.82432E-12 -1.31796E-12 -3.31358E-13 -7.66952E-14 + 1.13889E-14 4.92053E-14 1.95712E-13 7.16392E-13 2.41231E-12 7.46883E-12 + 2.12495E-11 5.55142E-11 1.33051E-10 2.92202E-10 5.87137E-10 1.07722E-09 + 1.79955E-09 2.72635E-09 3.72344E-09 4.53999E-09 4.85869E-09 4.40908E-09 + 3.10316E-09 1.12030E-09 -1.12030E-09 -3.10316E-09 -4.40908E-09 -4.85869E-09 + -4.53999E-09 -3.72344E-09 -2.72635E-09 -1.79955E-09 -1.07722E-09 -5.87137E-10 + -2.92202E-10 -1.33051E-10 -5.55142E-11 -2.12495E-11 -7.46883E-12 -2.41231E-12 + -7.16392E-13 -1.95712E-13 -4.92053E-14 -1.13889E-14 + 1.48890E-15 6.43271E-15 2.55859E-14 9.36554E-14 3.15367E-13 9.76416E-13 + 2.77799E-12 7.25748E-12 1.73940E-11 3.82002E-11 7.67577E-11 1.40827E-10 + 2.35259E-10 3.56422E-10 4.86773E-10 5.93523E-10 6.35187E-10 5.76408E-10 + 4.05682E-10 1.46459E-10 -1.46459E-10 -4.05682E-10 -5.76408E-10 -6.35187E-10 + -5.93523E-10 -4.86773E-10 -3.56422E-10 -2.35259E-10 -1.40827E-10 -7.67577E-11 + -3.82002E-11 -1.73940E-11 -7.25748E-12 -2.77799E-12 -9.76416E-13 -3.15367E-13 + -9.36554E-14 -2.55859E-14 -6.43271E-15 -1.48890E-15 + 1.71360E-16 7.40351E-16 2.94472E-15 1.07790E-14 3.62960E-14 1.12377E-13 + 3.19724E-13 8.35275E-13 2.00191E-12 4.39652E-12 8.83416E-12 1.62080E-11 + 2.70764E-11 4.10211E-11 5.60235E-11 6.83095E-11 7.31047E-11 6.63397E-11 + 4.66906E-11 1.68562E-11 -1.68562E-11 -4.66906E-11 -6.63397E-11 -7.31047E-11 + -6.83095E-11 -5.60235E-11 -4.10211E-11 -2.70764E-11 -1.62080E-11 -8.83416E-12 + -4.39652E-12 -2.00191E-12 -8.35275E-13 -3.19724E-13 -1.12377E-13 -3.62960E-14 + -1.07790E-14 -2.94472E-15 -7.40351E-16 -1.71360E-16 + 2.43452E-16 1.05182E-15 4.18357E-15 1.53137E-14 5.15660E-14 1.59655E-13 + 4.54233E-13 1.18668E-12 2.84412E-12 6.24616E-12 1.25507E-11 2.30268E-11 + 3.84675E-11 5.82789E-11 7.95928E-11 9.70475E-11 1.03860E-10 9.42491E-11 + 6.63335E-11 2.39477E-11 -2.39477E-11 -6.63335E-11 -9.42491E-11 -1.03860E-10 + -9.70475E-11 -7.95928E-11 -5.82789E-11 -3.84675E-11 -2.30268E-11 -1.25507E-11 + -6.24616E-12 -2.84412E-12 -1.18668E-12 -4.54233E-13 -1.59655E-13 -5.15660E-14 + -1.53137E-14 -4.18357E-15 -1.05182E-15 -2.43452E-16 + 2.11529E-15 9.13898E-15 3.63499E-14 1.33057E-13 4.48043E-13 1.38720E-12 + 3.94671E-12 1.03107E-11 2.47118E-11 5.42712E-11 1.09050E-10 2.00074E-10 + 3.34234E-10 5.06370E-10 6.91561E-10 8.43220E-10 9.02413E-10 8.18905E-10 + 5.76354E-10 2.08075E-10 -2.08075E-10 -5.76354E-10 -8.18905E-10 -9.02413E-10 + -8.43220E-10 -6.91561E-10 -5.06370E-10 -3.34234E-10 -2.00074E-10 -1.09050E-10 + -5.42712E-11 -2.47118E-11 -1.03107E-11 -3.94671E-12 -1.38720E-12 -4.48043E-13 + -1.33057E-13 -3.63499E-14 -9.13898E-15 -2.11529E-15 + 1.61803E-14 6.99062E-14 2.78049E-13 1.01778E-12 3.42718E-12 1.06110E-11 + 3.01893E-11 7.88692E-11 1.89026E-10 4.15133E-10 8.34148E-10 1.53041E-09 + 2.55663E-09 3.87334E-09 5.28991E-09 6.44999E-09 6.90277E-09 6.26400E-09 + 4.40867E-09 1.59162E-09 -1.59162E-09 -4.40867E-09 -6.26400E-09 -6.90277E-09 + -6.44999E-09 -5.28991E-09 -3.87334E-09 -2.55663E-09 -1.53041E-09 -8.34148E-10 + -4.15133E-10 -1.89026E-10 -7.88692E-11 -3.01893E-11 -1.06110E-11 -3.42718E-12 + -1.01778E-12 -2.78049E-13 -6.99062E-14 -1.61803E-14 + 1.08961E-13 4.70761E-13 1.87243E-12 6.85393E-12 2.30793E-11 7.14564E-11 + 2.03300E-10 5.31120E-10 1.27294E-09 2.79558E-09 5.61731E-09 1.03061E-08 + 1.72168E-08 2.60838E-08 3.56232E-08 4.34354E-08 4.64845E-08 4.21829E-08 + 2.96888E-08 1.07182E-08 -1.07182E-08 -2.96888E-08 -4.21829E-08 -4.64845E-08 + -4.34354E-08 -3.56232E-08 -2.60838E-08 -1.72168E-08 -1.03061E-08 -5.61731E-09 + -2.79558E-09 -1.27294E-09 -5.31120E-10 -2.03300E-10 -7.14564E-11 -2.30793E-11 + -6.85393E-12 -1.87243E-12 -4.70761E-13 -1.08961E-13 + 6.46001E-13 2.79101E-12 1.11011E-11 4.06350E-11 1.36831E-10 4.23645E-10 + 1.20531E-09 3.14886E-09 7.54688E-09 1.65742E-08 3.33035E-08 6.11018E-08 + 1.02074E-07 1.54643E-07 2.11200E-07 2.57516E-07 2.75594E-07 2.50091E-07 + 1.76016E-07 6.35454E-08 -6.35454E-08 -1.76016E-07 -2.50091E-07 -2.75594E-07 + -2.57516E-07 -2.11200E-07 -1.54643E-07 -1.02074E-07 -6.11018E-08 -3.33035E-08 + -1.65742E-08 -7.54688E-09 -3.14886E-09 -1.20531E-09 -4.23645E-10 -1.36831E-10 + -4.06350E-11 -1.11011E-11 -2.79101E-12 -6.46001E-13 + 3.37199E-12 1.45685E-11 5.79456E-11 2.12106E-10 7.14227E-10 2.21134E-09 + 6.29146E-09 1.64364E-08 3.93931E-08 8.65139E-08 1.73837E-07 3.18939E-07 + 5.32804E-07 8.07206E-07 1.10242E-06 1.34418E-06 1.43854E-06 1.30542E-06 + 9.18769E-07 3.31694E-07 -3.31694E-07 -9.18769E-07 -1.30542E-06 -1.43854E-06 + -1.34418E-06 -1.10242E-06 -8.07206E-07 -5.32804E-07 -3.18939E-07 -1.73837E-07 + -8.65139E-08 -3.93931E-08 -1.64364E-08 -6.29146E-09 -2.21134E-09 -7.14227E-10 + -2.12106E-10 -5.79456E-11 -1.45685E-11 -3.37199E-12 + 1.54973E-11 6.69554E-11 2.66312E-10 9.74820E-10 3.28252E-09 1.01631E-08 + 2.89150E-08 7.55401E-08 1.81047E-07 3.97610E-07 7.98938E-07 1.46581E-06 + 2.44871E-06 3.70984E-06 5.06661E-06 6.17773E-06 6.61140E-06 5.99959E-06 + 4.22258E-06 1.52443E-06 -1.52443E-06 -4.22258E-06 -5.99959E-06 -6.61140E-06 + -6.17773E-06 -5.06661E-06 -3.70984E-06 -2.44871E-06 -1.46581E-06 -7.98938E-07 + -3.97610E-07 -1.81047E-07 -7.55401E-08 -2.89150E-08 -1.01631E-08 -3.28252E-09 + -9.74820E-10 -2.66312E-10 -6.69554E-11 -1.54973E-11 + 6.27176E-11 2.70968E-10 1.07776E-09 3.94509E-09 1.32843E-08 4.11300E-08 + 1.17019E-07 3.05710E-07 7.32697E-07 1.60912E-06 3.23330E-06 5.93213E-06 + 9.90993E-06 1.50137E-05 2.05046E-05 2.50013E-05 2.67565E-05 2.42807E-05 + 1.70891E-05 6.16953E-06 -6.16953E-06 -1.70891E-05 -2.42807E-05 -2.67565E-05 + -2.50013E-05 -2.05046E-05 -1.50137E-05 -9.90993E-06 -5.93213E-06 -3.23330E-06 + -1.60912E-06 -7.32697E-07 -3.05710E-07 -1.17019E-07 -4.11300E-08 -1.32843E-08 + -3.94509E-09 -1.07776E-09 -2.70968E-10 -6.27176E-11 + 2.23541E-10 9.65798E-10 3.84142E-09 1.40613E-08 4.73487E-08 1.46598E-07 + 4.17084E-07 1.08963E-06 2.61151E-06 5.73532E-06 1.15243E-05 2.11436E-05 + 3.53215E-05 5.35128E-05 7.30843E-05 8.91138E-05 9.53740E-05 8.65546E-05 + 6.09230E-05 2.19956E-05 -2.19956E-05 -6.09230E-05 -8.65546E-05 -9.53740E-05 + -8.91138E-05 -7.30843E-05 -5.35128E-05 -3.53215E-05 -2.11436E-05 -1.15243E-05 + -5.73532E-06 -2.61151E-06 -1.08963E-06 -4.17084E-07 -1.46598E-07 -4.73487E-08 + -1.40613E-08 -3.84142E-09 -9.65798E-10 -2.23541E-10 + 7.01914E-10 3.03258E-09 1.20620E-08 4.41521E-08 1.48674E-07 4.60313E-07 + 1.30963E-06 3.42140E-06 8.20009E-06 1.80088E-05 3.61860E-05 6.63905E-05 + 1.10909E-04 1.68033E-04 2.29503E-04 2.79884E-04 2.99643E-04 2.72071E-04 + 1.91608E-04 6.92045E-05 -6.92045E-05 -1.91608E-04 -2.72071E-04 -2.99643E-04 + -2.79884E-04 -2.29503E-04 -1.68033E-04 -1.10909E-04 -6.63905E-05 -3.61860E-05 + -1.80088E-05 -8.20009E-06 -3.42140E-06 -1.30963E-06 -4.60313E-07 -1.48674E-07 + -4.41521E-08 -1.20620E-08 -3.03258E-09 -7.01914E-10 + 1.94256E-09 8.39272E-09 3.33817E-08 1.22192E-07 4.11457E-07 1.27392E-06 + 3.62443E-06 9.46879E-06 2.26939E-05 4.98395E-05 1.00145E-04 1.83738E-04 + 3.06952E-04 4.65095E-04 6.35446E-04 7.75605E-04 8.31792E-04 7.57254E-04 + 5.34874E-04 1.93570E-04 -1.93570E-04 -5.34874E-04 -7.57254E-04 -8.31792E-04 + -7.75605E-04 -6.35446E-04 -4.65095E-04 -3.06952E-04 -1.83738E-04 -1.00145E-04 + -4.98395E-05 -2.26939E-05 -9.46879E-06 -3.62443E-06 -1.27392E-06 -4.11457E-07 + -1.22192E-07 -3.33817E-08 -8.39272E-09 -1.94256E-09 + 4.74209E-09 2.04879E-08 8.14899E-08 2.98289E-07 1.00443E-06 3.10985E-06 + 8.84780E-06 2.31148E-05 5.53993E-05 1.21666E-04 2.44471E-04 4.48542E-04 + 7.49405E-04 1.13594E-03 1.55393E-03 1.90279E-03 2.05381E-03 1.88815E-03 + 1.34806E-03 4.91384E-04 -4.91384E-04 -1.34806E-03 -1.88815E-03 -2.05381E-03 + -1.90279E-03 -1.55393E-03 -1.13594E-03 -7.49405E-04 -4.48542E-04 -2.44471E-04 + -1.21666E-04 -5.53993E-05 -2.31148E-05 -8.84780E-06 -3.10985E-06 -1.00443E-06 + -2.98289E-07 -8.14899E-08 -2.04879E-08 -4.74209E-09 + 1.02243E-08 4.41737E-08 1.75699E-07 6.43136E-07 2.16564E-06 6.70509E-06 + 1.90766E-05 4.98374E-05 1.19445E-04 2.62323E-04 5.27105E-04 9.67152E-04 + 1.61629E-03 2.45253E-03 3.36648E-03 4.15826E-03 4.56573E-03 4.30482E-03 + 3.15659E-03 1.17076E-03 -1.17076E-03 -3.15659E-03 -4.30482E-03 -4.56573E-03 + -4.15826E-03 -3.36648E-03 -2.45253E-03 -1.61629E-03 -9.67152E-04 -5.27105E-04 + -2.62323E-04 -1.19445E-04 -4.98374E-05 -1.90766E-05 -6.70509E-06 -2.16564E-06 + -6.43136E-07 -1.75699E-07 -4.41737E-08 -1.02243E-08 + 1.95116E-08 8.42988E-08 3.35295E-07 1.22733E-06 4.13279E-06 1.27956E-05 + 3.64048E-05 9.51072E-05 2.27944E-04 5.00605E-04 1.00592E-03 1.84591E-03 + 3.08659E-03 4.69420E-03 6.49071E-03 8.16455E-03 9.27767E-03 9.17328E-03 + 7.04777E-03 2.68974E-03 -2.68974E-03 -7.04777E-03 -9.17328E-03 -9.27767E-03 + -8.16455E-03 -6.49071E-03 -4.69420E-03 -3.08659E-03 -1.84591E-03 -1.00592E-03 + -5.00605E-04 -2.27944E-04 -9.51072E-05 -3.64048E-05 -1.27956E-05 -4.13279E-06 + -1.22733E-06 -3.35295E-07 -8.42988E-08 -1.95116E-08 + 3.30691E-08 1.42873E-07 5.68272E-07 2.08013E-06 7.00442E-06 2.16866E-05 + 6.17004E-05 1.61192E-04 3.86329E-04 8.48450E-04 1.70495E-03 3.12933E-03 + 5.23843E-03 8.00215E-03 1.12198E-02 1.45913E-02 1.75746E-02 1.86791E-02 + 1.52868E-02 6.04503E-03 -6.04503E-03 -1.52868E-02 -1.86791E-02 -1.75746E-02 + -1.45913E-02 -1.12198E-02 -8.00215E-03 -5.23843E-03 -3.12933E-03 -1.70495E-03 + -8.48450E-04 -3.86329E-04 -1.61192E-04 -6.17004E-05 -2.16866E-05 -7.00442E-06 + -2.08013E-06 -5.68272E-07 -1.42873E-07 -3.30691E-08 + 5.00405E-08 2.16197E-07 8.59917E-07 3.14767E-06 1.05992E-05 3.28164E-05 + 9.33658E-05 2.43917E-04 5.84598E-04 1.28390E-03 2.58014E-03 4.73760E-03 + 7.94660E-03 1.22361E-02 1.75787E-02 2.41406E-02 3.16437E-02 3.68409E-02 + 3.24735E-02 1.34324E-02 -1.34324E-02 -3.24735E-02 -3.68409E-02 -3.16437E-02 + -2.41406E-02 -1.75787E-02 -1.22361E-02 -7.94660E-03 -4.73760E-03 -2.58014E-03 + -1.28390E-03 -5.84598E-04 -2.43917E-04 -9.33658E-05 -3.28164E-05 -1.05992E-05 + -3.14767E-06 -8.59917E-07 -2.16197E-07 -5.00405E-08 + 6.81385E-08 2.94389E-07 1.17092E-06 4.28608E-06 1.44326E-05 4.46850E-05 + 1.27133E-04 3.32134E-04 7.96029E-04 1.74826E-03 3.51365E-03 6.45531E-03 + 1.08579E-02 1.69020E-02 2.50728E-02 3.67713E-02 5.27151E-02 6.76865E-02 + 6.83366E-02 3.25667E-02 -3.25667E-02 -6.83366E-02 -6.76865E-02 -5.27151E-02 + -3.67713E-02 -2.50728E-02 -1.69020E-02 -1.08579E-02 -6.45531E-03 -3.51365E-03 + -1.74826E-03 -7.96029E-04 -3.32134E-04 -1.27133E-04 -4.46850E-05 -1.44326E-05 + -4.28608E-06 -1.17092E-06 -2.94389E-07 -6.81385E-08 + 8.43859E-08 3.64585E-07 1.45012E-06 5.30808E-06 1.78739E-05 5.53400E-05 + 1.57447E-04 4.11330E-04 9.85839E-04 2.16515E-03 4.35179E-03 7.99845E-03 + 1.34812E-02 2.11540E-02 3.21021E-02 4.91574E-02 7.44778E-02 1.04484E-01 + 1.28715E-01 7.67531E-02 -7.67531E-02 -1.28715E-01 -1.04484E-01 -7.44778E-02 + -4.91574E-02 -3.21021E-02 -2.11540E-02 -1.34812E-02 -7.99845E-03 -4.35179E-03 + -2.16515E-03 -9.85839E-04 -4.11330E-04 -1.57447E-04 -5.53400E-05 -1.78739E-05 + -5.30808E-06 -1.45012E-06 -3.64585E-07 -8.43859E-08 + 9.62710E-08 4.15934E-07 1.65436E-06 6.05568E-06 2.03913E-05 6.31342E-05 + 1.79623E-04 4.69263E-04 1.12469E-03 2.47009E-03 4.96466E-03 9.12442E-03 + 1.53753E-02 2.41042E-02 3.64898E-02 5.56316E-02 8.38015E-02 1.15907E-01 + 1.37547E-01 7.87138E-02 -7.87138E-02 -1.37547E-01 -1.15907E-01 -8.38015E-02 + -5.56316E-02 -3.64898E-02 -2.41042E-02 -1.53753E-02 -9.12442E-03 -4.96466E-03 + -2.47009E-03 -1.12469E-03 -4.69263E-04 -1.79623E-04 -6.31342E-05 -2.03913E-05 + -6.05568E-06 -1.65436E-06 -4.15934E-07 -9.62710E-08 + 1.02427E-07 4.42530E-07 1.76014E-06 6.44290E-06 2.16952E-05 6.71712E-05 + 1.91108E-04 4.99268E-04 1.19660E-03 2.62802E-03 5.28182E-03 9.70445E-03 + 1.63287E-02 2.54544E-02 3.79216E-02 5.60937E-02 8.12340E-02 1.04297E-01 + 1.01788E-01 4.61438E-02 -4.61438E-02 -1.01788E-01 -1.04297E-01 -8.12340E-02 + -5.60937E-02 -3.79216E-02 -2.54544E-02 -1.63287E-02 -9.70445E-03 -5.28182E-03 + -2.62802E-03 -1.19660E-03 -4.99268E-04 -1.91108E-04 -6.71712E-05 -2.16952E-05 + -6.44290E-06 -1.76014E-06 -4.42530E-07 -1.02427E-07 + 1.02427E-07 4.42530E-07 1.76014E-06 6.44290E-06 2.16952E-05 6.71712E-05 + 1.91108E-04 4.99268E-04 1.19660E-03 2.62802E-03 5.28182E-03 9.70445E-03 + 1.63287E-02 2.54544E-02 3.79216E-02 5.60937E-02 8.12340E-02 1.04297E-01 + 1.01788E-01 4.61438E-02 -4.61438E-02 -1.01788E-01 -1.04297E-01 -8.12340E-02 + -5.60937E-02 -3.79216E-02 -2.54544E-02 -1.63287E-02 -9.70445E-03 -5.28182E-03 + -2.62802E-03 -1.19660E-03 -4.99268E-04 -1.91108E-04 -6.71712E-05 -2.16952E-05 + -6.44290E-06 -1.76014E-06 -4.42530E-07 -1.02427E-07 + 9.62710E-08 4.15934E-07 1.65436E-06 6.05568E-06 2.03913E-05 6.31342E-05 + 1.79623E-04 4.69263E-04 1.12469E-03 2.47009E-03 4.96466E-03 9.12442E-03 + 1.53753E-02 2.41042E-02 3.64898E-02 5.56316E-02 8.38015E-02 1.15907E-01 + 1.37547E-01 7.87138E-02 -7.87138E-02 -1.37547E-01 -1.15907E-01 -8.38015E-02 + -5.56316E-02 -3.64898E-02 -2.41042E-02 -1.53753E-02 -9.12442E-03 -4.96466E-03 + -2.47009E-03 -1.12469E-03 -4.69263E-04 -1.79623E-04 -6.31342E-05 -2.03913E-05 + -6.05568E-06 -1.65436E-06 -4.15934E-07 -9.62710E-08 + 8.43859E-08 3.64585E-07 1.45012E-06 5.30808E-06 1.78739E-05 5.53400E-05 + 1.57447E-04 4.11330E-04 9.85839E-04 2.16515E-03 4.35179E-03 7.99845E-03 + 1.34812E-02 2.11540E-02 3.21021E-02 4.91574E-02 7.44778E-02 1.04484E-01 + 1.28715E-01 7.67531E-02 -7.67531E-02 -1.28715E-01 -1.04484E-01 -7.44778E-02 + -4.91574E-02 -3.21021E-02 -2.11540E-02 -1.34812E-02 -7.99845E-03 -4.35179E-03 + -2.16515E-03 -9.85839E-04 -4.11330E-04 -1.57447E-04 -5.53400E-05 -1.78739E-05 + -5.30808E-06 -1.45012E-06 -3.64585E-07 -8.43859E-08 + 6.81385E-08 2.94389E-07 1.17092E-06 4.28608E-06 1.44326E-05 4.46850E-05 + 1.27133E-04 3.32134E-04 7.96029E-04 1.74826E-03 3.51365E-03 6.45531E-03 + 1.08579E-02 1.69020E-02 2.50728E-02 3.67713E-02 5.27151E-02 6.76865E-02 + 6.83366E-02 3.25667E-02 -3.25667E-02 -6.83366E-02 -6.76865E-02 -5.27151E-02 + -3.67713E-02 -2.50728E-02 -1.69020E-02 -1.08579E-02 -6.45531E-03 -3.51365E-03 + -1.74826E-03 -7.96029E-04 -3.32134E-04 -1.27133E-04 -4.46850E-05 -1.44326E-05 + -4.28608E-06 -1.17092E-06 -2.94389E-07 -6.81385E-08 + 5.00405E-08 2.16197E-07 8.59917E-07 3.14767E-06 1.05992E-05 3.28164E-05 + 9.33658E-05 2.43917E-04 5.84598E-04 1.28390E-03 2.58014E-03 4.73760E-03 + 7.94660E-03 1.22361E-02 1.75787E-02 2.41406E-02 3.16437E-02 3.68409E-02 + 3.24735E-02 1.34324E-02 -1.34324E-02 -3.24735E-02 -3.68409E-02 -3.16437E-02 + -2.41406E-02 -1.75787E-02 -1.22361E-02 -7.94660E-03 -4.73760E-03 -2.58014E-03 + -1.28390E-03 -5.84598E-04 -2.43917E-04 -9.33658E-05 -3.28164E-05 -1.05992E-05 + -3.14767E-06 -8.59917E-07 -2.16197E-07 -5.00405E-08 + 3.30691E-08 1.42873E-07 5.68272E-07 2.08013E-06 7.00442E-06 2.16866E-05 + 6.17004E-05 1.61192E-04 3.86329E-04 8.48450E-04 1.70495E-03 3.12933E-03 + 5.23843E-03 8.00215E-03 1.12198E-02 1.45913E-02 1.75746E-02 1.86791E-02 + 1.52868E-02 6.04503E-03 -6.04503E-03 -1.52868E-02 -1.86791E-02 -1.75746E-02 + -1.45913E-02 -1.12198E-02 -8.00215E-03 -5.23843E-03 -3.12933E-03 -1.70495E-03 + -8.48450E-04 -3.86329E-04 -1.61192E-04 -6.17004E-05 -2.16866E-05 -7.00442E-06 + -2.08013E-06 -5.68272E-07 -1.42873E-07 -3.30691E-08 + 1.95116E-08 8.42988E-08 3.35295E-07 1.22733E-06 4.13279E-06 1.27956E-05 + 3.64048E-05 9.51072E-05 2.27944E-04 5.00605E-04 1.00592E-03 1.84591E-03 + 3.08659E-03 4.69420E-03 6.49071E-03 8.16455E-03 9.27767E-03 9.17328E-03 + 7.04777E-03 2.68974E-03 -2.68974E-03 -7.04777E-03 -9.17328E-03 -9.27767E-03 + -8.16455E-03 -6.49071E-03 -4.69420E-03 -3.08659E-03 -1.84591E-03 -1.00592E-03 + -5.00605E-04 -2.27944E-04 -9.51072E-05 -3.64048E-05 -1.27956E-05 -4.13279E-06 + -1.22733E-06 -3.35295E-07 -8.42988E-08 -1.95116E-08 + 1.02243E-08 4.41737E-08 1.75699E-07 6.43136E-07 2.16564E-06 6.70509E-06 + 1.90766E-05 4.98374E-05 1.19445E-04 2.62323E-04 5.27105E-04 9.67152E-04 + 1.61629E-03 2.45253E-03 3.36648E-03 4.15826E-03 4.56573E-03 4.30482E-03 + 3.15659E-03 1.17076E-03 -1.17076E-03 -3.15659E-03 -4.30482E-03 -4.56573E-03 + -4.15826E-03 -3.36648E-03 -2.45253E-03 -1.61629E-03 -9.67152E-04 -5.27105E-04 + -2.62323E-04 -1.19445E-04 -4.98374E-05 -1.90766E-05 -6.70509E-06 -2.16564E-06 + -6.43136E-07 -1.75699E-07 -4.41737E-08 -1.02243E-08 + 4.74209E-09 2.04879E-08 8.14899E-08 2.98289E-07 1.00443E-06 3.10985E-06 + 8.84780E-06 2.31148E-05 5.53993E-05 1.21666E-04 2.44471E-04 4.48542E-04 + 7.49405E-04 1.13594E-03 1.55393E-03 1.90279E-03 2.05381E-03 1.88815E-03 + 1.34806E-03 4.91384E-04 -4.91384E-04 -1.34806E-03 -1.88815E-03 -2.05381E-03 + -1.90279E-03 -1.55393E-03 -1.13594E-03 -7.49405E-04 -4.48542E-04 -2.44471E-04 + -1.21666E-04 -5.53993E-05 -2.31148E-05 -8.84780E-06 -3.10985E-06 -1.00443E-06 + -2.98289E-07 -8.14899E-08 -2.04879E-08 -4.74209E-09 + 1.94256E-09 8.39272E-09 3.33817E-08 1.22192E-07 4.11457E-07 1.27392E-06 + 3.62443E-06 9.46879E-06 2.26939E-05 4.98395E-05 1.00145E-04 1.83738E-04 + 3.06952E-04 4.65095E-04 6.35446E-04 7.75605E-04 8.31792E-04 7.57254E-04 + 5.34874E-04 1.93570E-04 -1.93570E-04 -5.34874E-04 -7.57254E-04 -8.31792E-04 + -7.75605E-04 -6.35446E-04 -4.65095E-04 -3.06952E-04 -1.83738E-04 -1.00145E-04 + -4.98395E-05 -2.26939E-05 -9.46879E-06 -3.62443E-06 -1.27392E-06 -4.11457E-07 + -1.22192E-07 -3.33817E-08 -8.39272E-09 -1.94256E-09 + 7.01914E-10 3.03258E-09 1.20620E-08 4.41521E-08 1.48674E-07 4.60313E-07 + 1.30963E-06 3.42140E-06 8.20009E-06 1.80088E-05 3.61860E-05 6.63905E-05 + 1.10909E-04 1.68033E-04 2.29503E-04 2.79884E-04 2.99643E-04 2.72071E-04 + 1.91608E-04 6.92045E-05 -6.92045E-05 -1.91608E-04 -2.72071E-04 -2.99643E-04 + -2.79884E-04 -2.29503E-04 -1.68033E-04 -1.10909E-04 -6.63905E-05 -3.61860E-05 + -1.80088E-05 -8.20009E-06 -3.42140E-06 -1.30963E-06 -4.60313E-07 -1.48674E-07 + -4.41521E-08 -1.20620E-08 -3.03258E-09 -7.01914E-10 + 2.23541E-10 9.65798E-10 3.84142E-09 1.40613E-08 4.73487E-08 1.46598E-07 + 4.17084E-07 1.08963E-06 2.61151E-06 5.73532E-06 1.15243E-05 2.11436E-05 + 3.53215E-05 5.35128E-05 7.30843E-05 8.91138E-05 9.53740E-05 8.65546E-05 + 6.09230E-05 2.19956E-05 -2.19956E-05 -6.09230E-05 -8.65546E-05 -9.53740E-05 + -8.91138E-05 -7.30843E-05 -5.35128E-05 -3.53215E-05 -2.11436E-05 -1.15243E-05 + -5.73532E-06 -2.61151E-06 -1.08963E-06 -4.17084E-07 -1.46598E-07 -4.73487E-08 + -1.40613E-08 -3.84142E-09 -9.65798E-10 -2.23541E-10 + 6.27176E-11 2.70968E-10 1.07776E-09 3.94509E-09 1.32843E-08 4.11300E-08 + 1.17019E-07 3.05710E-07 7.32697E-07 1.60912E-06 3.23330E-06 5.93213E-06 + 9.90993E-06 1.50137E-05 2.05046E-05 2.50013E-05 2.67565E-05 2.42807E-05 + 1.70891E-05 6.16953E-06 -6.16953E-06 -1.70891E-05 -2.42807E-05 -2.67565E-05 + -2.50013E-05 -2.05046E-05 -1.50137E-05 -9.90993E-06 -5.93213E-06 -3.23330E-06 + -1.60912E-06 -7.32697E-07 -3.05710E-07 -1.17019E-07 -4.11300E-08 -1.32843E-08 + -3.94509E-09 -1.07776E-09 -2.70968E-10 -6.27176E-11 + 1.54973E-11 6.69554E-11 2.66312E-10 9.74820E-10 3.28252E-09 1.01631E-08 + 2.89150E-08 7.55401E-08 1.81047E-07 3.97610E-07 7.98938E-07 1.46581E-06 + 2.44871E-06 3.70984E-06 5.06661E-06 6.17773E-06 6.61140E-06 5.99959E-06 + 4.22258E-06 1.52443E-06 -1.52443E-06 -4.22258E-06 -5.99959E-06 -6.61140E-06 + -6.17773E-06 -5.06661E-06 -3.70984E-06 -2.44871E-06 -1.46581E-06 -7.98938E-07 + -3.97610E-07 -1.81047E-07 -7.55401E-08 -2.89150E-08 -1.01631E-08 -3.28252E-09 + -9.74820E-10 -2.66312E-10 -6.69554E-11 -1.54973E-11 + 3.37199E-12 1.45685E-11 5.79456E-11 2.12106E-10 7.14227E-10 2.21134E-09 + 6.29146E-09 1.64364E-08 3.93931E-08 8.65139E-08 1.73837E-07 3.18939E-07 + 5.32804E-07 8.07206E-07 1.10242E-06 1.34418E-06 1.43854E-06 1.30542E-06 + 9.18769E-07 3.31694E-07 -3.31694E-07 -9.18769E-07 -1.30542E-06 -1.43854E-06 + -1.34418E-06 -1.10242E-06 -8.07206E-07 -5.32804E-07 -3.18939E-07 -1.73837E-07 + -8.65139E-08 -3.93931E-08 -1.64364E-08 -6.29146E-09 -2.21134E-09 -7.14227E-10 + -2.12106E-10 -5.79456E-11 -1.45685E-11 -3.37199E-12 + 6.46001E-13 2.79101E-12 1.11011E-11 4.06350E-11 1.36831E-10 4.23645E-10 + 1.20531E-09 3.14886E-09 7.54688E-09 1.65742E-08 3.33035E-08 6.11018E-08 + 1.02074E-07 1.54643E-07 2.11200E-07 2.57516E-07 2.75594E-07 2.50091E-07 + 1.76016E-07 6.35454E-08 -6.35454E-08 -1.76016E-07 -2.50091E-07 -2.75594E-07 + -2.57516E-07 -2.11200E-07 -1.54643E-07 -1.02074E-07 -6.11018E-08 -3.33035E-08 + -1.65742E-08 -7.54688E-09 -3.14886E-09 -1.20531E-09 -4.23645E-10 -1.36831E-10 + -4.06350E-11 -1.11011E-11 -2.79101E-12 -6.46001E-13 + 1.08961E-13 4.70761E-13 1.87243E-12 6.85393E-12 2.30793E-11 7.14564E-11 + 2.03300E-10 5.31120E-10 1.27294E-09 2.79558E-09 5.61731E-09 1.03061E-08 + 1.72168E-08 2.60838E-08 3.56232E-08 4.34354E-08 4.64845E-08 4.21829E-08 + 2.96888E-08 1.07182E-08 -1.07182E-08 -2.96888E-08 -4.21829E-08 -4.64845E-08 + -4.34354E-08 -3.56232E-08 -2.60838E-08 -1.72168E-08 -1.03061E-08 -5.61731E-09 + -2.79558E-09 -1.27294E-09 -5.31120E-10 -2.03300E-10 -7.14564E-11 -2.30793E-11 + -6.85393E-12 -1.87243E-12 -4.70761E-13 -1.08961E-13 + 1.61803E-14 6.99062E-14 2.78049E-13 1.01778E-12 3.42718E-12 1.06110E-11 + 3.01893E-11 7.88692E-11 1.89026E-10 4.15133E-10 8.34148E-10 1.53041E-09 + 2.55663E-09 3.87334E-09 5.28991E-09 6.44999E-09 6.90277E-09 6.26400E-09 + 4.40867E-09 1.59162E-09 -1.59162E-09 -4.40867E-09 -6.26400E-09 -6.90277E-09 + -6.44999E-09 -5.28991E-09 -3.87334E-09 -2.55663E-09 -1.53041E-09 -8.34148E-10 + -4.15133E-10 -1.89026E-10 -7.88692E-11 -3.01893E-11 -1.06110E-11 -3.42718E-12 + -1.01778E-12 -2.78049E-13 -6.99062E-14 -1.61803E-14 + 2.11529E-15 9.13898E-15 3.63499E-14 1.33057E-13 4.48043E-13 1.38720E-12 + 3.94671E-12 1.03107E-11 2.47118E-11 5.42712E-11 1.09050E-10 2.00074E-10 + 3.34234E-10 5.06370E-10 6.91561E-10 8.43220E-10 9.02413E-10 8.18905E-10 + 5.76354E-10 2.08075E-10 -2.08075E-10 -5.76354E-10 -8.18905E-10 -9.02413E-10 + -8.43220E-10 -6.91561E-10 -5.06370E-10 -3.34234E-10 -2.00074E-10 -1.09050E-10 + -5.42712E-11 -2.47118E-11 -1.03107E-11 -3.94671E-12 -1.38720E-12 -4.48043E-13 + -1.33057E-13 -3.63499E-14 -9.13898E-15 -2.11529E-15 + 2.43452E-16 1.05182E-15 4.18357E-15 1.53137E-14 5.15660E-14 1.59655E-13 + 4.54233E-13 1.18668E-12 2.84412E-12 6.24616E-12 1.25507E-11 2.30268E-11 + 3.84675E-11 5.82789E-11 7.95928E-11 9.70475E-11 1.03860E-10 9.42491E-11 + 6.63335E-11 2.39477E-11 -2.39477E-11 -6.63335E-11 -9.42491E-11 -1.03860E-10 + -9.70475E-11 -7.95928E-11 -5.82789E-11 -3.84675E-11 -2.30268E-11 -1.25507E-11 + -6.24616E-12 -2.84412E-12 -1.18668E-12 -4.54233E-13 -1.59655E-13 -5.15660E-14 + -1.53137E-14 -4.18357E-15 -1.05182E-15 -2.43452E-16 + 2.64116E-16 1.14110E-15 4.53867E-15 1.66135E-14 5.59429E-14 1.73206E-13 + 4.92788E-13 1.28740E-12 3.08552E-12 6.77633E-12 1.36160E-11 2.49813E-11 + 4.17326E-11 6.32256E-11 8.63486E-11 1.05285E-10 1.12676E-10 1.02249E-10 + 7.19639E-11 2.59804E-11 -2.59804E-11 -7.19639E-11 -1.02249E-10 -1.12676E-10 + -1.05285E-10 -8.63486E-11 -6.32256E-11 -4.17326E-11 -2.49813E-11 -1.36160E-11 + -6.77633E-12 -3.08552E-12 -1.28740E-12 -4.92788E-13 -1.73206E-13 -5.59429E-14 + -1.66135E-14 -4.53867E-15 -1.14110E-15 -2.64116E-16 + 2.29483E-15 9.91470E-15 3.94353E-14 1.44351E-13 4.86073E-13 1.50494E-12 + 4.28170E-12 1.11859E-11 2.68093E-11 5.88777E-11 1.18306E-10 2.17056E-10 + 3.62603E-10 5.49350E-10 7.50260E-10 9.14793E-10 9.79010E-10 8.88414E-10 + 6.25275E-10 2.25737E-10 -2.25737E-10 -6.25275E-10 -8.88414E-10 -9.79010E-10 + -9.14793E-10 -7.50260E-10 -5.49350E-10 -3.62603E-10 -2.17056E-10 -1.18306E-10 + -5.88777E-11 -2.68093E-11 -1.11859E-11 -4.28170E-12 -1.50494E-12 -4.86073E-13 + -1.44351E-13 -3.94353E-14 -9.91470E-15 -2.29483E-15 + 1.75537E-14 7.58398E-14 3.01650E-13 1.10417E-12 3.71808E-12 1.15117E-11 + 3.27517E-11 8.55636E-11 2.05071E-10 4.50369E-10 9.04951E-10 1.66031E-09 + 2.77364E-09 4.20211E-09 5.73891E-09 6.99746E-09 7.48867E-09 6.79569E-09 + 4.78287E-09 1.72671E-09 -1.72671E-09 -4.78287E-09 -6.79569E-09 -7.48867E-09 + -6.99746E-09 -5.73891E-09 -4.20211E-09 -2.77364E-09 -1.66031E-09 -9.04951E-10 + -4.50369E-10 -2.05071E-10 -8.55636E-11 -3.27517E-11 -1.15117E-11 -3.71808E-12 + -1.10417E-12 -3.01650E-13 -7.58398E-14 -1.75537E-14 + 1.18210E-13 5.10719E-13 2.03136E-12 7.43569E-12 2.50382E-11 7.75216E-11 + 2.20556E-10 5.76201E-10 1.38098E-09 3.03287E-09 6.09410E-09 1.11809E-08 + 1.86782E-08 2.82978E-08 3.86469E-08 4.71222E-08 5.04301E-08 4.57634E-08 + 3.22087E-08 1.16280E-08 -1.16280E-08 -3.22087E-08 -4.57634E-08 -5.04301E-08 + -4.71222E-08 -3.86469E-08 -2.82978E-08 -1.86782E-08 -1.11809E-08 -6.09410E-09 + -3.03287E-09 -1.38098E-09 -5.76201E-10 -2.20556E-10 -7.75216E-11 -2.50382E-11 + -7.43569E-12 -2.03136E-12 -5.10719E-13 -1.18210E-13 + 7.00833E-13 3.02791E-12 1.20434E-11 4.40841E-11 1.48445E-10 4.59604E-10 + 1.30762E-09 3.41614E-09 8.18746E-09 1.79810E-08 3.61302E-08 6.62882E-08 + 1.10738E-07 1.67770E-07 2.29127E-07 2.79374E-07 2.98986E-07 2.71318E-07 + 1.90957E-07 6.89391E-08 -6.89391E-08 -1.90957E-07 -2.71318E-07 -2.98986E-07 + -2.79374E-07 -2.29127E-07 -1.67770E-07 -1.10738E-07 -6.62882E-08 -3.61302E-08 + -1.79810E-08 -8.18746E-09 -3.41614E-09 -1.30762E-09 -4.59604E-10 -1.48445E-10 + -4.40841E-11 -1.20434E-11 -3.02791E-12 -7.00833E-13 + 3.65820E-12 1.58051E-11 6.28640E-11 2.30110E-10 7.74850E-10 2.39904E-09 + 6.82548E-09 1.78315E-08 4.27368E-08 9.38572E-08 1.88592E-07 3.46010E-07 + 5.78028E-07 8.75722E-07 1.19599E-06 1.45827E-06 1.56064E-06 1.41622E-06 + 9.96754E-07 3.59848E-07 -3.59848E-07 -9.96754E-07 -1.41622E-06 -1.56064E-06 + -1.45827E-06 -1.19599E-06 -8.75722E-07 -5.78028E-07 -3.46010E-07 -1.88592E-07 + -9.38572E-08 -4.27368E-08 -1.78315E-08 -6.82548E-09 -2.39904E-09 -7.74850E-10 + -2.30110E-10 -6.28640E-11 -1.58051E-11 -3.65820E-12 + 1.68127E-11 7.26386E-11 2.88917E-10 1.05756E-09 3.56114E-09 1.10257E-08 + 3.13693E-08 8.19519E-08 1.96414E-07 4.31359E-07 8.66752E-07 1.59023E-06 + 2.65656E-06 4.02473E-06 5.49667E-06 6.70209E-06 7.17257E-06 6.50883E-06 + 4.58099E-06 1.65383E-06 -1.65383E-06 -4.58099E-06 -6.50883E-06 -7.17257E-06 + -6.70209E-06 -5.49667E-06 -4.02473E-06 -2.65656E-06 -1.59023E-06 -8.66752E-07 + -4.31359E-07 -1.96414E-07 -8.19519E-08 -3.13693E-08 -1.10257E-08 -3.56114E-09 + -1.05756E-09 -2.88917E-10 -7.26386E-11 -1.68127E-11 + 6.80411E-11 2.93968E-10 1.16925E-09 4.27995E-09 1.44119E-08 4.46211E-08 + 1.26951E-07 3.31659E-07 7.94888E-07 1.74571E-06 3.50774E-06 6.43565E-06 + 1.07511E-05 1.62881E-05 2.22450E-05 2.71234E-05 2.90274E-05 2.63413E-05 + 1.85393E-05 6.69307E-06 -6.69307E-06 -1.85393E-05 -2.63413E-05 -2.90274E-05 + -2.71234E-05 -2.22450E-05 -1.62881E-05 -1.07511E-05 -6.43565E-06 -3.50774E-06 + -1.74571E-06 -7.94888E-07 -3.31659E-07 -1.26951E-07 -4.46211E-08 -1.44119E-08 + -4.27995E-09 -1.16925E-09 -2.93968E-10 -6.80411E-11 + 2.42515E-10 1.04777E-09 4.16748E-09 1.52548E-08 5.13676E-08 1.59041E-07 + 4.52486E-07 1.18211E-06 2.83318E-06 6.22213E-06 1.25025E-05 2.29383E-05 + 3.83196E-05 5.80548E-05 7.92869E-05 9.66751E-05 1.03463E-04 9.38901E-05 + 6.60821E-05 2.38572E-05 -2.38572E-05 -6.60821E-05 -9.38901E-05 -1.03463E-04 + -9.66751E-05 -7.92869E-05 -5.80548E-05 -3.83196E-05 -2.29383E-05 -1.25025E-05 + -6.22213E-06 -2.83318E-06 -1.18211E-06 -4.52486E-07 -1.59041E-07 -5.13676E-08 + -1.52548E-08 -4.16748E-09 -1.04777E-09 -2.42515E-10 + 7.61492E-10 3.28999E-09 1.30858E-08 4.78997E-08 1.61293E-07 4.99384E-07 + 1.42079E-06 3.71181E-06 8.89611E-06 1.95373E-05 3.92574E-05 7.20256E-05 + 1.20323E-04 1.82292E-04 2.48964E-04 3.03575E-04 3.24914E-04 2.94887E-04 + 2.07576E-04 7.49468E-05 -7.49468E-05 -2.07576E-04 -2.94887E-04 -3.24914E-04 + -3.03575E-04 -2.48964E-04 -1.82292E-04 -1.20323E-04 -7.20256E-05 -3.92574E-05 + -1.95373E-05 -8.89611E-06 -3.71181E-06 -1.42079E-06 -4.99384E-07 -1.61293E-07 + -4.78997E-08 -1.30858E-08 -3.28999E-09 -7.61492E-10 + 2.10744E-09 9.10509E-09 3.62151E-08 1.32563E-07 4.46381E-07 1.38205E-06 + 3.93207E-06 1.02725E-05 2.46201E-05 5.40699E-05 1.08646E-04 1.99332E-04 + 3.32997E-04 5.04512E-04 6.89090E-04 8.40422E-04 8.99882E-04 8.17259E-04 + 5.75708E-04 2.07968E-04 -2.07968E-04 -5.75708E-04 -8.17259E-04 -8.99882E-04 + -8.40422E-04 -6.89090E-04 -5.04512E-04 -3.32997E-04 -1.99332E-04 -1.08646E-04 + -5.40699E-05 -2.46201E-05 -1.02725E-05 -3.93207E-06 -1.38205E-06 -4.46381E-07 + -1.32563E-07 -3.62151E-08 -9.10509E-09 -2.10744E-09 + 5.14459E-09 2.22269E-08 8.84068E-08 3.23608E-07 1.08969E-06 3.37381E-06 + 9.59880E-06 2.50768E-05 6.01016E-05 1.31993E-04 2.65221E-04 4.86604E-04 + 8.12924E-04 1.23176E-03 1.68298E-03 2.05441E-03 2.20375E-03 2.00704E-03 + 1.41829E-03 5.13444E-04 -5.13444E-04 -1.41829E-03 -2.00704E-03 -2.20375E-03 + -2.05441E-03 -1.68298E-03 -1.23176E-03 -8.12924E-04 -4.86604E-04 -2.65221E-04 + -1.31993E-04 -6.01016E-05 -2.50768E-05 -9.59880E-06 -3.37381E-06 -1.08969E-06 + -3.23608E-07 -8.84068E-08 -2.22269E-08 -5.14459E-09 + 1.10922E-08 4.79232E-08 1.90612E-07 6.97725E-07 2.34945E-06 7.27421E-06 + 2.06958E-05 5.40676E-05 1.29584E-04 2.84588E-04 5.71841E-04 1.04918E-03 + 1.75293E-03 2.65706E-03 3.63481E-03 4.45097E-03 4.80508E-03 4.41958E-03 + 3.15766E-03 1.15168E-03 -1.15168E-03 -3.15766E-03 -4.41958E-03 -4.80508E-03 + -4.45097E-03 -3.63481E-03 -2.65706E-03 -1.75293E-03 -1.04918E-03 -5.71841E-04 + -2.84588E-04 -1.29584E-04 -5.40676E-05 -2.06958E-05 -7.27421E-06 -2.34945E-06 + -6.97725E-07 -1.90612E-07 -4.79232E-08 -1.10922E-08 + 2.11677E-08 9.14541E-08 3.63755E-07 1.33150E-06 4.48358E-06 1.38817E-05 + 3.94948E-05 1.03180E-04 2.47292E-04 5.43095E-04 1.09128E-03 2.00235E-03 + 3.34644E-03 5.07865E-03 6.97492E-03 8.62786E-03 9.50349E-03 9.00803E-03 + 6.64643E-03 2.47577E-03 -2.47577E-03 -6.64643E-03 -9.00803E-03 -9.50349E-03 + -8.62786E-03 -6.97492E-03 -5.07865E-03 -3.34644E-03 -2.00235E-03 -1.09128E-03 + -5.43095E-04 -2.47292E-04 -1.03180E-04 -3.94948E-05 -1.38817E-05 -4.48358E-06 + -1.33150E-06 -3.63755E-07 -9.14541E-08 -2.11677E-08 + 3.58760E-08 1.55000E-07 6.16507E-07 2.25669E-06 7.59896E-06 2.35274E-05 + 6.69375E-05 1.74874E-04 4.19120E-04 9.20463E-04 1.84961E-03 3.39437E-03 + 5.67791E-03 8.64772E-03 1.20125E-02 1.52843E-02 1.77448E-02 1.80662E-02 + 1.42771E-02 5.54282E-03 -5.54282E-03 -1.42771E-02 -1.80662E-02 -1.77448E-02 + -1.52843E-02 -1.20125E-02 -8.64772E-03 -5.67791E-03 -3.39437E-03 -1.84961E-03 + -9.20463E-04 -4.19120E-04 -1.74874E-04 -6.69375E-05 -2.35274E-05 -7.59896E-06 + -2.25669E-06 -6.16507E-07 -1.55000E-07 -3.58760E-08 + 5.42880E-08 2.34548E-07 9.32906E-07 3.41485E-06 1.14988E-05 3.56019E-05 + 1.01291E-04 2.64621E-04 6.34218E-04 1.39287E-03 2.79907E-03 5.13886E-03 + 8.61338E-03 1.32246E-02 1.88344E-02 2.53894E-02 3.24156E-02 3.68428E-02 + 3.20593E-02 1.32335E-02 -1.32335E-02 -3.20593E-02 -3.68428E-02 -3.24156E-02 + -2.53894E-02 -1.88344E-02 -1.32246E-02 -8.61338E-03 -5.13886E-03 -2.79907E-03 + -1.39287E-03 -6.34218E-04 -2.64621E-04 -1.01291E-04 -3.56019E-05 -1.14988E-05 + -3.41485E-06 -9.32906E-07 -2.34548E-07 -5.42880E-08 + 7.39221E-08 3.19377E-07 1.27031E-06 4.64988E-06 1.56576E-05 4.84779E-05 + 1.37924E-04 3.60326E-04 8.63596E-04 1.89665E-03 3.81182E-03 7.00245E-03 + 1.17726E-02 1.82918E-02 2.69908E-02 3.91886E-02 5.55563E-02 7.12417E-02 + 7.38391E-02 3.64853E-02 -3.64853E-02 -7.38391E-02 -7.12417E-02 -5.55563E-02 + -3.91886E-02 -2.69908E-02 -1.82918E-02 -1.17726E-02 -7.00245E-03 -3.81182E-03 + -1.89665E-03 -8.63596E-04 -3.60326E-04 -1.37924E-04 -4.84779E-05 -1.56576E-05 + -4.64988E-06 -1.27031E-06 -3.19377E-07 -7.39221E-08 + 9.15485E-08 3.95531E-07 1.57321E-06 5.75863E-06 1.93911E-05 6.00372E-05 + 1.70812E-04 4.46244E-04 1.06952E-03 2.34892E-03 4.72114E-03 8.67699E-03 + 1.46222E-02 2.29284E-02 3.47284E-02 5.30065E-02 8.01936E-02 1.14678E-01 + 1.51069E-01 1.04880E-01 -1.04880E-01 -1.51069E-01 -1.14678E-01 -8.01936E-02 + -5.30065E-02 -3.47284E-02 -2.29284E-02 -1.46222E-02 -8.67699E-03 -4.72114E-03 + -2.34892E-03 -1.06952E-03 -4.46244E-04 -1.70812E-04 -6.00372E-05 -1.93911E-05 + -5.75863E-06 -1.57321E-06 -3.95531E-07 -9.15485E-08 + 1.04443E-07 4.51238E-07 1.79478E-06 6.56969E-06 2.21222E-05 6.84931E-05 + 1.94869E-04 5.09094E-04 1.22015E-03 2.67975E-03 5.38606E-03 9.89889E-03 + 1.66802E-02 2.61495E-02 3.95841E-02 6.03502E-02 9.10564E-02 1.28148E-01 + 1.61137E-01 1.04367E-01 -1.04367E-01 -1.61137E-01 -1.28148E-01 -9.10564E-02 + -6.03502E-02 -3.95841E-02 -2.61495E-02 -1.66802E-02 -9.89889E-03 -5.38606E-03 + -2.67975E-03 -1.22015E-03 -5.09094E-04 -1.94869E-04 -6.84931E-05 -2.21222E-05 + -6.56969E-06 -1.79478E-06 -4.51238E-07 -1.04443E-07 + 1.11121E-07 4.80091E-07 1.90954E-06 6.98977E-06 2.35367E-05 7.28727E-05 + 2.07329E-04 5.41646E-04 1.29817E-03 2.85108E-03 5.73015E-03 1.05283E-02 + 1.77158E-02 2.76220E-02 4.11733E-02 6.09691E-02 8.84361E-02 1.14061E-01 + 1.13062E-01 5.23166E-02 -5.23166E-02 -1.13062E-01 -1.14061E-01 -8.84361E-02 + -6.09691E-02 -4.11733E-02 -2.76220E-02 -1.77158E-02 -1.05283E-02 -5.73015E-03 + -2.85108E-03 -1.29817E-03 -5.41646E-04 -2.07329E-04 -7.28727E-05 -2.35367E-05 + -6.98977E-06 -1.90954E-06 -4.80091E-07 -1.11121E-07 + 1.11121E-07 4.80091E-07 1.90954E-06 6.98977E-06 2.35367E-05 7.28727E-05 + 2.07329E-04 5.41646E-04 1.29817E-03 2.85108E-03 5.73015E-03 1.05283E-02 + 1.77158E-02 2.76220E-02 4.11733E-02 6.09691E-02 8.84361E-02 1.14061E-01 + 1.13062E-01 5.23166E-02 -5.23166E-02 -1.13062E-01 -1.14061E-01 -8.84361E-02 + -6.09691E-02 -4.11733E-02 -2.76220E-02 -1.77158E-02 -1.05283E-02 -5.73015E-03 + -2.85108E-03 -1.29817E-03 -5.41646E-04 -2.07329E-04 -7.28727E-05 -2.35367E-05 + -6.98977E-06 -1.90954E-06 -4.80091E-07 -1.11121E-07 + 1.04443E-07 4.51238E-07 1.79478E-06 6.56969E-06 2.21222E-05 6.84931E-05 + 1.94869E-04 5.09094E-04 1.22015E-03 2.67975E-03 5.38606E-03 9.89889E-03 + 1.66802E-02 2.61495E-02 3.95841E-02 6.03502E-02 9.10564E-02 1.28148E-01 + 1.61137E-01 1.04367E-01 -1.04367E-01 -1.61137E-01 -1.28148E-01 -9.10564E-02 + -6.03502E-02 -3.95841E-02 -2.61495E-02 -1.66802E-02 -9.89889E-03 -5.38606E-03 + -2.67975E-03 -1.22015E-03 -5.09094E-04 -1.94869E-04 -6.84931E-05 -2.21222E-05 + -6.56969E-06 -1.79478E-06 -4.51238E-07 -1.04443E-07 + 9.15485E-08 3.95531E-07 1.57321E-06 5.75863E-06 1.93911E-05 6.00372E-05 + 1.70812E-04 4.46244E-04 1.06952E-03 2.34892E-03 4.72114E-03 8.67699E-03 + 1.46222E-02 2.29284E-02 3.47284E-02 5.30065E-02 8.01936E-02 1.14678E-01 + 1.51069E-01 1.04880E-01 -1.04880E-01 -1.51069E-01 -1.14678E-01 -8.01936E-02 + -5.30065E-02 -3.47284E-02 -2.29284E-02 -1.46222E-02 -8.67699E-03 -4.72114E-03 + -2.34892E-03 -1.06952E-03 -4.46244E-04 -1.70812E-04 -6.00372E-05 -1.93911E-05 + -5.75863E-06 -1.57321E-06 -3.95531E-07 -9.15485E-08 + 7.39221E-08 3.19377E-07 1.27031E-06 4.64988E-06 1.56576E-05 4.84779E-05 + 1.37924E-04 3.60326E-04 8.63596E-04 1.89665E-03 3.81182E-03 7.00245E-03 + 1.17726E-02 1.82918E-02 2.69908E-02 3.91886E-02 5.55563E-02 7.12417E-02 + 7.38391E-02 3.64853E-02 -3.64853E-02 -7.38391E-02 -7.12417E-02 -5.55563E-02 + -3.91886E-02 -2.69908E-02 -1.82918E-02 -1.17726E-02 -7.00245E-03 -3.81182E-03 + -1.89665E-03 -8.63596E-04 -3.60326E-04 -1.37924E-04 -4.84779E-05 -1.56576E-05 + -4.64988E-06 -1.27031E-06 -3.19377E-07 -7.39221E-08 + 5.42880E-08 2.34548E-07 9.32906E-07 3.41485E-06 1.14988E-05 3.56019E-05 + 1.01291E-04 2.64621E-04 6.34218E-04 1.39287E-03 2.79907E-03 5.13886E-03 + 8.61338E-03 1.32246E-02 1.88344E-02 2.53894E-02 3.24156E-02 3.68428E-02 + 3.20593E-02 1.32335E-02 -1.32335E-02 -3.20593E-02 -3.68428E-02 -3.24156E-02 + -2.53894E-02 -1.88344E-02 -1.32246E-02 -8.61338E-03 -5.13886E-03 -2.79907E-03 + -1.39287E-03 -6.34218E-04 -2.64621E-04 -1.01291E-04 -3.56019E-05 -1.14988E-05 + -3.41485E-06 -9.32906E-07 -2.34548E-07 -5.42880E-08 + 3.58760E-08 1.55000E-07 6.16507E-07 2.25669E-06 7.59896E-06 2.35274E-05 + 6.69375E-05 1.74874E-04 4.19120E-04 9.20463E-04 1.84961E-03 3.39437E-03 + 5.67791E-03 8.64772E-03 1.20125E-02 1.52843E-02 1.77448E-02 1.80662E-02 + 1.42771E-02 5.54282E-03 -5.54282E-03 -1.42771E-02 -1.80662E-02 -1.77448E-02 + -1.52843E-02 -1.20125E-02 -8.64772E-03 -5.67791E-03 -3.39437E-03 -1.84961E-03 + -9.20463E-04 -4.19120E-04 -1.74874E-04 -6.69375E-05 -2.35274E-05 -7.59896E-06 + -2.25669E-06 -6.16507E-07 -1.55000E-07 -3.58760E-08 + 2.11677E-08 9.14541E-08 3.63755E-07 1.33150E-06 4.48358E-06 1.38817E-05 + 3.94948E-05 1.03180E-04 2.47292E-04 5.43095E-04 1.09128E-03 2.00235E-03 + 3.34644E-03 5.07865E-03 6.97492E-03 8.62786E-03 9.50349E-03 9.00803E-03 + 6.64643E-03 2.47577E-03 -2.47577E-03 -6.64643E-03 -9.00803E-03 -9.50349E-03 + -8.62786E-03 -6.97492E-03 -5.07865E-03 -3.34644E-03 -2.00235E-03 -1.09128E-03 + -5.43095E-04 -2.47292E-04 -1.03180E-04 -3.94948E-05 -1.38817E-05 -4.48358E-06 + -1.33150E-06 -3.63755E-07 -9.14541E-08 -2.11677E-08 + 1.10922E-08 4.79232E-08 1.90612E-07 6.97725E-07 2.34945E-06 7.27421E-06 + 2.06958E-05 5.40676E-05 1.29584E-04 2.84588E-04 5.71841E-04 1.04918E-03 + 1.75293E-03 2.65706E-03 3.63481E-03 4.45097E-03 4.80508E-03 4.41958E-03 + 3.15766E-03 1.15168E-03 -1.15168E-03 -3.15766E-03 -4.41958E-03 -4.80508E-03 + -4.45097E-03 -3.63481E-03 -2.65706E-03 -1.75293E-03 -1.04918E-03 -5.71841E-04 + -2.84588E-04 -1.29584E-04 -5.40676E-05 -2.06958E-05 -7.27421E-06 -2.34945E-06 + -6.97725E-07 -1.90612E-07 -4.79232E-08 -1.10922E-08 + 5.14459E-09 2.22269E-08 8.84068E-08 3.23608E-07 1.08969E-06 3.37381E-06 + 9.59880E-06 2.50768E-05 6.01016E-05 1.31993E-04 2.65221E-04 4.86604E-04 + 8.12924E-04 1.23176E-03 1.68298E-03 2.05441E-03 2.20375E-03 2.00704E-03 + 1.41829E-03 5.13444E-04 -5.13444E-04 -1.41829E-03 -2.00704E-03 -2.20375E-03 + -2.05441E-03 -1.68298E-03 -1.23176E-03 -8.12924E-04 -4.86604E-04 -2.65221E-04 + -1.31993E-04 -6.01016E-05 -2.50768E-05 -9.59880E-06 -3.37381E-06 -1.08969E-06 + -3.23608E-07 -8.84068E-08 -2.22269E-08 -5.14459E-09 + 2.10744E-09 9.10509E-09 3.62151E-08 1.32563E-07 4.46381E-07 1.38205E-06 + 3.93207E-06 1.02725E-05 2.46201E-05 5.40699E-05 1.08646E-04 1.99332E-04 + 3.32997E-04 5.04512E-04 6.89090E-04 8.40422E-04 8.99882E-04 8.17259E-04 + 5.75708E-04 2.07968E-04 -2.07968E-04 -5.75708E-04 -8.17259E-04 -8.99882E-04 + -8.40422E-04 -6.89090E-04 -5.04512E-04 -3.32997E-04 -1.99332E-04 -1.08646E-04 + -5.40699E-05 -2.46201E-05 -1.02725E-05 -3.93207E-06 -1.38205E-06 -4.46381E-07 + -1.32563E-07 -3.62151E-08 -9.10509E-09 -2.10744E-09 + 7.61492E-10 3.28999E-09 1.30858E-08 4.78997E-08 1.61293E-07 4.99384E-07 + 1.42079E-06 3.71181E-06 8.89611E-06 1.95373E-05 3.92574E-05 7.20256E-05 + 1.20323E-04 1.82292E-04 2.48964E-04 3.03575E-04 3.24914E-04 2.94887E-04 + 2.07576E-04 7.49468E-05 -7.49468E-05 -2.07576E-04 -2.94887E-04 -3.24914E-04 + -3.03575E-04 -2.48964E-04 -1.82292E-04 -1.20323E-04 -7.20256E-05 -3.92574E-05 + -1.95373E-05 -8.89611E-06 -3.71181E-06 -1.42079E-06 -4.99384E-07 -1.61293E-07 + -4.78997E-08 -1.30858E-08 -3.28999E-09 -7.61492E-10 + 2.42515E-10 1.04777E-09 4.16748E-09 1.52548E-08 5.13676E-08 1.59041E-07 + 4.52486E-07 1.18211E-06 2.83318E-06 6.22213E-06 1.25025E-05 2.29383E-05 + 3.83196E-05 5.80548E-05 7.92869E-05 9.66751E-05 1.03463E-04 9.38901E-05 + 6.60821E-05 2.38572E-05 -2.38572E-05 -6.60821E-05 -9.38901E-05 -1.03463E-04 + -9.66751E-05 -7.92869E-05 -5.80548E-05 -3.83196E-05 -2.29383E-05 -1.25025E-05 + -6.22213E-06 -2.83318E-06 -1.18211E-06 -4.52486E-07 -1.59041E-07 -5.13676E-08 + -1.52548E-08 -4.16748E-09 -1.04777E-09 -2.42515E-10 + 6.80411E-11 2.93968E-10 1.16925E-09 4.27995E-09 1.44119E-08 4.46211E-08 + 1.26951E-07 3.31659E-07 7.94888E-07 1.74571E-06 3.50774E-06 6.43565E-06 + 1.07511E-05 1.62881E-05 2.22450E-05 2.71234E-05 2.90274E-05 2.63413E-05 + 1.85393E-05 6.69307E-06 -6.69307E-06 -1.85393E-05 -2.63413E-05 -2.90274E-05 + -2.71234E-05 -2.22450E-05 -1.62881E-05 -1.07511E-05 -6.43565E-06 -3.50774E-06 + -1.74571E-06 -7.94888E-07 -3.31659E-07 -1.26951E-07 -4.46211E-08 -1.44119E-08 + -4.27995E-09 -1.16925E-09 -2.93968E-10 -6.80411E-11 + 1.68127E-11 7.26386E-11 2.88917E-10 1.05756E-09 3.56114E-09 1.10257E-08 + 3.13693E-08 8.19519E-08 1.96414E-07 4.31359E-07 8.66752E-07 1.59023E-06 + 2.65656E-06 4.02473E-06 5.49667E-06 6.70209E-06 7.17257E-06 6.50883E-06 + 4.58099E-06 1.65383E-06 -1.65383E-06 -4.58099E-06 -6.50883E-06 -7.17257E-06 + -6.70209E-06 -5.49667E-06 -4.02473E-06 -2.65656E-06 -1.59023E-06 -8.66752E-07 + -4.31359E-07 -1.96414E-07 -8.19519E-08 -3.13693E-08 -1.10257E-08 -3.56114E-09 + -1.05756E-09 -2.88917E-10 -7.26386E-11 -1.68127E-11 + 3.65820E-12 1.58051E-11 6.28640E-11 2.30110E-10 7.74850E-10 2.39904E-09 + 6.82548E-09 1.78315E-08 4.27368E-08 9.38572E-08 1.88592E-07 3.46010E-07 + 5.78028E-07 8.75722E-07 1.19599E-06 1.45827E-06 1.56064E-06 1.41622E-06 + 9.96754E-07 3.59848E-07 -3.59848E-07 -9.96754E-07 -1.41622E-06 -1.56064E-06 + -1.45827E-06 -1.19599E-06 -8.75722E-07 -5.78028E-07 -3.46010E-07 -1.88592E-07 + -9.38572E-08 -4.27368E-08 -1.78315E-08 -6.82548E-09 -2.39904E-09 -7.74850E-10 + -2.30110E-10 -6.28640E-11 -1.58051E-11 -3.65820E-12 + 7.00833E-13 3.02791E-12 1.20434E-11 4.40841E-11 1.48445E-10 4.59604E-10 + 1.30762E-09 3.41614E-09 8.18746E-09 1.79810E-08 3.61302E-08 6.62882E-08 + 1.10738E-07 1.67770E-07 2.29127E-07 2.79374E-07 2.98986E-07 2.71318E-07 + 1.90957E-07 6.89391E-08 -6.89391E-08 -1.90957E-07 -2.71318E-07 -2.98986E-07 + -2.79374E-07 -2.29127E-07 -1.67770E-07 -1.10738E-07 -6.62882E-08 -3.61302E-08 + -1.79810E-08 -8.18746E-09 -3.41614E-09 -1.30762E-09 -4.59604E-10 -1.48445E-10 + -4.40841E-11 -1.20434E-11 -3.02791E-12 -7.00833E-13 + 1.18210E-13 5.10719E-13 2.03136E-12 7.43569E-12 2.50382E-11 7.75216E-11 + 2.20556E-10 5.76201E-10 1.38098E-09 3.03287E-09 6.09410E-09 1.11809E-08 + 1.86782E-08 2.82978E-08 3.86469E-08 4.71222E-08 5.04301E-08 4.57634E-08 + 3.22087E-08 1.16280E-08 -1.16280E-08 -3.22087E-08 -4.57634E-08 -5.04301E-08 + -4.71222E-08 -3.86469E-08 -2.82978E-08 -1.86782E-08 -1.11809E-08 -6.09410E-09 + -3.03287E-09 -1.38098E-09 -5.76201E-10 -2.20556E-10 -7.75216E-11 -2.50382E-11 + -7.43569E-12 -2.03136E-12 -5.10719E-13 -1.18210E-13 + 1.75537E-14 7.58398E-14 3.01650E-13 1.10417E-12 3.71808E-12 1.15117E-11 + 3.27517E-11 8.55636E-11 2.05071E-10 4.50369E-10 9.04951E-10 1.66031E-09 + 2.77364E-09 4.20211E-09 5.73891E-09 6.99746E-09 7.48867E-09 6.79569E-09 + 4.78287E-09 1.72671E-09 -1.72671E-09 -4.78287E-09 -6.79569E-09 -7.48867E-09 + -6.99746E-09 -5.73891E-09 -4.20211E-09 -2.77364E-09 -1.66031E-09 -9.04951E-10 + -4.50369E-10 -2.05071E-10 -8.55636E-11 -3.27517E-11 -1.15117E-11 -3.71808E-12 + -1.10417E-12 -3.01650E-13 -7.58398E-14 -1.75537E-14 + 2.29483E-15 9.91470E-15 3.94353E-14 1.44351E-13 4.86073E-13 1.50494E-12 + 4.28170E-12 1.11859E-11 2.68093E-11 5.88777E-11 1.18306E-10 2.17056E-10 + 3.62603E-10 5.49350E-10 7.50260E-10 9.14793E-10 9.79010E-10 8.88414E-10 + 6.25275E-10 2.25737E-10 -2.25737E-10 -6.25275E-10 -8.88414E-10 -9.79010E-10 + -9.14793E-10 -7.50260E-10 -5.49350E-10 -3.62603E-10 -2.17056E-10 -1.18306E-10 + -5.88777E-11 -2.68093E-11 -1.11859E-11 -4.28170E-12 -1.50494E-12 -4.86073E-13 + -1.44351E-13 -3.94353E-14 -9.91470E-15 -2.29483E-15 + 2.64116E-16 1.14110E-15 4.53867E-15 1.66135E-14 5.59429E-14 1.73206E-13 + 4.92788E-13 1.28740E-12 3.08552E-12 6.77633E-12 1.36160E-11 2.49813E-11 + 4.17326E-11 6.32256E-11 8.63486E-11 1.05285E-10 1.12676E-10 1.02249E-10 + 7.19639E-11 2.59804E-11 -2.59804E-11 -7.19639E-11 -1.02249E-10 -1.12676E-10 + -1.05285E-10 -8.63486E-11 -6.32256E-11 -4.17326E-11 -2.49813E-11 -1.36160E-11 + -6.77633E-12 -3.08552E-12 -1.28740E-12 -4.92788E-13 -1.73206E-13 -5.59429E-14 + -1.66135E-14 -4.53867E-15 -1.14110E-15 -2.64116E-16 + 2.36163E-16 1.02033E-15 4.05832E-15 1.48552E-14 5.00221E-14 1.54875E-13 + 4.40633E-13 1.15115E-12 2.75897E-12 6.05915E-12 1.21750E-11 2.23374E-11 + 3.73158E-11 5.65341E-11 7.72098E-11 9.41420E-11 1.00751E-10 9.14274E-11 + 6.43475E-11 2.32307E-11 -2.32307E-11 -6.43475E-11 -9.14274E-11 -1.00751E-10 + -9.41420E-11 -7.72098E-11 -5.65341E-11 -3.73158E-11 -2.23374E-11 -1.21750E-11 + -6.05915E-12 -2.75897E-12 -1.15115E-12 -4.40633E-13 -1.54875E-13 -5.00221E-14 + -1.48552E-14 -4.05832E-15 -1.02033E-15 -2.36163E-16 + 2.05196E-15 8.86537E-15 3.52616E-14 1.29073E-13 4.34629E-13 1.34567E-12 + 3.82855E-12 1.00020E-11 2.39719E-11 5.26463E-11 1.05785E-10 1.94084E-10 + 3.24227E-10 4.91209E-10 6.70856E-10 8.17975E-10 8.75395E-10 7.94388E-10 + 5.59098E-10 2.01846E-10 -2.01846E-10 -5.59098E-10 -7.94388E-10 -8.75395E-10 + -8.17975E-10 -6.70856E-10 -4.91209E-10 -3.24227E-10 -1.94084E-10 -1.05785E-10 + -5.26463E-11 -2.39719E-11 -1.00020E-11 -3.82855E-12 -1.34567E-12 -4.34629E-13 + -1.29073E-13 -3.52616E-14 -8.86537E-15 -2.05196E-15 + 1.56959E-14 6.78133E-14 2.69724E-13 9.87310E-13 3.32458E-12 1.02933E-11 + 2.92854E-11 7.65079E-11 1.83367E-10 4.02704E-10 8.09175E-10 1.48459E-09 + 2.48009E-09 3.75737E-09 5.13153E-09 6.25688E-09 6.69610E-09 6.07646E-09 + 4.27667E-09 1.54396E-09 -1.54396E-09 -4.27667E-09 -6.07646E-09 -6.69610E-09 + -6.25688E-09 -5.13153E-09 -3.75737E-09 -2.48009E-09 -1.48459E-09 -8.09175E-10 + -4.02704E-10 -1.83367E-10 -7.65079E-11 -2.92854E-11 -1.02933E-11 -3.32458E-12 + -9.87310E-13 -2.69724E-13 -6.78133E-14 -1.56959E-14 + 1.05699E-13 4.56667E-13 1.81637E-12 6.64872E-12 2.23883E-11 6.93171E-11 + 1.97213E-10 5.15218E-10 1.23482E-09 2.71188E-09 5.44913E-09 9.99752E-09 + 1.67014E-08 2.53028E-08 3.45567E-08 4.21350E-08 4.50928E-08 4.09200E-08 + 2.87999E-08 1.03973E-08 -1.03973E-08 -2.87999E-08 -4.09200E-08 -4.50928E-08 + -4.21350E-08 -3.45567E-08 -2.53028E-08 -1.67014E-08 -9.99752E-09 -5.44913E-09 + -2.71188E-09 -1.23482E-09 -5.15218E-10 -1.97213E-10 -6.93171E-11 -2.23883E-11 + -6.64872E-12 -1.81637E-12 -4.56667E-13 -1.05699E-13 + 6.26660E-13 2.70745E-12 1.07688E-11 3.94184E-11 1.32734E-10 4.10962E-10 + 1.16922E-09 3.05459E-09 7.32093E-09 1.60780E-08 3.23064E-08 5.92725E-08 + 9.90177E-08 1.50014E-07 2.04877E-07 2.49806E-07 2.67342E-07 2.42603E-07 + 1.70747E-07 6.16429E-08 -6.16429E-08 -1.70747E-07 -2.42603E-07 -2.67342E-07 + -2.49806E-07 -2.04877E-07 -1.50014E-07 -9.90177E-08 -5.92725E-08 -3.23064E-08 + -1.60780E-08 -7.32093E-09 -3.05459E-09 -1.16922E-09 -4.10962E-10 -1.32734E-10 + -3.94184E-11 -1.07688E-11 -2.70745E-12 -6.26660E-13 + 3.27103E-12 1.41323E-11 5.62107E-11 2.05756E-10 6.92843E-10 2.14513E-09 + 6.10310E-09 1.59443E-08 3.82137E-08 8.39238E-08 1.68632E-07 3.09390E-07 + 5.16852E-07 7.83039E-07 1.06941E-06 1.30394E-06 1.39547E-06 1.26634E-06 + 8.91261E-07 3.21763E-07 -3.21763E-07 -8.91261E-07 -1.26634E-06 -1.39547E-06 + -1.30394E-06 -1.06941E-06 -7.83039E-07 -5.16852E-07 -3.09390E-07 -1.68632E-07 + -8.39238E-08 -3.82137E-08 -1.59443E-08 -6.10310E-09 -2.14513E-09 -6.92843E-10 + -2.05756E-10 -5.62107E-11 -1.41323E-11 -3.27103E-12 + 1.50333E-11 6.49508E-11 2.58339E-10 9.45634E-10 3.18424E-09 9.85882E-09 + 2.80493E-08 7.32784E-08 1.75627E-07 3.85706E-07 7.75018E-07 1.42193E-06 + 2.37540E-06 3.59877E-06 4.91492E-06 5.99277E-06 6.41345E-06 5.81996E-06 + 4.09615E-06 1.47879E-06 -1.47879E-06 -4.09615E-06 -5.81996E-06 -6.41345E-06 + -5.99277E-06 -4.91492E-06 -3.59877E-06 -2.37540E-06 -1.42193E-06 -7.75018E-07 + -3.85706E-07 -1.75627E-07 -7.32784E-08 -2.80493E-08 -9.85882E-09 -3.18424E-09 + -9.45634E-10 -2.58339E-10 -6.49508E-11 -1.50333E-11 + 6.08399E-11 2.62856E-10 1.04550E-09 3.82698E-09 1.28866E-08 3.98986E-08 + 1.13515E-07 2.96558E-07 7.10760E-07 1.56095E-06 3.13650E-06 5.75453E-06 + 9.61324E-06 1.45642E-05 1.98907E-05 2.42527E-05 2.59552E-05 2.35534E-05 + 1.65771E-05 5.98467E-06 -5.98467E-06 -1.65771E-05 -2.35534E-05 -2.59552E-05 + -2.42527E-05 -1.98907E-05 -1.45642E-05 -9.61324E-06 -5.75453E-06 -3.13650E-06 + -1.56095E-06 -7.10760E-07 -2.96558E-07 -1.13515E-07 -3.98986E-08 -1.28866E-08 + -3.82698E-09 -1.04550E-09 -2.62856E-10 -6.08399E-11 + 2.16849E-10 9.36882E-10 3.72641E-09 1.36403E-08 4.59311E-08 1.42209E-07 + 4.04597E-07 1.05700E-06 2.53333E-06 5.56361E-06 1.11793E-05 2.05106E-05 + 3.42640E-05 5.19105E-05 7.08953E-05 8.64428E-05 9.25111E-05 8.39505E-05 + 5.90854E-05 2.13310E-05 -2.13310E-05 -5.90854E-05 -8.39505E-05 -9.25111E-05 + -8.64428E-05 -7.08953E-05 -5.19105E-05 -3.42640E-05 -2.05106E-05 -1.11793E-05 + -5.56361E-06 -2.53333E-06 -1.05700E-06 -4.04597E-07 -1.42209E-07 -4.59311E-08 + -1.36403E-08 -3.72641E-09 -9.36882E-10 -2.16849E-10 + 6.80899E-10 2.94179E-09 1.17008E-08 4.28302E-08 1.44222E-07 4.46532E-07 + 1.27042E-06 3.31897E-06 7.95458E-06 1.74696E-05 3.51026E-05 6.44027E-05 + 1.07588E-04 1.62998E-04 2.22610E-04 2.71431E-04 2.90489E-04 2.63614E-04 + 1.85540E-04 6.69848E-05 -6.69848E-05 -1.85540E-04 -2.63614E-04 -2.90489E-04 + -2.71431E-04 -2.22610E-04 -1.62998E-04 -1.07588E-04 -6.44027E-05 -3.51026E-05 + -1.74696E-05 -7.95458E-06 -3.31897E-06 -1.27042E-06 -4.46532E-07 -1.44222E-07 + -4.28302E-08 -1.17008E-08 -2.94179E-09 -6.80899E-10 + 1.88440E-09 8.14145E-09 3.23823E-08 1.18533E-07 3.99138E-07 1.23578E-06 + 3.51592E-06 9.18530E-06 2.20144E-05 4.83474E-05 9.71469E-05 1.78236E-04 + 2.97752E-04 4.51102E-04 6.16092E-04 7.51241E-04 8.04069E-04 7.29802E-04 + 5.13758E-04 1.85507E-04 -1.85507E-04 -5.13758E-04 -7.29802E-04 -8.04069E-04 + -7.51241E-04 -6.16092E-04 -4.51102E-04 -2.97752E-04 -1.78236E-04 -9.71469E-05 + -4.83474E-05 -2.20144E-05 -9.18530E-06 -3.51592E-06 -1.23578E-06 -3.99138E-07 + -1.18533E-07 -3.23823E-08 -8.14145E-09 -1.88440E-09 + 4.60011E-09 1.98745E-08 7.90502E-08 2.89358E-07 9.74358E-07 3.01674E-06 + 8.58290E-06 2.24227E-05 5.37407E-05 1.18023E-04 2.37151E-04 4.35101E-04 + 7.26865E-04 1.10125E-03 1.50419E-03 1.83470E-03 1.96504E-03 1.78563E-03 + 1.25884E-03 4.55017E-04 -4.55017E-04 -1.25884E-03 -1.78563E-03 -1.96504E-03 + -1.83470E-03 -1.50419E-03 -1.10125E-03 -7.26865E-04 -4.35101E-04 -2.37151E-04 + -1.18023E-04 -5.37407E-05 -2.24227E-05 -8.58290E-06 -3.01674E-06 -9.74358E-07 + -2.89358E-07 -7.90502E-08 -1.98745E-08 -4.60011E-09 + 9.91822E-09 4.28512E-08 1.70439E-07 6.23881E-07 2.10080E-06 6.50434E-06 + 1.85055E-05 4.83453E-05 1.15869E-04 2.54469E-04 5.11318E-04 9.38123E-04 + 1.56725E-03 2.37488E-03 3.24567E-03 3.96536E-03 4.26322E-03 3.89977E-03 + 2.77187E-03 1.00788E-03 -1.00788E-03 -2.77187E-03 -3.89977E-03 -4.26322E-03 + -3.96536E-03 -3.24567E-03 -2.37488E-03 -1.56725E-03 -9.38123E-04 -5.11318E-04 + -2.54469E-04 -1.15869E-04 -4.83453E-05 -1.85055E-05 -6.50434E-06 -2.10080E-06 + -6.23881E-07 -1.70439E-07 -4.28512E-08 -9.91822E-09 + 1.89274E-08 8.17750E-08 3.25257E-07 1.19058E-06 4.00906E-06 1.24126E-05 + 3.53149E-05 9.22598E-05 2.21119E-04 4.85615E-04 9.75779E-04 1.79034E-03 + 2.99150E-03 4.53636E-03 6.21533E-03 7.64759E-03 8.35266E-03 7.84449E-03 + 5.75068E-03 2.13643E-03 -2.13643E-03 -5.75068E-03 -7.84449E-03 -8.35266E-03 + -7.64759E-03 -6.21533E-03 -4.53636E-03 -2.99150E-03 -1.79034E-03 -9.75779E-04 + -4.85615E-04 -2.21119E-04 -9.22598E-05 -3.53149E-05 -1.24126E-05 -4.00906E-06 + -1.19058E-06 -3.25257E-07 -8.17750E-08 -1.89274E-08 + 3.20790E-08 1.38596E-07 5.51259E-07 2.01785E-06 6.79471E-06 2.10373E-05 + 5.98531E-05 1.56366E-04 3.74762E-04 8.23043E-04 1.65383E-03 3.03476E-03 + 5.07383E-03 7.71290E-03 1.06543E-02 1.33968E-02 1.52913E-02 1.53336E-02 + 1.20278E-02 4.66246E-03 -4.66246E-03 -1.20278E-02 -1.53336E-02 -1.52913E-02 + -1.33968E-02 -1.06543E-02 -7.71290E-03 -5.07383E-03 -3.03476E-03 -1.65383E-03 + -8.23043E-04 -3.74762E-04 -1.56366E-04 -5.98531E-05 -2.10373E-05 -6.79471E-06 + -2.01785E-06 -5.51259E-07 -1.38596E-07 -3.20790E-08 + 4.85424E-08 2.09725E-07 8.34171E-07 3.05343E-06 1.02818E-05 3.18339E-05 + 9.05705E-05 2.36614E-04 5.67095E-04 1.24545E-03 2.50272E-03 4.59376E-03 + 7.69123E-03 1.17587E-02 1.65416E-02 2.17413E-02 2.68290E-02 2.96086E-02 + 2.52204E-02 1.02444E-02 -1.02444E-02 -2.52204E-02 -2.96086E-02 -2.68290E-02 + -2.17413E-02 -1.65416E-02 -1.17587E-02 -7.69123E-03 -4.59376E-03 -2.50272E-03 + -1.24545E-03 -5.67095E-04 -2.36614E-04 -9.05705E-05 -3.18339E-05 -1.02818E-05 + -3.05343E-06 -8.34171E-07 -2.09725E-07 -4.85424E-08 + 6.60985E-08 2.85575E-07 1.13586E-06 4.15776E-06 1.40005E-05 4.33472E-05 + 1.23327E-04 3.22190E-04 7.72195E-04 1.69590E-03 3.40814E-03 6.25835E-03 + 1.05007E-02 1.61906E-02 2.33699E-02 3.24999E-02 4.36197E-02 5.25587E-02 + 4.87050E-02 2.12104E-02 -2.12104E-02 -4.87050E-02 -5.25587E-02 -4.36197E-02 + -3.24999E-02 -2.33699E-02 -1.61906E-02 -1.05007E-02 -6.25835E-03 -3.40814E-03 + -1.69590E-03 -7.72195E-04 -3.22190E-04 -1.23327E-04 -4.33472E-05 -1.40005E-05 + -4.15776E-06 -1.13586E-06 -2.85575E-07 -6.60985E-08 + 8.18594E-08 3.53669E-07 1.40670E-06 5.14916E-06 1.73388E-05 5.36831E-05 + 1.52734E-04 3.99015E-04 9.56323E-04 2.10030E-03 4.22105E-03 7.75370E-03 + 1.30314E-02 2.02236E-02 2.97484E-02 4.29646E-02 6.05819E-02 7.71450E-02 + 7.83895E-02 3.78235E-02 -3.78235E-02 -7.83895E-02 -7.71450E-02 -6.05819E-02 + -4.29646E-02 -2.97484E-02 -2.02236E-02 -1.30314E-02 -7.75370E-03 -4.22105E-03 + -2.10030E-03 -9.56323E-04 -3.99015E-04 -1.52734E-04 -5.36831E-05 -1.73388E-05 + -5.14916E-06 -1.40670E-06 -3.53669E-07 -8.18594E-08 + 9.33887E-08 4.03481E-07 1.60483E-06 5.87438E-06 1.97808E-05 6.12440E-05 + 1.74245E-04 4.55213E-04 1.09101E-03 2.39611E-03 4.81555E-03 8.84568E-03 + 1.48662E-02 2.30677E-02 3.39099E-02 4.88709E-02 6.85831E-02 8.64899E-02 + 8.60988E-02 4.06566E-02 -4.06566E-02 -8.60988E-02 -8.64899E-02 -6.85831E-02 + -4.88709E-02 -3.39099E-02 -2.30677E-02 -1.48662E-02 -8.84568E-03 -4.81555E-03 + -2.39611E-03 -1.09101E-03 -4.55213E-04 -1.74245E-04 -6.12440E-05 -1.97808E-05 + -5.87438E-06 -1.60483E-06 -4.03481E-07 -9.33887E-08 + 9.93602E-08 4.29280E-07 1.70745E-06 6.25000E-06 2.10457E-05 6.51601E-05 + 1.85387E-04 4.84321E-04 1.16077E-03 2.54931E-03 5.12328E-03 9.40910E-03 + 1.57976E-02 2.44191E-02 3.54911E-02 4.99610E-02 6.78349E-02 8.18232E-02 + 7.45615E-02 3.16924E-02 -3.16924E-02 -7.45615E-02 -8.18232E-02 -6.78349E-02 + -4.99610E-02 -3.54911E-02 -2.44191E-02 -1.57976E-02 -9.40910E-03 -5.12328E-03 + -2.54931E-03 -1.16077E-03 -4.84321E-04 -1.85387E-04 -6.51601E-05 -2.10457E-05 + -6.25000E-06 -1.70745E-06 -4.29280E-07 -9.93602E-08 + 9.93602E-08 4.29280E-07 1.70745E-06 6.25000E-06 2.10457E-05 6.51601E-05 + 1.85387E-04 4.84321E-04 1.16077E-03 2.54931E-03 5.12328E-03 9.40910E-03 + 1.57976E-02 2.44191E-02 3.54911E-02 4.99610E-02 6.78349E-02 8.18232E-02 + 7.45615E-02 3.16924E-02 -3.16924E-02 -7.45615E-02 -8.18232E-02 -6.78349E-02 + -4.99610E-02 -3.54911E-02 -2.44191E-02 -1.57976E-02 -9.40910E-03 -5.12328E-03 + -2.54931E-03 -1.16077E-03 -4.84321E-04 -1.85387E-04 -6.51601E-05 -2.10457E-05 + -6.25000E-06 -1.70745E-06 -4.29280E-07 -9.93602E-08 + 9.33887E-08 4.03481E-07 1.60483E-06 5.87438E-06 1.97808E-05 6.12440E-05 + 1.74245E-04 4.55213E-04 1.09101E-03 2.39611E-03 4.81555E-03 8.84568E-03 + 1.48662E-02 2.30677E-02 3.39099E-02 4.88709E-02 6.85831E-02 8.64899E-02 + 8.60988E-02 4.06566E-02 -4.06566E-02 -8.60988E-02 -8.64899E-02 -6.85831E-02 + -4.88709E-02 -3.39099E-02 -2.30677E-02 -1.48662E-02 -8.84568E-03 -4.81555E-03 + -2.39611E-03 -1.09101E-03 -4.55213E-04 -1.74245E-04 -6.12440E-05 -1.97808E-05 + -5.87438E-06 -1.60483E-06 -4.03481E-07 -9.33887E-08 + 8.18594E-08 3.53669E-07 1.40670E-06 5.14916E-06 1.73388E-05 5.36831E-05 + 1.52734E-04 3.99015E-04 9.56323E-04 2.10030E-03 4.22105E-03 7.75370E-03 + 1.30314E-02 2.02236E-02 2.97484E-02 4.29646E-02 6.05819E-02 7.71450E-02 + 7.83895E-02 3.78235E-02 -3.78235E-02 -7.83895E-02 -7.71450E-02 -6.05819E-02 + -4.29646E-02 -2.97484E-02 -2.02236E-02 -1.30314E-02 -7.75370E-03 -4.22105E-03 + -2.10030E-03 -9.56323E-04 -3.99015E-04 -1.52734E-04 -5.36831E-05 -1.73388E-05 + -5.14916E-06 -1.40670E-06 -3.53669E-07 -8.18594E-08 + 6.60985E-08 2.85575E-07 1.13586E-06 4.15776E-06 1.40005E-05 4.33472E-05 + 1.23327E-04 3.22190E-04 7.72195E-04 1.69590E-03 3.40814E-03 6.25835E-03 + 1.05007E-02 1.61906E-02 2.33699E-02 3.24999E-02 4.36197E-02 5.25587E-02 + 4.87050E-02 2.12104E-02 -2.12104E-02 -4.87050E-02 -5.25587E-02 -4.36197E-02 + -3.24999E-02 -2.33699E-02 -1.61906E-02 -1.05007E-02 -6.25835E-03 -3.40814E-03 + -1.69590E-03 -7.72195E-04 -3.22190E-04 -1.23327E-04 -4.33472E-05 -1.40005E-05 + -4.15776E-06 -1.13586E-06 -2.85575E-07 -6.60985E-08 + 4.85424E-08 2.09725E-07 8.34171E-07 3.05343E-06 1.02818E-05 3.18339E-05 + 9.05705E-05 2.36614E-04 5.67095E-04 1.24545E-03 2.50272E-03 4.59376E-03 + 7.69123E-03 1.17587E-02 1.65416E-02 2.17413E-02 2.68290E-02 2.96086E-02 + 2.52204E-02 1.02444E-02 -1.02444E-02 -2.52204E-02 -2.96086E-02 -2.68290E-02 + -2.17413E-02 -1.65416E-02 -1.17587E-02 -7.69123E-03 -4.59376E-03 -2.50272E-03 + -1.24545E-03 -5.67095E-04 -2.36614E-04 -9.05705E-05 -3.18339E-05 -1.02818E-05 + -3.05343E-06 -8.34171E-07 -2.09725E-07 -4.85424E-08 + 3.20790E-08 1.38596E-07 5.51259E-07 2.01785E-06 6.79471E-06 2.10373E-05 + 5.98531E-05 1.56366E-04 3.74762E-04 8.23043E-04 1.65383E-03 3.03476E-03 + 5.07383E-03 7.71290E-03 1.06543E-02 1.33968E-02 1.52913E-02 1.53336E-02 + 1.20278E-02 4.66246E-03 -4.66246E-03 -1.20278E-02 -1.53336E-02 -1.52913E-02 + -1.33968E-02 -1.06543E-02 -7.71290E-03 -5.07383E-03 -3.03476E-03 -1.65383E-03 + -8.23043E-04 -3.74762E-04 -1.56366E-04 -5.98531E-05 -2.10373E-05 -6.79471E-06 + -2.01785E-06 -5.51259E-07 -1.38596E-07 -3.20790E-08 + 1.89274E-08 8.17750E-08 3.25257E-07 1.19058E-06 4.00906E-06 1.24126E-05 + 3.53149E-05 9.22598E-05 2.21119E-04 4.85615E-04 9.75779E-04 1.79034E-03 + 2.99150E-03 4.53636E-03 6.21533E-03 7.64759E-03 8.35266E-03 7.84449E-03 + 5.75068E-03 2.13643E-03 -2.13643E-03 -5.75068E-03 -7.84449E-03 -8.35266E-03 + -7.64759E-03 -6.21533E-03 -4.53636E-03 -2.99150E-03 -1.79034E-03 -9.75779E-04 + -4.85615E-04 -2.21119E-04 -9.22598E-05 -3.53149E-05 -1.24126E-05 -4.00906E-06 + -1.19058E-06 -3.25257E-07 -8.17750E-08 -1.89274E-08 + 9.91822E-09 4.28512E-08 1.70439E-07 6.23881E-07 2.10080E-06 6.50434E-06 + 1.85055E-05 4.83453E-05 1.15869E-04 2.54469E-04 5.11318E-04 9.38123E-04 + 1.56725E-03 2.37488E-03 3.24567E-03 3.96536E-03 4.26322E-03 3.89977E-03 + 2.77187E-03 1.00788E-03 -1.00788E-03 -2.77187E-03 -3.89977E-03 -4.26322E-03 + -3.96536E-03 -3.24567E-03 -2.37488E-03 -1.56725E-03 -9.38123E-04 -5.11318E-04 + -2.54469E-04 -1.15869E-04 -4.83453E-05 -1.85055E-05 -6.50434E-06 -2.10080E-06 + -6.23881E-07 -1.70439E-07 -4.28512E-08 -9.91822E-09 + 4.60011E-09 1.98745E-08 7.90502E-08 2.89358E-07 9.74358E-07 3.01674E-06 + 8.58290E-06 2.24227E-05 5.37407E-05 1.18023E-04 2.37151E-04 4.35101E-04 + 7.26865E-04 1.10125E-03 1.50419E-03 1.83470E-03 1.96504E-03 1.78563E-03 + 1.25884E-03 4.55017E-04 -4.55017E-04 -1.25884E-03 -1.78563E-03 -1.96504E-03 + -1.83470E-03 -1.50419E-03 -1.10125E-03 -7.26865E-04 -4.35101E-04 -2.37151E-04 + -1.18023E-04 -5.37407E-05 -2.24227E-05 -8.58290E-06 -3.01674E-06 -9.74358E-07 + -2.89358E-07 -7.90502E-08 -1.98745E-08 -4.60011E-09 + 1.88440E-09 8.14145E-09 3.23823E-08 1.18533E-07 3.99138E-07 1.23578E-06 + 3.51592E-06 9.18530E-06 2.20144E-05 4.83474E-05 9.71469E-05 1.78236E-04 + 2.97752E-04 4.51102E-04 6.16092E-04 7.51241E-04 8.04069E-04 7.29802E-04 + 5.13758E-04 1.85507E-04 -1.85507E-04 -5.13758E-04 -7.29802E-04 -8.04069E-04 + -7.51241E-04 -6.16092E-04 -4.51102E-04 -2.97752E-04 -1.78236E-04 -9.71469E-05 + -4.83474E-05 -2.20144E-05 -9.18530E-06 -3.51592E-06 -1.23578E-06 -3.99138E-07 + -1.18533E-07 -3.23823E-08 -8.14145E-09 -1.88440E-09 + 6.80899E-10 2.94179E-09 1.17008E-08 4.28302E-08 1.44222E-07 4.46532E-07 + 1.27042E-06 3.31897E-06 7.95458E-06 1.74696E-05 3.51026E-05 6.44027E-05 + 1.07588E-04 1.62998E-04 2.22610E-04 2.71431E-04 2.90489E-04 2.63614E-04 + 1.85540E-04 6.69848E-05 -6.69848E-05 -1.85540E-04 -2.63614E-04 -2.90489E-04 + -2.71431E-04 -2.22610E-04 -1.62998E-04 -1.07588E-04 -6.44027E-05 -3.51026E-05 + -1.74696E-05 -7.95458E-06 -3.31897E-06 -1.27042E-06 -4.46532E-07 -1.44222E-07 + -4.28302E-08 -1.17008E-08 -2.94179E-09 -6.80899E-10 + 2.16849E-10 9.36882E-10 3.72641E-09 1.36403E-08 4.59311E-08 1.42209E-07 + 4.04597E-07 1.05700E-06 2.53333E-06 5.56361E-06 1.11793E-05 2.05106E-05 + 3.42640E-05 5.19105E-05 7.08953E-05 8.64428E-05 9.25111E-05 8.39505E-05 + 5.90854E-05 2.13310E-05 -2.13310E-05 -5.90854E-05 -8.39505E-05 -9.25111E-05 + -8.64428E-05 -7.08953E-05 -5.19105E-05 -3.42640E-05 -2.05106E-05 -1.11793E-05 + -5.56361E-06 -2.53333E-06 -1.05700E-06 -4.04597E-07 -1.42209E-07 -4.59311E-08 + -1.36403E-08 -3.72641E-09 -9.36882E-10 -2.16849E-10 + 6.08399E-11 2.62856E-10 1.04550E-09 3.82698E-09 1.28866E-08 3.98986E-08 + 1.13515E-07 2.96558E-07 7.10760E-07 1.56095E-06 3.13650E-06 5.75453E-06 + 9.61324E-06 1.45642E-05 1.98907E-05 2.42527E-05 2.59552E-05 2.35534E-05 + 1.65771E-05 5.98467E-06 -5.98467E-06 -1.65771E-05 -2.35534E-05 -2.59552E-05 + -2.42527E-05 -1.98907E-05 -1.45642E-05 -9.61324E-06 -5.75453E-06 -3.13650E-06 + -1.56095E-06 -7.10760E-07 -2.96558E-07 -1.13515E-07 -3.98986E-08 -1.28866E-08 + -3.82698E-09 -1.04550E-09 -2.62856E-10 -6.08399E-11 + 1.50333E-11 6.49508E-11 2.58339E-10 9.45634E-10 3.18424E-09 9.85882E-09 + 2.80493E-08 7.32784E-08 1.75627E-07 3.85706E-07 7.75018E-07 1.42193E-06 + 2.37540E-06 3.59877E-06 4.91492E-06 5.99277E-06 6.41345E-06 5.81996E-06 + 4.09615E-06 1.47879E-06 -1.47879E-06 -4.09615E-06 -5.81996E-06 -6.41345E-06 + -5.99277E-06 -4.91492E-06 -3.59877E-06 -2.37540E-06 -1.42193E-06 -7.75018E-07 + -3.85706E-07 -1.75627E-07 -7.32784E-08 -2.80493E-08 -9.85882E-09 -3.18424E-09 + -9.45634E-10 -2.58339E-10 -6.49508E-11 -1.50333E-11 + 3.27103E-12 1.41323E-11 5.62107E-11 2.05756E-10 6.92843E-10 2.14513E-09 + 6.10310E-09 1.59443E-08 3.82137E-08 8.39238E-08 1.68632E-07 3.09390E-07 + 5.16852E-07 7.83039E-07 1.06941E-06 1.30394E-06 1.39547E-06 1.26634E-06 + 8.91261E-07 3.21763E-07 -3.21763E-07 -8.91261E-07 -1.26634E-06 -1.39547E-06 + -1.30394E-06 -1.06941E-06 -7.83039E-07 -5.16852E-07 -3.09390E-07 -1.68632E-07 + -8.39238E-08 -3.82137E-08 -1.59443E-08 -6.10310E-09 -2.14513E-09 -6.92843E-10 + -2.05756E-10 -5.62107E-11 -1.41323E-11 -3.27103E-12 + 6.26660E-13 2.70745E-12 1.07688E-11 3.94184E-11 1.32734E-10 4.10962E-10 + 1.16922E-09 3.05459E-09 7.32093E-09 1.60780E-08 3.23064E-08 5.92725E-08 + 9.90177E-08 1.50014E-07 2.04877E-07 2.49806E-07 2.67342E-07 2.42603E-07 + 1.70747E-07 6.16429E-08 -6.16429E-08 -1.70747E-07 -2.42603E-07 -2.67342E-07 + -2.49806E-07 -2.04877E-07 -1.50014E-07 -9.90177E-08 -5.92725E-08 -3.23064E-08 + -1.60780E-08 -7.32093E-09 -3.05459E-09 -1.16922E-09 -4.10962E-10 -1.32734E-10 + -3.94184E-11 -1.07688E-11 -2.70745E-12 -6.26660E-13 + 1.05699E-13 4.56667E-13 1.81637E-12 6.64872E-12 2.23883E-11 6.93171E-11 + 1.97213E-10 5.15218E-10 1.23482E-09 2.71188E-09 5.44913E-09 9.99752E-09 + 1.67014E-08 2.53028E-08 3.45567E-08 4.21350E-08 4.50928E-08 4.09200E-08 + 2.87999E-08 1.03973E-08 -1.03973E-08 -2.87999E-08 -4.09200E-08 -4.50928E-08 + -4.21350E-08 -3.45567E-08 -2.53028E-08 -1.67014E-08 -9.99752E-09 -5.44913E-09 + -2.71188E-09 -1.23482E-09 -5.15218E-10 -1.97213E-10 -6.93171E-11 -2.23883E-11 + -6.64872E-12 -1.81637E-12 -4.56667E-13 -1.05699E-13 + 1.56959E-14 6.78133E-14 2.69724E-13 9.87310E-13 3.32458E-12 1.02933E-11 + 2.92854E-11 7.65079E-11 1.83367E-10 4.02704E-10 8.09175E-10 1.48459E-09 + 2.48009E-09 3.75737E-09 5.13153E-09 6.25688E-09 6.69610E-09 6.07646E-09 + 4.27667E-09 1.54396E-09 -1.54396E-09 -4.27667E-09 -6.07646E-09 -6.69610E-09 + -6.25688E-09 -5.13153E-09 -3.75737E-09 -2.48009E-09 -1.48459E-09 -8.09175E-10 + -4.02704E-10 -1.83367E-10 -7.65079E-11 -2.92854E-11 -1.02933E-11 -3.32458E-12 + -9.87310E-13 -2.69724E-13 -6.78133E-14 -1.56959E-14 + 2.05196E-15 8.86537E-15 3.52616E-14 1.29073E-13 4.34629E-13 1.34567E-12 + 3.82855E-12 1.00020E-11 2.39719E-11 5.26463E-11 1.05785E-10 1.94084E-10 + 3.24227E-10 4.91209E-10 6.70856E-10 8.17975E-10 8.75395E-10 7.94388E-10 + 5.59098E-10 2.01846E-10 -2.01846E-10 -5.59098E-10 -7.94388E-10 -8.75395E-10 + -8.17975E-10 -6.70856E-10 -4.91209E-10 -3.24227E-10 -1.94084E-10 -1.05785E-10 + -5.26463E-11 -2.39719E-11 -1.00020E-11 -3.82855E-12 -1.34567E-12 -4.34629E-13 + -1.29073E-13 -3.52616E-14 -8.86537E-15 -2.05196E-15 + 2.36163E-16 1.02033E-15 4.05832E-15 1.48552E-14 5.00221E-14 1.54875E-13 + 4.40633E-13 1.15115E-12 2.75897E-12 6.05915E-12 1.21750E-11 2.23374E-11 + 3.73158E-11 5.65341E-11 7.72098E-11 9.41420E-11 1.00751E-10 9.14274E-11 + 6.43475E-11 2.32307E-11 -2.32307E-11 -6.43475E-11 -9.14274E-11 -1.00751E-10 + -9.41420E-11 -7.72098E-11 -5.65341E-11 -3.73158E-11 -2.23374E-11 -1.21750E-11 + -6.05915E-12 -2.75897E-12 -1.15115E-12 -4.40633E-13 -1.54875E-13 -5.00221E-14 + -1.48552E-14 -4.05832E-15 -1.02033E-15 -2.36163E-16 + 1.78110E-16 7.69515E-16 3.06071E-15 1.12036E-14 3.77258E-14 1.16804E-13 + 3.32318E-13 8.68178E-13 2.08076E-12 4.56971E-12 9.18216E-12 1.68465E-11 + 2.81429E-11 4.26370E-11 5.82303E-11 7.10003E-11 7.59844E-11 6.89530E-11 + 4.85298E-11 1.75202E-11 -1.75202E-11 -4.85298E-11 -6.89530E-11 -7.59844E-11 + -7.10003E-11 -5.82303E-11 -4.26370E-11 -2.81429E-11 -1.68465E-11 -9.18216E-12 + -4.56971E-12 -2.08076E-12 -8.68178E-13 -3.32318E-13 -1.16804E-13 -3.77258E-14 + -1.12036E-14 -3.06071E-15 -7.69515E-16 -1.78110E-16 + 1.54755E-15 6.68611E-15 2.65937E-14 9.73447E-14 3.27789E-13 1.01488E-12 + 2.88742E-12 7.54337E-12 1.80792E-11 3.97050E-11 7.97813E-11 1.46375E-10 + 2.44526E-10 3.70462E-10 5.05948E-10 6.16902E-10 6.60208E-10 5.99114E-10 + 4.21662E-10 1.52228E-10 -1.52228E-10 -4.21662E-10 -5.99114E-10 -6.60208E-10 + -6.16902E-10 -5.05948E-10 -3.70462E-10 -2.44526E-10 -1.46375E-10 -7.97813E-11 + -3.97050E-11 -1.80792E-11 -7.54337E-12 -2.88742E-12 -1.01488E-12 -3.27789E-13 + -9.73447E-14 -2.65937E-14 -6.68611E-15 -1.54755E-15 + 1.18376E-14 5.11436E-14 2.03422E-13 7.44612E-13 2.50734E-12 7.76304E-12 + 2.20866E-11 5.77010E-11 1.38292E-10 3.03713E-10 6.10266E-10 1.11965E-09 + 1.87044E-09 2.83375E-09 3.87011E-09 4.71883E-09 5.05008E-09 4.58276E-09 + 3.22539E-09 1.16443E-09 -1.16443E-09 -3.22539E-09 -4.58276E-09 -5.05008E-09 + -4.71883E-09 -3.87011E-09 -2.83375E-09 -1.87044E-09 -1.11965E-09 -6.10266E-10 + -3.03713E-10 -1.38292E-10 -5.77010E-11 -2.20866E-11 -7.76304E-12 -2.50734E-12 + -7.44612E-13 -2.03422E-13 -5.11436E-14 -1.18376E-14 + 7.97164E-14 3.44410E-13 1.36988E-12 5.01435E-12 1.68849E-11 5.22777E-11 + 1.48735E-10 3.88569E-10 9.31284E-10 2.04526E-09 4.10964E-09 7.53995E-09 + 1.25959E-08 1.90830E-08 2.60620E-08 3.17775E-08 3.40082E-08 3.08611E-08 + 2.17204E-08 7.84149E-09 -7.84149E-09 -2.17204E-08 -3.08611E-08 -3.40082E-08 + -3.17775E-08 -2.60620E-08 -1.90830E-08 -1.25959E-08 -7.53995E-09 -4.10964E-09 + -2.04526E-09 -9.31284E-10 -3.88569E-10 -1.48735E-10 -5.22777E-11 -1.68849E-11 + -5.01435E-12 -1.36988E-12 -3.44410E-13 -7.97164E-14 + 4.72616E-13 2.04191E-12 8.12163E-12 2.97287E-11 1.00106E-10 3.09940E-10 + 8.81809E-10 2.30372E-09 5.52132E-09 1.21258E-08 2.43649E-08 4.47023E-08 + 7.46775E-08 1.13138E-07 1.54515E-07 1.88400E-07 2.01625E-07 1.82967E-07 + 1.28774E-07 4.64900E-08 -4.64900E-08 -1.28774E-07 -1.82967E-07 -2.01625E-07 + -1.88400E-07 -1.54515E-07 -1.13138E-07 -7.46775E-08 -4.47023E-08 -2.43649E-08 + -1.21258E-08 -5.52132E-09 -2.30372E-09 -8.81809E-10 -3.09940E-10 -1.00106E-10 + -2.97287E-11 -8.12163E-12 -2.04191E-12 -4.72616E-13 + 2.46696E-12 1.06584E-11 4.23932E-11 1.55178E-10 5.22531E-10 1.61782E-09 + 4.60286E-09 1.20249E-08 2.88201E-08 6.32939E-08 1.27180E-07 2.33337E-07 + 3.89801E-07 5.90555E-07 8.06534E-07 9.83407E-07 1.05244E-06 9.55050E-07 + 6.72174E-07 2.42668E-07 -2.42668E-07 -6.72174E-07 -9.55050E-07 -1.05244E-06 + -9.83407E-07 -8.06534E-07 -5.90555E-07 -3.89801E-07 -2.33337E-07 -1.27180E-07 + -6.32939E-08 -2.88201E-08 -1.20249E-08 -4.60286E-09 -1.61782E-09 -5.22531E-10 + -1.55178E-10 -4.23932E-11 -1.06584E-11 -2.46696E-12 + 1.13379E-11 4.89848E-11 1.94835E-10 7.13181E-10 2.40150E-09 7.43536E-09 + 2.11543E-08 5.52653E-08 1.32455E-07 2.90892E-07 5.84506E-07 1.07239E-06 + 1.79149E-06 2.71413E-06 3.70675E-06 4.51964E-06 4.83692E-06 4.38932E-06 + 3.08925E-06 1.11528E-06 -1.11528E-06 -3.08925E-06 -4.38932E-06 -4.83692E-06 + -4.51964E-06 -3.70675E-06 -2.71413E-06 -1.79149E-06 -1.07239E-06 -5.84506E-07 + -2.90892E-07 -1.32455E-07 -5.52653E-08 -2.11543E-08 -7.43536E-09 -2.40150E-09 + -7.13181E-10 -1.94835E-10 -4.89848E-11 -1.13379E-11 + 4.58844E-11 1.98241E-10 7.88496E-10 2.88624E-09 9.71886E-09 3.00909E-08 + 8.56113E-08 2.23659E-07 5.36043E-07 1.17724E-06 2.36549E-06 4.33997E-06 + 7.25014E-06 1.09841E-05 1.50012E-05 1.82910E-05 1.95750E-05 1.77635E-05 + 1.25022E-05 4.51353E-06 -4.51353E-06 -1.25022E-05 -1.77635E-05 -1.95750E-05 + -1.82910E-05 -1.50012E-05 -1.09841E-05 -7.25014E-06 -4.33997E-06 -2.36549E-06 + -1.17724E-06 -5.36043E-07 -2.23659E-07 -8.56113E-08 -3.00909E-08 -9.71886E-09 + -2.88624E-09 -7.88496E-10 -1.98241E-10 -4.58844E-11 + 1.63543E-10 7.06581E-10 2.81040E-09 1.02873E-08 3.46404E-08 1.07251E-07 + 3.05140E-07 7.97175E-07 1.91059E-06 4.19598E-06 8.43120E-06 1.54687E-05 + 2.58413E-05 3.91500E-05 5.34680E-05 6.51936E-05 6.97701E-05 6.33138E-05 + 4.45609E-05 1.60874E-05 -1.60874E-05 -4.45609E-05 -6.33138E-05 -6.97701E-05 + -6.51936E-05 -5.34680E-05 -3.91500E-05 -2.58413E-05 -1.54687E-05 -8.43120E-06 + -4.19598E-06 -1.91059E-06 -7.97175E-07 -3.05140E-07 -1.07251E-07 -3.46404E-08 + -1.02873E-08 -2.81040E-09 -7.06581E-10 -1.63543E-10 + 5.13522E-10 2.21865E-09 8.82458E-09 3.23018E-08 1.08770E-07 3.36766E-07 + 9.58132E-07 2.50311E-06 5.99921E-06 1.31753E-05 2.64738E-05 4.85714E-05 + 8.11410E-05 1.22930E-04 1.67888E-04 2.04707E-04 2.19078E-04 1.98807E-04 + 1.39924E-04 5.05157E-05 -5.05157E-05 -1.39924E-04 -1.98807E-04 -2.19078E-04 + -2.04707E-04 -1.67888E-04 -1.22930E-04 -8.11410E-05 -4.85714E-05 -2.64738E-05 + -1.31753E-05 -5.99921E-06 -2.50311E-06 -9.58132E-07 -3.36766E-07 -1.08770E-07 + -3.23018E-08 -8.82458E-09 -2.21865E-09 -5.13522E-10 + 1.42118E-09 6.14014E-09 2.44221E-08 8.93958E-08 3.01023E-07 9.32006E-07 + 2.65164E-06 6.92740E-06 1.66029E-05 3.64628E-05 7.32666E-05 1.34422E-04 + 2.24559E-04 3.40211E-04 4.64638E-04 5.66548E-04 6.06360E-04 5.50324E-04 + 3.87395E-04 1.39877E-04 -1.39877E-04 -3.87395E-04 -5.50324E-04 -6.06360E-04 + -5.66548E-04 -4.64638E-04 -3.40211E-04 -2.24559E-04 -1.34422E-04 -7.32666E-05 + -3.64628E-05 -1.66029E-05 -6.92740E-06 -2.65164E-06 -9.32006E-07 -3.01023E-07 + -8.93958E-08 -2.44221E-08 -6.14014E-09 -1.42118E-09 + 3.46933E-09 1.49890E-08 5.96183E-08 2.18229E-07 7.34844E-07 2.27517E-06 + 6.47308E-06 1.69109E-05 4.05303E-05 8.90113E-05 1.78855E-04 3.28146E-04 + 5.48186E-04 8.30524E-04 1.13435E-03 1.38347E-03 1.48166E-03 1.34647E-03 + 9.49494E-04 3.43293E-04 -3.43293E-04 -9.49494E-04 -1.34647E-03 -1.48166E-03 + -1.38347E-03 -1.13435E-03 -8.30524E-04 -5.48186E-04 -3.28146E-04 -1.78855E-04 + -8.90113E-05 -4.05303E-05 -1.69109E-05 -6.47308E-06 -2.27517E-06 -7.34844E-07 + -2.18229E-07 -5.96183E-08 -1.49890E-08 -3.46933E-09 + 7.48015E-09 3.23176E-08 1.28542E-07 4.70520E-07 1.58439E-06 4.90546E-06 + 1.39565E-05 3.64612E-05 8.73867E-05 1.91916E-04 3.85627E-04 7.07512E-04 + 1.18196E-03 1.79090E-03 2.44711E-03 2.98913E-03 3.21465E-03 2.94545E-03 + 2.09988E-03 7.65514E-04 -7.65514E-04 -2.09988E-03 -2.94545E-03 -3.21465E-03 + -2.98913E-03 -2.44711E-03 -1.79090E-03 -1.18196E-03 -7.07512E-04 -3.85627E-04 + -1.91916E-04 -8.73867E-05 -3.64612E-05 -1.39565E-05 -4.90546E-06 -1.58439E-06 + -4.70520E-07 -1.28542E-07 -3.23176E-08 -7.48015E-09 + 1.42747E-08 6.16733E-08 2.45303E-07 8.97917E-07 3.02356E-06 9.36134E-06 + 2.66339E-05 6.95807E-05 1.66764E-04 3.66243E-04 7.35913E-04 1.35021E-03 + 2.25585E-03 3.41958E-03 4.68129E-03 5.75438E-03 6.29079E-03 5.94374E-03 + 4.40429E-03 1.65080E-03 -1.65080E-03 -4.40429E-03 -5.94374E-03 -6.29079E-03 + -5.75438E-03 -4.68129E-03 -3.41958E-03 -2.25585E-03 -1.35021E-03 -7.35913E-04 + -3.66243E-04 -1.66764E-04 -6.95807E-05 -2.66339E-05 -9.36134E-06 -3.02356E-06 + -8.97917E-07 -2.45303E-07 -6.16733E-08 -1.42747E-08 + 2.41934E-08 1.04526E-07 4.15750E-07 1.52183E-06 5.12446E-06 1.58660E-05 + 4.51402E-05 1.17928E-04 2.82639E-04 6.20724E-04 1.24727E-03 2.28854E-03 + 3.82473E-03 5.80585E-03 7.99008E-03 9.98286E-03 1.13393E-02 1.14189E-02 + 9.07827E-03 3.56085E-03 -3.56085E-03 -9.07827E-03 -1.14189E-02 -1.13393E-02 + -9.98286E-03 -7.99008E-03 -5.80585E-03 -3.82473E-03 -2.28854E-03 -1.24727E-03 + -6.20724E-04 -2.82639E-04 -1.17928E-04 -4.51402E-05 -1.58660E-05 -5.12446E-06 + -1.52183E-06 -4.15750E-07 -1.04526E-07 -2.41934E-08 + 3.66098E-08 1.58171E-07 6.29118E-07 2.30285E-06 7.75439E-06 2.40086E-05 + 6.83067E-05 1.78451E-04 4.27693E-04 9.39290E-04 1.88743E-03 3.46359E-03 + 5.79253E-03 8.81852E-03 1.22573E-02 1.57285E-02 1.88352E-02 2.03795E-02 + 1.72820E-02 7.02519E-03 -7.02519E-03 -1.72820E-02 -2.03795E-02 -1.88352E-02 + -1.57285E-02 -1.22573E-02 -8.81852E-03 -5.79253E-03 -3.46359E-03 -1.88743E-03 + -9.39290E-04 -4.27693E-04 -1.78451E-04 -6.83067E-05 -2.40086E-05 -7.75439E-06 + -2.30285E-06 -6.29118E-07 -1.58171E-07 -3.66098E-08 + 4.98504E-08 2.15376E-07 8.56649E-07 3.13571E-06 1.05589E-05 3.26917E-05 + 9.30110E-05 2.42990E-04 5.82376E-04 1.27901E-03 2.57014E-03 4.71738E-03 + 7.89726E-03 1.20705E-02 1.69835E-02 2.24087E-02 2.80329E-02 3.17076E-02 + 2.77061E-02 1.14210E-02 -1.14210E-02 -2.77061E-02 -3.17076E-02 -2.80329E-02 + -2.24087E-02 -1.69835E-02 -1.20705E-02 -7.89726E-03 -4.71738E-03 -2.57014E-03 + -1.27901E-03 -5.82376E-04 -2.42990E-04 -9.30110E-05 -3.26917E-05 -1.05589E-05 + -3.13571E-06 -8.56649E-07 -2.15376E-07 -4.98504E-08 + 6.17370E-08 2.66731E-07 1.06091E-06 3.88341E-06 1.30766E-05 4.04869E-05 + 1.15189E-04 3.00930E-04 7.21241E-04 1.58398E-03 3.18307E-03 5.84328E-03 + 9.78947E-03 1.50051E-02 2.12800E-02 2.85002E-02 3.62508E-02 4.13511E-02 + 3.61689E-02 1.49240E-02 -1.49240E-02 -3.61689E-02 -4.13511E-02 -3.62508E-02 + -2.85002E-02 -2.12800E-02 -1.50051E-02 -9.78947E-03 -5.84328E-03 -3.18307E-03 + -1.58398E-03 -7.21241E-04 -3.00930E-04 -1.15189E-04 -4.04869E-05 -1.30766E-05 + -3.88341E-06 -1.06091E-06 -2.66731E-07 -6.17370E-08 + 7.04322E-08 3.04299E-07 1.21033E-06 4.43036E-06 1.49184E-05 4.61892E-05 + 1.31413E-04 3.43314E-04 8.22823E-04 1.80708E-03 3.63138E-03 6.66623E-03 + 1.11677E-02 1.71128E-02 2.42317E-02 3.22656E-02 4.04637E-02 4.51558E-02 + 3.86250E-02 1.57167E-02 -1.57167E-02 -3.86250E-02 -4.51558E-02 -4.04637E-02 + -3.22656E-02 -2.42317E-02 -1.71128E-02 -1.11677E-02 -6.66623E-03 -3.63138E-03 + -1.80708E-03 -8.22823E-04 -3.43314E-04 -1.31413E-04 -4.61892E-05 -1.49184E-05 + -4.43036E-06 -1.21033E-06 -3.04299E-07 -7.04322E-08 + 7.49358E-08 3.23756E-07 1.28773E-06 4.71364E-06 1.58723E-05 4.91426E-05 + 1.39815E-04 3.65266E-04 8.75436E-04 1.92262E-03 3.86351E-03 7.09170E-03 + 1.18749E-02 1.81618E-02 2.55601E-02 3.35328E-02 4.09854E-02 4.43201E-02 + 3.68123E-02 1.46854E-02 -1.46854E-02 -3.68123E-02 -4.43201E-02 -4.09854E-02 + -3.35328E-02 -2.55601E-02 -1.81618E-02 -1.18749E-02 -7.09170E-03 -3.86351E-03 + -1.92262E-03 -8.75436E-04 -3.65266E-04 -1.39815E-04 -4.91426E-05 -1.58723E-05 + -4.71364E-06 -1.28773E-06 -3.23756E-07 -7.49358E-08 + 7.49358E-08 3.23756E-07 1.28773E-06 4.71364E-06 1.58723E-05 4.91426E-05 + 1.39815E-04 3.65266E-04 8.75436E-04 1.92262E-03 3.86351E-03 7.09170E-03 + 1.18749E-02 1.81618E-02 2.55601E-02 3.35328E-02 4.09854E-02 4.43201E-02 + 3.68123E-02 1.46854E-02 -1.46854E-02 -3.68123E-02 -4.43201E-02 -4.09854E-02 + -3.35328E-02 -2.55601E-02 -1.81618E-02 -1.18749E-02 -7.09170E-03 -3.86351E-03 + -1.92262E-03 -8.75436E-04 -3.65266E-04 -1.39815E-04 -4.91426E-05 -1.58723E-05 + -4.71364E-06 -1.28773E-06 -3.23756E-07 -7.49358E-08 + 7.04322E-08 3.04299E-07 1.21033E-06 4.43036E-06 1.49184E-05 4.61892E-05 + 1.31413E-04 3.43314E-04 8.22823E-04 1.80708E-03 3.63138E-03 6.66623E-03 + 1.11677E-02 1.71128E-02 2.42317E-02 3.22656E-02 4.04637E-02 4.51558E-02 + 3.86250E-02 1.57167E-02 -1.57167E-02 -3.86250E-02 -4.51558E-02 -4.04637E-02 + -3.22656E-02 -2.42317E-02 -1.71128E-02 -1.11677E-02 -6.66623E-03 -3.63138E-03 + -1.80708E-03 -8.22823E-04 -3.43314E-04 -1.31413E-04 -4.61892E-05 -1.49184E-05 + -4.43036E-06 -1.21033E-06 -3.04299E-07 -7.04322E-08 + 6.17370E-08 2.66731E-07 1.06091E-06 3.88341E-06 1.30766E-05 4.04869E-05 + 1.15189E-04 3.00930E-04 7.21241E-04 1.58398E-03 3.18307E-03 5.84328E-03 + 9.78947E-03 1.50051E-02 2.12800E-02 2.85002E-02 3.62508E-02 4.13511E-02 + 3.61689E-02 1.49240E-02 -1.49240E-02 -3.61689E-02 -4.13511E-02 -3.62508E-02 + -2.85002E-02 -2.12800E-02 -1.50051E-02 -9.78947E-03 -5.84328E-03 -3.18307E-03 + -1.58398E-03 -7.21241E-04 -3.00930E-04 -1.15189E-04 -4.04869E-05 -1.30766E-05 + -3.88341E-06 -1.06091E-06 -2.66731E-07 -6.17370E-08 + 4.98504E-08 2.15376E-07 8.56649E-07 3.13571E-06 1.05589E-05 3.26917E-05 + 9.30110E-05 2.42990E-04 5.82376E-04 1.27901E-03 2.57014E-03 4.71738E-03 + 7.89726E-03 1.20705E-02 1.69835E-02 2.24087E-02 2.80329E-02 3.17076E-02 + 2.77061E-02 1.14210E-02 -1.14210E-02 -2.77061E-02 -3.17076E-02 -2.80329E-02 + -2.24087E-02 -1.69835E-02 -1.20705E-02 -7.89726E-03 -4.71738E-03 -2.57014E-03 + -1.27901E-03 -5.82376E-04 -2.42990E-04 -9.30110E-05 -3.26917E-05 -1.05589E-05 + -3.13571E-06 -8.56649E-07 -2.15376E-07 -4.98504E-08 + 3.66098E-08 1.58171E-07 6.29118E-07 2.30285E-06 7.75439E-06 2.40086E-05 + 6.83067E-05 1.78451E-04 4.27693E-04 9.39290E-04 1.88743E-03 3.46359E-03 + 5.79253E-03 8.81852E-03 1.22573E-02 1.57285E-02 1.88352E-02 2.03795E-02 + 1.72820E-02 7.02519E-03 -7.02519E-03 -1.72820E-02 -2.03795E-02 -1.88352E-02 + -1.57285E-02 -1.22573E-02 -8.81852E-03 -5.79253E-03 -3.46359E-03 -1.88743E-03 + -9.39290E-04 -4.27693E-04 -1.78451E-04 -6.83067E-05 -2.40086E-05 -7.75439E-06 + -2.30285E-06 -6.29118E-07 -1.58171E-07 -3.66098E-08 + 2.41934E-08 1.04526E-07 4.15750E-07 1.52183E-06 5.12446E-06 1.58660E-05 + 4.51402E-05 1.17928E-04 2.82639E-04 6.20724E-04 1.24727E-03 2.28854E-03 + 3.82473E-03 5.80585E-03 7.99008E-03 9.98286E-03 1.13393E-02 1.14189E-02 + 9.07827E-03 3.56085E-03 -3.56085E-03 -9.07827E-03 -1.14189E-02 -1.13393E-02 + -9.98286E-03 -7.99008E-03 -5.80585E-03 -3.82473E-03 -2.28854E-03 -1.24727E-03 + -6.20724E-04 -2.82639E-04 -1.17928E-04 -4.51402E-05 -1.58660E-05 -5.12446E-06 + -1.52183E-06 -4.15750E-07 -1.04526E-07 -2.41934E-08 + 1.42747E-08 6.16733E-08 2.45303E-07 8.97917E-07 3.02356E-06 9.36134E-06 + 2.66339E-05 6.95807E-05 1.66764E-04 3.66243E-04 7.35913E-04 1.35021E-03 + 2.25585E-03 3.41958E-03 4.68129E-03 5.75438E-03 6.29079E-03 5.94374E-03 + 4.40429E-03 1.65080E-03 -1.65080E-03 -4.40429E-03 -5.94374E-03 -6.29079E-03 + -5.75438E-03 -4.68129E-03 -3.41958E-03 -2.25585E-03 -1.35021E-03 -7.35913E-04 + -3.66243E-04 -1.66764E-04 -6.95807E-05 -2.66339E-05 -9.36134E-06 -3.02356E-06 + -8.97917E-07 -2.45303E-07 -6.16733E-08 -1.42747E-08 + 7.48015E-09 3.23176E-08 1.28542E-07 4.70520E-07 1.58439E-06 4.90546E-06 + 1.39565E-05 3.64612E-05 8.73867E-05 1.91916E-04 3.85627E-04 7.07512E-04 + 1.18196E-03 1.79090E-03 2.44711E-03 2.98913E-03 3.21465E-03 2.94545E-03 + 2.09988E-03 7.65514E-04 -7.65514E-04 -2.09988E-03 -2.94545E-03 -3.21465E-03 + -2.98913E-03 -2.44711E-03 -1.79090E-03 -1.18196E-03 -7.07512E-04 -3.85627E-04 + -1.91916E-04 -8.73867E-05 -3.64612E-05 -1.39565E-05 -4.90546E-06 -1.58439E-06 + -4.70520E-07 -1.28542E-07 -3.23176E-08 -7.48015E-09 + 3.46933E-09 1.49890E-08 5.96183E-08 2.18229E-07 7.34844E-07 2.27517E-06 + 6.47308E-06 1.69109E-05 4.05303E-05 8.90113E-05 1.78855E-04 3.28146E-04 + 5.48186E-04 8.30524E-04 1.13435E-03 1.38347E-03 1.48166E-03 1.34647E-03 + 9.49494E-04 3.43293E-04 -3.43293E-04 -9.49494E-04 -1.34647E-03 -1.48166E-03 + -1.38347E-03 -1.13435E-03 -8.30524E-04 -5.48186E-04 -3.28146E-04 -1.78855E-04 + -8.90113E-05 -4.05303E-05 -1.69109E-05 -6.47308E-06 -2.27517E-06 -7.34844E-07 + -2.18229E-07 -5.96183E-08 -1.49890E-08 -3.46933E-09 + 1.42118E-09 6.14014E-09 2.44221E-08 8.93958E-08 3.01023E-07 9.32006E-07 + 2.65164E-06 6.92740E-06 1.66029E-05 3.64628E-05 7.32666E-05 1.34422E-04 + 2.24559E-04 3.40211E-04 4.64638E-04 5.66548E-04 6.06360E-04 5.50324E-04 + 3.87395E-04 1.39877E-04 -1.39877E-04 -3.87395E-04 -5.50324E-04 -6.06360E-04 + -5.66548E-04 -4.64638E-04 -3.40211E-04 -2.24559E-04 -1.34422E-04 -7.32666E-05 + -3.64628E-05 -1.66029E-05 -6.92740E-06 -2.65164E-06 -9.32006E-07 -3.01023E-07 + -8.93958E-08 -2.44221E-08 -6.14014E-09 -1.42118E-09 + 5.13522E-10 2.21865E-09 8.82458E-09 3.23018E-08 1.08770E-07 3.36766E-07 + 9.58132E-07 2.50311E-06 5.99921E-06 1.31753E-05 2.64738E-05 4.85714E-05 + 8.11410E-05 1.22930E-04 1.67888E-04 2.04707E-04 2.19078E-04 1.98807E-04 + 1.39924E-04 5.05157E-05 -5.05157E-05 -1.39924E-04 -1.98807E-04 -2.19078E-04 + -2.04707E-04 -1.67888E-04 -1.22930E-04 -8.11410E-05 -4.85714E-05 -2.64738E-05 + -1.31753E-05 -5.99921E-06 -2.50311E-06 -9.58132E-07 -3.36766E-07 -1.08770E-07 + -3.23018E-08 -8.82458E-09 -2.21865E-09 -5.13522E-10 + 1.63543E-10 7.06581E-10 2.81040E-09 1.02873E-08 3.46404E-08 1.07251E-07 + 3.05140E-07 7.97175E-07 1.91059E-06 4.19598E-06 8.43120E-06 1.54687E-05 + 2.58413E-05 3.91500E-05 5.34680E-05 6.51936E-05 6.97701E-05 6.33138E-05 + 4.45609E-05 1.60874E-05 -1.60874E-05 -4.45609E-05 -6.33138E-05 -6.97701E-05 + -6.51936E-05 -5.34680E-05 -3.91500E-05 -2.58413E-05 -1.54687E-05 -8.43120E-06 + -4.19598E-06 -1.91059E-06 -7.97175E-07 -3.05140E-07 -1.07251E-07 -3.46404E-08 + -1.02873E-08 -2.81040E-09 -7.06581E-10 -1.63543E-10 + 4.58844E-11 1.98241E-10 7.88496E-10 2.88624E-09 9.71886E-09 3.00909E-08 + 8.56113E-08 2.23659E-07 5.36043E-07 1.17724E-06 2.36549E-06 4.33997E-06 + 7.25014E-06 1.09841E-05 1.50012E-05 1.82910E-05 1.95750E-05 1.77635E-05 + 1.25022E-05 4.51353E-06 -4.51353E-06 -1.25022E-05 -1.77635E-05 -1.95750E-05 + -1.82910E-05 -1.50012E-05 -1.09841E-05 -7.25014E-06 -4.33997E-06 -2.36549E-06 + -1.17724E-06 -5.36043E-07 -2.23659E-07 -8.56113E-08 -3.00909E-08 -9.71886E-09 + -2.88624E-09 -7.88496E-10 -1.98241E-10 -4.58844E-11 + 1.13379E-11 4.89848E-11 1.94835E-10 7.13181E-10 2.40150E-09 7.43536E-09 + 2.11543E-08 5.52653E-08 1.32455E-07 2.90892E-07 5.84506E-07 1.07239E-06 + 1.79149E-06 2.71413E-06 3.70675E-06 4.51964E-06 4.83692E-06 4.38932E-06 + 3.08925E-06 1.11528E-06 -1.11528E-06 -3.08925E-06 -4.38932E-06 -4.83692E-06 + -4.51964E-06 -3.70675E-06 -2.71413E-06 -1.79149E-06 -1.07239E-06 -5.84506E-07 + -2.90892E-07 -1.32455E-07 -5.52653E-08 -2.11543E-08 -7.43536E-09 -2.40150E-09 + -7.13181E-10 -1.94835E-10 -4.89848E-11 -1.13379E-11 + 2.46696E-12 1.06584E-11 4.23932E-11 1.55178E-10 5.22531E-10 1.61782E-09 + 4.60286E-09 1.20249E-08 2.88201E-08 6.32939E-08 1.27180E-07 2.33337E-07 + 3.89801E-07 5.90555E-07 8.06534E-07 9.83407E-07 1.05244E-06 9.55050E-07 + 6.72174E-07 2.42668E-07 -2.42668E-07 -6.72174E-07 -9.55050E-07 -1.05244E-06 + -9.83407E-07 -8.06534E-07 -5.90555E-07 -3.89801E-07 -2.33337E-07 -1.27180E-07 + -6.32939E-08 -2.88201E-08 -1.20249E-08 -4.60286E-09 -1.61782E-09 -5.22531E-10 + -1.55178E-10 -4.23932E-11 -1.06584E-11 -2.46696E-12 + 4.72616E-13 2.04191E-12 8.12163E-12 2.97287E-11 1.00106E-10 3.09940E-10 + 8.81809E-10 2.30372E-09 5.52132E-09 1.21258E-08 2.43649E-08 4.47023E-08 + 7.46775E-08 1.13138E-07 1.54515E-07 1.88400E-07 2.01625E-07 1.82967E-07 + 1.28774E-07 4.64900E-08 -4.64900E-08 -1.28774E-07 -1.82967E-07 -2.01625E-07 + -1.88400E-07 -1.54515E-07 -1.13138E-07 -7.46775E-08 -4.47023E-08 -2.43649E-08 + -1.21258E-08 -5.52132E-09 -2.30372E-09 -8.81809E-10 -3.09940E-10 -1.00106E-10 + -2.97287E-11 -8.12163E-12 -2.04191E-12 -4.72616E-13 + 7.97164E-14 3.44410E-13 1.36988E-12 5.01435E-12 1.68849E-11 5.22777E-11 + 1.48735E-10 3.88569E-10 9.31284E-10 2.04526E-09 4.10964E-09 7.53995E-09 + 1.25959E-08 1.90830E-08 2.60620E-08 3.17775E-08 3.40082E-08 3.08611E-08 + 2.17204E-08 7.84149E-09 -7.84149E-09 -2.17204E-08 -3.08611E-08 -3.40082E-08 + -3.17775E-08 -2.60620E-08 -1.90830E-08 -1.25959E-08 -7.53995E-09 -4.10964E-09 + -2.04526E-09 -9.31284E-10 -3.88569E-10 -1.48735E-10 -5.22777E-11 -1.68849E-11 + -5.01435E-12 -1.36988E-12 -3.44410E-13 -7.97164E-14 + 1.18376E-14 5.11436E-14 2.03422E-13 7.44612E-13 2.50734E-12 7.76304E-12 + 2.20866E-11 5.77010E-11 1.38292E-10 3.03713E-10 6.10266E-10 1.11965E-09 + 1.87044E-09 2.83375E-09 3.87011E-09 4.71883E-09 5.05008E-09 4.58276E-09 + 3.22539E-09 1.16443E-09 -1.16443E-09 -3.22539E-09 -4.58276E-09 -5.05008E-09 + -4.71883E-09 -3.87011E-09 -2.83375E-09 -1.87044E-09 -1.11965E-09 -6.10266E-10 + -3.03713E-10 -1.38292E-10 -5.77010E-11 -2.20866E-11 -7.76304E-12 -2.50734E-12 + -7.44612E-13 -2.03422E-13 -5.11436E-14 -1.18376E-14 + 1.54755E-15 6.68611E-15 2.65937E-14 9.73447E-14 3.27789E-13 1.01488E-12 + 2.88742E-12 7.54337E-12 1.80792E-11 3.97050E-11 7.97813E-11 1.46375E-10 + 2.44526E-10 3.70462E-10 5.05948E-10 6.16902E-10 6.60208E-10 5.99114E-10 + 4.21662E-10 1.52228E-10 -1.52228E-10 -4.21662E-10 -5.99114E-10 -6.60208E-10 + -6.16902E-10 -5.05948E-10 -3.70462E-10 -2.44526E-10 -1.46375E-10 -7.97813E-11 + -3.97050E-11 -1.80792E-11 -7.54337E-12 -2.88742E-12 -1.01488E-12 -3.27789E-13 + -9.73447E-14 -2.65937E-14 -6.68611E-15 -1.54755E-15 + 1.78110E-16 7.69515E-16 3.06071E-15 1.12036E-14 3.77258E-14 1.16804E-13 + 3.32318E-13 8.68178E-13 2.08076E-12 4.56971E-12 9.18216E-12 1.68465E-11 + 2.81429E-11 4.26370E-11 5.82303E-11 7.10003E-11 7.59844E-11 6.89530E-11 + 4.85298E-11 1.75202E-11 -1.75202E-11 -4.85298E-11 -6.89530E-11 -7.59844E-11 + -7.10003E-11 -5.82303E-11 -4.26370E-11 -2.81429E-11 -1.68465E-11 -9.18216E-12 + -4.56971E-12 -2.08076E-12 -8.68178E-13 -3.32318E-13 -1.16804E-13 -3.77258E-14 + -1.12036E-14 -3.06071E-15 -7.69515E-16 -1.78110E-16 + 1.14201E-16 4.93398E-16 1.96247E-15 7.18350E-15 2.41890E-14 7.48924E-14 + 2.13076E-13 5.56659E-13 1.33415E-12 2.93001E-12 5.88742E-12 1.08016E-11 + 1.80447E-11 2.73380E-11 3.73361E-11 4.55240E-11 4.87197E-11 4.42113E-11 + 3.11164E-11 1.12336E-11 -1.12336E-11 -3.11164E-11 -4.42113E-11 -4.87197E-11 + -4.55240E-11 -3.73361E-11 -2.73380E-11 -1.80447E-11 -1.08016E-11 -5.88742E-12 + -2.93001E-12 -1.33415E-12 -5.56659E-13 -2.13076E-13 -7.48924E-14 -2.41890E-14 + -7.18350E-15 -1.96247E-15 -4.93398E-16 -1.14201E-16 + 9.92259E-16 4.28700E-15 1.70514E-14 6.24155E-14 2.10172E-13 6.50720E-13 + 1.85136E-12 4.83666E-12 1.15920E-11 2.54580E-11 5.11542E-11 9.38526E-11 + 1.56786E-10 2.37533E-10 3.24404E-10 3.95546E-10 4.23312E-10 3.84140E-10 + 2.70362E-10 9.76059E-11 -9.76059E-11 -2.70362E-10 -3.84140E-10 -4.23312E-10 + -3.95546E-10 -3.24404E-10 -2.37533E-10 -1.56786E-10 -9.38526E-11 -5.11542E-11 + -2.54580E-11 -1.15920E-11 -4.83666E-12 -1.85136E-12 -6.50720E-13 -2.10172E-13 + -6.24155E-14 -1.70514E-14 -4.28700E-15 -9.92259E-16 + 7.59002E-15 3.27923E-14 1.30430E-13 4.77431E-13 1.60766E-12 4.97751E-12 + 1.41615E-11 3.69967E-11 8.86701E-11 1.94734E-10 3.91290E-10 7.17900E-10 + 1.19929E-09 1.81694E-09 2.48144E-09 3.02562E-09 3.23801E-09 2.93838E-09 + 2.06806E-09 7.46610E-10 -7.46610E-10 -2.06806E-09 -2.93838E-09 -3.23801E-09 + -3.02562E-09 -2.48144E-09 -1.81694E-09 -1.19929E-09 -7.17900E-10 -3.91290E-10 + -1.94734E-10 -8.86701E-11 -3.69967E-11 -1.41615E-11 -4.97751E-12 -1.60766E-12 + -4.77431E-13 -1.30430E-13 -3.27923E-14 -7.59002E-15 + 5.11126E-14 2.20829E-13 8.78339E-13 3.21510E-12 1.08262E-11 3.35195E-11 + 9.53660E-11 2.49143E-10 5.97121E-10 1.31138E-09 2.63502E-09 4.83447E-09 + 8.07623E-09 1.22356E-08 1.67105E-08 2.03751E-08 2.18054E-08 1.97876E-08 + 1.39267E-08 5.02781E-09 -5.02781E-09 -1.39267E-08 -1.97876E-08 -2.18054E-08 + -2.03751E-08 -1.67105E-08 -1.22356E-08 -8.07623E-09 -4.83447E-09 -2.63502E-09 + -1.31138E-09 -5.97121E-10 -2.49143E-10 -9.53660E-11 -3.35195E-11 -1.08262E-11 + -3.21510E-12 -8.78339E-13 -2.20829E-13 -5.11126E-14 + 3.03032E-13 1.30923E-12 5.20743E-12 1.90615E-11 6.41858E-11 1.98728E-10 + 5.65398E-10 1.47710E-09 3.54016E-09 7.77479E-09 1.56223E-08 2.86622E-08 + 4.78817E-08 7.25416E-08 9.90717E-08 1.20798E-07 1.29278E-07 1.17315E-07 + 8.25675E-08 2.98085E-08 -2.98085E-08 -8.25675E-08 -1.17315E-07 -1.29278E-07 + -1.20798E-07 -9.90717E-08 -7.25416E-08 -4.78817E-08 -2.86622E-08 -1.56223E-08 + -7.77479E-09 -3.54016E-09 -1.47710E-09 -5.65398E-10 -1.98728E-10 -6.41858E-11 + -1.90615E-11 -5.20743E-12 -1.30923E-12 -3.03032E-13 + 1.58176E-12 6.83393E-12 2.71817E-11 9.94968E-11 3.35036E-10 1.03732E-09 + 2.95126E-09 7.71014E-09 1.84789E-08 4.05828E-08 8.15451E-08 1.49611E-07 + 2.49933E-07 3.78652E-07 5.17134E-07 6.30541E-07 6.74804E-07 6.12359E-07 + 4.30985E-07 1.55594E-07 -1.55594E-07 -4.30985E-07 -6.12359E-07 -6.74804E-07 + -6.30541E-07 -5.17134E-07 -3.78652E-07 -2.49933E-07 -1.49611E-07 -8.15451E-08 + -4.05828E-08 -1.84789E-08 -7.71014E-09 -2.95126E-09 -1.03732E-09 -3.35036E-10 + -9.94968E-11 -2.71817E-11 -6.83393E-12 -1.58176E-12 + 7.26963E-12 3.14081E-11 1.24924E-10 4.57278E-10 1.53979E-09 4.76740E-09 + 1.35637E-08 3.54350E-08 8.49273E-08 1.86515E-07 3.74773E-07 6.87597E-07 + 1.14867E-06 1.74025E-06 2.37670E-06 2.89791E-06 3.10133E-06 2.81434E-06 + 1.98076E-06 7.15095E-07 -7.15095E-07 -1.98076E-06 -2.81434E-06 -3.10133E-06 + -2.89791E-06 -2.37670E-06 -1.74025E-06 -1.14867E-06 -6.87597E-07 -3.74773E-07 + -1.86515E-07 -8.49273E-08 -3.54350E-08 -1.35637E-08 -4.76740E-09 -1.53979E-09 + -4.57278E-10 -1.24924E-10 -3.14081E-11 -7.26963E-12 + 2.94202E-11 1.27108E-10 5.05568E-10 1.85060E-09 6.23154E-09 1.92937E-08 + 5.48923E-08 1.43405E-07 3.43700E-07 7.54823E-07 1.51671E-06 2.78270E-06 + 4.64865E-06 7.04277E-06 9.61848E-06 1.17278E-05 1.25511E-05 1.13896E-05 + 8.01614E-06 2.89399E-06 -2.89399E-06 -8.01614E-06 -1.13896E-05 -1.25511E-05 + -1.17278E-05 -9.61848E-06 -7.04277E-06 -4.64865E-06 -2.78270E-06 -1.51671E-06 + -7.54823E-07 -3.43700E-07 -1.43405E-07 -5.48923E-08 -1.92937E-08 -6.23154E-09 + -1.85060E-09 -5.05568E-10 -1.27108E-10 -2.94202E-11 + 1.04861E-10 4.53046E-10 1.80197E-09 6.59600E-09 2.22108E-08 6.87674E-08 + 1.95650E-07 5.11133E-07 1.22503E-06 2.69038E-06 5.40592E-06 9.91824E-06 + 1.65689E-05 2.51022E-05 3.42826E-05 4.18008E-05 4.47352E-05 4.05955E-05 + 2.85716E-05 1.03149E-05 -1.03149E-05 -2.85716E-05 -4.05955E-05 -4.47352E-05 + -4.18008E-05 -3.42826E-05 -2.51022E-05 -1.65689E-05 -9.91824E-06 -5.40592E-06 + -2.69038E-06 -1.22503E-06 -5.11133E-07 -1.95650E-07 -6.87674E-08 -2.22108E-08 + -6.59600E-09 -1.80197E-09 -4.53046E-10 -1.04861E-10 + 3.29260E-10 1.42255E-09 5.65814E-09 2.07113E-08 6.97413E-08 2.15928E-07 + 6.14335E-07 1.60494E-06 3.84657E-06 8.44772E-06 1.69745E-05 3.11430E-05 + 5.20260E-05 7.88203E-05 1.07647E-04 1.31254E-04 1.40468E-04 1.27471E-04 + 8.97161E-05 3.23895E-05 -3.23895E-05 -8.97161E-05 -1.27471E-04 -1.40468E-04 + -1.31254E-04 -1.07647E-04 -7.88203E-05 -5.20260E-05 -3.11430E-05 -1.69745E-05 + -8.44772E-06 -3.84657E-06 -1.60494E-06 -6.14335E-07 -2.15928E-07 -6.97413E-08 + -2.07113E-08 -5.65814E-09 -1.42255E-09 -3.29260E-10 + 9.11233E-10 3.93694E-09 1.56590E-08 5.73188E-08 1.93010E-07 5.97584E-07 + 1.70018E-06 4.44171E-06 1.06455E-05 2.33792E-05 4.69771E-05 8.61888E-05 + 1.43983E-04 2.18137E-04 2.97916E-04 3.63257E-04 3.88783E-04 3.52854E-04 + 2.48390E-04 8.96869E-05 -8.96869E-05 -2.48390E-04 -3.52854E-04 -3.88783E-04 + -3.63257E-04 -2.97916E-04 -2.18137E-04 -1.43983E-04 -8.61888E-05 -4.69771E-05 + -2.33792E-05 -1.06455E-05 -4.44171E-06 -1.70018E-06 -5.97584E-07 -1.93010E-07 + -5.73188E-08 -1.56590E-08 -3.93694E-09 -9.11233E-10 + 2.22446E-09 9.61067E-09 3.82261E-08 1.39924E-07 4.71168E-07 1.45880E-06 + 4.15041E-06 1.08429E-05 2.59872E-05 5.70723E-05 1.14678E-04 2.10400E-04 + 3.51485E-04 5.32512E-04 7.27309E-04 8.87026E-04 9.49982E-04 8.63370E-04 + 6.08911E-04 2.20182E-04 -2.20182E-04 -6.08911E-04 -8.63370E-04 -9.49982E-04 + -8.87026E-04 -7.27309E-04 -5.32512E-04 -3.51485E-04 -2.10400E-04 -1.14678E-04 + -5.70723E-05 -2.59872E-05 -1.08429E-05 -4.15041E-06 -1.45880E-06 -4.71168E-07 + -1.39924E-07 -3.82261E-08 -9.61067E-09 -2.22446E-09 + 4.79613E-09 2.07214E-08 8.24186E-08 3.01688E-07 1.01588E-06 3.14529E-06 + 8.94863E-06 2.33782E-05 5.60306E-05 1.23053E-04 2.47256E-04 4.53642E-04 + 7.57841E-04 1.14823E-03 1.56883E-03 1.91609E-03 2.06068E-03 1.88893E-03 + 1.34786E-03 4.91756E-04 -4.91756E-04 -1.34786E-03 -1.88893E-03 -2.06068E-03 + -1.91609E-03 -1.56883E-03 -1.14823E-03 -7.57841E-04 -4.53642E-04 -2.47256E-04 + -1.23053E-04 -5.60306E-05 -2.33782E-05 -8.94863E-06 -3.14529E-06 -1.01588E-06 + -3.01688E-07 -8.24186E-08 -2.07214E-08 -4.79613E-09 + 9.15269E-09 3.95437E-08 1.57283E-07 5.75726E-07 1.93865E-06 6.00230E-06 + 1.70771E-05 4.46138E-05 1.06926E-04 2.34827E-04 4.71852E-04 8.65713E-04 + 1.44630E-03 2.19197E-03 2.99912E-03 3.68306E-03 4.02289E-03 3.80247E-03 + 2.82330E-03 1.06033E-03 -1.06033E-03 -2.82330E-03 -3.80247E-03 -4.02289E-03 + -3.68306E-03 -2.99912E-03 -2.19197E-03 -1.44630E-03 -8.65713E-04 -4.71852E-04 + -2.34827E-04 -1.06926E-04 -4.46138E-05 -1.70771E-05 -6.00230E-06 -1.93865E-06 + -5.75726E-07 -1.57283E-07 -3.95437E-08 -9.15269E-09 + 1.55124E-08 6.70203E-08 2.66571E-07 9.75765E-07 3.28570E-06 1.01730E-05 + 2.89430E-05 7.56133E-05 1.81223E-04 3.97995E-04 7.99716E-04 1.46728E-03 + 2.45164E-03 3.71829E-03 5.10438E-03 6.34438E-03 7.15536E-03 7.16745E-03 + 5.69287E-03 2.23557E-03 -2.23557E-03 -5.69287E-03 -7.16745E-03 -7.15536E-03 + -6.34438E-03 -5.10438E-03 -3.71829E-03 -2.45164E-03 -1.46728E-03 -7.99716E-04 + -3.97995E-04 -1.81223E-04 -7.56133E-05 -2.89430E-05 -1.01730E-05 -3.28570E-06 + -9.75765E-07 -2.66571E-07 -6.70203E-08 -1.55124E-08 + 2.34735E-08 1.01416E-07 4.03378E-07 1.47654E-06 4.97196E-06 1.53938E-05 + 4.37969E-05 1.14419E-04 2.74228E-04 6.02252E-04 1.21015E-03 2.22043E-03 + 3.71095E-03 5.63478E-03 7.77089E-03 9.80001E-03 1.14328E-02 1.20731E-02 + 1.01061E-02 4.09254E-03 -4.09254E-03 -1.01061E-02 -1.20731E-02 -1.14328E-02 + -9.80001E-03 -7.77089E-03 -5.63478E-03 -3.71095E-03 -2.22043E-03 -1.21015E-03 + -6.02252E-04 -2.74228E-04 -1.14419E-04 -4.37969E-05 -1.53938E-05 -4.97196E-06 + -1.47654E-06 -4.03378E-07 -1.01416E-07 -2.34735E-08 + 3.19631E-08 1.38095E-07 5.49266E-07 2.01056E-06 6.77016E-06 2.09613E-05 + 5.96368E-05 1.55801E-04 3.73408E-04 8.20068E-04 1.64784E-03 3.02370E-03 + 5.05500E-03 7.68472E-03 1.06359E-02 1.35203E-02 1.59648E-02 1.70505E-02 + 1.43579E-02 5.82395E-03 -5.82395E-03 -1.43579E-02 -1.70505E-02 -1.59648E-02 + -1.35203E-02 -1.06359E-02 -7.68472E-03 -5.05500E-03 -3.02370E-03 -1.64784E-03 + -8.20068E-04 -3.73408E-04 -1.55801E-04 -5.96368E-05 -2.09613E-05 -6.77016E-06 + -2.01056E-06 -5.49266E-07 -1.38095E-07 -3.19631E-08 + 3.95845E-08 1.71023E-07 6.80236E-07 2.48996E-06 8.38447E-06 2.59594E-05 + 7.38569E-05 1.92950E-04 4.62445E-04 1.01561E-03 2.04078E-03 3.74489E-03 + 6.26190E-03 9.52510E-03 1.31939E-02 1.67420E-02 1.95338E-02 2.03036E-02 + 1.65464E-02 6.56964E-03 -6.56964E-03 -1.65464E-02 -2.03036E-02 -1.95338E-02 + -1.67420E-02 -1.31939E-02 -9.52510E-03 -6.26190E-03 -3.74489E-03 -2.04078E-03 + -1.01561E-03 -4.62445E-04 -1.92950E-04 -7.38569E-05 -2.59594E-05 -8.38447E-06 + -2.48996E-06 -6.80236E-07 -1.71023E-07 -3.95845E-08 + 4.51597E-08 1.95110E-07 7.76043E-07 2.84066E-06 9.56537E-06 2.96156E-05 + 8.42592E-05 2.20126E-04 5.27577E-04 1.15865E-03 2.32821E-03 4.27231E-03 + 7.14349E-03 1.08624E-02 1.50170E-02 1.89064E-02 2.15906E-02 2.16012E-02 + 1.68626E-02 6.51057E-03 -6.51057E-03 -1.68626E-02 -2.16012E-02 -2.15906E-02 + -1.89064E-02 -1.50170E-02 -1.08624E-02 -7.14349E-03 -4.27231E-03 -2.32821E-03 + -1.15865E-03 -5.27577E-04 -2.20126E-04 -8.42592E-05 -2.96156E-05 -9.56537E-06 + -2.84066E-06 -7.76043E-07 -1.95110E-07 -4.51597E-08 + 4.80473E-08 2.07586E-07 8.25665E-07 3.02229E-06 1.01770E-05 3.15093E-05 + 8.96469E-05 2.34202E-04 5.61312E-04 1.23274E-03 2.47706E-03 4.54533E-03 + 7.59879E-03 1.15467E-02 1.59225E-02 1.98980E-02 2.23493E-02 2.17741E-02 + 1.65115E-02 6.25543E-03 -6.25543E-03 -1.65115E-02 -2.17741E-02 -2.23493E-02 + -1.98980E-02 -1.59225E-02 -1.15467E-02 -7.59879E-03 -4.54533E-03 -2.47706E-03 + -1.23274E-03 -5.61312E-04 -2.34202E-04 -8.96469E-05 -3.15093E-05 -1.01770E-05 + -3.02229E-06 -8.25665E-07 -2.07586E-07 -4.80473E-08 + 4.80473E-08 2.07586E-07 8.25665E-07 3.02229E-06 1.01770E-05 3.15093E-05 + 8.96469E-05 2.34202E-04 5.61312E-04 1.23274E-03 2.47706E-03 4.54533E-03 + 7.59879E-03 1.15467E-02 1.59225E-02 1.98980E-02 2.23493E-02 2.17741E-02 + 1.65115E-02 6.25543E-03 -6.25543E-03 -1.65115E-02 -2.17741E-02 -2.23493E-02 + -1.98980E-02 -1.59225E-02 -1.15467E-02 -7.59879E-03 -4.54533E-03 -2.47706E-03 + -1.23274E-03 -5.61312E-04 -2.34202E-04 -8.96469E-05 -3.15093E-05 -1.01770E-05 + -3.02229E-06 -8.25665E-07 -2.07586E-07 -4.80473E-08 + 4.51597E-08 1.95110E-07 7.76043E-07 2.84066E-06 9.56537E-06 2.96156E-05 + 8.42592E-05 2.20126E-04 5.27577E-04 1.15865E-03 2.32821E-03 4.27231E-03 + 7.14349E-03 1.08624E-02 1.50170E-02 1.89064E-02 2.15906E-02 2.16012E-02 + 1.68626E-02 6.51057E-03 -6.51057E-03 -1.68626E-02 -2.16012E-02 -2.15906E-02 + -1.89064E-02 -1.50170E-02 -1.08624E-02 -7.14349E-03 -4.27231E-03 -2.32821E-03 + -1.15865E-03 -5.27577E-04 -2.20126E-04 -8.42592E-05 -2.96156E-05 -9.56537E-06 + -2.84066E-06 -7.76043E-07 -1.95110E-07 -4.51597E-08 + 3.95845E-08 1.71023E-07 6.80236E-07 2.48996E-06 8.38447E-06 2.59594E-05 + 7.38569E-05 1.92950E-04 4.62445E-04 1.01561E-03 2.04078E-03 3.74489E-03 + 6.26190E-03 9.52510E-03 1.31939E-02 1.67420E-02 1.95338E-02 2.03036E-02 + 1.65464E-02 6.56964E-03 -6.56964E-03 -1.65464E-02 -2.03036E-02 -1.95338E-02 + -1.67420E-02 -1.31939E-02 -9.52510E-03 -6.26190E-03 -3.74489E-03 -2.04078E-03 + -1.01561E-03 -4.62445E-04 -1.92950E-04 -7.38569E-05 -2.59594E-05 -8.38447E-06 + -2.48996E-06 -6.80236E-07 -1.71023E-07 -3.95845E-08 + 3.19631E-08 1.38095E-07 5.49266E-07 2.01056E-06 6.77016E-06 2.09613E-05 + 5.96368E-05 1.55801E-04 3.73408E-04 8.20068E-04 1.64784E-03 3.02370E-03 + 5.05500E-03 7.68472E-03 1.06359E-02 1.35203E-02 1.59648E-02 1.70505E-02 + 1.43579E-02 5.82395E-03 -5.82395E-03 -1.43579E-02 -1.70505E-02 -1.59648E-02 + -1.35203E-02 -1.06359E-02 -7.68472E-03 -5.05500E-03 -3.02370E-03 -1.64784E-03 + -8.20068E-04 -3.73408E-04 -1.55801E-04 -5.96368E-05 -2.09613E-05 -6.77016E-06 + -2.01056E-06 -5.49266E-07 -1.38095E-07 -3.19631E-08 + 2.34735E-08 1.01416E-07 4.03378E-07 1.47654E-06 4.97196E-06 1.53938E-05 + 4.37969E-05 1.14419E-04 2.74228E-04 6.02252E-04 1.21015E-03 2.22043E-03 + 3.71095E-03 5.63478E-03 7.77089E-03 9.80001E-03 1.14328E-02 1.20731E-02 + 1.01061E-02 4.09254E-03 -4.09254E-03 -1.01061E-02 -1.20731E-02 -1.14328E-02 + -9.80001E-03 -7.77089E-03 -5.63478E-03 -3.71095E-03 -2.22043E-03 -1.21015E-03 + -6.02252E-04 -2.74228E-04 -1.14419E-04 -4.37969E-05 -1.53938E-05 -4.97196E-06 + -1.47654E-06 -4.03378E-07 -1.01416E-07 -2.34735E-08 + 1.55124E-08 6.70203E-08 2.66571E-07 9.75765E-07 3.28570E-06 1.01730E-05 + 2.89430E-05 7.56133E-05 1.81223E-04 3.97995E-04 7.99716E-04 1.46728E-03 + 2.45164E-03 3.71829E-03 5.10438E-03 6.34438E-03 7.15536E-03 7.16745E-03 + 5.69287E-03 2.23557E-03 -2.23557E-03 -5.69287E-03 -7.16745E-03 -7.15536E-03 + -6.34438E-03 -5.10438E-03 -3.71829E-03 -2.45164E-03 -1.46728E-03 -7.99716E-04 + -3.97995E-04 -1.81223E-04 -7.56133E-05 -2.89430E-05 -1.01730E-05 -3.28570E-06 + -9.75765E-07 -2.66571E-07 -6.70203E-08 -1.55124E-08 + 9.15269E-09 3.95437E-08 1.57283E-07 5.75726E-07 1.93865E-06 6.00230E-06 + 1.70771E-05 4.46138E-05 1.06926E-04 2.34827E-04 4.71852E-04 8.65713E-04 + 1.44630E-03 2.19197E-03 2.99912E-03 3.68306E-03 4.02289E-03 3.80247E-03 + 2.82330E-03 1.06033E-03 -1.06033E-03 -2.82330E-03 -3.80247E-03 -4.02289E-03 + -3.68306E-03 -2.99912E-03 -2.19197E-03 -1.44630E-03 -8.65713E-04 -4.71852E-04 + -2.34827E-04 -1.06926E-04 -4.46138E-05 -1.70771E-05 -6.00230E-06 -1.93865E-06 + -5.75726E-07 -1.57283E-07 -3.95437E-08 -9.15269E-09 + 4.79613E-09 2.07214E-08 8.24186E-08 3.01688E-07 1.01588E-06 3.14529E-06 + 8.94863E-06 2.33782E-05 5.60306E-05 1.23053E-04 2.47256E-04 4.53642E-04 + 7.57841E-04 1.14823E-03 1.56883E-03 1.91609E-03 2.06068E-03 1.88893E-03 + 1.34786E-03 4.91756E-04 -4.91756E-04 -1.34786E-03 -1.88893E-03 -2.06068E-03 + -1.91609E-03 -1.56883E-03 -1.14823E-03 -7.57841E-04 -4.53642E-04 -2.47256E-04 + -1.23053E-04 -5.60306E-05 -2.33782E-05 -8.94863E-06 -3.14529E-06 -1.01588E-06 + -3.01688E-07 -8.24186E-08 -2.07214E-08 -4.79613E-09 + 2.22446E-09 9.61067E-09 3.82261E-08 1.39924E-07 4.71168E-07 1.45880E-06 + 4.15041E-06 1.08429E-05 2.59872E-05 5.70723E-05 1.14678E-04 2.10400E-04 + 3.51485E-04 5.32512E-04 7.27309E-04 8.87026E-04 9.49982E-04 8.63370E-04 + 6.08911E-04 2.20182E-04 -2.20182E-04 -6.08911E-04 -8.63370E-04 -9.49982E-04 + -8.87026E-04 -7.27309E-04 -5.32512E-04 -3.51485E-04 -2.10400E-04 -1.14678E-04 + -5.70723E-05 -2.59872E-05 -1.08429E-05 -4.15041E-06 -1.45880E-06 -4.71168E-07 + -1.39924E-07 -3.82261E-08 -9.61067E-09 -2.22446E-09 + 9.11233E-10 3.93694E-09 1.56590E-08 5.73188E-08 1.93010E-07 5.97584E-07 + 1.70018E-06 4.44171E-06 1.06455E-05 2.33792E-05 4.69771E-05 8.61888E-05 + 1.43983E-04 2.18137E-04 2.97916E-04 3.63257E-04 3.88783E-04 3.52854E-04 + 2.48390E-04 8.96869E-05 -8.96869E-05 -2.48390E-04 -3.52854E-04 -3.88783E-04 + -3.63257E-04 -2.97916E-04 -2.18137E-04 -1.43983E-04 -8.61888E-05 -4.69771E-05 + -2.33792E-05 -1.06455E-05 -4.44171E-06 -1.70018E-06 -5.97584E-07 -1.93010E-07 + -5.73188E-08 -1.56590E-08 -3.93694E-09 -9.11233E-10 + 3.29260E-10 1.42255E-09 5.65814E-09 2.07113E-08 6.97413E-08 2.15928E-07 + 6.14335E-07 1.60494E-06 3.84657E-06 8.44772E-06 1.69745E-05 3.11430E-05 + 5.20260E-05 7.88203E-05 1.07647E-04 1.31254E-04 1.40468E-04 1.27471E-04 + 8.97161E-05 3.23895E-05 -3.23895E-05 -8.97161E-05 -1.27471E-04 -1.40468E-04 + -1.31254E-04 -1.07647E-04 -7.88203E-05 -5.20260E-05 -3.11430E-05 -1.69745E-05 + -8.44772E-06 -3.84657E-06 -1.60494E-06 -6.14335E-07 -2.15928E-07 -6.97413E-08 + -2.07113E-08 -5.65814E-09 -1.42255E-09 -3.29260E-10 + 1.04861E-10 4.53046E-10 1.80197E-09 6.59600E-09 2.22108E-08 6.87674E-08 + 1.95650E-07 5.11133E-07 1.22503E-06 2.69038E-06 5.40592E-06 9.91824E-06 + 1.65689E-05 2.51022E-05 3.42826E-05 4.18008E-05 4.47352E-05 4.05955E-05 + 2.85716E-05 1.03149E-05 -1.03149E-05 -2.85716E-05 -4.05955E-05 -4.47352E-05 + -4.18008E-05 -3.42826E-05 -2.51022E-05 -1.65689E-05 -9.91824E-06 -5.40592E-06 + -2.69038E-06 -1.22503E-06 -5.11133E-07 -1.95650E-07 -6.87674E-08 -2.22108E-08 + -6.59600E-09 -1.80197E-09 -4.53046E-10 -1.04861E-10 + 2.94202E-11 1.27108E-10 5.05568E-10 1.85060E-09 6.23154E-09 1.92937E-08 + 5.48923E-08 1.43405E-07 3.43700E-07 7.54823E-07 1.51671E-06 2.78270E-06 + 4.64865E-06 7.04277E-06 9.61848E-06 1.17278E-05 1.25511E-05 1.13896E-05 + 8.01614E-06 2.89399E-06 -2.89399E-06 -8.01614E-06 -1.13896E-05 -1.25511E-05 + -1.17278E-05 -9.61848E-06 -7.04277E-06 -4.64865E-06 -2.78270E-06 -1.51671E-06 + -7.54823E-07 -3.43700E-07 -1.43405E-07 -5.48923E-08 -1.92937E-08 -6.23154E-09 + -1.85060E-09 -5.05568E-10 -1.27108E-10 -2.94202E-11 + 7.26963E-12 3.14081E-11 1.24924E-10 4.57278E-10 1.53979E-09 4.76740E-09 + 1.35637E-08 3.54350E-08 8.49273E-08 1.86515E-07 3.74773E-07 6.87597E-07 + 1.14867E-06 1.74025E-06 2.37670E-06 2.89791E-06 3.10133E-06 2.81434E-06 + 1.98076E-06 7.15095E-07 -7.15095E-07 -1.98076E-06 -2.81434E-06 -3.10133E-06 + -2.89791E-06 -2.37670E-06 -1.74025E-06 -1.14867E-06 -6.87597E-07 -3.74773E-07 + -1.86515E-07 -8.49273E-08 -3.54350E-08 -1.35637E-08 -4.76740E-09 -1.53979E-09 + -4.57278E-10 -1.24924E-10 -3.14081E-11 -7.26963E-12 + 1.58176E-12 6.83393E-12 2.71817E-11 9.94968E-11 3.35036E-10 1.03732E-09 + 2.95126E-09 7.71014E-09 1.84789E-08 4.05828E-08 8.15451E-08 1.49611E-07 + 2.49933E-07 3.78652E-07 5.17134E-07 6.30541E-07 6.74804E-07 6.12359E-07 + 4.30985E-07 1.55594E-07 -1.55594E-07 -4.30985E-07 -6.12359E-07 -6.74804E-07 + -6.30541E-07 -5.17134E-07 -3.78652E-07 -2.49933E-07 -1.49611E-07 -8.15451E-08 + -4.05828E-08 -1.84789E-08 -7.71014E-09 -2.95126E-09 -1.03732E-09 -3.35036E-10 + -9.94968E-11 -2.71817E-11 -6.83393E-12 -1.58176E-12 + 3.03032E-13 1.30923E-12 5.20743E-12 1.90615E-11 6.41858E-11 1.98728E-10 + 5.65398E-10 1.47710E-09 3.54016E-09 7.77479E-09 1.56223E-08 2.86622E-08 + 4.78817E-08 7.25416E-08 9.90717E-08 1.20798E-07 1.29278E-07 1.17315E-07 + 8.25675E-08 2.98085E-08 -2.98085E-08 -8.25675E-08 -1.17315E-07 -1.29278E-07 + -1.20798E-07 -9.90717E-08 -7.25416E-08 -4.78817E-08 -2.86622E-08 -1.56223E-08 + -7.77479E-09 -3.54016E-09 -1.47710E-09 -5.65398E-10 -1.98728E-10 -6.41858E-11 + -1.90615E-11 -5.20743E-12 -1.30923E-12 -3.03032E-13 + 5.11126E-14 2.20829E-13 8.78339E-13 3.21510E-12 1.08262E-11 3.35195E-11 + 9.53660E-11 2.49143E-10 5.97121E-10 1.31138E-09 2.63502E-09 4.83447E-09 + 8.07623E-09 1.22356E-08 1.67105E-08 2.03751E-08 2.18054E-08 1.97876E-08 + 1.39267E-08 5.02781E-09 -5.02781E-09 -1.39267E-08 -1.97876E-08 -2.18054E-08 + -2.03751E-08 -1.67105E-08 -1.22356E-08 -8.07623E-09 -4.83447E-09 -2.63502E-09 + -1.31138E-09 -5.97121E-10 -2.49143E-10 -9.53660E-11 -3.35195E-11 -1.08262E-11 + -3.21510E-12 -8.78339E-13 -2.20829E-13 -5.11126E-14 + 7.59002E-15 3.27923E-14 1.30430E-13 4.77431E-13 1.60766E-12 4.97751E-12 + 1.41615E-11 3.69967E-11 8.86701E-11 1.94734E-10 3.91290E-10 7.17900E-10 + 1.19929E-09 1.81694E-09 2.48144E-09 3.02562E-09 3.23801E-09 2.93838E-09 + 2.06806E-09 7.46610E-10 -7.46610E-10 -2.06806E-09 -2.93838E-09 -3.23801E-09 + -3.02562E-09 -2.48144E-09 -1.81694E-09 -1.19929E-09 -7.17900E-10 -3.91290E-10 + -1.94734E-10 -8.86701E-11 -3.69967E-11 -1.41615E-11 -4.97751E-12 -1.60766E-12 + -4.77431E-13 -1.30430E-13 -3.27923E-14 -7.59002E-15 + 9.92259E-16 4.28700E-15 1.70514E-14 6.24155E-14 2.10172E-13 6.50720E-13 + 1.85136E-12 4.83666E-12 1.15920E-11 2.54580E-11 5.11542E-11 9.38526E-11 + 1.56786E-10 2.37533E-10 3.24404E-10 3.95546E-10 4.23312E-10 3.84140E-10 + 2.70362E-10 9.76059E-11 -9.76059E-11 -2.70362E-10 -3.84140E-10 -4.23312E-10 + -3.95546E-10 -3.24404E-10 -2.37533E-10 -1.56786E-10 -9.38526E-11 -5.11542E-11 + -2.54580E-11 -1.15920E-11 -4.83666E-12 -1.85136E-12 -6.50720E-13 -2.10172E-13 + -6.24155E-14 -1.70514E-14 -4.28700E-15 -9.92259E-16 + 1.14201E-16 4.93398E-16 1.96247E-15 7.18350E-15 2.41890E-14 7.48924E-14 + 2.13076E-13 5.56659E-13 1.33415E-12 2.93001E-12 5.88742E-12 1.08016E-11 + 1.80447E-11 2.73380E-11 3.73361E-11 4.55240E-11 4.87197E-11 4.42113E-11 + 3.11164E-11 1.12336E-11 -1.12336E-11 -3.11164E-11 -4.42113E-11 -4.87197E-11 + -4.55240E-11 -3.73361E-11 -2.73380E-11 -1.80447E-11 -1.08016E-11 -5.88742E-12 + -2.93001E-12 -1.33415E-12 -5.56659E-13 -2.13076E-13 -7.48924E-14 -2.41890E-14 + -7.18350E-15 -1.96247E-15 -4.93398E-16 -1.14201E-16 + 6.24293E-17 2.69722E-16 1.07281E-15 3.92695E-15 1.32233E-14 4.09409E-14 + 1.16481E-13 3.04305E-13 7.29328E-13 1.60173E-12 3.21843E-12 5.90486E-12 + 9.86437E-12 1.49447E-11 2.04103E-11 2.48863E-11 2.66333E-11 2.41687E-11 + 1.70102E-11 6.14100E-12 -6.14100E-12 -1.70102E-11 -2.41687E-11 -2.66333E-11 + -2.48863E-11 -2.04103E-11 -1.49447E-11 -9.86437E-12 -5.90486E-12 -3.21843E-12 + -1.60173E-12 -7.29328E-13 -3.04305E-13 -1.16481E-13 -4.09409E-14 -1.32233E-14 + -3.92695E-15 -1.07281E-15 -2.69722E-16 -6.24293E-17 + 5.42431E-16 2.34354E-15 9.32135E-15 3.41202E-14 1.14893E-13 3.55725E-13 + 1.01207E-12 2.64402E-12 6.33693E-12 1.39170E-11 2.79641E-11 5.13057E-11 + 8.57089E-11 1.29850E-10 1.77340E-10 2.16230E-10 2.31409E-10 2.09995E-10 + 1.47797E-10 5.33575E-11 -5.33575E-11 -1.47797E-10 -2.09995E-10 -2.31409E-10 + -2.16230E-10 -1.77340E-10 -1.29850E-10 -8.57089E-11 -5.13057E-11 -2.79641E-11 + -1.39170E-11 -6.33693E-12 -2.64402E-12 -1.01207E-12 -3.55725E-13 -1.14893E-13 + -3.41202E-14 -9.32135E-15 -2.34354E-15 -5.42431E-16 + 4.14918E-15 1.79263E-14 7.13012E-14 2.60994E-13 8.78846E-13 2.72102E-12 + 7.74156E-12 2.02247E-11 4.84727E-11 1.06454E-10 2.13904E-10 3.92449E-10 + 6.55607E-10 9.93256E-10 1.35651E-09 1.65400E-09 1.77010E-09 1.60630E-09 + 1.13053E-09 4.08144E-10 -4.08144E-10 -1.13053E-09 -1.60630E-09 -1.77010E-09 + -1.65400E-09 -1.35651E-09 -9.93256E-10 -6.55607E-10 -3.92449E-10 -2.13904E-10 + -1.06454E-10 -4.84727E-11 -2.02247E-11 -7.74156E-12 -2.72102E-12 -8.78846E-13 + -2.60994E-13 -7.13012E-14 -1.79263E-14 -4.14918E-15 + 2.79413E-14 1.20719E-13 4.80155E-13 1.75758E-12 5.91831E-12 1.83238E-11 + 5.21330E-11 1.36197E-10 3.26424E-10 7.16882E-10 1.44047E-09 2.64283E-09 + 4.41498E-09 6.68876E-09 9.13500E-09 1.11383E-08 1.19202E-08 1.08171E-08 + 7.61321E-09 2.74852E-09 -2.74852E-09 -7.61321E-09 -1.08171E-08 -1.19202E-08 + -1.11383E-08 -9.13500E-09 -6.68876E-09 -4.41498E-09 -2.64283E-09 -1.44047E-09 + -7.16882E-10 -3.26424E-10 -1.36197E-10 -5.21330E-11 -1.83238E-11 -5.91831E-12 + -1.75758E-12 -4.80155E-13 -1.20719E-13 -2.79413E-14 + 1.65656E-13 7.15710E-13 2.84671E-12 1.04202E-11 3.50880E-11 1.08637E-10 + 3.09082E-10 8.07475E-10 1.93528E-09 4.25019E-09 8.54013E-09 1.56686E-08 + 2.61752E-08 3.96558E-08 5.41589E-08 6.60359E-08 7.06715E-08 6.41317E-08 + 4.51366E-08 1.62952E-08 -1.62952E-08 -4.51366E-08 -6.41317E-08 -7.06715E-08 + -6.60359E-08 -5.41589E-08 -3.96558E-08 -2.61752E-08 -1.56686E-08 -8.54013E-09 + -4.25019E-09 -1.93528E-09 -8.07475E-10 -3.09082E-10 -1.08637E-10 -3.50880E-11 + -1.04202E-11 -2.84671E-12 -7.15710E-13 -1.65656E-13 + 8.64692E-13 3.73586E-12 1.48592E-11 5.43912E-11 1.83152E-10 5.67062E-10 + 1.61334E-09 4.21485E-09 1.01017E-08 2.21851E-08 4.45777E-08 8.17867E-08 + 1.36629E-07 2.06995E-07 2.82698E-07 3.44694E-07 3.68890E-07 3.34754E-07 + 2.35603E-07 8.50575E-08 -8.50575E-08 -2.35603E-07 -3.34754E-07 -3.68890E-07 + -3.44694E-07 -2.82698E-07 -2.06995E-07 -1.36629E-07 -8.17867E-08 -4.45777E-08 + -2.21851E-08 -1.01017E-08 -4.21485E-09 -1.61334E-09 -5.67062E-10 -1.83152E-10 + -5.43912E-11 -1.48592E-11 -3.73586E-12 -8.64692E-13 + 3.97404E-12 1.71696E-11 6.82915E-11 2.49977E-10 8.41749E-10 2.60616E-09 + 7.41478E-09 1.93710E-08 4.64266E-08 1.01961E-07 2.04875E-07 3.75884E-07 + 6.27933E-07 9.51329E-07 1.29925E-06 1.58418E-06 1.69539E-06 1.53850E-06 + 1.08281E-06 3.90916E-07 -3.90916E-07 -1.08281E-06 -1.53850E-06 -1.69539E-06 + -1.58418E-06 -1.29925E-06 -9.51329E-07 -6.27933E-07 -3.75884E-07 -2.04875E-07 + -1.01961E-07 -4.64266E-08 -1.93710E-08 -7.41478E-09 -2.60616E-09 -8.41749E-10 + -2.49977E-10 -6.82915E-11 -1.71696E-11 -3.97404E-12 + 1.60829E-11 6.94854E-11 2.76375E-10 1.01166E-09 3.40655E-09 1.05471E-08 + 3.00076E-08 7.83945E-08 1.87888E-07 4.12634E-07 8.29127E-07 1.52120E-06 + 2.54124E-06 3.85002E-06 5.25807E-06 6.41116E-06 6.86122E-06 6.22629E-06 + 4.38213E-06 1.58204E-06 -1.58204E-06 -4.38213E-06 -6.22629E-06 -6.86122E-06 + -6.41116E-06 -5.25807E-06 -3.85002E-06 -2.54124E-06 -1.52120E-06 -8.29127E-07 + -4.12634E-07 -1.87888E-07 -7.83945E-08 -3.00076E-08 -1.05471E-08 -3.40655E-09 + -1.01166E-09 -2.76375E-10 -6.94854E-11 -1.60829E-11 + 5.73235E-11 2.47663E-10 9.85071E-10 3.60579E-09 1.21418E-08 3.75926E-08 + 1.06954E-07 2.79417E-07 6.69680E-07 1.47073E-06 2.95522E-06 5.42193E-06 + 9.05762E-06 1.37224E-05 1.87411E-05 2.28510E-05 2.44551E-05 2.21921E-05 + 1.56190E-05 5.63877E-06 -5.63877E-06 -1.56190E-05 -2.21921E-05 -2.44551E-05 + -2.28510E-05 -1.87411E-05 -1.37224E-05 -9.05762E-06 -5.42193E-06 -2.95522E-06 + -1.47073E-06 -6.69680E-07 -2.79417E-07 -1.06954E-07 -3.75926E-08 -1.21418E-08 + -3.60579E-09 -9.85071E-10 -2.47663E-10 -5.73235E-11 + 1.79995E-10 7.77657E-10 3.09310E-09 1.13221E-08 3.81250E-08 1.18040E-07 + 3.35834E-07 8.77364E-07 2.10278E-06 4.61806E-06 9.27931E-06 1.70247E-05 + 2.84407E-05 4.30882E-05 5.88465E-05 7.17516E-05 7.67886E-05 6.96831E-05 + 4.90440E-05 1.77060E-05 -1.77060E-05 -4.90440E-05 -6.96831E-05 -7.67886E-05 + -7.17516E-05 -5.88465E-05 -4.30882E-05 -2.84407E-05 -1.70247E-05 -9.27931E-06 + -4.61806E-06 -2.10278E-06 -8.77364E-07 -3.35834E-07 -1.18040E-07 -3.81250E-08 + -1.13221E-08 -3.09310E-09 -7.77657E-10 -1.79995E-10 + 4.98138E-10 2.15218E-09 8.56020E-09 3.13341E-08 1.05511E-07 3.26677E-07 + 9.29427E-07 2.42812E-06 5.81948E-06 1.27805E-05 2.56806E-05 4.71162E-05 + 7.87101E-05 1.19247E-04 1.62859E-04 1.98577E-04 2.12526E-04 1.92876E-04 + 1.35764E-04 4.90183E-05 -4.90183E-05 -1.35764E-04 -1.92876E-04 -2.12526E-04 + -1.98577E-04 -1.62859E-04 -1.19247E-04 -7.87101E-05 -4.71162E-05 -2.56806E-05 + -1.27805E-05 -5.81948E-06 -2.42812E-06 -9.29427E-07 -3.26677E-07 -1.05511E-07 + -3.13341E-08 -8.56020E-09 -2.15218E-09 -4.98138E-10 + 1.21603E-09 5.25380E-09 2.08968E-08 7.64914E-08 2.57570E-07 7.97470E-07 + 2.26888E-06 5.92742E-06 1.42063E-05 3.11993E-05 6.26904E-05 1.15018E-04 + 1.92144E-04 2.91103E-04 3.97580E-04 4.84844E-04 5.19116E-04 4.71528E-04 + 3.32307E-04 1.20093E-04 -1.20093E-04 -3.32307E-04 -4.71528E-04 -5.19116E-04 + -4.84844E-04 -3.97580E-04 -2.91103E-04 -1.92144E-04 -1.15018E-04 -6.26904E-05 + -3.11993E-05 -1.42063E-05 -5.92742E-06 -2.26888E-06 -7.97470E-07 -2.57570E-07 + -7.64914E-08 -2.08968E-08 -5.25380E-09 -1.21603E-09 + 2.62187E-09 1.13276E-08 4.50552E-08 1.64922E-07 5.55342E-07 1.71941E-06 + 4.89189E-06 1.27800E-05 3.06299E-05 6.72683E-05 1.35166E-04 2.47989E-04 + 4.14281E-04 6.27670E-04 8.57436E-04 1.04655E-03 1.12346E-03 1.02604E-03 + 7.28541E-04 2.64814E-04 -2.64814E-04 -7.28541E-04 -1.02604E-03 -1.12346E-03 + -1.04655E-03 -8.57436E-04 -6.27670E-04 -4.14281E-04 -2.47989E-04 -1.35166E-04 + -6.72683E-05 -3.06299E-05 -1.27800E-05 -4.89189E-06 -1.71941E-06 -5.55342E-07 + -1.64922E-07 -4.50552E-08 -1.13276E-08 -2.62187E-09 + 5.00344E-09 2.16171E-08 8.59811E-08 3.14728E-07 1.05979E-06 3.28124E-06 + 9.33543E-06 2.43887E-05 5.84525E-05 1.28371E-04 2.57944E-04 4.73251E-04 + 7.90610E-04 1.19801E-03 1.63787E-03 2.00563E-03 2.17375E-03 2.02445E-03 + 1.47548E-03 5.46880E-04 -5.46880E-04 -1.47548E-03 -2.02445E-03 -2.17375E-03 + -2.00563E-03 -1.63787E-03 -1.19801E-03 -7.90610E-04 -4.73251E-04 -2.57944E-04 + -1.28371E-04 -5.84525E-05 -2.43887E-05 -9.33543E-06 -3.28124E-06 -1.05979E-06 + -3.14728E-07 -8.59811E-08 -2.16171E-08 -5.00344E-09 + 8.48003E-09 3.66375E-08 1.45724E-07 5.33415E-07 1.79617E-06 5.56118E-06 + 1.58221E-05 4.13350E-05 9.90677E-05 2.17569E-04 4.37174E-04 8.02090E-04 + 1.34003E-03 2.03121E-03 2.78169E-03 3.42936E-03 3.78899E-03 3.66285E-03 + 2.79671E-03 1.07092E-03 -1.07092E-03 -2.79671E-03 -3.66285E-03 -3.78899E-03 + -3.42936E-03 -2.78169E-03 -2.03121E-03 -1.34003E-03 -8.02090E-04 -4.37174E-04 + -2.17569E-04 -9.90677E-05 -4.13350E-05 -1.58221E-05 -5.56118E-06 -1.79617E-06 + -5.33415E-07 -1.45724E-07 -3.66375E-08 -8.48003E-09 + 1.28321E-08 5.54404E-08 2.20512E-07 8.07170E-07 2.71799E-06 8.41524E-06 + 2.39421E-05 6.25486E-05 1.49910E-04 3.29229E-04 6.61538E-04 1.21375E-03 + 2.02792E-03 3.07512E-03 4.21909E-03 5.23680E-03 5.89126E-03 5.88224E-03 + 4.65949E-03 1.82722E-03 -1.82722E-03 -4.65949E-03 -5.88224E-03 -5.89126E-03 + -5.23680E-03 -4.21909E-03 -3.07512E-03 -2.02792E-03 -1.21375E-03 -6.61538E-04 + -3.29229E-04 -1.49910E-04 -6.25486E-05 -2.39421E-05 -8.41524E-06 -2.71799E-06 + -8.07170E-07 -2.20512E-07 -5.54404E-08 -1.28321E-08 + 1.74730E-08 7.54913E-08 3.00264E-07 1.09910E-06 3.70100E-06 1.14588E-05 + 3.26012E-05 8.51704E-05 2.04128E-04 4.48300E-04 9.00797E-04 1.65275E-03 + 2.76156E-03 4.18849E-03 5.74986E-03 7.14343E-03 8.04084E-03 8.02023E-03 + 6.33670E-03 2.47961E-03 -2.47961E-03 -6.33670E-03 -8.02023E-03 -8.04084E-03 + -7.14343E-03 -5.74986E-03 -4.18849E-03 -2.76156E-03 -1.65275E-03 -9.00797E-04 + -4.48300E-04 -2.04128E-04 -8.51704E-05 -3.26012E-05 -1.14588E-05 -3.70100E-06 + -1.09910E-06 -3.00264E-07 -7.54913E-08 -1.74730E-08 + 2.16394E-08 9.34919E-08 3.71860E-07 1.36117E-06 4.58348E-06 1.41910E-05 + 4.03749E-05 1.05479E-04 2.52802E-04 5.55195E-04 1.11559E-03 2.04685E-03 + 3.42013E-03 5.18705E-03 7.11433E-03 8.79657E-03 9.75203E-03 9.43769E-03 + 7.18847E-03 2.74431E-03 -2.74431E-03 -7.18847E-03 -9.43769E-03 -9.75203E-03 + -8.79657E-03 -7.11433E-03 -5.18705E-03 -3.42013E-03 -2.04685E-03 -1.11559E-03 + -5.55195E-04 -2.52802E-04 -1.05479E-04 -4.03749E-05 -1.41910E-05 -4.58348E-06 + -1.36117E-06 -3.71860E-07 -9.34919E-08 -2.16394E-08 + 2.46872E-08 1.06660E-07 4.24234E-07 1.55288E-06 5.22903E-06 1.61898E-05 + 4.60614E-05 1.20335E-04 2.88407E-04 6.33390E-04 1.27271E-03 2.33513E-03 + 3.90171E-03 5.91610E-03 8.10378E-03 9.96616E-03 1.08768E-02 1.02075E-02 + 7.47987E-03 2.77853E-03 -2.77853E-03 -7.47987E-03 -1.02075E-02 -1.08768E-02 + -9.96616E-03 -8.10378E-03 -5.91610E-03 -3.90171E-03 -2.33513E-03 -1.27271E-03 + -6.33390E-04 -2.88407E-04 -1.20335E-04 -4.60614E-05 -1.61898E-05 -5.22903E-06 + -1.55288E-06 -4.24234E-07 -1.06660E-07 -2.46872E-08 + 2.62657E-08 1.13480E-07 4.51360E-07 1.65218E-06 5.56339E-06 1.72250E-05 + 4.90066E-05 1.28029E-04 3.06848E-04 6.73891E-04 1.35409E-03 2.48442E-03 + 4.15100E-03 6.29281E-03 8.61227E-03 1.05595E-02 1.14327E-02 1.05679E-02 + 7.59590E-03 2.78229E-03 -2.78229E-03 -7.59590E-03 -1.05679E-02 -1.14327E-02 + -1.05595E-02 -8.61227E-03 -6.29281E-03 -4.15100E-03 -2.48442E-03 -1.35409E-03 + -6.73891E-04 -3.06848E-04 -1.28029E-04 -4.90066E-05 -1.72250E-05 -5.56339E-06 + -1.65218E-06 -4.51360E-07 -1.13480E-07 -2.62657E-08 + 2.62657E-08 1.13480E-07 4.51360E-07 1.65218E-06 5.56339E-06 1.72250E-05 + 4.90066E-05 1.28029E-04 3.06848E-04 6.73891E-04 1.35409E-03 2.48442E-03 + 4.15100E-03 6.29281E-03 8.61227E-03 1.05595E-02 1.14327E-02 1.05679E-02 + 7.59590E-03 2.78229E-03 -2.78229E-03 -7.59590E-03 -1.05679E-02 -1.14327E-02 + -1.05595E-02 -8.61227E-03 -6.29281E-03 -4.15100E-03 -2.48442E-03 -1.35409E-03 + -6.73891E-04 -3.06848E-04 -1.28029E-04 -4.90066E-05 -1.72250E-05 -5.56339E-06 + -1.65218E-06 -4.51360E-07 -1.13480E-07 -2.62657E-08 + 2.46872E-08 1.06660E-07 4.24234E-07 1.55288E-06 5.22903E-06 1.61898E-05 + 4.60614E-05 1.20335E-04 2.88407E-04 6.33390E-04 1.27271E-03 2.33513E-03 + 3.90171E-03 5.91610E-03 8.10378E-03 9.96616E-03 1.08768E-02 1.02075E-02 + 7.47987E-03 2.77853E-03 -2.77853E-03 -7.47987E-03 -1.02075E-02 -1.08768E-02 + -9.96616E-03 -8.10378E-03 -5.91610E-03 -3.90171E-03 -2.33513E-03 -1.27271E-03 + -6.33390E-04 -2.88407E-04 -1.20335E-04 -4.60614E-05 -1.61898E-05 -5.22903E-06 + -1.55288E-06 -4.24234E-07 -1.06660E-07 -2.46872E-08 + 2.16394E-08 9.34919E-08 3.71860E-07 1.36117E-06 4.58348E-06 1.41910E-05 + 4.03749E-05 1.05479E-04 2.52802E-04 5.55195E-04 1.11559E-03 2.04685E-03 + 3.42013E-03 5.18705E-03 7.11433E-03 8.79657E-03 9.75203E-03 9.43769E-03 + 7.18847E-03 2.74431E-03 -2.74431E-03 -7.18847E-03 -9.43769E-03 -9.75203E-03 + -8.79657E-03 -7.11433E-03 -5.18705E-03 -3.42013E-03 -2.04685E-03 -1.11559E-03 + -5.55195E-04 -2.52802E-04 -1.05479E-04 -4.03749E-05 -1.41910E-05 -4.58348E-06 + -1.36117E-06 -3.71860E-07 -9.34919E-08 -2.16394E-08 + 1.74730E-08 7.54913E-08 3.00264E-07 1.09910E-06 3.70100E-06 1.14588E-05 + 3.26012E-05 8.51704E-05 2.04128E-04 4.48300E-04 9.00797E-04 1.65275E-03 + 2.76156E-03 4.18849E-03 5.74986E-03 7.14343E-03 8.04084E-03 8.02023E-03 + 6.33670E-03 2.47961E-03 -2.47961E-03 -6.33670E-03 -8.02023E-03 -8.04084E-03 + -7.14343E-03 -5.74986E-03 -4.18849E-03 -2.76156E-03 -1.65275E-03 -9.00797E-04 + -4.48300E-04 -2.04128E-04 -8.51704E-05 -3.26012E-05 -1.14588E-05 -3.70100E-06 + -1.09910E-06 -3.00264E-07 -7.54913E-08 -1.74730E-08 + 1.28321E-08 5.54404E-08 2.20512E-07 8.07170E-07 2.71799E-06 8.41524E-06 + 2.39421E-05 6.25486E-05 1.49910E-04 3.29229E-04 6.61538E-04 1.21375E-03 + 2.02792E-03 3.07512E-03 4.21909E-03 5.23680E-03 5.89126E-03 5.88224E-03 + 4.65949E-03 1.82722E-03 -1.82722E-03 -4.65949E-03 -5.88224E-03 -5.89126E-03 + -5.23680E-03 -4.21909E-03 -3.07512E-03 -2.02792E-03 -1.21375E-03 -6.61538E-04 + -3.29229E-04 -1.49910E-04 -6.25486E-05 -2.39421E-05 -8.41524E-06 -2.71799E-06 + -8.07170E-07 -2.20512E-07 -5.54404E-08 -1.28321E-08 + 8.48003E-09 3.66375E-08 1.45724E-07 5.33415E-07 1.79617E-06 5.56118E-06 + 1.58221E-05 4.13350E-05 9.90677E-05 2.17569E-04 4.37174E-04 8.02090E-04 + 1.34003E-03 2.03121E-03 2.78169E-03 3.42936E-03 3.78899E-03 3.66285E-03 + 2.79671E-03 1.07092E-03 -1.07092E-03 -2.79671E-03 -3.66285E-03 -3.78899E-03 + -3.42936E-03 -2.78169E-03 -2.03121E-03 -1.34003E-03 -8.02090E-04 -4.37174E-04 + -2.17569E-04 -9.90677E-05 -4.13350E-05 -1.58221E-05 -5.56118E-06 -1.79617E-06 + -5.33415E-07 -1.45724E-07 -3.66375E-08 -8.48003E-09 + 5.00344E-09 2.16171E-08 8.59811E-08 3.14728E-07 1.05979E-06 3.28124E-06 + 9.33543E-06 2.43887E-05 5.84525E-05 1.28371E-04 2.57944E-04 4.73251E-04 + 7.90610E-04 1.19801E-03 1.63787E-03 2.00563E-03 2.17375E-03 2.02445E-03 + 1.47548E-03 5.46880E-04 -5.46880E-04 -1.47548E-03 -2.02445E-03 -2.17375E-03 + -2.00563E-03 -1.63787E-03 -1.19801E-03 -7.90610E-04 -4.73251E-04 -2.57944E-04 + -1.28371E-04 -5.84525E-05 -2.43887E-05 -9.33543E-06 -3.28124E-06 -1.05979E-06 + -3.14728E-07 -8.59811E-08 -2.16171E-08 -5.00344E-09 + 2.62187E-09 1.13276E-08 4.50552E-08 1.64922E-07 5.55342E-07 1.71941E-06 + 4.89189E-06 1.27800E-05 3.06299E-05 6.72683E-05 1.35166E-04 2.47989E-04 + 4.14281E-04 6.27670E-04 8.57436E-04 1.04655E-03 1.12346E-03 1.02604E-03 + 7.28541E-04 2.64814E-04 -2.64814E-04 -7.28541E-04 -1.02604E-03 -1.12346E-03 + -1.04655E-03 -8.57436E-04 -6.27670E-04 -4.14281E-04 -2.47989E-04 -1.35166E-04 + -6.72683E-05 -3.06299E-05 -1.27800E-05 -4.89189E-06 -1.71941E-06 -5.55342E-07 + -1.64922E-07 -4.50552E-08 -1.13276E-08 -2.62187E-09 + 1.21603E-09 5.25380E-09 2.08968E-08 7.64914E-08 2.57570E-07 7.97470E-07 + 2.26888E-06 5.92742E-06 1.42063E-05 3.11993E-05 6.26904E-05 1.15018E-04 + 1.92144E-04 2.91103E-04 3.97580E-04 4.84844E-04 5.19116E-04 4.71528E-04 + 3.32307E-04 1.20093E-04 -1.20093E-04 -3.32307E-04 -4.71528E-04 -5.19116E-04 + -4.84844E-04 -3.97580E-04 -2.91103E-04 -1.92144E-04 -1.15018E-04 -6.26904E-05 + -3.11993E-05 -1.42063E-05 -5.92742E-06 -2.26888E-06 -7.97470E-07 -2.57570E-07 + -7.64914E-08 -2.08968E-08 -5.25380E-09 -1.21603E-09 + 4.98138E-10 2.15218E-09 8.56020E-09 3.13341E-08 1.05511E-07 3.26677E-07 + 9.29427E-07 2.42812E-06 5.81948E-06 1.27805E-05 2.56806E-05 4.71162E-05 + 7.87101E-05 1.19247E-04 1.62859E-04 1.98577E-04 2.12526E-04 1.92876E-04 + 1.35764E-04 4.90183E-05 -4.90183E-05 -1.35764E-04 -1.92876E-04 -2.12526E-04 + -1.98577E-04 -1.62859E-04 -1.19247E-04 -7.87101E-05 -4.71162E-05 -2.56806E-05 + -1.27805E-05 -5.81948E-06 -2.42812E-06 -9.29427E-07 -3.26677E-07 -1.05511E-07 + -3.13341E-08 -8.56020E-09 -2.15218E-09 -4.98138E-10 + 1.79995E-10 7.77657E-10 3.09310E-09 1.13221E-08 3.81250E-08 1.18040E-07 + 3.35834E-07 8.77364E-07 2.10278E-06 4.61806E-06 9.27931E-06 1.70247E-05 + 2.84407E-05 4.30882E-05 5.88465E-05 7.17516E-05 7.67886E-05 6.96831E-05 + 4.90440E-05 1.77060E-05 -1.77060E-05 -4.90440E-05 -6.96831E-05 -7.67886E-05 + -7.17516E-05 -5.88465E-05 -4.30882E-05 -2.84407E-05 -1.70247E-05 -9.27931E-06 + -4.61806E-06 -2.10278E-06 -8.77364E-07 -3.35834E-07 -1.18040E-07 -3.81250E-08 + -1.13221E-08 -3.09310E-09 -7.77657E-10 -1.79995E-10 + 5.73235E-11 2.47663E-10 9.85071E-10 3.60579E-09 1.21418E-08 3.75926E-08 + 1.06954E-07 2.79417E-07 6.69680E-07 1.47073E-06 2.95522E-06 5.42193E-06 + 9.05762E-06 1.37224E-05 1.87411E-05 2.28510E-05 2.44551E-05 2.21921E-05 + 1.56190E-05 5.63877E-06 -5.63877E-06 -1.56190E-05 -2.21921E-05 -2.44551E-05 + -2.28510E-05 -1.87411E-05 -1.37224E-05 -9.05762E-06 -5.42193E-06 -2.95522E-06 + -1.47073E-06 -6.69680E-07 -2.79417E-07 -1.06954E-07 -3.75926E-08 -1.21418E-08 + -3.60579E-09 -9.85071E-10 -2.47663E-10 -5.73235E-11 + 1.60829E-11 6.94854E-11 2.76375E-10 1.01166E-09 3.40655E-09 1.05471E-08 + 3.00076E-08 7.83945E-08 1.87888E-07 4.12634E-07 8.29127E-07 1.52120E-06 + 2.54124E-06 3.85002E-06 5.25807E-06 6.41116E-06 6.86122E-06 6.22629E-06 + 4.38213E-06 1.58204E-06 -1.58204E-06 -4.38213E-06 -6.22629E-06 -6.86122E-06 + -6.41116E-06 -5.25807E-06 -3.85002E-06 -2.54124E-06 -1.52120E-06 -8.29127E-07 + -4.12634E-07 -1.87888E-07 -7.83945E-08 -3.00076E-08 -1.05471E-08 -3.40655E-09 + -1.01166E-09 -2.76375E-10 -6.94854E-11 -1.60829E-11 + 3.97404E-12 1.71696E-11 6.82915E-11 2.49977E-10 8.41749E-10 2.60616E-09 + 7.41478E-09 1.93710E-08 4.64266E-08 1.01961E-07 2.04875E-07 3.75884E-07 + 6.27933E-07 9.51329E-07 1.29925E-06 1.58418E-06 1.69539E-06 1.53850E-06 + 1.08281E-06 3.90916E-07 -3.90916E-07 -1.08281E-06 -1.53850E-06 -1.69539E-06 + -1.58418E-06 -1.29925E-06 -9.51329E-07 -6.27933E-07 -3.75884E-07 -2.04875E-07 + -1.01961E-07 -4.64266E-08 -1.93710E-08 -7.41478E-09 -2.60616E-09 -8.41749E-10 + -2.49977E-10 -6.82915E-11 -1.71696E-11 -3.97404E-12 + 8.64692E-13 3.73586E-12 1.48592E-11 5.43912E-11 1.83152E-10 5.67062E-10 + 1.61334E-09 4.21485E-09 1.01017E-08 2.21851E-08 4.45777E-08 8.17867E-08 + 1.36629E-07 2.06995E-07 2.82698E-07 3.44694E-07 3.68890E-07 3.34754E-07 + 2.35603E-07 8.50575E-08 -8.50575E-08 -2.35603E-07 -3.34754E-07 -3.68890E-07 + -3.44694E-07 -2.82698E-07 -2.06995E-07 -1.36629E-07 -8.17867E-08 -4.45777E-08 + -2.21851E-08 -1.01017E-08 -4.21485E-09 -1.61334E-09 -5.67062E-10 -1.83152E-10 + -5.43912E-11 -1.48592E-11 -3.73586E-12 -8.64692E-13 + 1.65656E-13 7.15710E-13 2.84671E-12 1.04202E-11 3.50880E-11 1.08637E-10 + 3.09082E-10 8.07475E-10 1.93528E-09 4.25019E-09 8.54013E-09 1.56686E-08 + 2.61752E-08 3.96558E-08 5.41589E-08 6.60359E-08 7.06715E-08 6.41317E-08 + 4.51366E-08 1.62952E-08 -1.62952E-08 -4.51366E-08 -6.41317E-08 -7.06715E-08 + -6.60359E-08 -5.41589E-08 -3.96558E-08 -2.61752E-08 -1.56686E-08 -8.54013E-09 + -4.25019E-09 -1.93528E-09 -8.07475E-10 -3.09082E-10 -1.08637E-10 -3.50880E-11 + -1.04202E-11 -2.84671E-12 -7.15710E-13 -1.65656E-13 + 2.79413E-14 1.20719E-13 4.80155E-13 1.75758E-12 5.91831E-12 1.83238E-11 + 5.21330E-11 1.36197E-10 3.26424E-10 7.16882E-10 1.44047E-09 2.64283E-09 + 4.41498E-09 6.68876E-09 9.13500E-09 1.11383E-08 1.19202E-08 1.08171E-08 + 7.61321E-09 2.74852E-09 -2.74852E-09 -7.61321E-09 -1.08171E-08 -1.19202E-08 + -1.11383E-08 -9.13500E-09 -6.68876E-09 -4.41498E-09 -2.64283E-09 -1.44047E-09 + -7.16882E-10 -3.26424E-10 -1.36197E-10 -5.21330E-11 -1.83238E-11 -5.91831E-12 + -1.75758E-12 -4.80155E-13 -1.20719E-13 -2.79413E-14 + 4.14918E-15 1.79263E-14 7.13012E-14 2.60994E-13 8.78846E-13 2.72102E-12 + 7.74156E-12 2.02247E-11 4.84727E-11 1.06454E-10 2.13904E-10 3.92449E-10 + 6.55607E-10 9.93256E-10 1.35651E-09 1.65400E-09 1.77010E-09 1.60630E-09 + 1.13053E-09 4.08144E-10 -4.08144E-10 -1.13053E-09 -1.60630E-09 -1.77010E-09 + -1.65400E-09 -1.35651E-09 -9.93256E-10 -6.55607E-10 -3.92449E-10 -2.13904E-10 + -1.06454E-10 -4.84727E-11 -2.02247E-11 -7.74156E-12 -2.72102E-12 -8.78846E-13 + -2.60994E-13 -7.13012E-14 -1.79263E-14 -4.14918E-15 + 5.42431E-16 2.34354E-15 9.32135E-15 3.41202E-14 1.14893E-13 3.55725E-13 + 1.01207E-12 2.64402E-12 6.33693E-12 1.39170E-11 2.79641E-11 5.13057E-11 + 8.57089E-11 1.29850E-10 1.77340E-10 2.16230E-10 2.31409E-10 2.09995E-10 + 1.47797E-10 5.33575E-11 -5.33575E-11 -1.47797E-10 -2.09995E-10 -2.31409E-10 + -2.16230E-10 -1.77340E-10 -1.29850E-10 -8.57089E-11 -5.13057E-11 -2.79641E-11 + -1.39170E-11 -6.33693E-12 -2.64402E-12 -1.01207E-12 -3.55725E-13 -1.14893E-13 + -3.41202E-14 -9.32135E-15 -2.34354E-15 -5.42431E-16 + 6.24293E-17 2.69722E-16 1.07281E-15 3.92695E-15 1.32233E-14 4.09409E-14 + 1.16481E-13 3.04305E-13 7.29328E-13 1.60173E-12 3.21843E-12 5.90486E-12 + 9.86437E-12 1.49447E-11 2.04103E-11 2.48863E-11 2.66333E-11 2.41687E-11 + 1.70102E-11 6.14100E-12 -6.14100E-12 -1.70102E-11 -2.41687E-11 -2.66333E-11 + -2.48863E-11 -2.04103E-11 -1.49447E-11 -9.86437E-12 -5.90486E-12 -3.21843E-12 + -1.60173E-12 -7.29328E-13 -3.04305E-13 -1.16481E-13 -4.09409E-14 -1.32233E-14 + -3.92695E-15 -1.07281E-15 -2.69722E-16 -6.24293E-17 + 2.91272E-17 1.25842E-16 5.00533E-16 1.83217E-15 6.16948E-15 1.91015E-14 + 5.43455E-14 1.41977E-13 3.40277E-13 7.47306E-13 1.50160E-12 2.75499E-12 + 4.60235E-12 6.97263E-12 9.52268E-12 1.16110E-11 1.24261E-11 1.12762E-11 + 7.93631E-12 2.86516E-12 -2.86516E-12 -7.93631E-12 -1.12762E-11 -1.24261E-11 + -1.16110E-11 -9.52268E-12 -6.97263E-12 -4.60235E-12 -2.75499E-12 -1.50160E-12 + -7.47306E-13 -3.40277E-13 -1.41977E-13 -5.43455E-14 -1.91015E-14 -6.16948E-15 + -1.83217E-15 -5.00533E-16 -1.25842E-16 -2.91272E-17 + 2.53078E-16 1.09341E-15 4.34900E-15 1.59192E-14 5.36049E-14 1.65968E-13 + 4.72194E-13 1.23360E-12 2.95658E-12 6.49314E-12 1.30470E-11 2.39373E-11 + 3.99886E-11 6.05833E-11 8.27400E-11 1.00885E-10 1.07967E-10 9.79759E-11 + 6.89564E-11 2.48946E-11 -2.48946E-11 -6.89564E-11 -9.79759E-11 -1.07967E-10 + -1.00885E-10 -8.27400E-11 -6.05833E-11 -3.99886E-11 -2.39373E-11 -1.30470E-11 + -6.49314E-12 -2.95658E-12 -1.23360E-12 -4.72194E-13 -1.65968E-13 -5.36049E-14 + -1.59192E-14 -4.34900E-15 -1.09341E-15 -2.53078E-16 + 1.93585E-15 8.36375E-15 3.32665E-14 1.21770E-13 4.10037E-13 1.26953E-12 + 3.61192E-12 9.43611E-12 2.26155E-11 4.96675E-11 9.97996E-11 1.83102E-10 + 3.05882E-10 4.63416E-10 6.32898E-10 7.71692E-10 8.25864E-10 7.49440E-10 + 5.27464E-10 1.90425E-10 -1.90425E-10 -5.27464E-10 -7.49440E-10 -8.25864E-10 + -7.71692E-10 -6.32898E-10 -4.63416E-10 -3.05882E-10 -1.83102E-10 -9.97996E-11 + -4.96675E-11 -2.26155E-11 -9.43611E-12 -3.61192E-12 -1.26953E-12 -4.10037E-13 + -1.21770E-13 -3.32665E-14 -8.36375E-15 -1.93585E-15 + 1.30364E-14 5.63230E-14 2.24023E-13 8.20021E-13 2.76126E-12 8.54922E-12 + 2.43233E-11 6.35445E-11 1.52297E-10 3.34470E-10 6.72069E-10 1.23304E-09 + 2.05986E-09 3.12073E-09 4.26205E-09 5.19672E-09 5.56152E-09 5.04687E-09 + 3.55204E-09 1.28236E-09 -1.28236E-09 -3.55204E-09 -5.04687E-09 -5.56152E-09 + -5.19672E-09 -4.26205E-09 -3.12073E-09 -2.05986E-09 -1.23304E-09 -6.72069E-10 + -3.34470E-10 -1.52297E-10 -6.35445E-11 -2.43233E-11 -8.54922E-12 -2.76126E-12 + -8.20021E-13 -2.24023E-13 -5.63230E-14 -1.30364E-14 + 7.72891E-14 3.33924E-13 1.32817E-12 4.86167E-12 1.63708E-11 5.06860E-11 + 1.44206E-10 3.76738E-10 9.02928E-10 1.98298E-09 3.98451E-09 7.31038E-09 + 1.22124E-08 1.85019E-08 2.52685E-08 3.08099E-08 3.29727E-08 2.99215E-08 + 2.10590E-08 7.60273E-09 -7.60273E-09 -2.10590E-08 -2.99215E-08 -3.29727E-08 + -3.08099E-08 -2.52685E-08 -1.85019E-08 -1.22124E-08 -7.31038E-09 -3.98451E-09 + -1.98298E-09 -9.02928E-10 -3.76738E-10 -1.44206E-10 -5.06860E-11 -1.63708E-11 + -4.86167E-12 -1.32817E-12 -3.33924E-13 -7.72891E-14 + 4.03433E-13 1.74301E-12 6.93275E-12 2.53769E-11 8.54519E-11 2.64570E-10 + 7.52726E-10 1.96649E-09 4.71309E-09 1.03507E-08 2.07983E-08 3.81586E-08 + 6.37459E-08 9.65762E-08 1.31896E-07 1.60821E-07 1.72111E-07 1.56184E-07 + 1.09924E-07 3.96846E-08 -3.96846E-08 -1.09924E-07 -1.56184E-07 -1.72111E-07 + -1.60821E-07 -1.31896E-07 -9.65762E-08 -6.37459E-08 -3.81586E-08 -2.07983E-08 + -1.03507E-08 -4.71309E-09 -1.96649E-09 -7.52726E-10 -2.64570E-10 -8.54519E-11 + -2.53769E-11 -6.93275E-12 -1.74301E-12 -4.03433E-13 + 1.85414E-12 8.01071E-12 3.18623E-11 1.16630E-10 3.92729E-10 1.21594E-09 + 3.45946E-09 9.03780E-09 2.16609E-08 4.75710E-08 9.55869E-08 1.75373E-07 + 2.92970E-07 4.43855E-07 6.06182E-07 7.39118E-07 7.91003E-07 7.17806E-07 + 5.05199E-07 1.82387E-07 -1.82387E-07 -5.05199E-07 -7.17806E-07 -7.91003E-07 + -7.39118E-07 -6.06182E-07 -4.43855E-07 -2.92970E-07 -1.75373E-07 -9.55869E-08 + -4.75710E-08 -2.16609E-08 -9.03780E-09 -3.45946E-09 -1.21594E-09 -3.92729E-10 + -1.16630E-10 -3.18623E-11 -8.01071E-12 -1.85414E-12 + 7.50369E-12 3.24193E-11 1.28946E-10 4.72000E-10 1.58937E-09 4.92090E-09 + 1.40004E-08 3.65759E-08 8.76616E-08 1.92520E-07 3.86840E-07 7.09735E-07 + 1.18565E-06 1.79628E-06 2.45322E-06 2.99121E-06 3.20119E-06 2.90496E-06 + 2.04454E-06 7.38119E-07 -7.38119E-07 -2.04454E-06 -2.90496E-06 -3.20119E-06 + -2.99121E-06 -2.45322E-06 -1.79628E-06 -1.18565E-06 -7.09735E-07 -3.86840E-07 + -1.92520E-07 -8.76616E-08 -3.65759E-08 -1.40004E-08 -4.92090E-09 -1.58937E-09 + -4.72000E-10 -1.28946E-10 -3.24193E-11 -7.50369E-12 + 2.67450E-11 1.15550E-10 4.59597E-10 1.68233E-09 5.66491E-09 1.75393E-08 + 4.99009E-08 1.30366E-07 3.12448E-07 6.86188E-07 1.37879E-06 2.52967E-06 + 4.22595E-06 6.40238E-06 8.74388E-06 1.06614E-05 1.14098E-05 1.03540E-05 + 7.28724E-06 2.63084E-06 -2.63084E-06 -7.28724E-06 -1.03540E-05 -1.14098E-05 + -1.06614E-05 -8.74388E-06 -6.40238E-06 -4.22595E-06 -2.52967E-06 -1.37879E-06 + -6.86188E-07 -3.12448E-07 -1.30366E-07 -4.99009E-08 -1.75393E-08 -5.66491E-09 + -1.68233E-09 -4.59597E-10 -1.15550E-10 -2.67450E-11 + 8.39787E-11 3.62826E-10 1.44312E-09 5.28247E-09 1.77877E-08 5.50730E-08 + 1.56688E-07 4.09345E-07 9.81079E-07 2.15461E-06 4.32938E-06 7.94311E-06 + 1.32694E-05 2.01033E-05 2.74556E-05 3.34766E-05 3.58266E-05 3.25114E-05 + 2.28819E-05 8.26083E-06 -8.26083E-06 -2.28819E-05 -3.25114E-05 -3.58266E-05 + -3.34766E-05 -2.74556E-05 -2.01033E-05 -1.32694E-05 -7.94311E-06 -4.32938E-06 + -2.15461E-06 -9.81079E-07 -4.09345E-07 -1.56688E-07 -5.50730E-08 -1.77877E-08 + -5.28247E-09 -1.44312E-09 -3.62826E-10 -8.39787E-11 + 2.32412E-10 1.00413E-09 3.99387E-09 1.46193E-08 4.92277E-08 1.52415E-07 + 4.33636E-07 1.13287E-06 2.71515E-06 5.96293E-06 1.19816E-05 2.19827E-05 + 3.67232E-05 5.56363E-05 7.59838E-05 9.26475E-05 9.91527E-05 8.99801E-05 + 6.33317E-05 2.28648E-05 -2.28648E-05 -6.33317E-05 -8.99801E-05 -9.91527E-05 + -9.26475E-05 -7.59838E-05 -5.56363E-05 -3.67232E-05 -2.19827E-05 -1.19816E-05 + -5.96293E-06 -2.71515E-06 -1.13287E-06 -4.33636E-07 -1.52415E-07 -4.92277E-08 + -1.46193E-08 -3.99387E-09 -1.00413E-09 -2.32412E-10 + 5.67355E-10 2.45123E-09 9.74966E-09 3.56880E-08 1.20173E-07 3.72070E-07 + 1.05857E-06 2.76551E-06 6.62811E-06 1.45564E-05 2.92490E-05 5.36632E-05 + 8.96471E-05 1.35817E-04 1.85491E-04 2.26181E-04 2.42098E-04 2.19770E-04 + 1.54749E-04 5.58881E-05 -5.58881E-05 -1.54749E-04 -2.19770E-04 -2.42098E-04 + -2.26181E-04 -1.85491E-04 -1.35817E-04 -8.96471E-05 -5.36632E-05 -2.92490E-05 + -1.45564E-05 -6.62811E-06 -2.76551E-06 -1.05857E-06 -3.72070E-07 -1.20173E-07 + -3.56880E-08 -9.74966E-09 -2.45123E-09 -5.67355E-10 + 1.22326E-09 5.28505E-09 2.10211E-08 7.69463E-08 2.59102E-07 8.02213E-07 + 2.28237E-06 5.96267E-06 1.42907E-05 3.13849E-05 6.30633E-05 1.15702E-04 + 1.93287E-04 2.92837E-04 3.99969E-04 4.87859E-04 5.22675E-04 4.75393E-04 + 3.35649E-04 1.21475E-04 -1.21475E-04 -3.35649E-04 -4.75393E-04 -5.22675E-04 + -4.87859E-04 -3.99969E-04 -2.92837E-04 -1.93287E-04 -1.15702E-04 -6.30633E-05 + -3.13849E-05 -1.42907E-05 -5.96267E-06 -2.28237E-06 -8.02213E-07 -2.59102E-07 + -7.69463E-08 -2.10211E-08 -5.28505E-09 -1.22326E-09 + 2.33442E-09 1.00857E-08 4.01155E-08 1.46840E-07 4.94457E-07 1.53090E-06 + 4.35556E-06 1.13789E-05 2.72717E-05 5.98933E-05 1.20347E-04 2.20800E-04 + 3.68862E-04 5.58867E-04 7.63531E-04 9.32371E-04 1.00231E-03 9.18125E-04 + 6.54572E-04 2.38668E-04 -2.38668E-04 -6.54572E-04 -9.18125E-04 -1.00231E-03 + -9.32371E-04 -7.63531E-04 -5.58867E-04 -3.68862E-04 -2.20800E-04 -1.20347E-04 + -5.98933E-05 -2.72717E-05 -1.13789E-05 -4.35556E-06 -1.53090E-06 -4.94457E-07 + -1.46840E-07 -4.01155E-08 -1.00857E-08 -2.33442E-09 + 3.95647E-09 1.70937E-08 6.79895E-08 2.48871E-07 8.38026E-07 2.59464E-06 + 7.38199E-06 1.92854E-05 4.62213E-05 1.01510E-04 2.03969E-04 3.74222E-04 + 6.25172E-04 9.47300E-04 1.29494E-03 1.58496E-03 1.71556E-03 1.59359E-03 + 1.15757E-03 4.28006E-04 -4.28006E-04 -1.15757E-03 -1.59359E-03 -1.71556E-03 + -1.58496E-03 -1.29494E-03 -9.47300E-04 -6.25172E-04 -3.74222E-04 -2.03969E-04 + -1.01510E-04 -4.62213E-05 -1.92854E-05 -7.38199E-06 -2.59464E-06 -8.38026E-07 + -2.48871E-07 -6.79895E-08 -1.70937E-08 -3.95647E-09 + 5.98697E-09 2.58664E-08 1.02883E-07 3.76595E-07 1.26811E-06 3.92624E-06 + 1.11705E-05 2.91829E-05 6.99426E-05 1.53606E-04 3.08648E-04 5.66279E-04 + 9.46035E-04 1.43364E-03 1.96083E-03 2.40518E-03 2.61959E-03 2.46353E-03 + 1.81814E-03 6.80011E-04 -6.80011E-04 -1.81814E-03 -2.46353E-03 -2.61959E-03 + -2.40518E-03 -1.96083E-03 -1.43364E-03 -9.46035E-04 -5.66279E-04 -3.08648E-04 + -1.53606E-04 -6.99426E-05 -2.91829E-05 -1.11705E-05 -3.92624E-06 -1.26811E-06 + -3.76595E-07 -1.02883E-07 -2.58664E-08 -5.98697E-09 + 8.15226E-09 3.52214E-08 1.40092E-07 5.12797E-07 1.72675E-06 5.34623E-06 + 1.52105E-05 3.97373E-05 9.52386E-05 2.09160E-04 4.20276E-04 7.71085E-04 + 1.28820E-03 1.95220E-03 2.67011E-03 3.27477E-03 3.56430E-03 3.34634E-03 + 2.46380E-03 9.19838E-04 -9.19838E-04 -2.46380E-03 -3.34634E-03 -3.56430E-03 + -3.27477E-03 -2.67011E-03 -1.95220E-03 -1.28820E-03 -7.71085E-04 -4.20276E-04 + -2.09160E-04 -9.52386E-05 -3.97373E-05 -1.52105E-05 -5.34623E-06 -1.72675E-06 + -5.12797E-07 -1.40092E-07 -3.52214E-08 -8.15226E-09 + 1.00961E-08 4.36198E-08 1.73496E-07 6.35071E-07 2.13848E-06 6.62101E-06 + 1.88374E-05 4.92125E-05 1.17948E-04 2.59033E-04 5.20489E-04 9.54948E-04 + 1.59535E-03 2.41751E-03 3.30500E-03 4.04487E-03 4.37391E-03 4.05167E-03 + 2.93058E-03 1.07991E-03 -1.07991E-03 -2.93058E-03 -4.05167E-03 -4.37391E-03 + -4.04487E-03 -3.30500E-03 -2.41751E-03 -1.59535E-03 -9.54948E-04 -5.20489E-04 + -2.59033E-04 -1.17948E-04 -4.92125E-05 -1.88374E-05 -6.62101E-06 -2.13848E-06 + -6.35071E-07 -1.73496E-07 -4.36198E-08 -1.00961E-08 + 1.15181E-08 4.97634E-08 1.97932E-07 7.24517E-07 2.43967E-06 7.55354E-06 + 2.14905E-05 5.61438E-05 1.34560E-04 2.95516E-04 5.93797E-04 1.08944E-03 + 1.82003E-03 2.75775E-03 3.76839E-03 4.60295E-03 4.94831E-03 4.52867E-03 + 3.22262E-03 1.17303E-03 -1.17303E-03 -3.22262E-03 -4.52867E-03 -4.94831E-03 + -4.60295E-03 -3.76839E-03 -2.75775E-03 -1.82003E-03 -1.08944E-03 -5.93797E-04 + -2.95516E-04 -1.34560E-04 -5.61438E-05 -2.14905E-05 -7.55354E-06 -2.43967E-06 + -7.24517E-07 -1.97932E-07 -4.97634E-08 -1.15181E-08 + 1.22546E-08 5.29453E-08 2.10588E-07 7.70844E-07 2.59567E-06 8.03653E-06 + 2.28647E-05 5.97337E-05 1.43164E-04 3.14412E-04 6.31765E-04 1.15910E-03 + 1.93638E-03 2.93392E-03 4.00820E-03 4.89155E-03 5.24531E-03 4.77600E-03 + 3.37517E-03 1.22209E-03 -1.22209E-03 -3.37517E-03 -4.77600E-03 -5.24531E-03 + -4.89155E-03 -4.00820E-03 -2.93392E-03 -1.93638E-03 -1.15910E-03 -6.31765E-04 + -3.14412E-04 -1.43164E-04 -5.97337E-05 -2.28647E-05 -8.03653E-06 -2.59567E-06 + -7.70844E-07 -2.10588E-07 -5.29453E-08 -1.22546E-08 + 1.22546E-08 5.29453E-08 2.10588E-07 7.70844E-07 2.59567E-06 8.03653E-06 + 2.28647E-05 5.97337E-05 1.43164E-04 3.14412E-04 6.31765E-04 1.15910E-03 + 1.93638E-03 2.93392E-03 4.00820E-03 4.89155E-03 5.24531E-03 4.77600E-03 + 3.37517E-03 1.22209E-03 -1.22209E-03 -3.37517E-03 -4.77600E-03 -5.24531E-03 + -4.89155E-03 -4.00820E-03 -2.93392E-03 -1.93638E-03 -1.15910E-03 -6.31765E-04 + -3.14412E-04 -1.43164E-04 -5.97337E-05 -2.28647E-05 -8.03653E-06 -2.59567E-06 + -7.70844E-07 -2.10588E-07 -5.29453E-08 -1.22546E-08 + 1.15181E-08 4.97634E-08 1.97932E-07 7.24517E-07 2.43967E-06 7.55354E-06 + 2.14905E-05 5.61438E-05 1.34560E-04 2.95516E-04 5.93797E-04 1.08944E-03 + 1.82003E-03 2.75775E-03 3.76839E-03 4.60295E-03 4.94831E-03 4.52867E-03 + 3.22262E-03 1.17303E-03 -1.17303E-03 -3.22262E-03 -4.52867E-03 -4.94831E-03 + -4.60295E-03 -3.76839E-03 -2.75775E-03 -1.82003E-03 -1.08944E-03 -5.93797E-04 + -2.95516E-04 -1.34560E-04 -5.61438E-05 -2.14905E-05 -7.55354E-06 -2.43967E-06 + -7.24517E-07 -1.97932E-07 -4.97634E-08 -1.15181E-08 + 1.00961E-08 4.36198E-08 1.73496E-07 6.35071E-07 2.13848E-06 6.62101E-06 + 1.88374E-05 4.92125E-05 1.17948E-04 2.59033E-04 5.20489E-04 9.54948E-04 + 1.59535E-03 2.41751E-03 3.30500E-03 4.04487E-03 4.37391E-03 4.05167E-03 + 2.93058E-03 1.07991E-03 -1.07991E-03 -2.93058E-03 -4.05167E-03 -4.37391E-03 + -4.04487E-03 -3.30500E-03 -2.41751E-03 -1.59535E-03 -9.54948E-04 -5.20489E-04 + -2.59033E-04 -1.17948E-04 -4.92125E-05 -1.88374E-05 -6.62101E-06 -2.13848E-06 + -6.35071E-07 -1.73496E-07 -4.36198E-08 -1.00961E-08 + 8.15226E-09 3.52214E-08 1.40092E-07 5.12797E-07 1.72675E-06 5.34623E-06 + 1.52105E-05 3.97373E-05 9.52386E-05 2.09160E-04 4.20276E-04 7.71085E-04 + 1.28820E-03 1.95220E-03 2.67011E-03 3.27477E-03 3.56430E-03 3.34634E-03 + 2.46380E-03 9.19838E-04 -9.19838E-04 -2.46380E-03 -3.34634E-03 -3.56430E-03 + -3.27477E-03 -2.67011E-03 -1.95220E-03 -1.28820E-03 -7.71085E-04 -4.20276E-04 + -2.09160E-04 -9.52386E-05 -3.97373E-05 -1.52105E-05 -5.34623E-06 -1.72675E-06 + -5.12797E-07 -1.40092E-07 -3.52214E-08 -8.15226E-09 + 5.98697E-09 2.58664E-08 1.02883E-07 3.76595E-07 1.26811E-06 3.92624E-06 + 1.11705E-05 2.91829E-05 6.99426E-05 1.53606E-04 3.08648E-04 5.66279E-04 + 9.46035E-04 1.43364E-03 1.96083E-03 2.40518E-03 2.61959E-03 2.46353E-03 + 1.81814E-03 6.80011E-04 -6.80011E-04 -1.81814E-03 -2.46353E-03 -2.61959E-03 + -2.40518E-03 -1.96083E-03 -1.43364E-03 -9.46035E-04 -5.66279E-04 -3.08648E-04 + -1.53606E-04 -6.99426E-05 -2.91829E-05 -1.11705E-05 -3.92624E-06 -1.26811E-06 + -3.76595E-07 -1.02883E-07 -2.58664E-08 -5.98697E-09 + 3.95647E-09 1.70937E-08 6.79895E-08 2.48871E-07 8.38026E-07 2.59464E-06 + 7.38199E-06 1.92854E-05 4.62213E-05 1.01510E-04 2.03969E-04 3.74222E-04 + 6.25172E-04 9.47300E-04 1.29494E-03 1.58496E-03 1.71556E-03 1.59359E-03 + 1.15757E-03 4.28006E-04 -4.28006E-04 -1.15757E-03 -1.59359E-03 -1.71556E-03 + -1.58496E-03 -1.29494E-03 -9.47300E-04 -6.25172E-04 -3.74222E-04 -2.03969E-04 + -1.01510E-04 -4.62213E-05 -1.92854E-05 -7.38199E-06 -2.59464E-06 -8.38026E-07 + -2.48871E-07 -6.79895E-08 -1.70937E-08 -3.95647E-09 + 2.33442E-09 1.00857E-08 4.01155E-08 1.46840E-07 4.94457E-07 1.53090E-06 + 4.35556E-06 1.13789E-05 2.72717E-05 5.98933E-05 1.20347E-04 2.20800E-04 + 3.68862E-04 5.58867E-04 7.63531E-04 9.32371E-04 1.00231E-03 9.18125E-04 + 6.54572E-04 2.38668E-04 -2.38668E-04 -6.54572E-04 -9.18125E-04 -1.00231E-03 + -9.32371E-04 -7.63531E-04 -5.58867E-04 -3.68862E-04 -2.20800E-04 -1.20347E-04 + -5.98933E-05 -2.72717E-05 -1.13789E-05 -4.35556E-06 -1.53090E-06 -4.94457E-07 + -1.46840E-07 -4.01155E-08 -1.00857E-08 -2.33442E-09 + 1.22326E-09 5.28505E-09 2.10211E-08 7.69463E-08 2.59102E-07 8.02213E-07 + 2.28237E-06 5.96267E-06 1.42907E-05 3.13849E-05 6.30633E-05 1.15702E-04 + 1.93287E-04 2.92837E-04 3.99969E-04 4.87859E-04 5.22675E-04 4.75393E-04 + 3.35649E-04 1.21475E-04 -1.21475E-04 -3.35649E-04 -4.75393E-04 -5.22675E-04 + -4.87859E-04 -3.99969E-04 -2.92837E-04 -1.93287E-04 -1.15702E-04 -6.30633E-05 + -3.13849E-05 -1.42907E-05 -5.96267E-06 -2.28237E-06 -8.02213E-07 -2.59102E-07 + -7.69463E-08 -2.10211E-08 -5.28505E-09 -1.22326E-09 + 5.67355E-10 2.45123E-09 9.74966E-09 3.56880E-08 1.20173E-07 3.72070E-07 + 1.05857E-06 2.76551E-06 6.62811E-06 1.45564E-05 2.92490E-05 5.36632E-05 + 8.96471E-05 1.35817E-04 1.85491E-04 2.26181E-04 2.42098E-04 2.19770E-04 + 1.54749E-04 5.58881E-05 -5.58881E-05 -1.54749E-04 -2.19770E-04 -2.42098E-04 + -2.26181E-04 -1.85491E-04 -1.35817E-04 -8.96471E-05 -5.36632E-05 -2.92490E-05 + -1.45564E-05 -6.62811E-06 -2.76551E-06 -1.05857E-06 -3.72070E-07 -1.20173E-07 + -3.56880E-08 -9.74966E-09 -2.45123E-09 -5.67355E-10 + 2.32412E-10 1.00413E-09 3.99387E-09 1.46193E-08 4.92277E-08 1.52415E-07 + 4.33636E-07 1.13287E-06 2.71515E-06 5.96293E-06 1.19816E-05 2.19827E-05 + 3.67232E-05 5.56363E-05 7.59838E-05 9.26475E-05 9.91527E-05 8.99801E-05 + 6.33317E-05 2.28648E-05 -2.28648E-05 -6.33317E-05 -8.99801E-05 -9.91527E-05 + -9.26475E-05 -7.59838E-05 -5.56363E-05 -3.67232E-05 -2.19827E-05 -1.19816E-05 + -5.96293E-06 -2.71515E-06 -1.13287E-06 -4.33636E-07 -1.52415E-07 -4.92277E-08 + -1.46193E-08 -3.99387E-09 -1.00413E-09 -2.32412E-10 + 8.39787E-11 3.62826E-10 1.44312E-09 5.28247E-09 1.77877E-08 5.50730E-08 + 1.56688E-07 4.09345E-07 9.81079E-07 2.15461E-06 4.32938E-06 7.94311E-06 + 1.32694E-05 2.01033E-05 2.74556E-05 3.34766E-05 3.58266E-05 3.25114E-05 + 2.28819E-05 8.26083E-06 -8.26083E-06 -2.28819E-05 -3.25114E-05 -3.58266E-05 + -3.34766E-05 -2.74556E-05 -2.01033E-05 -1.32694E-05 -7.94311E-06 -4.32938E-06 + -2.15461E-06 -9.81079E-07 -4.09345E-07 -1.56688E-07 -5.50730E-08 -1.77877E-08 + -5.28247E-09 -1.44312E-09 -3.62826E-10 -8.39787E-11 + 2.67450E-11 1.15550E-10 4.59597E-10 1.68233E-09 5.66491E-09 1.75393E-08 + 4.99009E-08 1.30366E-07 3.12448E-07 6.86188E-07 1.37879E-06 2.52967E-06 + 4.22595E-06 6.40238E-06 8.74388E-06 1.06614E-05 1.14098E-05 1.03540E-05 + 7.28724E-06 2.63084E-06 -2.63084E-06 -7.28724E-06 -1.03540E-05 -1.14098E-05 + -1.06614E-05 -8.74388E-06 -6.40238E-06 -4.22595E-06 -2.52967E-06 -1.37879E-06 + -6.86188E-07 -3.12448E-07 -1.30366E-07 -4.99009E-08 -1.75393E-08 -5.66491E-09 + -1.68233E-09 -4.59597E-10 -1.15550E-10 -2.67450E-11 + 7.50369E-12 3.24193E-11 1.28946E-10 4.72000E-10 1.58937E-09 4.92090E-09 + 1.40004E-08 3.65759E-08 8.76616E-08 1.92520E-07 3.86840E-07 7.09735E-07 + 1.18565E-06 1.79628E-06 2.45322E-06 2.99121E-06 3.20119E-06 2.90496E-06 + 2.04454E-06 7.38119E-07 -7.38119E-07 -2.04454E-06 -2.90496E-06 -3.20119E-06 + -2.99121E-06 -2.45322E-06 -1.79628E-06 -1.18565E-06 -7.09735E-07 -3.86840E-07 + -1.92520E-07 -8.76616E-08 -3.65759E-08 -1.40004E-08 -4.92090E-09 -1.58937E-09 + -4.72000E-10 -1.28946E-10 -3.24193E-11 -7.50369E-12 + 1.85414E-12 8.01071E-12 3.18623E-11 1.16630E-10 3.92729E-10 1.21594E-09 + 3.45946E-09 9.03780E-09 2.16609E-08 4.75710E-08 9.55869E-08 1.75373E-07 + 2.92970E-07 4.43855E-07 6.06182E-07 7.39118E-07 7.91003E-07 7.17806E-07 + 5.05199E-07 1.82387E-07 -1.82387E-07 -5.05199E-07 -7.17806E-07 -7.91003E-07 + -7.39118E-07 -6.06182E-07 -4.43855E-07 -2.92970E-07 -1.75373E-07 -9.55869E-08 + -4.75710E-08 -2.16609E-08 -9.03780E-09 -3.45946E-09 -1.21594E-09 -3.92729E-10 + -1.16630E-10 -3.18623E-11 -8.01071E-12 -1.85414E-12 + 4.03433E-13 1.74301E-12 6.93275E-12 2.53769E-11 8.54519E-11 2.64570E-10 + 7.52726E-10 1.96649E-09 4.71309E-09 1.03507E-08 2.07983E-08 3.81586E-08 + 6.37459E-08 9.65762E-08 1.31896E-07 1.60821E-07 1.72111E-07 1.56184E-07 + 1.09924E-07 3.96846E-08 -3.96846E-08 -1.09924E-07 -1.56184E-07 -1.72111E-07 + -1.60821E-07 -1.31896E-07 -9.65762E-08 -6.37459E-08 -3.81586E-08 -2.07983E-08 + -1.03507E-08 -4.71309E-09 -1.96649E-09 -7.52726E-10 -2.64570E-10 -8.54519E-11 + -2.53769E-11 -6.93275E-12 -1.74301E-12 -4.03433E-13 + 7.72891E-14 3.33924E-13 1.32817E-12 4.86167E-12 1.63708E-11 5.06860E-11 + 1.44206E-10 3.76738E-10 9.02928E-10 1.98298E-09 3.98451E-09 7.31038E-09 + 1.22124E-08 1.85019E-08 2.52685E-08 3.08099E-08 3.29727E-08 2.99215E-08 + 2.10590E-08 7.60273E-09 -7.60273E-09 -2.10590E-08 -2.99215E-08 -3.29727E-08 + -3.08099E-08 -2.52685E-08 -1.85019E-08 -1.22124E-08 -7.31038E-09 -3.98451E-09 + -1.98298E-09 -9.02928E-10 -3.76738E-10 -1.44206E-10 -5.06860E-11 -1.63708E-11 + -4.86167E-12 -1.32817E-12 -3.33924E-13 -7.72891E-14 + 1.30364E-14 5.63230E-14 2.24023E-13 8.20021E-13 2.76126E-12 8.54922E-12 + 2.43233E-11 6.35445E-11 1.52297E-10 3.34470E-10 6.72069E-10 1.23304E-09 + 2.05986E-09 3.12073E-09 4.26205E-09 5.19672E-09 5.56152E-09 5.04687E-09 + 3.55204E-09 1.28236E-09 -1.28236E-09 -3.55204E-09 -5.04687E-09 -5.56152E-09 + -5.19672E-09 -4.26205E-09 -3.12073E-09 -2.05986E-09 -1.23304E-09 -6.72069E-10 + -3.34470E-10 -1.52297E-10 -6.35445E-11 -2.43233E-11 -8.54922E-12 -2.76126E-12 + -8.20021E-13 -2.24023E-13 -5.63230E-14 -1.30364E-14 + 1.93585E-15 8.36375E-15 3.32665E-14 1.21770E-13 4.10037E-13 1.26953E-12 + 3.61192E-12 9.43611E-12 2.26155E-11 4.96675E-11 9.97996E-11 1.83102E-10 + 3.05882E-10 4.63416E-10 6.32898E-10 7.71692E-10 8.25864E-10 7.49440E-10 + 5.27464E-10 1.90425E-10 -1.90425E-10 -5.27464E-10 -7.49440E-10 -8.25864E-10 + -7.71692E-10 -6.32898E-10 -4.63416E-10 -3.05882E-10 -1.83102E-10 -9.97996E-11 + -4.96675E-11 -2.26155E-11 -9.43611E-12 -3.61192E-12 -1.26953E-12 -4.10037E-13 + -1.21770E-13 -3.32665E-14 -8.36375E-15 -1.93585E-15 + 2.53078E-16 1.09341E-15 4.34900E-15 1.59192E-14 5.36049E-14 1.65968E-13 + 4.72194E-13 1.23360E-12 2.95658E-12 6.49314E-12 1.30470E-11 2.39373E-11 + 3.99886E-11 6.05833E-11 8.27400E-11 1.00885E-10 1.07967E-10 9.79759E-11 + 6.89564E-11 2.48946E-11 -2.48946E-11 -6.89564E-11 -9.79759E-11 -1.07967E-10 + -1.00885E-10 -8.27400E-11 -6.05833E-11 -3.99886E-11 -2.39373E-11 -1.30470E-11 + -6.49314E-12 -2.95658E-12 -1.23360E-12 -4.72194E-13 -1.65968E-13 -5.36049E-14 + -1.59192E-14 -4.34900E-15 -1.09341E-15 -2.53078E-16 + 2.91272E-17 1.25842E-16 5.00533E-16 1.83217E-15 6.16948E-15 1.91015E-14 + 5.43455E-14 1.41977E-13 3.40277E-13 7.47306E-13 1.50160E-12 2.75499E-12 + 4.60235E-12 6.97263E-12 9.52268E-12 1.16110E-11 1.24261E-11 1.12762E-11 + 7.93631E-12 2.86516E-12 -2.86516E-12 -7.93631E-12 -1.12762E-11 -1.24261E-11 + -1.16110E-11 -9.52268E-12 -6.97263E-12 -4.60235E-12 -2.75499E-12 -1.50160E-12 + -7.47306E-13 -3.40277E-13 -1.41977E-13 -5.43455E-14 -1.91015E-14 -6.16948E-15 + -1.83217E-15 -5.00533E-16 -1.25842E-16 -2.91272E-17 + 1.16028E-17 5.01294E-17 1.99388E-16 7.29846E-16 2.45762E-15 7.60910E-15 + 2.16486E-14 5.65567E-14 1.35550E-13 2.97690E-13 5.98164E-13 1.09745E-12 + 1.83335E-12 2.77755E-12 3.79337E-12 4.62525E-12 4.94994E-12 4.49188E-12 + 3.16143E-12 1.14134E-12 -1.14134E-12 -3.16143E-12 -4.49188E-12 -4.94994E-12 + -4.62525E-12 -3.79337E-12 -2.77755E-12 -1.83335E-12 -1.09745E-12 -5.98164E-13 + -2.97690E-13 -1.35550E-13 -5.65567E-14 -2.16486E-14 -7.60910E-15 -2.45762E-15 + -7.29846E-16 -1.99388E-16 -5.01294E-17 -1.16028E-17 + 1.00814E-16 4.35561E-16 1.73242E-15 6.34143E-15 2.13536E-14 6.61134E-14 + 1.88099E-13 4.91406E-13 1.17775E-12 2.58655E-12 5.19728E-12 9.53545E-12 + 1.59295E-11 2.41334E-11 3.29595E-11 4.01876E-11 4.30087E-11 3.90287E-11 + 2.74688E-11 9.91679E-12 -9.91679E-12 -2.74688E-11 -3.90287E-11 -4.30087E-11 + -4.01876E-11 -3.29595E-11 -2.41334E-11 -1.59295E-11 -9.53545E-12 -5.19728E-12 + -2.58655E-12 -1.17775E-12 -4.91406E-13 -1.88099E-13 -6.61134E-14 -2.13536E-14 + -6.34143E-15 -1.73242E-15 -4.35561E-16 -1.00814E-16 + 7.71148E-16 3.33171E-15 1.32517E-14 4.85071E-14 1.63338E-13 5.05717E-13 + 1.43881E-12 3.75888E-12 9.00891E-12 1.97851E-11 3.97552E-11 7.29389E-11 + 1.21848E-10 1.84602E-10 2.52115E-10 3.07404E-10 3.28983E-10 2.98540E-10 + 2.10116E-10 7.58558E-11 -7.58558E-11 -2.10116E-10 -2.98540E-10 -3.28983E-10 + -3.07404E-10 -2.52115E-10 -1.84602E-10 -1.21848E-10 -7.29389E-11 -3.97552E-11 + -1.97851E-11 -9.00891E-12 -3.75888E-12 -1.43881E-12 -5.05717E-13 -1.63338E-13 + -4.85071E-14 -1.32517E-14 -3.33171E-15 -7.71148E-16 + 5.19305E-15 2.24363E-14 8.92395E-14 3.26656E-13 1.09995E-12 3.40559E-12 + 9.68921E-12 2.53130E-11 6.06677E-11 1.33236E-10 2.67719E-10 4.91184E-10 + 8.20548E-10 1.24314E-09 1.69779E-09 2.07012E-09 2.21543E-09 2.01042E-09 + 1.41496E-09 5.10827E-10 -5.10827E-10 -1.41496E-09 -2.01042E-09 -2.21543E-09 + -2.07012E-09 -1.69779E-09 -1.24314E-09 -8.20548E-10 -4.91184E-10 -2.67719E-10 + -1.33236E-10 -6.06677E-11 -2.53130E-11 -9.68921E-12 -3.40559E-12 -1.09995E-12 + -3.26656E-13 -8.92395E-14 -2.24363E-14 -5.19305E-15 + 3.07882E-14 1.33019E-13 5.29076E-13 1.93665E-12 6.52130E-12 2.01908E-11 + 5.74447E-11 1.50074E-10 3.59682E-10 7.89922E-10 1.58723E-09 2.91209E-09 + 4.86480E-09 7.37025E-09 1.00657E-08 1.22731E-08 1.31347E-08 1.19192E-08 + 8.38888E-09 3.02855E-09 -3.02855E-09 -8.38888E-09 -1.19192E-08 -1.31347E-08 + -1.22731E-08 -1.00657E-08 -7.37025E-09 -4.86480E-09 -2.91209E-09 -1.58723E-09 + -7.89922E-10 -3.59682E-10 -1.50074E-10 -5.74447E-11 -2.01908E-11 -6.52130E-12 + -1.93665E-12 -5.29076E-13 -1.33019E-13 -3.07882E-14 + 1.60708E-13 6.94329E-13 2.76167E-12 1.01089E-11 3.40398E-11 1.05392E-10 + 2.99849E-10 7.83353E-10 1.87746E-09 4.12322E-09 8.28501E-09 1.52005E-08 + 2.53932E-08 3.84712E-08 5.25409E-08 6.40632E-08 6.85603E-08 6.22159E-08 + 4.37882E-08 1.58084E-08 -1.58084E-08 -4.37882E-08 -6.22159E-08 -6.85603E-08 + -6.40632E-08 -5.25409E-08 -3.84712E-08 -2.53932E-08 -1.52005E-08 -8.28501E-09 + -4.12322E-09 -1.87746E-09 -7.83353E-10 -2.99849E-10 -1.05392E-10 -3.40398E-11 + -1.01089E-11 -2.76167E-12 -6.94329E-13 -1.60708E-13 + 7.38597E-13 3.19107E-12 1.26924E-11 4.64596E-11 1.56444E-10 4.84370E-10 + 1.37808E-09 3.60021E-09 8.62864E-09 1.89499E-08 3.80771E-08 6.98601E-08 + 1.16705E-07 1.76810E-07 2.41473E-07 2.94428E-07 3.15097E-07 2.85938E-07 + 2.01246E-07 7.26539E-08 -7.26539E-08 -2.01246E-07 -2.85938E-07 -3.15097E-07 + -2.94428E-07 -2.41473E-07 -1.76810E-07 -1.16705E-07 -6.98601E-08 -3.80771E-08 + -1.89499E-08 -8.62864E-09 -3.60021E-09 -1.37808E-09 -4.84370E-10 -1.56444E-10 + -4.64596E-11 -1.26924E-11 -3.19107E-12 -7.38597E-13 + 2.98910E-12 1.29142E-11 5.13659E-11 1.88022E-10 6.33127E-10 1.96024E-09 + 5.57707E-09 1.45700E-08 3.49201E-08 7.66903E-08 1.54098E-07 2.82723E-07 + 4.72304E-07 7.15548E-07 9.77240E-07 1.19155E-06 1.27519E-06 1.15719E-06 + 8.14443E-07 2.94030E-07 -2.94030E-07 -8.14443E-07 -1.15719E-06 -1.27519E-06 + -1.19155E-06 -9.77240E-07 -7.15548E-07 -4.72304E-07 -2.82723E-07 -1.54098E-07 + -7.66903E-08 -3.49201E-08 -1.45700E-08 -5.57707E-09 -1.96024E-09 -6.33127E-10 + -1.88022E-10 -5.13659E-11 -1.29142E-11 -2.98910E-12 + 1.06539E-11 4.60296E-11 1.83081E-10 6.70156E-10 2.25662E-09 6.98679E-09 + 1.98781E-08 5.19313E-08 1.24464E-07 2.73343E-07 5.49243E-07 1.00770E-06 + 1.68341E-06 2.55039E-06 3.48313E-06 4.24698E-06 4.54511E-06 4.12452E-06 + 2.90288E-06 1.04800E-06 -1.04800E-06 -2.90288E-06 -4.12452E-06 -4.54511E-06 + -4.24698E-06 -3.48313E-06 -2.55039E-06 -1.68341E-06 -1.00770E-06 -5.49243E-07 + -2.73343E-07 -1.24464E-07 -5.19313E-08 -1.98781E-08 -6.98679E-09 -2.25662E-09 + -6.70156E-10 -1.83081E-10 -4.60296E-11 -1.06539E-11 + 3.34530E-11 1.44532E-10 5.74869E-10 2.10427E-09 7.08574E-09 2.19384E-08 + 6.24167E-08 1.63063E-07 3.90813E-07 8.58291E-07 1.72461E-06 3.16414E-06 + 5.28586E-06 8.00817E-06 1.09369E-05 1.33354E-05 1.42715E-05 1.29509E-05 + 9.11497E-06 3.29069E-06 -3.29069E-06 -9.11497E-06 -1.29509E-05 -1.42715E-05 + -1.33354E-05 -1.09369E-05 -8.00817E-06 -5.28586E-06 -3.16414E-06 -1.72461E-06 + -8.58291E-07 -3.90813E-07 -1.63063E-07 -6.24167E-08 -2.19384E-08 -7.08574E-09 + -2.10427E-09 -5.74869E-10 -1.44532E-10 -3.34530E-11 + 9.25816E-11 3.99994E-10 1.59096E-09 5.82361E-09 1.96099E-08 6.07147E-08 + 1.72739E-07 4.51279E-07 1.08158E-06 2.37534E-06 4.77289E-06 8.75681E-06 + 1.46287E-05 2.21627E-05 3.02682E-05 3.69060E-05 3.94969E-05 3.58421E-05 + 2.52263E-05 9.10724E-06 -9.10724E-06 -2.52263E-05 -3.58421E-05 -3.94969E-05 + -3.69060E-05 -3.02682E-05 -2.21627E-05 -1.46287E-05 -8.75681E-06 -4.77289E-06 + -2.37534E-06 -1.08158E-06 -4.51279E-07 -1.72739E-07 -6.07147E-08 -1.96099E-08 + -5.82361E-09 -1.59096E-09 -3.99994E-10 -9.25816E-11 + 2.26006E-10 9.76448E-10 3.88378E-09 1.42163E-08 4.78708E-08 1.48214E-07 + 4.21683E-07 1.10164E-06 2.64031E-06 5.79856E-06 1.16514E-05 2.13767E-05 + 3.57110E-05 5.41027E-05 7.38895E-05 9.00944E-05 9.64220E-05 8.75052E-05 + 6.15928E-05 2.22378E-05 -2.22378E-05 -6.15928E-05 -8.75052E-05 -9.64220E-05 + -9.00944E-05 -7.38895E-05 -5.41027E-05 -3.57110E-05 -2.13767E-05 -1.16514E-05 + -5.79856E-06 -2.64031E-06 -1.10164E-06 -4.21683E-07 -1.48214E-07 -4.78708E-08 + -1.42163E-08 -3.88378E-09 -9.76448E-10 -2.26006E-10 + 4.87288E-10 2.10530E-09 8.37376E-09 3.06516E-08 1.03213E-07 3.19562E-07 + 9.09184E-07 2.37523E-06 5.69273E-06 1.25022E-05 2.51213E-05 4.60901E-05 + 7.69958E-05 1.16650E-04 1.59315E-04 1.94266E-04 2.07948E-04 1.88790E-04 + 1.32955E-04 4.80229E-05 -4.80229E-05 -1.32955E-04 -1.88790E-04 -2.07948E-04 + -1.94266E-04 -1.59315E-04 -1.16650E-04 -7.69958E-05 -4.60901E-05 -2.51213E-05 + -1.25022E-05 -5.69273E-06 -2.37523E-06 -9.09184E-07 -3.19562E-07 -1.03213E-07 + -3.06516E-08 -8.37376E-09 -2.10530E-09 -4.87288E-10 + 9.29916E-10 4.01765E-09 1.59801E-08 5.84940E-08 1.96967E-07 6.09836E-07 + 1.73504E-06 4.53278E-06 1.08637E-05 2.38585E-05 4.79402E-05 8.79559E-05 + 1.46935E-04 2.22612E-04 3.04047E-04 3.70834E-04 3.97216E-04 3.61128E-04 + 2.54821E-04 9.21798E-05 -9.21798E-05 -2.54821E-04 -3.61128E-04 -3.97216E-04 + -3.70834E-04 -3.04047E-04 -2.22612E-04 -1.46935E-04 -8.79559E-05 -4.79402E-05 + -2.38585E-05 -1.08637E-05 -4.53278E-06 -1.73504E-06 -6.09836E-07 -1.96967E-07 + -5.84940E-08 -1.59801E-08 -4.01765E-09 -9.29916E-10 + 1.57606E-09 6.80929E-09 2.70837E-08 9.91381E-08 3.33828E-07 1.03358E-06 + 2.94062E-06 7.68234E-06 1.84123E-05 4.04364E-05 8.12511E-05 1.49071E-04 + 2.49032E-04 3.77300E-04 5.15378E-04 6.28868E-04 6.74517E-04 6.14966E-04 + 4.35628E-04 1.58059E-04 -1.58059E-04 -4.35628E-04 -6.14966E-04 -6.74517E-04 + -6.28868E-04 -5.15378E-04 -3.77300E-04 -2.49032E-04 -1.49071E-04 -8.12511E-05 + -4.04364E-05 -1.84123E-05 -7.68234E-06 -2.94062E-06 -1.03358E-06 -3.33828E-07 + -9.91381E-08 -2.70837E-08 -6.80929E-09 -1.57606E-09 + 2.38491E-09 1.03039E-08 4.09833E-08 1.50017E-07 5.05153E-07 1.56402E-06 + 4.44978E-06 1.16250E-05 2.78617E-05 6.11889E-05 1.22950E-04 2.25577E-04 + 3.76840E-04 5.70947E-04 7.79971E-04 9.52115E-04 1.02247E-03 9.34539E-04 + 6.64285E-04 2.41658E-04 -2.41658E-04 -6.64285E-04 -9.34539E-04 -1.02247E-03 + -9.52115E-04 -7.79971E-04 -5.70947E-04 -3.76840E-04 -2.25577E-04 -1.22950E-04 + -6.11889E-05 -2.78617E-05 -1.16250E-05 -4.44978E-06 -1.56402E-06 -5.05153E-07 + -1.50017E-07 -4.09833E-08 -1.03039E-08 -2.38491E-09 + 3.24746E-09 1.40305E-08 5.58056E-08 2.04273E-07 6.87850E-07 2.12967E-06 + 6.05912E-06 1.58294E-05 3.79383E-05 8.33190E-05 1.67417E-04 3.07161E-04 + 5.13131E-04 7.77440E-04 1.06205E-03 1.29638E-03 1.39189E-03 1.27163E-03 + 9.03324E-04 3.28455E-04 -3.28455E-04 -9.03324E-04 -1.27163E-03 -1.39189E-03 + -1.29638E-03 -1.06205E-03 -7.77440E-04 -5.13131E-04 -3.07161E-04 -1.67417E-04 + -8.33190E-05 -3.79383E-05 -1.58294E-05 -6.05912E-06 -2.12967E-06 -6.87850E-07 + -2.04273E-07 -5.58056E-08 -1.40305E-08 -3.24746E-09 + 4.02180E-09 1.73760E-08 6.91122E-08 2.52981E-07 8.51865E-07 2.63748E-06 + 7.50389E-06 1.96038E-05 4.69846E-05 1.03186E-04 2.07337E-04 3.80402E-04 + 6.35484E-04 9.62799E-04 1.31513E-03 1.60459E-03 1.72047E-03 1.56732E-03 + 1.10897E-03 4.02001E-04 -4.02001E-04 -1.10897E-03 -1.56732E-03 -1.72047E-03 + -1.60459E-03 -1.31513E-03 -9.62799E-04 -6.35484E-04 -3.80402E-04 -2.07337E-04 + -1.03186E-04 -4.69846E-05 -1.96038E-05 -7.50389E-06 -2.63748E-06 -8.51865E-07 + -2.52981E-07 -6.91122E-08 -1.73760E-08 -4.02180E-09 + 4.58824E-09 1.98233E-08 7.88462E-08 2.88612E-07 9.71844E-07 3.00896E-06 + 8.56076E-06 2.23649E-05 5.36020E-05 1.17719E-04 2.36539E-04 4.33978E-04 + 7.24985E-04 1.09838E-03 1.50020E-03 1.82967E-03 1.95952E-03 1.78072E-03 + 1.25569E-03 4.53990E-04 -4.53990E-04 -1.25569E-03 -1.78072E-03 -1.95952E-03 + -1.82967E-03 -1.50020E-03 -1.09838E-03 -7.24985E-04 -4.33978E-04 -2.36539E-04 + -1.17719E-04 -5.36020E-05 -2.23649E-05 -8.56076E-06 -3.00896E-06 -9.71844E-07 + -2.88612E-07 -7.88462E-08 -1.98233E-08 -4.58824E-09 + 4.88163E-09 2.10908E-08 8.38878E-08 3.07066E-07 1.03399E-06 3.20135E-06 + 9.10815E-06 2.37950E-05 5.70294E-05 1.25246E-04 2.51664E-04 4.61728E-04 + 7.71341E-04 1.16861E-03 1.59605E-03 1.94626E-03 2.08339E-03 1.89144E-03 + 1.33196E-03 4.81065E-04 -4.81065E-04 -1.33196E-03 -1.89144E-03 -2.08339E-03 + -1.94626E-03 -1.59605E-03 -1.16861E-03 -7.71341E-04 -4.61728E-04 -2.51664E-04 + -1.25246E-04 -5.70294E-05 -2.37950E-05 -9.10815E-06 -3.20135E-06 -1.03399E-06 + -3.07066E-07 -8.38878E-08 -2.10908E-08 -4.88163E-09 + 4.88163E-09 2.10908E-08 8.38878E-08 3.07066E-07 1.03399E-06 3.20135E-06 + 9.10815E-06 2.37950E-05 5.70294E-05 1.25246E-04 2.51664E-04 4.61728E-04 + 7.71341E-04 1.16861E-03 1.59605E-03 1.94626E-03 2.08339E-03 1.89144E-03 + 1.33196E-03 4.81065E-04 -4.81065E-04 -1.33196E-03 -1.89144E-03 -2.08339E-03 + -1.94626E-03 -1.59605E-03 -1.16861E-03 -7.71341E-04 -4.61728E-04 -2.51664E-04 + -1.25246E-04 -5.70294E-05 -2.37950E-05 -9.10815E-06 -3.20135E-06 -1.03399E-06 + -3.07066E-07 -8.38878E-08 -2.10908E-08 -4.88163E-09 + 4.58824E-09 1.98233E-08 7.88462E-08 2.88612E-07 9.71844E-07 3.00896E-06 + 8.56076E-06 2.23649E-05 5.36020E-05 1.17719E-04 2.36539E-04 4.33978E-04 + 7.24985E-04 1.09838E-03 1.50020E-03 1.82967E-03 1.95952E-03 1.78072E-03 + 1.25569E-03 4.53990E-04 -4.53990E-04 -1.25569E-03 -1.78072E-03 -1.95952E-03 + -1.82967E-03 -1.50020E-03 -1.09838E-03 -7.24985E-04 -4.33978E-04 -2.36539E-04 + -1.17719E-04 -5.36020E-05 -2.23649E-05 -8.56076E-06 -3.00896E-06 -9.71844E-07 + -2.88612E-07 -7.88462E-08 -1.98233E-08 -4.58824E-09 + 4.02180E-09 1.73760E-08 6.91122E-08 2.52981E-07 8.51865E-07 2.63748E-06 + 7.50389E-06 1.96038E-05 4.69846E-05 1.03186E-04 2.07337E-04 3.80402E-04 + 6.35484E-04 9.62799E-04 1.31513E-03 1.60459E-03 1.72047E-03 1.56732E-03 + 1.10897E-03 4.02001E-04 -4.02001E-04 -1.10897E-03 -1.56732E-03 -1.72047E-03 + -1.60459E-03 -1.31513E-03 -9.62799E-04 -6.35484E-04 -3.80402E-04 -2.07337E-04 + -1.03186E-04 -4.69846E-05 -1.96038E-05 -7.50389E-06 -2.63748E-06 -8.51865E-07 + -2.52981E-07 -6.91122E-08 -1.73760E-08 -4.02180E-09 + 3.24746E-09 1.40305E-08 5.58056E-08 2.04273E-07 6.87850E-07 2.12967E-06 + 6.05912E-06 1.58294E-05 3.79383E-05 8.33190E-05 1.67417E-04 3.07161E-04 + 5.13131E-04 7.77440E-04 1.06205E-03 1.29638E-03 1.39189E-03 1.27163E-03 + 9.03324E-04 3.28455E-04 -3.28455E-04 -9.03324E-04 -1.27163E-03 -1.39189E-03 + -1.29638E-03 -1.06205E-03 -7.77440E-04 -5.13131E-04 -3.07161E-04 -1.67417E-04 + -8.33190E-05 -3.79383E-05 -1.58294E-05 -6.05912E-06 -2.12967E-06 -6.87850E-07 + -2.04273E-07 -5.58056E-08 -1.40305E-08 -3.24746E-09 + 2.38491E-09 1.03039E-08 4.09833E-08 1.50017E-07 5.05153E-07 1.56402E-06 + 4.44978E-06 1.16250E-05 2.78617E-05 6.11889E-05 1.22950E-04 2.25577E-04 + 3.76840E-04 5.70947E-04 7.79971E-04 9.52115E-04 1.02247E-03 9.34539E-04 + 6.64285E-04 2.41658E-04 -2.41658E-04 -6.64285E-04 -9.34539E-04 -1.02247E-03 + -9.52115E-04 -7.79971E-04 -5.70947E-04 -3.76840E-04 -2.25577E-04 -1.22950E-04 + -6.11889E-05 -2.78617E-05 -1.16250E-05 -4.44978E-06 -1.56402E-06 -5.05153E-07 + -1.50017E-07 -4.09833E-08 -1.03039E-08 -2.38491E-09 + 1.57606E-09 6.80929E-09 2.70837E-08 9.91381E-08 3.33828E-07 1.03358E-06 + 2.94062E-06 7.68234E-06 1.84123E-05 4.04364E-05 8.12511E-05 1.49071E-04 + 2.49032E-04 3.77300E-04 5.15378E-04 6.28868E-04 6.74517E-04 6.14966E-04 + 4.35628E-04 1.58059E-04 -1.58059E-04 -4.35628E-04 -6.14966E-04 -6.74517E-04 + -6.28868E-04 -5.15378E-04 -3.77300E-04 -2.49032E-04 -1.49071E-04 -8.12511E-05 + -4.04364E-05 -1.84123E-05 -7.68234E-06 -2.94062E-06 -1.03358E-06 -3.33828E-07 + -9.91381E-08 -2.70837E-08 -6.80929E-09 -1.57606E-09 + 9.29916E-10 4.01765E-09 1.59801E-08 5.84940E-08 1.96967E-07 6.09836E-07 + 1.73504E-06 4.53278E-06 1.08637E-05 2.38585E-05 4.79402E-05 8.79559E-05 + 1.46935E-04 2.22612E-04 3.04047E-04 3.70834E-04 3.97216E-04 3.61128E-04 + 2.54821E-04 9.21798E-05 -9.21798E-05 -2.54821E-04 -3.61128E-04 -3.97216E-04 + -3.70834E-04 -3.04047E-04 -2.22612E-04 -1.46935E-04 -8.79559E-05 -4.79402E-05 + -2.38585E-05 -1.08637E-05 -4.53278E-06 -1.73504E-06 -6.09836E-07 -1.96967E-07 + -5.84940E-08 -1.59801E-08 -4.01765E-09 -9.29916E-10 + 4.87288E-10 2.10530E-09 8.37376E-09 3.06516E-08 1.03213E-07 3.19562E-07 + 9.09184E-07 2.37523E-06 5.69273E-06 1.25022E-05 2.51213E-05 4.60901E-05 + 7.69958E-05 1.16650E-04 1.59315E-04 1.94266E-04 2.07948E-04 1.88790E-04 + 1.32955E-04 4.80229E-05 -4.80229E-05 -1.32955E-04 -1.88790E-04 -2.07948E-04 + -1.94266E-04 -1.59315E-04 -1.16650E-04 -7.69958E-05 -4.60901E-05 -2.51213E-05 + -1.25022E-05 -5.69273E-06 -2.37523E-06 -9.09184E-07 -3.19562E-07 -1.03213E-07 + -3.06516E-08 -8.37376E-09 -2.10530E-09 -4.87288E-10 + 2.26006E-10 9.76448E-10 3.88378E-09 1.42163E-08 4.78708E-08 1.48214E-07 + 4.21683E-07 1.10164E-06 2.64031E-06 5.79856E-06 1.16514E-05 2.13767E-05 + 3.57110E-05 5.41027E-05 7.38895E-05 9.00944E-05 9.64220E-05 8.75052E-05 + 6.15928E-05 2.22378E-05 -2.22378E-05 -6.15928E-05 -8.75052E-05 -9.64220E-05 + -9.00944E-05 -7.38895E-05 -5.41027E-05 -3.57110E-05 -2.13767E-05 -1.16514E-05 + -5.79856E-06 -2.64031E-06 -1.10164E-06 -4.21683E-07 -1.48214E-07 -4.78708E-08 + -1.42163E-08 -3.88378E-09 -9.76448E-10 -2.26006E-10 + 9.25816E-11 3.99994E-10 1.59096E-09 5.82361E-09 1.96099E-08 6.07147E-08 + 1.72739E-07 4.51279E-07 1.08158E-06 2.37534E-06 4.77289E-06 8.75681E-06 + 1.46287E-05 2.21627E-05 3.02682E-05 3.69060E-05 3.94969E-05 3.58421E-05 + 2.52263E-05 9.10724E-06 -9.10724E-06 -2.52263E-05 -3.58421E-05 -3.94969E-05 + -3.69060E-05 -3.02682E-05 -2.21627E-05 -1.46287E-05 -8.75681E-06 -4.77289E-06 + -2.37534E-06 -1.08158E-06 -4.51279E-07 -1.72739E-07 -6.07147E-08 -1.96099E-08 + -5.82361E-09 -1.59096E-09 -3.99994E-10 -9.25816E-11 + 3.34530E-11 1.44532E-10 5.74869E-10 2.10427E-09 7.08574E-09 2.19384E-08 + 6.24167E-08 1.63063E-07 3.90813E-07 8.58291E-07 1.72461E-06 3.16414E-06 + 5.28586E-06 8.00817E-06 1.09369E-05 1.33354E-05 1.42715E-05 1.29509E-05 + 9.11497E-06 3.29069E-06 -3.29069E-06 -9.11497E-06 -1.29509E-05 -1.42715E-05 + -1.33354E-05 -1.09369E-05 -8.00817E-06 -5.28586E-06 -3.16414E-06 -1.72461E-06 + -8.58291E-07 -3.90813E-07 -1.63063E-07 -6.24167E-08 -2.19384E-08 -7.08574E-09 + -2.10427E-09 -5.74869E-10 -1.44532E-10 -3.34530E-11 + 1.06539E-11 4.60296E-11 1.83081E-10 6.70156E-10 2.25662E-09 6.98679E-09 + 1.98781E-08 5.19313E-08 1.24464E-07 2.73343E-07 5.49243E-07 1.00770E-06 + 1.68341E-06 2.55039E-06 3.48313E-06 4.24698E-06 4.54511E-06 4.12452E-06 + 2.90288E-06 1.04800E-06 -1.04800E-06 -2.90288E-06 -4.12452E-06 -4.54511E-06 + -4.24698E-06 -3.48313E-06 -2.55039E-06 -1.68341E-06 -1.00770E-06 -5.49243E-07 + -2.73343E-07 -1.24464E-07 -5.19313E-08 -1.98781E-08 -6.98679E-09 -2.25662E-09 + -6.70156E-10 -1.83081E-10 -4.60296E-11 -1.06539E-11 + 2.98910E-12 1.29142E-11 5.13659E-11 1.88022E-10 6.33127E-10 1.96024E-09 + 5.57707E-09 1.45700E-08 3.49201E-08 7.66903E-08 1.54098E-07 2.82723E-07 + 4.72304E-07 7.15548E-07 9.77240E-07 1.19155E-06 1.27519E-06 1.15719E-06 + 8.14443E-07 2.94030E-07 -2.94030E-07 -8.14443E-07 -1.15719E-06 -1.27519E-06 + -1.19155E-06 -9.77240E-07 -7.15548E-07 -4.72304E-07 -2.82723E-07 -1.54098E-07 + -7.66903E-08 -3.49201E-08 -1.45700E-08 -5.57707E-09 -1.96024E-09 -6.33127E-10 + -1.88022E-10 -5.13659E-11 -1.29142E-11 -2.98910E-12 + 7.38597E-13 3.19107E-12 1.26924E-11 4.64596E-11 1.56444E-10 4.84370E-10 + 1.37808E-09 3.60021E-09 8.62864E-09 1.89499E-08 3.80771E-08 6.98601E-08 + 1.16705E-07 1.76810E-07 2.41473E-07 2.94428E-07 3.15097E-07 2.85938E-07 + 2.01246E-07 7.26539E-08 -7.26539E-08 -2.01246E-07 -2.85938E-07 -3.15097E-07 + -2.94428E-07 -2.41473E-07 -1.76810E-07 -1.16705E-07 -6.98601E-08 -3.80771E-08 + -1.89499E-08 -8.62864E-09 -3.60021E-09 -1.37808E-09 -4.84370E-10 -1.56444E-10 + -4.64596E-11 -1.26924E-11 -3.19107E-12 -7.38597E-13 + 1.60708E-13 6.94329E-13 2.76167E-12 1.01089E-11 3.40398E-11 1.05392E-10 + 2.99849E-10 7.83353E-10 1.87746E-09 4.12322E-09 8.28501E-09 1.52005E-08 + 2.53932E-08 3.84712E-08 5.25409E-08 6.40632E-08 6.85603E-08 6.22159E-08 + 4.37882E-08 1.58084E-08 -1.58084E-08 -4.37882E-08 -6.22159E-08 -6.85603E-08 + -6.40632E-08 -5.25409E-08 -3.84712E-08 -2.53932E-08 -1.52005E-08 -8.28501E-09 + -4.12322E-09 -1.87746E-09 -7.83353E-10 -2.99849E-10 -1.05392E-10 -3.40398E-11 + -1.01089E-11 -2.76167E-12 -6.94329E-13 -1.60708E-13 + 3.07882E-14 1.33019E-13 5.29076E-13 1.93665E-12 6.52130E-12 2.01908E-11 + 5.74447E-11 1.50074E-10 3.59682E-10 7.89922E-10 1.58723E-09 2.91209E-09 + 4.86480E-09 7.37025E-09 1.00657E-08 1.22731E-08 1.31347E-08 1.19192E-08 + 8.38888E-09 3.02855E-09 -3.02855E-09 -8.38888E-09 -1.19192E-08 -1.31347E-08 + -1.22731E-08 -1.00657E-08 -7.37025E-09 -4.86480E-09 -2.91209E-09 -1.58723E-09 + -7.89922E-10 -3.59682E-10 -1.50074E-10 -5.74447E-11 -2.01908E-11 -6.52130E-12 + -1.93665E-12 -5.29076E-13 -1.33019E-13 -3.07882E-14 + 5.19305E-15 2.24363E-14 8.92395E-14 3.26656E-13 1.09995E-12 3.40559E-12 + 9.68921E-12 2.53130E-11 6.06677E-11 1.33236E-10 2.67719E-10 4.91184E-10 + 8.20548E-10 1.24314E-09 1.69779E-09 2.07012E-09 2.21543E-09 2.01042E-09 + 1.41496E-09 5.10827E-10 -5.10827E-10 -1.41496E-09 -2.01042E-09 -2.21543E-09 + -2.07012E-09 -1.69779E-09 -1.24314E-09 -8.20548E-10 -4.91184E-10 -2.67719E-10 + -1.33236E-10 -6.06677E-11 -2.53130E-11 -9.68921E-12 -3.40559E-12 -1.09995E-12 + -3.26656E-13 -8.92395E-14 -2.24363E-14 -5.19305E-15 + 7.71148E-16 3.33171E-15 1.32517E-14 4.85071E-14 1.63338E-13 5.05717E-13 + 1.43881E-12 3.75888E-12 9.00891E-12 1.97851E-11 3.97552E-11 7.29389E-11 + 1.21848E-10 1.84602E-10 2.52115E-10 3.07404E-10 3.28983E-10 2.98540E-10 + 2.10116E-10 7.58558E-11 -7.58558E-11 -2.10116E-10 -2.98540E-10 -3.28983E-10 + -3.07404E-10 -2.52115E-10 -1.84602E-10 -1.21848E-10 -7.29389E-11 -3.97552E-11 + -1.97851E-11 -9.00891E-12 -3.75888E-12 -1.43881E-12 -5.05717E-13 -1.63338E-13 + -4.85071E-14 -1.32517E-14 -3.33171E-15 -7.71148E-16 + 1.00814E-16 4.35561E-16 1.73242E-15 6.34143E-15 2.13536E-14 6.61134E-14 + 1.88099E-13 4.91406E-13 1.17775E-12 2.58655E-12 5.19728E-12 9.53545E-12 + 1.59295E-11 2.41334E-11 3.29595E-11 4.01876E-11 4.30087E-11 3.90287E-11 + 2.74688E-11 9.91679E-12 -9.91679E-12 -2.74688E-11 -3.90287E-11 -4.30087E-11 + -4.01876E-11 -3.29595E-11 -2.41334E-11 -1.59295E-11 -9.53545E-12 -5.19728E-12 + -2.58655E-12 -1.17775E-12 -4.91406E-13 -1.88099E-13 -6.61134E-14 -2.13536E-14 + -6.34143E-15 -1.73242E-15 -4.35561E-16 -1.00814E-16 + 1.16028E-17 5.01294E-17 1.99388E-16 7.29846E-16 2.45762E-15 7.60910E-15 + 2.16486E-14 5.65567E-14 1.35550E-13 2.97690E-13 5.98164E-13 1.09745E-12 + 1.83335E-12 2.77755E-12 3.79337E-12 4.62525E-12 4.94994E-12 4.49188E-12 + 3.16143E-12 1.14134E-12 -1.14134E-12 -3.16143E-12 -4.49188E-12 -4.94994E-12 + -4.62525E-12 -3.79337E-12 -2.77755E-12 -1.83335E-12 -1.09745E-12 -5.98164E-13 + -2.97690E-13 -1.35550E-13 -5.65567E-14 -2.16486E-14 -7.60910E-15 -2.45762E-15 + -7.29846E-16 -1.99388E-16 -5.01294E-17 -1.16028E-17 + 3.94680E-18 1.70519E-17 6.78234E-17 2.48263E-16 8.35979E-16 2.58830E-15 + 7.36395E-15 1.92383E-14 4.61084E-14 1.01262E-13 2.03471E-13 3.73307E-13 + 6.23629E-13 9.44809E-13 1.29035E-12 1.57332E-12 1.68376E-12 1.52795E-12 + 1.07539E-12 3.88237E-13 -3.88237E-13 -1.07539E-12 -1.52795E-12 -1.68376E-12 + -1.57332E-12 -1.29035E-12 -9.44809E-13 -6.23629E-13 -3.73307E-13 -2.03471E-13 + -1.01262E-13 -4.61084E-14 -1.92383E-14 -7.36395E-15 -2.58830E-15 -8.35979E-16 + -2.48263E-16 -6.78234E-17 -1.70519E-17 -3.94680E-18 + 3.42927E-17 1.48160E-16 5.89300E-16 2.15709E-15 7.26360E-15 2.24890E-14 + 6.39834E-14 1.67156E-13 4.00623E-13 8.79836E-13 1.76790E-12 3.24357E-12 + 5.41855E-12 8.20919E-12 1.12115E-11 1.36702E-11 1.46298E-11 1.32760E-11 + 9.34377E-12 3.37328E-12 -3.37328E-12 -9.34377E-12 -1.32760E-11 -1.46298E-11 + -1.36702E-11 -1.12115E-11 -8.20919E-12 -5.41855E-12 -3.24357E-12 -1.76790E-12 + -8.79836E-13 -4.00623E-13 -1.67156E-13 -6.39834E-14 -2.24890E-14 -7.26360E-15 + -2.15709E-15 -5.89300E-16 -1.48160E-16 -3.42927E-17 + 2.62313E-16 1.13331E-15 4.50769E-15 1.65001E-14 5.55610E-14 1.72024E-13 + 4.89424E-13 1.27862E-12 3.06446E-12 6.73007E-12 1.35231E-11 2.48108E-11 + 4.14477E-11 6.27940E-11 8.57592E-11 1.04566E-10 1.11907E-10 1.01551E-10 + 7.14726E-11 2.58030E-11 -2.58030E-11 -7.14726E-11 -1.01551E-10 -1.11907E-10 + -1.04566E-10 -8.57592E-11 -6.27940E-11 -4.14477E-11 -2.48108E-11 -1.35231E-11 + -6.73007E-12 -3.06446E-12 -1.27862E-12 -4.89424E-13 -1.72024E-13 -5.55610E-14 + -1.65001E-14 -4.50769E-15 -1.13331E-15 -2.62313E-16 + 1.76646E-15 7.63191E-15 3.03556E-14 1.11115E-13 3.74158E-13 1.15844E-12 + 3.29587E-12 8.61043E-12 2.06366E-11 4.53215E-11 9.10669E-11 1.67080E-10 + 2.79117E-10 4.22866E-10 5.77518E-10 7.04168E-10 7.53599E-10 6.83863E-10 + 4.81310E-10 1.73762E-10 -1.73762E-10 -4.81310E-10 -6.83863E-10 -7.53599E-10 + -7.04168E-10 -5.77518E-10 -4.22866E-10 -2.79117E-10 -1.67080E-10 -9.10669E-11 + -4.53215E-11 -2.06366E-11 -8.61043E-12 -3.29587E-12 -1.15844E-12 -3.74158E-13 + -1.11115E-13 -3.03556E-14 -7.63191E-15 -1.76646E-15 + 1.04729E-14 4.52475E-14 1.79970E-13 6.58769E-13 2.21828E-12 6.86807E-12 + 1.95403E-11 5.10489E-11 1.22349E-10 2.68699E-10 5.39911E-10 9.90574E-10 + 1.65480E-09 2.50706E-09 3.42394E-09 4.17482E-09 4.46788E-09 4.05443E-09 + 2.85355E-09 1.03019E-09 -1.03019E-09 -2.85355E-09 -4.05443E-09 -4.46788E-09 + -4.17482E-09 -3.42394E-09 -2.50706E-09 -1.65480E-09 -9.90574E-10 -5.39911E-10 + -2.68699E-10 -1.22349E-10 -5.10489E-11 -1.95403E-11 -6.86807E-12 -2.21828E-12 + -6.58769E-13 -1.79970E-13 -4.52475E-14 -1.04729E-14 + 5.46661E-14 2.36182E-13 9.39405E-13 3.43863E-12 1.15789E-11 3.58499E-11 + 1.01996E-10 2.66464E-10 6.38635E-10 1.40255E-09 2.81822E-09 5.17059E-09 + 8.63773E-09 1.30863E-08 1.78723E-08 2.17917E-08 2.33214E-08 2.11633E-08 + 1.48949E-08 5.37737E-09 -5.37737E-09 -1.48949E-08 -2.11633E-08 -2.33214E-08 + -2.17917E-08 -1.78723E-08 -1.30863E-08 -8.63773E-09 -5.17059E-09 -2.81822E-09 + -1.40255E-09 -6.38635E-10 -2.66464E-10 -1.01996E-10 -3.58499E-11 -1.15789E-11 + -3.43863E-12 -9.39405E-13 -2.36182E-13 -5.46661E-14 + 2.51240E-13 1.08547E-12 4.31741E-12 1.58036E-11 5.32157E-11 1.64763E-10 + 4.68765E-10 1.22464E-09 2.93511E-09 6.44599E-09 1.29523E-08 2.37635E-08 + 3.96982E-08 6.01434E-08 8.21392E-08 1.00152E-07 1.07183E-07 9.72644E-08 + 6.84557E-08 2.47139E-08 -2.47139E-08 -6.84557E-08 -9.72644E-08 -1.07183E-07 + -1.00152E-07 -8.21392E-08 -6.01434E-08 -3.96982E-08 -2.37635E-08 -1.29523E-08 + -6.44599E-09 -2.93511E-09 -1.22464E-09 -4.68765E-10 -1.64763E-10 -5.32157E-11 + -1.58036E-11 -4.31741E-12 -1.08547E-12 -2.51240E-13 + 1.01677E-12 4.39289E-12 1.74726E-11 6.39572E-11 2.15364E-10 6.66794E-10 + 1.89709E-09 4.95613E-09 1.18784E-08 2.60869E-08 5.24177E-08 9.61708E-08 + 1.60658E-07 2.43400E-07 3.32417E-07 4.05316E-07 4.33769E-07 3.93629E-07 + 2.77040E-07 1.00017E-07 -1.00017E-07 -2.77040E-07 -3.93629E-07 -4.33769E-07 + -4.05316E-07 -3.32417E-07 -2.43400E-07 -1.60658E-07 -9.61708E-08 -5.24177E-08 + -2.60869E-08 -1.18784E-08 -4.95613E-09 -1.89709E-09 -6.66794E-10 -2.15364E-10 + -6.39572E-11 -1.74726E-11 -4.39289E-12 -1.01677E-12 + 3.62402E-12 1.56574E-11 6.22765E-11 2.27959E-10 7.67609E-10 2.37662E-09 + 6.76170E-09 1.76649E-08 4.23374E-08 9.29801E-08 1.86830E-07 3.42777E-07 + 5.72626E-07 8.67538E-07 1.18482E-06 1.44465E-06 1.54606E-06 1.40299E-06 + 9.87439E-07 3.56485E-07 -3.56485E-07 -9.87439E-07 -1.40299E-06 -1.54606E-06 + -1.44465E-06 -1.18482E-06 -8.67538E-07 -5.72626E-07 -3.42777E-07 -1.86830E-07 + -9.29801E-08 -4.23374E-08 -1.76649E-08 -6.76170E-09 -2.37662E-09 -7.67609E-10 + -2.27959E-10 -6.22765E-11 -1.56574E-11 -3.62402E-12 + 1.13793E-11 4.91638E-11 1.95547E-10 7.15787E-10 2.41028E-09 7.46252E-09 + 2.12316E-08 5.54673E-08 1.32939E-07 2.91955E-07 5.86641E-07 1.07631E-06 + 1.79803E-06 2.72405E-06 3.72030E-06 4.53616E-06 4.85459E-06 4.40536E-06 + 3.10054E-06 1.11935E-06 -1.11935E-06 -3.10054E-06 -4.40536E-06 -4.85459E-06 + -4.53616E-06 -3.72030E-06 -2.72405E-06 -1.79803E-06 -1.07631E-06 -5.86641E-07 + -2.91955E-07 -1.32939E-07 -5.54673E-08 -2.12316E-08 -7.46252E-09 -2.41028E-09 + -7.15787E-10 -1.95547E-10 -4.91638E-11 -1.13793E-11 + 3.14924E-11 1.36061E-10 5.41179E-10 1.98095E-09 6.67047E-09 2.06527E-08 + 5.87587E-08 1.53507E-07 3.67910E-07 8.07991E-07 1.62354E-06 2.97871E-06 + 4.97608E-06 7.53885E-06 1.02960E-05 1.25539E-05 1.34352E-05 1.21919E-05 + 8.58080E-06 3.09784E-06 -3.09784E-06 -8.58080E-06 -1.21919E-05 -1.34352E-05 + -1.25539E-05 -1.02960E-05 -7.53885E-06 -4.97608E-06 -2.97871E-06 -1.62354E-06 + -8.07991E-07 -3.67910E-07 -1.53507E-07 -5.87587E-08 -2.06527E-08 -6.67047E-09 + -1.98095E-09 -5.41179E-10 -1.36061E-10 -3.14924E-11 + 7.68780E-11 3.32147E-10 1.32110E-09 4.83581E-09 1.62837E-08 5.04163E-08 + 1.43439E-07 3.74733E-07 8.98125E-07 1.97243E-06 3.96331E-06 7.27149E-06 + 1.21474E-05 1.84035E-05 2.51341E-05 3.06460E-05 3.27975E-05 2.97627E-05 + 2.09475E-05 7.56251E-06 -7.56251E-06 -2.09475E-05 -2.97627E-05 -3.27975E-05 + -3.06460E-05 -2.51341E-05 -1.84035E-05 -1.21474E-05 -7.27149E-06 -3.96331E-06 + -1.97243E-06 -8.98125E-07 -3.74733E-07 -1.43439E-07 -5.04163E-08 -1.62837E-08 + -4.83581E-09 -1.32110E-09 -3.32147E-10 -7.68780E-11 + 1.65755E-10 7.16137E-10 2.84841E-09 1.04264E-08 3.51089E-08 1.08702E-07 + 3.09267E-07 8.07957E-07 1.93643E-06 4.25273E-06 8.54523E-06 1.56779E-05 + 2.61908E-05 3.96795E-05 5.41913E-05 6.60760E-05 7.07160E-05 6.41753E-05 + 4.51703E-05 1.63082E-05 -1.63082E-05 -4.51703E-05 -6.41753E-05 -7.07160E-05 + -6.60760E-05 -5.41913E-05 -3.96795E-05 -2.61908E-05 -1.56779E-05 -8.54523E-06 + -4.25273E-06 -1.93643E-06 -8.07957E-07 -3.09267E-07 -1.08702E-07 -3.51089E-08 + -1.04264E-08 -2.84841E-09 -7.16137E-10 -1.65755E-10 + 3.16319E-10 1.36664E-09 5.43575E-09 1.98972E-08 6.70001E-08 2.07441E-07 + 5.90189E-07 1.54186E-06 3.69539E-06 8.11569E-06 1.63073E-05 2.99190E-05 + 4.99812E-05 7.57224E-05 1.03417E-04 1.26100E-04 1.34965E-04 1.22500E-04 + 8.62410E-05 3.11415E-05 -3.11415E-05 -8.62410E-05 -1.22500E-04 -1.34965E-04 + -1.26100E-04 -1.03417E-04 -7.57224E-05 -4.99812E-05 -2.99190E-05 -1.63073E-05 + -8.11569E-06 -3.69539E-06 -1.54186E-06 -5.90189E-07 -2.07441E-07 -6.70001E-08 + -1.98972E-08 -5.43575E-09 -1.36664E-09 -3.16319E-10 + 5.36111E-10 2.31624E-09 9.21274E-09 3.37227E-08 1.13555E-07 3.51580E-07 + 1.00028E-06 2.61321E-06 6.26310E-06 1.37548E-05 2.76383E-05 5.07079E-05 + 8.47102E-05 1.28338E-04 1.75277E-04 2.13733E-04 2.28792E-04 2.07725E-04 + 1.46302E-04 5.28470E-05 -5.28470E-05 -1.46302E-04 -2.07725E-04 -2.28792E-04 + -2.13733E-04 -1.75277E-04 -1.28338E-04 -8.47102E-05 -5.07079E-05 -2.76383E-05 + -1.37548E-05 -6.26310E-06 -2.61321E-06 -1.00028E-06 -3.51580E-07 -1.13555E-07 + -3.37227E-08 -9.21274E-09 -2.31624E-09 -5.36111E-10 + 8.11250E-10 3.50496E-09 1.39408E-08 5.10296E-08 1.71832E-07 5.32015E-07 + 1.51363E-06 3.95435E-06 9.47740E-06 2.08140E-05 4.18226E-05 7.67319E-05 + 1.28185E-04 1.94203E-04 2.65235E-04 3.23441E-04 3.46275E-04 3.14476E-04 + 2.21572E-04 8.00593E-05 -8.00593E-05 -2.21572E-04 -3.14476E-04 -3.46275E-04 + -3.23441E-04 -2.65235E-04 -1.94203E-04 -1.28185E-04 -7.67319E-05 -4.18226E-05 + -2.08140E-05 -9.47740E-06 -3.95435E-06 -1.51363E-06 -5.32015E-07 -1.71832E-07 + -5.10296E-08 -1.39408E-08 -3.50496E-09 -8.11250E-10 + 1.10465E-09 4.77259E-09 1.89828E-08 6.94853E-08 2.33978E-07 7.24427E-07 + 2.06106E-06 5.38451E-06 1.29051E-05 2.83417E-05 5.69484E-05 1.04483E-04 + 1.74545E-04 2.64440E-04 3.61161E-04 4.40415E-04 4.71495E-04 4.28175E-04 + 3.01659E-04 1.08990E-04 -1.08990E-04 -3.01659E-04 -4.28175E-04 -4.71495E-04 + -4.40415E-04 -3.61161E-04 -2.64440E-04 -1.74545E-04 -1.04483E-04 -5.69484E-05 + -2.83417E-05 -1.29051E-05 -5.38451E-06 -2.06106E-06 -7.24427E-07 -2.33978E-07 + -6.94853E-08 -1.89828E-08 -4.77259E-09 -1.10465E-09 + 1.36805E-09 5.91059E-09 2.35091E-08 8.60537E-08 2.89769E-07 8.97164E-07 + 2.55251E-06 6.66842E-06 1.59822E-05 3.50996E-05 7.05275E-05 1.29397E-04 + 2.16164E-04 3.27493E-04 4.47272E-04 5.45396E-04 5.83797E-04 5.29991E-04 + 3.73225E-04 1.34801E-04 -1.34801E-04 -3.73225E-04 -5.29991E-04 -5.83797E-04 + -5.45396E-04 -4.47272E-04 -3.27493E-04 -2.16164E-04 -1.29397E-04 -7.05275E-05 + -3.50996E-05 -1.59822E-05 -6.66842E-06 -2.55251E-06 -8.97164E-07 -2.89769E-07 + -8.60537E-08 -2.35091E-08 -5.91059E-09 -1.36805E-09 + 1.56073E-09 6.74306E-09 2.68202E-08 9.81738E-08 3.30581E-07 1.02352E-06 + 2.91202E-06 7.60762E-06 1.82332E-05 4.00431E-05 8.04608E-05 1.47621E-04 + 2.46609E-04 3.73618E-04 5.10261E-04 6.22177E-04 6.65900E-04 6.04366E-04 + 4.25442E-04 1.53616E-04 -1.53616E-04 -4.25442E-04 -6.04366E-04 -6.65900E-04 + -6.22177E-04 -5.10261E-04 -3.73618E-04 -2.46609E-04 -1.47621E-04 -8.04608E-05 + -4.00431E-05 -1.82332E-05 -7.60762E-06 -2.91202E-06 -1.02352E-06 -3.30581E-07 + -9.81738E-08 -2.68202E-08 -6.74306E-09 -1.56073E-09 + 1.66053E-09 7.17422E-09 2.85352E-08 1.04451E-07 3.51719E-07 1.08897E-06 + 3.09822E-06 8.09406E-06 1.93991E-05 4.26036E-05 8.56056E-05 1.57061E-04 + 2.62378E-04 3.97507E-04 5.42886E-04 6.61946E-04 7.08428E-04 6.42897E-04 + 4.52500E-04 1.63368E-04 -1.63368E-04 -4.52500E-04 -6.42897E-04 -7.08428E-04 + -6.61946E-04 -5.42886E-04 -3.97507E-04 -2.62378E-04 -1.57061E-04 -8.56056E-05 + -4.26036E-05 -1.93991E-05 -8.09406E-06 -3.09822E-06 -1.08897E-06 -3.51719E-07 + -1.04451E-07 -2.85352E-08 -7.17422E-09 -1.66053E-09 + 1.66053E-09 7.17422E-09 2.85352E-08 1.04451E-07 3.51719E-07 1.08897E-06 + 3.09822E-06 8.09406E-06 1.93991E-05 4.26036E-05 8.56056E-05 1.57061E-04 + 2.62378E-04 3.97507E-04 5.42886E-04 6.61946E-04 7.08428E-04 6.42897E-04 + 4.52500E-04 1.63368E-04 -1.63368E-04 -4.52500E-04 -6.42897E-04 -7.08428E-04 + -6.61946E-04 -5.42886E-04 -3.97507E-04 -2.62378E-04 -1.57061E-04 -8.56056E-05 + -4.26036E-05 -1.93991E-05 -8.09406E-06 -3.09822E-06 -1.08897E-06 -3.51719E-07 + -1.04451E-07 -2.85352E-08 -7.17422E-09 -1.66053E-09 + 1.56073E-09 6.74306E-09 2.68202E-08 9.81738E-08 3.30581E-07 1.02352E-06 + 2.91202E-06 7.60762E-06 1.82332E-05 4.00431E-05 8.04608E-05 1.47621E-04 + 2.46609E-04 3.73618E-04 5.10261E-04 6.22177E-04 6.65900E-04 6.04366E-04 + 4.25442E-04 1.53616E-04 -1.53616E-04 -4.25442E-04 -6.04366E-04 -6.65900E-04 + -6.22177E-04 -5.10261E-04 -3.73618E-04 -2.46609E-04 -1.47621E-04 -8.04608E-05 + -4.00431E-05 -1.82332E-05 -7.60762E-06 -2.91202E-06 -1.02352E-06 -3.30581E-07 + -9.81738E-08 -2.68202E-08 -6.74306E-09 -1.56073E-09 + 1.36805E-09 5.91059E-09 2.35091E-08 8.60537E-08 2.89769E-07 8.97164E-07 + 2.55251E-06 6.66842E-06 1.59822E-05 3.50996E-05 7.05275E-05 1.29397E-04 + 2.16164E-04 3.27493E-04 4.47272E-04 5.45396E-04 5.83797E-04 5.29991E-04 + 3.73225E-04 1.34801E-04 -1.34801E-04 -3.73225E-04 -5.29991E-04 -5.83797E-04 + -5.45396E-04 -4.47272E-04 -3.27493E-04 -2.16164E-04 -1.29397E-04 -7.05275E-05 + -3.50996E-05 -1.59822E-05 -6.66842E-06 -2.55251E-06 -8.97164E-07 -2.89769E-07 + -8.60537E-08 -2.35091E-08 -5.91059E-09 -1.36805E-09 + 1.10465E-09 4.77259E-09 1.89828E-08 6.94853E-08 2.33978E-07 7.24427E-07 + 2.06106E-06 5.38451E-06 1.29051E-05 2.83417E-05 5.69484E-05 1.04483E-04 + 1.74545E-04 2.64440E-04 3.61161E-04 4.40415E-04 4.71495E-04 4.28175E-04 + 3.01659E-04 1.08990E-04 -1.08990E-04 -3.01659E-04 -4.28175E-04 -4.71495E-04 + -4.40415E-04 -3.61161E-04 -2.64440E-04 -1.74545E-04 -1.04483E-04 -5.69484E-05 + -2.83417E-05 -1.29051E-05 -5.38451E-06 -2.06106E-06 -7.24427E-07 -2.33978E-07 + -6.94853E-08 -1.89828E-08 -4.77259E-09 -1.10465E-09 + 8.11250E-10 3.50496E-09 1.39408E-08 5.10296E-08 1.71832E-07 5.32015E-07 + 1.51363E-06 3.95435E-06 9.47740E-06 2.08140E-05 4.18226E-05 7.67319E-05 + 1.28185E-04 1.94203E-04 2.65235E-04 3.23441E-04 3.46275E-04 3.14476E-04 + 2.21572E-04 8.00593E-05 -8.00593E-05 -2.21572E-04 -3.14476E-04 -3.46275E-04 + -3.23441E-04 -2.65235E-04 -1.94203E-04 -1.28185E-04 -7.67319E-05 -4.18226E-05 + -2.08140E-05 -9.47740E-06 -3.95435E-06 -1.51363E-06 -5.32015E-07 -1.71832E-07 + -5.10296E-08 -1.39408E-08 -3.50496E-09 -8.11250E-10 + 5.36111E-10 2.31624E-09 9.21274E-09 3.37227E-08 1.13555E-07 3.51580E-07 + 1.00028E-06 2.61321E-06 6.26310E-06 1.37548E-05 2.76383E-05 5.07079E-05 + 8.47102E-05 1.28338E-04 1.75277E-04 2.13733E-04 2.28792E-04 2.07725E-04 + 1.46302E-04 5.28470E-05 -5.28470E-05 -1.46302E-04 -2.07725E-04 -2.28792E-04 + -2.13733E-04 -1.75277E-04 -1.28338E-04 -8.47102E-05 -5.07079E-05 -2.76383E-05 + -1.37548E-05 -6.26310E-06 -2.61321E-06 -1.00028E-06 -3.51580E-07 -1.13555E-07 + -3.37227E-08 -9.21274E-09 -2.31624E-09 -5.36111E-10 + 3.16319E-10 1.36664E-09 5.43575E-09 1.98972E-08 6.70001E-08 2.07441E-07 + 5.90189E-07 1.54186E-06 3.69539E-06 8.11569E-06 1.63073E-05 2.99190E-05 + 4.99812E-05 7.57224E-05 1.03417E-04 1.26100E-04 1.34965E-04 1.22500E-04 + 8.62410E-05 3.11415E-05 -3.11415E-05 -8.62410E-05 -1.22500E-04 -1.34965E-04 + -1.26100E-04 -1.03417E-04 -7.57224E-05 -4.99812E-05 -2.99190E-05 -1.63073E-05 + -8.11569E-06 -3.69539E-06 -1.54186E-06 -5.90189E-07 -2.07441E-07 -6.70001E-08 + -1.98972E-08 -5.43575E-09 -1.36664E-09 -3.16319E-10 + 1.65755E-10 7.16137E-10 2.84841E-09 1.04264E-08 3.51089E-08 1.08702E-07 + 3.09267E-07 8.07957E-07 1.93643E-06 4.25273E-06 8.54523E-06 1.56779E-05 + 2.61908E-05 3.96795E-05 5.41913E-05 6.60760E-05 7.07160E-05 6.41753E-05 + 4.51703E-05 1.63082E-05 -1.63082E-05 -4.51703E-05 -6.41753E-05 -7.07160E-05 + -6.60760E-05 -5.41913E-05 -3.96795E-05 -2.61908E-05 -1.56779E-05 -8.54523E-06 + -4.25273E-06 -1.93643E-06 -8.07957E-07 -3.09267E-07 -1.08702E-07 -3.51089E-08 + -1.04264E-08 -2.84841E-09 -7.16137E-10 -1.65755E-10 + 7.68780E-11 3.32147E-10 1.32110E-09 4.83581E-09 1.62837E-08 5.04163E-08 + 1.43439E-07 3.74733E-07 8.98125E-07 1.97243E-06 3.96331E-06 7.27149E-06 + 1.21474E-05 1.84035E-05 2.51341E-05 3.06460E-05 3.27975E-05 2.97627E-05 + 2.09475E-05 7.56251E-06 -7.56251E-06 -2.09475E-05 -2.97627E-05 -3.27975E-05 + -3.06460E-05 -2.51341E-05 -1.84035E-05 -1.21474E-05 -7.27149E-06 -3.96331E-06 + -1.97243E-06 -8.98125E-07 -3.74733E-07 -1.43439E-07 -5.04163E-08 -1.62837E-08 + -4.83581E-09 -1.32110E-09 -3.32147E-10 -7.68780E-11 + 3.14924E-11 1.36061E-10 5.41179E-10 1.98095E-09 6.67047E-09 2.06527E-08 + 5.87587E-08 1.53507E-07 3.67910E-07 8.07991E-07 1.62354E-06 2.97871E-06 + 4.97608E-06 7.53885E-06 1.02960E-05 1.25539E-05 1.34352E-05 1.21919E-05 + 8.58080E-06 3.09784E-06 -3.09784E-06 -8.58080E-06 -1.21919E-05 -1.34352E-05 + -1.25539E-05 -1.02960E-05 -7.53885E-06 -4.97608E-06 -2.97871E-06 -1.62354E-06 + -8.07991E-07 -3.67910E-07 -1.53507E-07 -5.87587E-08 -2.06527E-08 -6.67047E-09 + -1.98095E-09 -5.41179E-10 -1.36061E-10 -3.14924E-11 + 1.13793E-11 4.91638E-11 1.95547E-10 7.15787E-10 2.41028E-09 7.46252E-09 + 2.12316E-08 5.54673E-08 1.32939E-07 2.91955E-07 5.86641E-07 1.07631E-06 + 1.79803E-06 2.72405E-06 3.72030E-06 4.53616E-06 4.85459E-06 4.40536E-06 + 3.10054E-06 1.11935E-06 -1.11935E-06 -3.10054E-06 -4.40536E-06 -4.85459E-06 + -4.53616E-06 -3.72030E-06 -2.72405E-06 -1.79803E-06 -1.07631E-06 -5.86641E-07 + -2.91955E-07 -1.32939E-07 -5.54673E-08 -2.12316E-08 -7.46252E-09 -2.41028E-09 + -7.15787E-10 -1.95547E-10 -4.91638E-11 -1.13793E-11 + 3.62402E-12 1.56574E-11 6.22765E-11 2.27959E-10 7.67609E-10 2.37662E-09 + 6.76170E-09 1.76649E-08 4.23374E-08 9.29801E-08 1.86830E-07 3.42777E-07 + 5.72626E-07 8.67538E-07 1.18482E-06 1.44465E-06 1.54606E-06 1.40299E-06 + 9.87439E-07 3.56485E-07 -3.56485E-07 -9.87439E-07 -1.40299E-06 -1.54606E-06 + -1.44465E-06 -1.18482E-06 -8.67538E-07 -5.72626E-07 -3.42777E-07 -1.86830E-07 + -9.29801E-08 -4.23374E-08 -1.76649E-08 -6.76170E-09 -2.37662E-09 -7.67609E-10 + -2.27959E-10 -6.22765E-11 -1.56574E-11 -3.62402E-12 + 1.01677E-12 4.39289E-12 1.74726E-11 6.39572E-11 2.15364E-10 6.66794E-10 + 1.89709E-09 4.95613E-09 1.18784E-08 2.60869E-08 5.24177E-08 9.61708E-08 + 1.60658E-07 2.43400E-07 3.32417E-07 4.05316E-07 4.33769E-07 3.93629E-07 + 2.77040E-07 1.00017E-07 -1.00017E-07 -2.77040E-07 -3.93629E-07 -4.33769E-07 + -4.05316E-07 -3.32417E-07 -2.43400E-07 -1.60658E-07 -9.61708E-08 -5.24177E-08 + -2.60869E-08 -1.18784E-08 -4.95613E-09 -1.89709E-09 -6.66794E-10 -2.15364E-10 + -6.39572E-11 -1.74726E-11 -4.39289E-12 -1.01677E-12 + 2.51240E-13 1.08547E-12 4.31741E-12 1.58036E-11 5.32157E-11 1.64763E-10 + 4.68765E-10 1.22464E-09 2.93511E-09 6.44599E-09 1.29523E-08 2.37635E-08 + 3.96982E-08 6.01434E-08 8.21392E-08 1.00152E-07 1.07183E-07 9.72644E-08 + 6.84557E-08 2.47139E-08 -2.47139E-08 -6.84557E-08 -9.72644E-08 -1.07183E-07 + -1.00152E-07 -8.21392E-08 -6.01434E-08 -3.96982E-08 -2.37635E-08 -1.29523E-08 + -6.44599E-09 -2.93511E-09 -1.22464E-09 -4.68765E-10 -1.64763E-10 -5.32157E-11 + -1.58036E-11 -4.31741E-12 -1.08547E-12 -2.51240E-13 + 5.46661E-14 2.36182E-13 9.39405E-13 3.43863E-12 1.15789E-11 3.58499E-11 + 1.01996E-10 2.66464E-10 6.38635E-10 1.40255E-09 2.81822E-09 5.17059E-09 + 8.63773E-09 1.30863E-08 1.78723E-08 2.17917E-08 2.33214E-08 2.11633E-08 + 1.48949E-08 5.37737E-09 -5.37737E-09 -1.48949E-08 -2.11633E-08 -2.33214E-08 + -2.17917E-08 -1.78723E-08 -1.30863E-08 -8.63773E-09 -5.17059E-09 -2.81822E-09 + -1.40255E-09 -6.38635E-10 -2.66464E-10 -1.01996E-10 -3.58499E-11 -1.15789E-11 + -3.43863E-12 -9.39405E-13 -2.36182E-13 -5.46661E-14 + 1.04729E-14 4.52475E-14 1.79970E-13 6.58769E-13 2.21828E-12 6.86807E-12 + 1.95403E-11 5.10489E-11 1.22349E-10 2.68699E-10 5.39911E-10 9.90574E-10 + 1.65480E-09 2.50706E-09 3.42394E-09 4.17482E-09 4.46788E-09 4.05443E-09 + 2.85355E-09 1.03019E-09 -1.03019E-09 -2.85355E-09 -4.05443E-09 -4.46788E-09 + -4.17482E-09 -3.42394E-09 -2.50706E-09 -1.65480E-09 -9.90574E-10 -5.39911E-10 + -2.68699E-10 -1.22349E-10 -5.10489E-11 -1.95403E-11 -6.86807E-12 -2.21828E-12 + -6.58769E-13 -1.79970E-13 -4.52475E-14 -1.04729E-14 + 1.76646E-15 7.63191E-15 3.03556E-14 1.11115E-13 3.74158E-13 1.15844E-12 + 3.29587E-12 8.61043E-12 2.06366E-11 4.53215E-11 9.10669E-11 1.67080E-10 + 2.79117E-10 4.22866E-10 5.77518E-10 7.04168E-10 7.53599E-10 6.83863E-10 + 4.81310E-10 1.73762E-10 -1.73762E-10 -4.81310E-10 -6.83863E-10 -7.53599E-10 + -7.04168E-10 -5.77518E-10 -4.22866E-10 -2.79117E-10 -1.67080E-10 -9.10669E-11 + -4.53215E-11 -2.06366E-11 -8.61043E-12 -3.29587E-12 -1.15844E-12 -3.74158E-13 + -1.11115E-13 -3.03556E-14 -7.63191E-15 -1.76646E-15 + 2.62313E-16 1.13331E-15 4.50769E-15 1.65001E-14 5.55610E-14 1.72024E-13 + 4.89424E-13 1.27862E-12 3.06446E-12 6.73007E-12 1.35231E-11 2.48108E-11 + 4.14477E-11 6.27940E-11 8.57592E-11 1.04566E-10 1.11907E-10 1.01551E-10 + 7.14726E-11 2.58030E-11 -2.58030E-11 -7.14726E-11 -1.01551E-10 -1.11907E-10 + -1.04566E-10 -8.57592E-11 -6.27940E-11 -4.14477E-11 -2.48108E-11 -1.35231E-11 + -6.73007E-12 -3.06446E-12 -1.27862E-12 -4.89424E-13 -1.72024E-13 -5.55610E-14 + -1.65001E-14 -4.50769E-15 -1.13331E-15 -2.62313E-16 + 3.42927E-17 1.48160E-16 5.89300E-16 2.15709E-15 7.26360E-15 2.24890E-14 + 6.39834E-14 1.67156E-13 4.00623E-13 8.79836E-13 1.76790E-12 3.24357E-12 + 5.41855E-12 8.20919E-12 1.12115E-11 1.36702E-11 1.46298E-11 1.32760E-11 + 9.34377E-12 3.37328E-12 -3.37328E-12 -9.34377E-12 -1.32760E-11 -1.46298E-11 + -1.36702E-11 -1.12115E-11 -8.20919E-12 -5.41855E-12 -3.24357E-12 -1.76790E-12 + -8.79836E-13 -4.00623E-13 -1.67156E-13 -6.39834E-14 -2.24890E-14 -7.26360E-15 + -2.15709E-15 -5.89300E-16 -1.48160E-16 -3.42927E-17 + 3.94680E-18 1.70519E-17 6.78234E-17 2.48263E-16 8.35979E-16 2.58830E-15 + 7.36395E-15 1.92383E-14 4.61084E-14 1.01262E-13 2.03471E-13 3.73307E-13 + 6.23629E-13 9.44809E-13 1.29035E-12 1.57332E-12 1.68376E-12 1.52795E-12 + 1.07539E-12 3.88237E-13 -3.88237E-13 -1.07539E-12 -1.52795E-12 -1.68376E-12 + -1.57332E-12 -1.29035E-12 -9.44809E-13 -6.23629E-13 -3.73307E-13 -2.03471E-13 + -1.01262E-13 -4.61084E-14 -1.92383E-14 -7.36395E-15 -2.58830E-15 -8.35979E-16 + -2.48263E-16 -6.78234E-17 -1.70519E-17 -3.94680E-18 + 1.14648E-18 4.95329E-18 1.97015E-17 7.21162E-17 2.42837E-16 7.51856E-16 + 2.13910E-15 5.58838E-15 1.33937E-14 2.94148E-14 5.91047E-14 1.08439E-13 + 1.81153E-13 2.74451E-13 3.74823E-13 4.57022E-13 4.89104E-13 4.43844E-13 + 3.12382E-13 1.12776E-13 -1.12776E-13 -3.12382E-13 -4.43844E-13 -4.89104E-13 + -4.57022E-13 -3.74823E-13 -2.74451E-13 -1.81153E-13 -1.08439E-13 -5.91047E-14 + -2.94148E-14 -1.33937E-14 -5.58838E-15 -2.13910E-15 -7.51856E-16 -2.42837E-16 + -7.21162E-17 -1.97015E-17 -4.95329E-18 -1.14648E-18 + 9.96143E-18 4.30379E-17 1.71181E-16 6.26599E-16 2.10995E-15 6.53268E-15 + 1.85861E-14 4.85559E-14 1.16374E-13 2.55577E-13 5.13545E-13 9.42200E-13 + 1.57399E-12 2.38463E-12 3.25674E-12 3.97094E-12 4.24970E-12 3.85644E-12 + 2.71420E-12 9.79880E-13 -9.79880E-13 -2.71420E-12 -3.85644E-12 -4.24970E-12 + -3.97094E-12 -3.25674E-12 -2.38463E-12 -1.57399E-12 -9.42200E-13 -5.13545E-13 + -2.55577E-13 -1.16374E-13 -4.85559E-14 -1.85861E-14 -6.53268E-15 -2.10995E-15 + -6.26599E-16 -1.71181E-16 -4.30379E-17 -9.96143E-18 + 7.61973E-17 3.29207E-16 1.30941E-15 4.79300E-15 1.61395E-14 4.99700E-14 + 1.42169E-13 3.71416E-13 8.90173E-13 1.95497E-12 3.92822E-12 7.20711E-12 + 1.20398E-11 1.82406E-11 2.49116E-11 3.03747E-11 3.25069E-11 2.94988E-11 + 2.07616E-11 7.49533E-12 -7.49533E-12 -2.07616E-11 -2.94988E-11 -3.25069E-11 + -3.03747E-11 -2.49116E-11 -1.82406E-11 -1.20398E-11 -7.20711E-12 -3.92822E-12 + -1.95497E-12 -8.90173E-13 -3.71416E-13 -1.42169E-13 -4.99700E-14 -1.61395E-14 + -4.79300E-15 -1.30941E-15 -3.29207E-16 -7.61973E-17 + 5.13127E-16 2.21694E-15 8.81777E-15 3.22769E-14 1.08686E-13 3.36507E-13 + 9.57393E-13 2.50118E-12 5.99459E-12 1.31651E-11 2.64534E-11 4.85340E-11 + 8.10785E-11 1.22835E-10 1.67759E-10 2.04549E-10 2.18908E-10 1.98650E-10 + 1.39812E-10 5.04749E-11 -5.04749E-11 -1.39812E-10 -1.98650E-10 -2.18908E-10 + -2.04549E-10 -1.67759E-10 -1.22835E-10 -8.10785E-11 -4.85340E-11 -2.64534E-11 + -1.31651E-11 -5.99459E-12 -2.50118E-12 -9.57393E-13 -3.36507E-13 -1.08686E-13 + -3.22769E-14 -8.81777E-15 -2.21694E-15 -5.13127E-16 + 3.04219E-15 1.31436E-14 5.22781E-14 1.91361E-13 6.44371E-13 1.99506E-12 + 5.67612E-12 1.48288E-11 3.55402E-11 7.80523E-11 1.56835E-10 2.87744E-10 + 4.80692E-10 7.28256E-10 9.94596E-10 1.21271E-09 1.29784E-09 1.17774E-09 + 8.28907E-10 2.99252E-10 -2.99252E-10 -8.28907E-10 -1.17774E-09 -1.29784E-09 + -1.21271E-09 -9.94596E-10 -7.28256E-10 -4.80692E-10 -2.87744E-10 -1.56835E-10 + -7.80523E-11 -3.55402E-11 -1.48288E-11 -5.67612E-12 -1.99506E-12 -6.44371E-13 + -1.91361E-13 -5.22781E-14 -1.31436E-14 -3.04219E-15 + 1.58796E-14 6.86068E-14 2.72881E-13 9.98864E-13 3.36348E-12 1.04138E-11 + 2.96281E-11 7.74032E-11 1.85513E-10 4.07417E-10 8.18644E-10 1.50197E-09 + 2.50911E-09 3.80134E-09 5.19158E-09 6.33010E-09 6.77446E-09 6.14757E-09 + 4.32672E-09 1.56203E-09 -1.56203E-09 -4.32672E-09 -6.14757E-09 -6.77446E-09 + -6.33010E-09 -5.19158E-09 -3.80134E-09 -2.50911E-09 -1.50197E-09 -8.18644E-10 + -4.07417E-10 -1.85513E-10 -7.74032E-11 -2.96281E-11 -1.04138E-11 -3.36348E-12 + -9.98864E-13 -2.72881E-13 -6.86068E-14 -1.58796E-14 + 7.29810E-14 3.15310E-13 1.25413E-12 4.59068E-12 1.54582E-11 4.78607E-11 + 1.36168E-10 3.55738E-10 8.52598E-10 1.87245E-09 3.76241E-09 6.90289E-09 + 1.15316E-08 1.74706E-08 2.38600E-08 2.90925E-08 3.11348E-08 2.82536E-08 + 1.98852E-08 7.17895E-09 -7.17895E-09 -1.98852E-08 -2.82536E-08 -3.11348E-08 + -2.90925E-08 -2.38600E-08 -1.74706E-08 -1.15316E-08 -6.90289E-09 -3.76241E-09 + -1.87245E-09 -8.52598E-10 -3.55738E-10 -1.36168E-10 -4.78607E-11 -1.54582E-11 + -4.59068E-12 -1.25413E-12 -3.15310E-13 -7.29810E-14 + 2.95354E-13 1.27606E-12 5.07547E-12 1.85785E-11 6.25594E-11 1.93692E-10 + 5.51072E-10 1.43967E-09 3.45046E-09 7.57779E-09 1.52264E-08 2.79360E-08 + 4.66685E-08 7.07035E-08 9.65613E-08 1.17737E-07 1.26002E-07 1.14342E-07 + 8.04753E-08 2.90532E-08 -2.90532E-08 -8.04753E-08 -1.14342E-07 -1.26002E-07 + -1.17737E-07 -9.65613E-08 -7.07035E-08 -4.66685E-08 -2.79360E-08 -1.52264E-08 + -7.57779E-09 -3.45046E-09 -1.43967E-09 -5.51072E-10 -1.93692E-10 -6.25594E-11 + -1.85785E-11 -5.07547E-12 -1.27606E-12 -2.95354E-13 + 1.05271E-12 4.54819E-12 1.80903E-11 6.62183E-11 2.22977E-10 6.90366E-10 + 1.96416E-09 5.13134E-09 1.22983E-08 2.70091E-08 5.42708E-08 9.95707E-08 + 1.66338E-07 2.52005E-07 3.44169E-07 4.19645E-07 4.49103E-07 4.07544E-07 + 2.86834E-07 1.03553E-07 -1.03553E-07 -2.86834E-07 -4.07544E-07 -4.49103E-07 + -4.19645E-07 -3.44169E-07 -2.52005E-07 -1.66338E-07 -9.95707E-08 -5.42708E-08 + -2.70091E-08 -1.22983E-08 -5.13134E-09 -1.96416E-09 -6.90366E-10 -2.22977E-10 + -6.62183E-11 -1.80903E-11 -4.54819E-12 -1.05271E-12 + 3.30550E-12 1.42812E-11 5.68030E-11 2.07924E-10 7.00143E-10 2.16773E-09 + 6.16740E-09 1.61123E-08 3.86163E-08 8.48080E-08 1.70409E-07 3.12650E-07 + 5.22297E-07 7.91289E-07 1.08068E-06 1.31768E-06 1.41017E-06 1.27968E-06 + 9.00652E-07 3.25153E-07 -3.25153E-07 -9.00652E-07 -1.27968E-06 -1.41017E-06 + -1.31768E-06 -1.08068E-06 -7.91289E-07 -5.22297E-07 -3.12650E-07 -1.70409E-07 + -8.48080E-08 -3.86163E-08 -1.61123E-08 -6.16740E-09 -2.16773E-09 -7.00143E-10 + -2.07924E-10 -5.68030E-11 -1.42812E-11 -3.30550E-12 + 9.14801E-12 3.95235E-11 1.57203E-10 5.75432E-10 1.93766E-09 5.99924E-09 + 1.70684E-08 4.45910E-08 1.06871E-07 2.34707E-07 4.71610E-07 8.65263E-07 + 1.44547E-06 2.18990E-06 2.99080E-06 3.64669E-06 3.90268E-06 3.54153E-06 + 2.49257E-06 8.99866E-07 -8.99866E-07 -2.49257E-06 -3.54153E-06 -3.90268E-06 + -3.64669E-06 -2.99080E-06 -2.18990E-06 -1.44547E-06 -8.65263E-07 -4.71610E-07 + -2.34707E-07 -1.06871E-07 -4.45910E-08 -1.70684E-08 -5.99924E-09 -1.93766E-09 + -5.75432E-10 -1.57203E-10 -3.95235E-11 -9.14801E-12 + 2.23317E-11 9.64830E-11 3.83757E-10 1.40472E-09 4.73012E-09 1.46451E-08 + 4.16666E-08 1.08854E-07 2.60890E-07 5.72957E-07 1.15127E-06 2.11224E-06 + 3.52861E-06 5.34590E-06 7.30101E-06 8.90213E-06 9.52705E-06 8.64544E-06 + 6.08475E-06 2.19672E-06 -2.19672E-06 -6.08475E-06 -8.64544E-06 -9.52705E-06 + -8.90213E-06 -7.30101E-06 -5.34590E-06 -3.52861E-06 -2.11224E-06 -1.15127E-06 + -5.72957E-07 -2.60890E-07 -1.08854E-07 -4.16666E-08 -1.46451E-08 -4.73012E-09 + -1.40472E-09 -3.83757E-10 -9.64830E-11 -2.23317E-11 + 4.81491E-11 2.08025E-10 8.27413E-10 3.02869E-09 1.01985E-08 3.15760E-08 + 8.98366E-08 2.34697E-07 5.62500E-07 1.23534E-06 2.48224E-06 4.55417E-06 + 7.60797E-06 1.15262E-05 1.57416E-05 1.91937E-05 2.05411E-05 1.86404E-05 + 1.31193E-05 4.73635E-06 -4.73635E-06 -1.31193E-05 -1.86404E-05 -2.05411E-05 + -1.91937E-05 -1.57416E-05 -1.15262E-05 -7.60797E-06 -4.55417E-06 -2.48224E-06 + -1.23534E-06 -5.62500E-07 -2.34697E-07 -8.98366E-08 -3.15760E-08 -1.01985E-08 + -3.02869E-09 -8.27413E-10 -2.08025E-10 -4.81491E-11 + 9.18852E-11 3.96985E-10 1.57899E-09 5.77980E-09 1.94624E-08 6.02580E-08 + 1.71440E-07 4.47885E-07 1.07345E-06 2.35747E-06 4.73698E-06 8.69094E-06 + 1.45187E-05 2.19960E-05 3.00405E-05 3.66284E-05 3.91999E-05 3.55729E-05 + 2.50370E-05 9.03896E-06 -9.03896E-06 -2.50370E-05 -3.55729E-05 -3.91999E-05 + -3.66284E-05 -3.00405E-05 -2.19960E-05 -1.45187E-05 -8.69094E-06 -4.73698E-06 + -2.35747E-06 -1.07345E-06 -4.47885E-07 -1.71440E-07 -6.02580E-08 -1.94624E-08 + -5.77980E-09 -1.57899E-09 -3.96985E-10 -9.18852E-11 + 1.55731E-10 6.72827E-10 2.67614E-09 9.79585E-09 3.29856E-08 1.02128E-07 + 2.90563E-07 7.59093E-07 1.81932E-06 3.99553E-06 8.02844E-06 1.47298E-05 + 2.46068E-05 3.72798E-05 5.09139E-05 6.20796E-05 6.64385E-05 6.02922E-05 + 4.24361E-05 1.53208E-05 -1.53208E-05 -4.24361E-05 -6.02922E-05 -6.64385E-05 + -6.20796E-05 -5.09139E-05 -3.72798E-05 -2.46068E-05 -1.47298E-05 -8.02844E-06 + -3.99553E-06 -1.81932E-06 -7.59093E-07 -2.90563E-07 -1.02128E-07 -3.29856E-08 + -9.79585E-09 -2.67614E-09 -6.72827E-10 -1.55731E-10 + 2.35654E-10 1.01813E-09 4.04957E-09 1.48232E-08 4.99143E-08 1.54541E-07 + 4.39684E-07 1.14867E-06 2.75302E-06 6.04609E-06 1.21487E-05 2.22893E-05 + 3.72354E-05 5.64122E-05 7.70436E-05 9.39400E-05 1.00537E-04 9.12374E-05 + 6.42180E-05 2.31851E-05 -2.31851E-05 -6.42180E-05 -9.12374E-05 -1.00537E-04 + -9.39400E-05 -7.70436E-05 -5.64122E-05 -3.72354E-05 -2.22893E-05 -1.21487E-05 + -6.04609E-06 -2.75302E-06 -1.14867E-06 -4.39684E-07 -1.54541E-07 -4.99143E-08 + -1.48232E-08 -4.04957E-09 -1.01813E-09 -2.35654E-10 + 3.20882E-10 1.38635E-09 5.51417E-09 2.01843E-08 6.79666E-08 2.10434E-07 + 5.98703E-07 1.56411E-06 3.74870E-06 8.23276E-06 1.65425E-05 3.03506E-05 + 5.07022E-05 7.68147E-05 1.04908E-04 1.27915E-04 1.36897E-04 1.24234E-04 + 8.74427E-05 3.15700E-05 -3.15700E-05 -8.74427E-05 -1.24234E-04 -1.36897E-04 + -1.27915E-04 -1.04908E-04 -7.68147E-05 -5.07022E-05 -3.03506E-05 -1.65425E-05 + -8.23276E-06 -3.74870E-06 -1.56411E-06 -5.98703E-07 -2.10434E-07 -6.79666E-08 + -2.01843E-08 -5.51417E-09 -1.38635E-09 -3.20882E-10 + 3.97395E-10 1.71692E-09 6.82900E-09 2.49971E-08 8.41730E-08 2.60610E-07 + 7.41461E-07 1.93706E-06 4.64255E-06 1.01958E-05 2.04870E-05 3.75875E-05 + 6.27919E-05 9.51308E-05 1.29922E-04 1.58415E-04 1.69537E-04 1.53853E-04 + 1.08287E-04 3.90946E-05 -3.90946E-05 -1.08287E-04 -1.53853E-04 -1.69537E-04 + -1.58415E-04 -1.29922E-04 -9.51308E-05 -6.27919E-05 -3.75875E-05 -2.04870E-05 + -1.01958E-05 -4.64255E-06 -1.93706E-06 -7.41461E-07 -2.60610E-07 -8.41730E-08 + -2.49971E-08 -6.82900E-09 -1.71692E-09 -3.97395E-10 + 4.53365E-10 1.95874E-09 7.79081E-09 2.85178E-08 9.60282E-08 2.97316E-07 + 8.45890E-07 2.20988E-06 5.29643E-06 1.16318E-05 2.33725E-05 4.28815E-05 + 7.16357E-05 1.08529E-04 1.48221E-04 1.80726E-04 1.93414E-04 1.75517E-04 + 1.23532E-04 4.45979E-05 -4.45979E-05 -1.23532E-04 -1.75517E-04 -1.93414E-04 + -1.80726E-04 -1.48221E-04 -1.08529E-04 -7.16357E-05 -4.28815E-05 -2.33725E-05 + -1.16318E-05 -5.29643E-06 -2.20988E-06 -8.45890E-07 -2.97316E-07 -9.60282E-08 + -2.85178E-08 -7.79081E-09 -1.95874E-09 -4.53365E-10 + 4.82354E-10 2.08399E-09 8.28897E-09 3.03413E-08 1.02168E-07 3.16327E-07 + 8.99978E-07 2.35118E-06 5.63509E-06 1.23756E-05 2.48670E-05 4.56234E-05 + 7.62162E-05 1.15469E-04 1.57698E-04 1.92282E-04 2.05780E-04 1.86738E-04 + 1.31428E-04 4.74484E-05 -4.74484E-05 -1.31428E-04 -1.86738E-04 -2.05780E-04 + -1.92282E-04 -1.57698E-04 -1.15469E-04 -7.62162E-05 -4.56234E-05 -2.48670E-05 + -1.23756E-05 -5.63509E-06 -2.35118E-06 -8.99978E-07 -3.16327E-07 -1.02168E-07 + -3.03413E-08 -8.28897E-09 -2.08399E-09 -4.82354E-10 + 4.82354E-10 2.08399E-09 8.28897E-09 3.03413E-08 1.02168E-07 3.16327E-07 + 8.99978E-07 2.35118E-06 5.63509E-06 1.23756E-05 2.48670E-05 4.56234E-05 + 7.62162E-05 1.15469E-04 1.57698E-04 1.92282E-04 2.05780E-04 1.86738E-04 + 1.31428E-04 4.74484E-05 -4.74484E-05 -1.31428E-04 -1.86738E-04 -2.05780E-04 + -1.92282E-04 -1.57698E-04 -1.15469E-04 -7.62162E-05 -4.56234E-05 -2.48670E-05 + -1.23756E-05 -5.63509E-06 -2.35118E-06 -8.99978E-07 -3.16327E-07 -1.02168E-07 + -3.03413E-08 -8.28897E-09 -2.08399E-09 -4.82354E-10 + 4.53365E-10 1.95874E-09 7.79081E-09 2.85178E-08 9.60282E-08 2.97316E-07 + 8.45890E-07 2.20988E-06 5.29643E-06 1.16318E-05 2.33725E-05 4.28815E-05 + 7.16357E-05 1.08529E-04 1.48221E-04 1.80726E-04 1.93414E-04 1.75517E-04 + 1.23532E-04 4.45979E-05 -4.45979E-05 -1.23532E-04 -1.75517E-04 -1.93414E-04 + -1.80726E-04 -1.48221E-04 -1.08529E-04 -7.16357E-05 -4.28815E-05 -2.33725E-05 + -1.16318E-05 -5.29643E-06 -2.20988E-06 -8.45890E-07 -2.97316E-07 -9.60282E-08 + -2.85178E-08 -7.79081E-09 -1.95874E-09 -4.53365E-10 + 3.97395E-10 1.71692E-09 6.82900E-09 2.49971E-08 8.41730E-08 2.60610E-07 + 7.41461E-07 1.93706E-06 4.64255E-06 1.01958E-05 2.04870E-05 3.75875E-05 + 6.27919E-05 9.51308E-05 1.29922E-04 1.58415E-04 1.69537E-04 1.53853E-04 + 1.08287E-04 3.90946E-05 -3.90946E-05 -1.08287E-04 -1.53853E-04 -1.69537E-04 + -1.58415E-04 -1.29922E-04 -9.51308E-05 -6.27919E-05 -3.75875E-05 -2.04870E-05 + -1.01958E-05 -4.64255E-06 -1.93706E-06 -7.41461E-07 -2.60610E-07 -8.41730E-08 + -2.49971E-08 -6.82900E-09 -1.71692E-09 -3.97395E-10 + 3.20882E-10 1.38635E-09 5.51417E-09 2.01843E-08 6.79666E-08 2.10434E-07 + 5.98703E-07 1.56411E-06 3.74870E-06 8.23276E-06 1.65425E-05 3.03506E-05 + 5.07022E-05 7.68147E-05 1.04908E-04 1.27915E-04 1.36897E-04 1.24234E-04 + 8.74427E-05 3.15700E-05 -3.15700E-05 -8.74427E-05 -1.24234E-04 -1.36897E-04 + -1.27915E-04 -1.04908E-04 -7.68147E-05 -5.07022E-05 -3.03506E-05 -1.65425E-05 + -8.23276E-06 -3.74870E-06 -1.56411E-06 -5.98703E-07 -2.10434E-07 -6.79666E-08 + -2.01843E-08 -5.51417E-09 -1.38635E-09 -3.20882E-10 + 2.35654E-10 1.01813E-09 4.04957E-09 1.48232E-08 4.99143E-08 1.54541E-07 + 4.39684E-07 1.14867E-06 2.75302E-06 6.04609E-06 1.21487E-05 2.22893E-05 + 3.72354E-05 5.64122E-05 7.70436E-05 9.39400E-05 1.00537E-04 9.12374E-05 + 6.42180E-05 2.31851E-05 -2.31851E-05 -6.42180E-05 -9.12374E-05 -1.00537E-04 + -9.39400E-05 -7.70436E-05 -5.64122E-05 -3.72354E-05 -2.22893E-05 -1.21487E-05 + -6.04609E-06 -2.75302E-06 -1.14867E-06 -4.39684E-07 -1.54541E-07 -4.99143E-08 + -1.48232E-08 -4.04957E-09 -1.01813E-09 -2.35654E-10 + 1.55731E-10 6.72827E-10 2.67614E-09 9.79585E-09 3.29856E-08 1.02128E-07 + 2.90563E-07 7.59093E-07 1.81932E-06 3.99553E-06 8.02844E-06 1.47298E-05 + 2.46068E-05 3.72798E-05 5.09139E-05 6.20796E-05 6.64385E-05 6.02922E-05 + 4.24361E-05 1.53208E-05 -1.53208E-05 -4.24361E-05 -6.02922E-05 -6.64385E-05 + -6.20796E-05 -5.09139E-05 -3.72798E-05 -2.46068E-05 -1.47298E-05 -8.02844E-06 + -3.99553E-06 -1.81932E-06 -7.59093E-07 -2.90563E-07 -1.02128E-07 -3.29856E-08 + -9.79585E-09 -2.67614E-09 -6.72827E-10 -1.55731E-10 + 9.18852E-11 3.96985E-10 1.57899E-09 5.77980E-09 1.94624E-08 6.02580E-08 + 1.71440E-07 4.47885E-07 1.07345E-06 2.35747E-06 4.73698E-06 8.69094E-06 + 1.45187E-05 2.19960E-05 3.00405E-05 3.66284E-05 3.91999E-05 3.55729E-05 + 2.50370E-05 9.03896E-06 -9.03896E-06 -2.50370E-05 -3.55729E-05 -3.91999E-05 + -3.66284E-05 -3.00405E-05 -2.19960E-05 -1.45187E-05 -8.69094E-06 -4.73698E-06 + -2.35747E-06 -1.07345E-06 -4.47885E-07 -1.71440E-07 -6.02580E-08 -1.94624E-08 + -5.77980E-09 -1.57899E-09 -3.96985E-10 -9.18852E-11 + 4.81491E-11 2.08025E-10 8.27413E-10 3.02869E-09 1.01985E-08 3.15760E-08 + 8.98366E-08 2.34697E-07 5.62500E-07 1.23534E-06 2.48224E-06 4.55417E-06 + 7.60797E-06 1.15262E-05 1.57416E-05 1.91937E-05 2.05411E-05 1.86404E-05 + 1.31193E-05 4.73635E-06 -4.73635E-06 -1.31193E-05 -1.86404E-05 -2.05411E-05 + -1.91937E-05 -1.57416E-05 -1.15262E-05 -7.60797E-06 -4.55417E-06 -2.48224E-06 + -1.23534E-06 -5.62500E-07 -2.34697E-07 -8.98366E-08 -3.15760E-08 -1.01985E-08 + -3.02869E-09 -8.27413E-10 -2.08025E-10 -4.81491E-11 + 2.23317E-11 9.64830E-11 3.83757E-10 1.40472E-09 4.73012E-09 1.46451E-08 + 4.16666E-08 1.08854E-07 2.60890E-07 5.72957E-07 1.15127E-06 2.11224E-06 + 3.52861E-06 5.34590E-06 7.30101E-06 8.90213E-06 9.52705E-06 8.64544E-06 + 6.08475E-06 2.19672E-06 -2.19672E-06 -6.08475E-06 -8.64544E-06 -9.52705E-06 + -8.90213E-06 -7.30101E-06 -5.34590E-06 -3.52861E-06 -2.11224E-06 -1.15127E-06 + -5.72957E-07 -2.60890E-07 -1.08854E-07 -4.16666E-08 -1.46451E-08 -4.73012E-09 + -1.40472E-09 -3.83757E-10 -9.64830E-11 -2.23317E-11 + 9.14801E-12 3.95235E-11 1.57203E-10 5.75432E-10 1.93766E-09 5.99924E-09 + 1.70684E-08 4.45910E-08 1.06871E-07 2.34707E-07 4.71610E-07 8.65263E-07 + 1.44547E-06 2.18990E-06 2.99080E-06 3.64669E-06 3.90268E-06 3.54153E-06 + 2.49257E-06 8.99866E-07 -8.99866E-07 -2.49257E-06 -3.54153E-06 -3.90268E-06 + -3.64669E-06 -2.99080E-06 -2.18990E-06 -1.44547E-06 -8.65263E-07 -4.71610E-07 + -2.34707E-07 -1.06871E-07 -4.45910E-08 -1.70684E-08 -5.99924E-09 -1.93766E-09 + -5.75432E-10 -1.57203E-10 -3.95235E-11 -9.14801E-12 + 3.30550E-12 1.42812E-11 5.68030E-11 2.07924E-10 7.00143E-10 2.16773E-09 + 6.16740E-09 1.61123E-08 3.86163E-08 8.48080E-08 1.70409E-07 3.12650E-07 + 5.22297E-07 7.91289E-07 1.08068E-06 1.31768E-06 1.41017E-06 1.27968E-06 + 9.00652E-07 3.25153E-07 -3.25153E-07 -9.00652E-07 -1.27968E-06 -1.41017E-06 + -1.31768E-06 -1.08068E-06 -7.91289E-07 -5.22297E-07 -3.12650E-07 -1.70409E-07 + -8.48080E-08 -3.86163E-08 -1.61123E-08 -6.16740E-09 -2.16773E-09 -7.00143E-10 + -2.07924E-10 -5.68030E-11 -1.42812E-11 -3.30550E-12 + 1.05271E-12 4.54819E-12 1.80903E-11 6.62183E-11 2.22977E-10 6.90366E-10 + 1.96416E-09 5.13134E-09 1.22983E-08 2.70091E-08 5.42708E-08 9.95707E-08 + 1.66338E-07 2.52005E-07 3.44169E-07 4.19645E-07 4.49103E-07 4.07544E-07 + 2.86834E-07 1.03553E-07 -1.03553E-07 -2.86834E-07 -4.07544E-07 -4.49103E-07 + -4.19645E-07 -3.44169E-07 -2.52005E-07 -1.66338E-07 -9.95707E-08 -5.42708E-08 + -2.70091E-08 -1.22983E-08 -5.13134E-09 -1.96416E-09 -6.90366E-10 -2.22977E-10 + -6.62183E-11 -1.80903E-11 -4.54819E-12 -1.05271E-12 + 2.95354E-13 1.27606E-12 5.07547E-12 1.85785E-11 6.25594E-11 1.93692E-10 + 5.51072E-10 1.43967E-09 3.45046E-09 7.57779E-09 1.52264E-08 2.79360E-08 + 4.66685E-08 7.07035E-08 9.65613E-08 1.17737E-07 1.26002E-07 1.14342E-07 + 8.04753E-08 2.90532E-08 -2.90532E-08 -8.04753E-08 -1.14342E-07 -1.26002E-07 + -1.17737E-07 -9.65613E-08 -7.07035E-08 -4.66685E-08 -2.79360E-08 -1.52264E-08 + -7.57779E-09 -3.45046E-09 -1.43967E-09 -5.51072E-10 -1.93692E-10 -6.25594E-11 + -1.85785E-11 -5.07547E-12 -1.27606E-12 -2.95354E-13 + 7.29810E-14 3.15310E-13 1.25413E-12 4.59068E-12 1.54582E-11 4.78607E-11 + 1.36168E-10 3.55738E-10 8.52598E-10 1.87245E-09 3.76241E-09 6.90289E-09 + 1.15316E-08 1.74706E-08 2.38600E-08 2.90925E-08 3.11348E-08 2.82536E-08 + 1.98852E-08 7.17895E-09 -7.17895E-09 -1.98852E-08 -2.82536E-08 -3.11348E-08 + -2.90925E-08 -2.38600E-08 -1.74706E-08 -1.15316E-08 -6.90289E-09 -3.76241E-09 + -1.87245E-09 -8.52598E-10 -3.55738E-10 -1.36168E-10 -4.78607E-11 -1.54582E-11 + -4.59068E-12 -1.25413E-12 -3.15310E-13 -7.29810E-14 + 1.58796E-14 6.86068E-14 2.72881E-13 9.98864E-13 3.36348E-12 1.04138E-11 + 2.96281E-11 7.74032E-11 1.85513E-10 4.07417E-10 8.18644E-10 1.50197E-09 + 2.50911E-09 3.80134E-09 5.19158E-09 6.33010E-09 6.77446E-09 6.14757E-09 + 4.32672E-09 1.56203E-09 -1.56203E-09 -4.32672E-09 -6.14757E-09 -6.77446E-09 + -6.33010E-09 -5.19158E-09 -3.80134E-09 -2.50911E-09 -1.50197E-09 -8.18644E-10 + -4.07417E-10 -1.85513E-10 -7.74032E-11 -2.96281E-11 -1.04138E-11 -3.36348E-12 + -9.98864E-13 -2.72881E-13 -6.86068E-14 -1.58796E-14 + 3.04219E-15 1.31436E-14 5.22781E-14 1.91361E-13 6.44371E-13 1.99506E-12 + 5.67612E-12 1.48288E-11 3.55402E-11 7.80523E-11 1.56835E-10 2.87744E-10 + 4.80692E-10 7.28256E-10 9.94596E-10 1.21271E-09 1.29784E-09 1.17774E-09 + 8.28907E-10 2.99252E-10 -2.99252E-10 -8.28907E-10 -1.17774E-09 -1.29784E-09 + -1.21271E-09 -9.94596E-10 -7.28256E-10 -4.80692E-10 -2.87744E-10 -1.56835E-10 + -7.80523E-11 -3.55402E-11 -1.48288E-11 -5.67612E-12 -1.99506E-12 -6.44371E-13 + -1.91361E-13 -5.22781E-14 -1.31436E-14 -3.04219E-15 + 5.13127E-16 2.21694E-15 8.81777E-15 3.22769E-14 1.08686E-13 3.36507E-13 + 9.57393E-13 2.50118E-12 5.99459E-12 1.31651E-11 2.64534E-11 4.85340E-11 + 8.10785E-11 1.22835E-10 1.67759E-10 2.04549E-10 2.18908E-10 1.98650E-10 + 1.39812E-10 5.04749E-11 -5.04749E-11 -1.39812E-10 -1.98650E-10 -2.18908E-10 + -2.04549E-10 -1.67759E-10 -1.22835E-10 -8.10785E-11 -4.85340E-11 -2.64534E-11 + -1.31651E-11 -5.99459E-12 -2.50118E-12 -9.57393E-13 -3.36507E-13 -1.08686E-13 + -3.22769E-14 -8.81777E-15 -2.21694E-15 -5.13127E-16 + 7.61973E-17 3.29207E-16 1.30941E-15 4.79300E-15 1.61395E-14 4.99700E-14 + 1.42169E-13 3.71416E-13 8.90173E-13 1.95497E-12 3.92822E-12 7.20711E-12 + 1.20398E-11 1.82406E-11 2.49116E-11 3.03747E-11 3.25069E-11 2.94988E-11 + 2.07616E-11 7.49533E-12 -7.49533E-12 -2.07616E-11 -2.94988E-11 -3.25069E-11 + -3.03747E-11 -2.49116E-11 -1.82406E-11 -1.20398E-11 -7.20711E-12 -3.92822E-12 + -1.95497E-12 -8.90173E-13 -3.71416E-13 -1.42169E-13 -4.99700E-14 -1.61395E-14 + -4.79300E-15 -1.30941E-15 -3.29207E-16 -7.61973E-17 + 9.96143E-18 4.30379E-17 1.71181E-16 6.26599E-16 2.10995E-15 6.53268E-15 + 1.85861E-14 4.85559E-14 1.16374E-13 2.55577E-13 5.13545E-13 9.42200E-13 + 1.57399E-12 2.38463E-12 3.25674E-12 3.97094E-12 4.24970E-12 3.85644E-12 + 2.71420E-12 9.79880E-13 -9.79880E-13 -2.71420E-12 -3.85644E-12 -4.24970E-12 + -3.97094E-12 -3.25674E-12 -2.38463E-12 -1.57399E-12 -9.42200E-13 -5.13545E-13 + -2.55577E-13 -1.16374E-13 -4.85559E-14 -1.85861E-14 -6.53268E-15 -2.10995E-15 + -6.26599E-16 -1.71181E-16 -4.30379E-17 -9.96143E-18 + 1.14648E-18 4.95329E-18 1.97015E-17 7.21162E-17 2.42837E-16 7.51856E-16 + 2.13910E-15 5.58838E-15 1.33937E-14 2.94148E-14 5.91047E-14 1.08439E-13 + 1.81153E-13 2.74451E-13 3.74823E-13 4.57022E-13 4.89104E-13 4.43844E-13 + 3.12382E-13 1.12776E-13 -1.12776E-13 -3.12382E-13 -4.43844E-13 -4.89104E-13 + -4.57022E-13 -3.74823E-13 -2.74451E-13 -1.81153E-13 -1.08439E-13 -5.91047E-14 + -2.94148E-14 -1.33937E-14 -5.58838E-15 -2.13910E-15 -7.51856E-16 -2.42837E-16 + -7.21162E-17 -1.97015E-17 -4.95329E-18 -1.14648E-18 + 2.84402E-19 1.22874E-18 4.88728E-18 1.78896E-17 6.02397E-17 1.86510E-16 + 5.30638E-16 1.38629E-15 3.32252E-15 7.29680E-15 1.46618E-14 2.69001E-14 + 4.49380E-14 6.80818E-14 9.29808E-14 1.13372E-13 1.21330E-13 1.10102E-13 + 7.74912E-14 2.79759E-14 -2.79759E-14 -7.74912E-14 -1.10102E-13 -1.21330E-13 + -1.13372E-13 -9.29808E-14 -6.80818E-14 -4.49380E-14 -2.69001E-14 -1.46618E-14 + -7.29680E-15 -3.32252E-15 -1.38629E-15 -5.30638E-16 -1.86510E-16 -6.02397E-17 + -1.78896E-17 -4.88728E-18 -1.22874E-18 -2.84402E-19 + 2.47109E-18 1.06762E-17 4.24642E-17 1.55438E-16 5.23406E-16 1.62053E-15 + 4.61057E-15 1.20451E-14 2.88684E-14 6.33999E-14 1.27393E-13 2.33728E-13 + 3.90454E-13 5.91544E-13 8.07886E-13 9.85055E-13 1.05420E-12 9.56651E-13 + 6.73301E-13 2.43075E-13 -2.43075E-13 -6.73301E-13 -9.56651E-13 -1.05420E-12 + -9.85055E-13 -8.07886E-13 -5.91544E-13 -3.90454E-13 -2.33728E-13 -1.27393E-13 + -6.33999E-14 -2.88684E-14 -1.20451E-14 -4.61057E-15 -1.62053E-15 -5.23406E-16 + -1.55438E-16 -4.24642E-17 -1.06762E-17 -2.47109E-18 + 1.89020E-17 8.16649E-17 3.24819E-16 1.18898E-15 4.00366E-15 1.23958E-14 + 3.52673E-14 9.21355E-14 2.20821E-13 4.84961E-13 9.74458E-13 1.78784E-12 + 2.98667E-12 4.52486E-12 6.17970E-12 7.53492E-12 8.06386E-12 7.31764E-12 + 5.15023E-12 1.85934E-12 -1.85934E-12 -5.15023E-12 -7.31764E-12 -8.06386E-12 + -7.53492E-12 -6.17970E-12 -4.52486E-12 -2.98667E-12 -1.78784E-12 -9.74458E-13 + -4.84961E-13 -2.20821E-13 -9.21355E-14 -3.52673E-14 -1.23958E-14 -4.00366E-15 + -1.18898E-15 -3.24819E-16 -8.16649E-17 -1.89020E-17 + 1.27289E-16 5.49946E-16 2.18739E-15 8.00680E-15 2.69614E-14 8.34759E-14 + 2.37497E-13 6.20457E-13 1.48705E-12 3.26582E-12 6.56218E-12 1.20396E-11 + 2.01128E-11 3.04712E-11 4.16153E-11 5.07415E-11 5.43035E-11 4.92783E-11 + 3.46826E-11 1.25211E-11 -1.25211E-11 -3.46826E-11 -4.92783E-11 -5.43035E-11 + -5.07415E-11 -4.16153E-11 -3.04712E-11 -2.01128E-11 -1.20396E-11 -6.56218E-12 + -3.26582E-12 -1.48705E-12 -6.20457E-13 -2.37497E-13 -8.34759E-14 -2.69614E-14 + -8.00680E-15 -2.18739E-15 -5.49946E-16 -1.27289E-16 + 7.54662E-16 3.26048E-15 1.29684E-14 4.74701E-14 1.59846E-13 4.94905E-13 + 1.40805E-12 3.67852E-12 8.81632E-12 1.93621E-11 3.89053E-11 7.13796E-11 + 1.19243E-10 1.80656E-10 2.46725E-10 3.00832E-10 3.21950E-10 2.92158E-10 + 2.05624E-10 7.42342E-11 -7.42342E-11 -2.05624E-10 -2.92158E-10 -3.21950E-10 + -3.00832E-10 -2.46725E-10 -1.80656E-10 -1.19243E-10 -7.13796E-11 -3.89053E-11 + -1.93621E-11 -8.81632E-12 -3.67852E-12 -1.40805E-12 -4.94905E-13 -1.59846E-13 + -4.74701E-14 -1.29684E-14 -3.26048E-15 -7.54662E-16 + 3.93918E-15 1.70190E-14 6.76924E-14 2.47784E-13 8.34365E-13 2.58330E-12 + 7.34973E-12 1.92011E-11 4.60193E-11 1.01066E-10 2.03078E-10 3.72586E-10 + 6.22425E-10 9.42984E-10 1.28785E-09 1.57028E-09 1.68051E-09 1.52500E-09 + 1.07331E-09 3.87487E-10 -3.87487E-10 -1.07331E-09 -1.52500E-09 -1.68051E-09 + -1.57028E-09 -1.28785E-09 -9.42984E-10 -6.22425E-10 -3.72586E-10 -2.03078E-10 + -1.01066E-10 -4.60193E-11 -1.92011E-11 -7.34973E-12 -2.58330E-12 -8.34365E-13 + -2.47784E-13 -6.76924E-14 -1.70190E-14 -3.93918E-15 + 1.81041E-14 7.82177E-14 3.11108E-13 1.13879E-12 3.83466E-12 1.18726E-11 + 3.37786E-11 8.82464E-11 2.11500E-10 4.64490E-10 9.33325E-10 1.71237E-09 + 2.86060E-09 4.33386E-09 5.91885E-09 7.21686E-09 7.72347E-09 7.00876E-09 + 4.93284E-09 1.78085E-09 -1.78085E-09 -4.93284E-09 -7.00876E-09 -7.72347E-09 + -7.21686E-09 -5.91885E-09 -4.33386E-09 -2.86060E-09 -1.71237E-09 -9.33325E-10 + -4.64490E-10 -2.11500E-10 -8.82464E-11 -3.37786E-11 -1.18726E-11 -3.83466E-12 + -1.13879E-12 -3.11108E-13 -7.82177E-14 -1.81041E-14 + 7.32671E-14 3.16547E-13 1.25905E-12 4.60868E-12 1.55188E-11 4.80484E-11 + 1.36702E-10 3.57133E-10 8.55941E-10 1.87979E-09 3.77716E-09 6.92996E-09 + 1.15768E-08 1.75391E-08 2.39536E-08 2.92066E-08 3.12569E-08 2.83644E-08 + 1.99632E-08 7.20710E-09 -7.20710E-09 -1.99632E-08 -2.83644E-08 -3.12569E-08 + -2.92066E-08 -2.39536E-08 -1.75391E-08 -1.15768E-08 -6.92996E-09 -3.77716E-09 + -1.87979E-09 -8.55941E-10 -3.57133E-10 -1.36702E-10 -4.80484E-11 -1.55188E-11 + -4.60868E-12 -1.25905E-12 -3.16547E-13 -7.32671E-14 + 2.61142E-13 1.12825E-12 4.48757E-12 1.64265E-11 5.53130E-11 1.71256E-10 + 4.87240E-10 1.27291E-09 3.05079E-09 6.70004E-09 1.34627E-08 2.47001E-08 + 4.12628E-08 6.25138E-08 8.53765E-08 1.04100E-07 1.11407E-07 1.01098E-07 + 7.11537E-08 2.56879E-08 -2.56879E-08 -7.11537E-08 -1.01098E-07 -1.11407E-07 + -1.04100E-07 -8.53765E-08 -6.25138E-08 -4.12628E-08 -2.47001E-08 -1.34627E-08 + -6.70004E-09 -3.05079E-09 -1.27291E-09 -4.87240E-10 -1.71256E-10 -5.53130E-11 + -1.64265E-11 -4.48757E-12 -1.12825E-12 -2.61142E-13 + 8.19980E-13 3.54268E-12 1.40909E-11 5.15788E-11 1.73682E-10 5.37741E-10 + 1.52992E-09 3.99691E-09 9.57939E-09 2.10380E-08 4.22727E-08 7.75577E-08 + 1.29564E-07 1.96292E-07 2.68080E-07 3.26870E-07 3.49816E-07 3.17445E-07 + 2.23421E-07 8.06593E-08 -8.06593E-08 -2.23421E-07 -3.17445E-07 -3.49816E-07 + -3.26870E-07 -2.68080E-07 -1.96292E-07 -1.29564E-07 -7.75577E-08 -4.22727E-08 + -2.10380E-08 -9.57939E-09 -3.99691E-09 -1.52992E-09 -5.37741E-10 -1.73682E-10 + -5.15788E-11 -1.40909E-11 -3.54268E-12 -8.19980E-13 + 2.26931E-12 9.80443E-12 3.89967E-11 1.42745E-10 4.80666E-10 1.48821E-09 + 4.23408E-09 1.10615E-08 2.65111E-08 5.82229E-08 1.16990E-07 2.14642E-07 + 3.58571E-07 5.43240E-07 7.41916E-07 9.04618E-07 9.68121E-07 8.78533E-07 + 6.18321E-07 2.23226E-07 -2.23226E-07 -6.18321E-07 -8.78533E-07 -9.68121E-07 + -9.04618E-07 -7.41916E-07 -5.43240E-07 -3.58571E-07 -2.14642E-07 -1.16990E-07 + -5.82229E-08 -2.65111E-08 -1.10615E-08 -4.23408E-09 -1.48821E-09 -4.80666E-10 + -1.42745E-10 -3.89967E-11 -9.80443E-12 -2.26931E-12 + 5.53974E-12 2.39341E-11 9.51971E-11 3.48463E-10 1.17338E-09 3.63294E-09 + 1.03361E-08 2.70028E-08 6.47178E-08 1.42131E-07 2.85592E-07 5.23975E-07 + 8.75327E-07 1.32613E-06 1.81113E-06 2.20831E-06 2.36333E-06 2.14464E-06 + 1.50942E-06 5.44929E-07 -5.44929E-07 -1.50942E-06 -2.14464E-06 -2.36333E-06 + -2.20831E-06 -1.81113E-06 -1.32613E-06 -8.75327E-07 -5.23975E-07 -2.85592E-07 + -1.42131E-07 -6.47178E-08 -2.70028E-08 -1.03361E-08 -3.63294E-09 -1.17338E-09 + -3.48463E-10 -9.51971E-11 -2.39341E-11 -5.53974E-12 + 1.19441E-11 5.16040E-11 2.05253E-10 7.51315E-10 2.52991E-09 7.83293E-09 + 2.22854E-08 5.82204E-08 1.39537E-07 3.06447E-07 6.15759E-07 1.12973E-06 + 1.88728E-06 2.85926E-06 3.90495E-06 4.76131E-06 5.09555E-06 4.62402E-06 + 3.25443E-06 1.17491E-06 -1.17491E-06 -3.25443E-06 -4.62402E-06 -5.09555E-06 + -4.76131E-06 -3.90495E-06 -2.85926E-06 -1.88728E-06 -1.12973E-06 -6.15759E-07 + -3.06447E-07 -1.39537E-07 -5.82204E-08 -2.22854E-08 -7.83293E-09 -2.52991E-09 + -7.51315E-10 -2.05253E-10 -5.16040E-11 -1.19441E-11 + 2.27936E-11 9.84785E-11 3.91694E-10 1.43377E-09 4.82795E-09 1.49480E-08 + 4.25283E-08 1.11105E-07 2.66285E-07 5.84807E-07 1.17508E-06 2.15593E-06 + 3.60159E-06 5.45646E-06 7.45201E-06 9.08624E-06 9.72408E-06 8.82424E-06 + 6.21060E-06 2.24215E-06 -2.24215E-06 -6.21060E-06 -8.82424E-06 -9.72408E-06 + -9.08624E-06 -7.45201E-06 -5.45646E-06 -3.60159E-06 -2.15593E-06 -1.17508E-06 + -5.84807E-07 -2.66285E-07 -1.11105E-07 -4.25283E-08 -1.49480E-08 -4.82795E-09 + -1.43377E-09 -3.91694E-10 -9.84785E-11 -2.27936E-11 + 3.86315E-11 1.66905E-10 6.63859E-10 2.43002E-09 8.18261E-09 2.53344E-08 + 7.20788E-08 1.88305E-07 4.51311E-07 9.91155E-07 1.99158E-06 3.65395E-06 + 6.10412E-06 9.24784E-06 1.26300E-05 1.53997E-05 1.64808E-05 1.49557E-05 + 1.05260E-05 3.80010E-06 -3.80010E-06 -1.05260E-05 -1.49557E-05 -1.64808E-05 + -1.53997E-05 -1.26300E-05 -9.24784E-06 -6.10412E-06 -3.65395E-06 -1.99158E-06 + -9.91155E-07 -4.51311E-07 -1.88305E-07 -7.20788E-08 -2.53344E-08 -8.18261E-09 + -2.43002E-09 -6.63859E-10 -1.66905E-10 -3.86315E-11 + 5.84577E-11 2.52563E-10 1.00456E-09 3.67713E-09 1.23820E-08 3.83364E-08 + 1.09071E-07 2.84946E-07 6.82930E-07 1.49983E-06 3.01368E-06 5.52921E-06 + 9.23682E-06 1.39939E-05 1.91118E-05 2.33031E-05 2.49389E-05 2.26312E-05 + 1.59281E-05 5.75037E-06 -5.75037E-06 -1.59281E-05 -2.26312E-05 -2.49389E-05 + -2.33031E-05 -1.91118E-05 -1.39939E-05 -9.23682E-06 -5.52921E-06 -3.01368E-06 + -1.49983E-06 -6.82930E-07 -2.84946E-07 -1.09071E-07 -3.83364E-08 -1.23820E-08 + -3.67713E-09 -1.00456E-09 -2.52563E-10 -5.84577E-11 + 7.95999E-11 3.43907E-10 1.36788E-09 5.00703E-09 1.68602E-08 5.22014E-08 + 1.48518E-07 3.88001E-07 9.29923E-07 2.04227E-06 4.10364E-06 7.52894E-06 + 1.25775E-05 1.90551E-05 2.60240E-05 3.17310E-05 3.39585E-05 3.08161E-05 + 2.16888E-05 7.83008E-06 -7.83008E-06 -2.16888E-05 -3.08161E-05 -3.39585E-05 + -3.17310E-05 -2.60240E-05 -1.90551E-05 -1.25775E-05 -7.52894E-06 -4.10364E-06 + -2.04227E-06 -9.29923E-07 -3.88001E-07 -1.48518E-07 -5.22014E-08 -1.68602E-08 + -5.00703E-09 -1.36788E-09 -3.43907E-10 -7.95999E-11 + 9.85801E-11 4.25910E-10 1.69404E-09 6.20093E-09 2.08804E-08 6.46485E-08 + 1.83931E-07 4.80518E-07 1.15166E-06 2.52924E-06 5.08213E-06 9.32418E-06 + 1.55765E-05 2.35987E-05 3.22293E-05 3.92972E-05 4.20558E-05 3.81641E-05 + 2.68603E-05 9.69710E-06 -9.69710E-06 -2.68603E-05 -3.81641E-05 -4.20558E-05 + -3.92972E-05 -3.22293E-05 -2.35987E-05 -1.55765E-05 -9.32418E-06 -5.08213E-06 + -2.52924E-06 -1.15166E-06 -4.80518E-07 -1.83931E-07 -6.46485E-08 -2.08804E-08 + -6.20093E-09 -1.69404E-09 -4.25910E-10 -9.85801E-11 + 1.12464E-10 4.85897E-10 1.93263E-09 7.07429E-09 2.38213E-08 7.37538E-08 + 2.09836E-07 5.48196E-07 1.31386E-06 2.88546E-06 5.79791E-06 1.06374E-05 + 1.77704E-05 2.69224E-05 3.67685E-05 4.48319E-05 4.79790E-05 4.35392E-05 + 3.06433E-05 1.10628E-05 -1.10628E-05 -3.06433E-05 -4.35392E-05 -4.79790E-05 + -4.48319E-05 -3.67685E-05 -2.69224E-05 -1.77704E-05 -1.06374E-05 -5.79791E-06 + -2.88546E-06 -1.31386E-06 -5.48196E-07 -2.09836E-07 -7.37538E-08 -2.38213E-08 + -7.07429E-09 -1.93263E-09 -4.85897E-10 -1.12464E-10 + 1.19656E-10 5.16966E-10 2.05621E-09 7.52663E-09 2.53445E-08 7.84698E-08 + 2.23254E-07 5.83249E-07 1.39787E-06 3.06996E-06 6.16864E-06 1.13176E-05 + 1.89066E-05 2.86439E-05 3.91196E-05 4.76985E-05 5.10469E-05 4.63231E-05 + 3.26027E-05 1.17702E-05 -1.17702E-05 -3.26027E-05 -4.63231E-05 -5.10469E-05 + -4.76985E-05 -3.91196E-05 -2.86439E-05 -1.89066E-05 -1.13176E-05 -6.16864E-06 + -3.06996E-06 -1.39787E-06 -5.83249E-07 -2.23254E-07 -7.84698E-08 -2.53445E-08 + -7.52663E-09 -2.05621E-09 -5.16966E-10 -1.19656E-10 + 1.19656E-10 5.16966E-10 2.05621E-09 7.52663E-09 2.53445E-08 7.84698E-08 + 2.23254E-07 5.83249E-07 1.39787E-06 3.06996E-06 6.16864E-06 1.13176E-05 + 1.89066E-05 2.86439E-05 3.91196E-05 4.76985E-05 5.10469E-05 4.63231E-05 + 3.26027E-05 1.17702E-05 -1.17702E-05 -3.26027E-05 -4.63231E-05 -5.10469E-05 + -4.76985E-05 -3.91196E-05 -2.86439E-05 -1.89066E-05 -1.13176E-05 -6.16864E-06 + -3.06996E-06 -1.39787E-06 -5.83249E-07 -2.23254E-07 -7.84698E-08 -2.53445E-08 + -7.52663E-09 -2.05621E-09 -5.16966E-10 -1.19656E-10 + 1.12464E-10 4.85897E-10 1.93263E-09 7.07429E-09 2.38213E-08 7.37538E-08 + 2.09836E-07 5.48196E-07 1.31386E-06 2.88546E-06 5.79791E-06 1.06374E-05 + 1.77704E-05 2.69224E-05 3.67685E-05 4.48319E-05 4.79790E-05 4.35392E-05 + 3.06433E-05 1.10628E-05 -1.10628E-05 -3.06433E-05 -4.35392E-05 -4.79790E-05 + -4.48319E-05 -3.67685E-05 -2.69224E-05 -1.77704E-05 -1.06374E-05 -5.79791E-06 + -2.88546E-06 -1.31386E-06 -5.48196E-07 -2.09836E-07 -7.37538E-08 -2.38213E-08 + -7.07429E-09 -1.93263E-09 -4.85897E-10 -1.12464E-10 + 9.85801E-11 4.25910E-10 1.69404E-09 6.20093E-09 2.08804E-08 6.46485E-08 + 1.83931E-07 4.80518E-07 1.15166E-06 2.52924E-06 5.08213E-06 9.32418E-06 + 1.55765E-05 2.35987E-05 3.22293E-05 3.92972E-05 4.20558E-05 3.81641E-05 + 2.68603E-05 9.69710E-06 -9.69710E-06 -2.68603E-05 -3.81641E-05 -4.20558E-05 + -3.92972E-05 -3.22293E-05 -2.35987E-05 -1.55765E-05 -9.32418E-06 -5.08213E-06 + -2.52924E-06 -1.15166E-06 -4.80518E-07 -1.83931E-07 -6.46485E-08 -2.08804E-08 + -6.20093E-09 -1.69404E-09 -4.25910E-10 -9.85801E-11 + 7.95999E-11 3.43907E-10 1.36788E-09 5.00703E-09 1.68602E-08 5.22014E-08 + 1.48518E-07 3.88001E-07 9.29923E-07 2.04227E-06 4.10364E-06 7.52894E-06 + 1.25775E-05 1.90551E-05 2.60240E-05 3.17310E-05 3.39585E-05 3.08161E-05 + 2.16888E-05 7.83008E-06 -7.83008E-06 -2.16888E-05 -3.08161E-05 -3.39585E-05 + -3.17310E-05 -2.60240E-05 -1.90551E-05 -1.25775E-05 -7.52894E-06 -4.10364E-06 + -2.04227E-06 -9.29923E-07 -3.88001E-07 -1.48518E-07 -5.22014E-08 -1.68602E-08 + -5.00703E-09 -1.36788E-09 -3.43907E-10 -7.95999E-11 + 5.84577E-11 2.52563E-10 1.00456E-09 3.67713E-09 1.23820E-08 3.83364E-08 + 1.09071E-07 2.84946E-07 6.82930E-07 1.49983E-06 3.01368E-06 5.52921E-06 + 9.23682E-06 1.39939E-05 1.91118E-05 2.33031E-05 2.49389E-05 2.26312E-05 + 1.59281E-05 5.75037E-06 -5.75037E-06 -1.59281E-05 -2.26312E-05 -2.49389E-05 + -2.33031E-05 -1.91118E-05 -1.39939E-05 -9.23682E-06 -5.52921E-06 -3.01368E-06 + -1.49983E-06 -6.82930E-07 -2.84946E-07 -1.09071E-07 -3.83364E-08 -1.23820E-08 + -3.67713E-09 -1.00456E-09 -2.52563E-10 -5.84577E-11 + 3.86315E-11 1.66905E-10 6.63859E-10 2.43002E-09 8.18261E-09 2.53344E-08 + 7.20788E-08 1.88305E-07 4.51311E-07 9.91155E-07 1.99158E-06 3.65395E-06 + 6.10412E-06 9.24784E-06 1.26300E-05 1.53997E-05 1.64808E-05 1.49557E-05 + 1.05260E-05 3.80010E-06 -3.80010E-06 -1.05260E-05 -1.49557E-05 -1.64808E-05 + -1.53997E-05 -1.26300E-05 -9.24784E-06 -6.10412E-06 -3.65395E-06 -1.99158E-06 + -9.91155E-07 -4.51311E-07 -1.88305E-07 -7.20788E-08 -2.53344E-08 -8.18261E-09 + -2.43002E-09 -6.63859E-10 -1.66905E-10 -3.86315E-11 + 2.27936E-11 9.84785E-11 3.91694E-10 1.43377E-09 4.82795E-09 1.49480E-08 + 4.25283E-08 1.11105E-07 2.66285E-07 5.84807E-07 1.17508E-06 2.15593E-06 + 3.60159E-06 5.45646E-06 7.45201E-06 9.08624E-06 9.72408E-06 8.82424E-06 + 6.21060E-06 2.24215E-06 -2.24215E-06 -6.21060E-06 -8.82424E-06 -9.72408E-06 + -9.08624E-06 -7.45201E-06 -5.45646E-06 -3.60159E-06 -2.15593E-06 -1.17508E-06 + -5.84807E-07 -2.66285E-07 -1.11105E-07 -4.25283E-08 -1.49480E-08 -4.82795E-09 + -1.43377E-09 -3.91694E-10 -9.84785E-11 -2.27936E-11 + 1.19441E-11 5.16040E-11 2.05253E-10 7.51315E-10 2.52991E-09 7.83293E-09 + 2.22854E-08 5.82204E-08 1.39537E-07 3.06447E-07 6.15759E-07 1.12973E-06 + 1.88728E-06 2.85926E-06 3.90495E-06 4.76131E-06 5.09555E-06 4.62402E-06 + 3.25443E-06 1.17491E-06 -1.17491E-06 -3.25443E-06 -4.62402E-06 -5.09555E-06 + -4.76131E-06 -3.90495E-06 -2.85926E-06 -1.88728E-06 -1.12973E-06 -6.15759E-07 + -3.06447E-07 -1.39537E-07 -5.82204E-08 -2.22854E-08 -7.83293E-09 -2.52991E-09 + -7.51315E-10 -2.05253E-10 -5.16040E-11 -1.19441E-11 + 5.53974E-12 2.39341E-11 9.51971E-11 3.48463E-10 1.17338E-09 3.63294E-09 + 1.03361E-08 2.70028E-08 6.47178E-08 1.42131E-07 2.85592E-07 5.23975E-07 + 8.75327E-07 1.32613E-06 1.81113E-06 2.20831E-06 2.36333E-06 2.14464E-06 + 1.50942E-06 5.44929E-07 -5.44929E-07 -1.50942E-06 -2.14464E-06 -2.36333E-06 + -2.20831E-06 -1.81113E-06 -1.32613E-06 -8.75327E-07 -5.23975E-07 -2.85592E-07 + -1.42131E-07 -6.47178E-08 -2.70028E-08 -1.03361E-08 -3.63294E-09 -1.17338E-09 + -3.48463E-10 -9.51971E-11 -2.39341E-11 -5.53974E-12 + 2.26931E-12 9.80443E-12 3.89967E-11 1.42745E-10 4.80666E-10 1.48821E-09 + 4.23408E-09 1.10615E-08 2.65111E-08 5.82229E-08 1.16990E-07 2.14642E-07 + 3.58571E-07 5.43240E-07 7.41916E-07 9.04618E-07 9.68121E-07 8.78533E-07 + 6.18321E-07 2.23226E-07 -2.23226E-07 -6.18321E-07 -8.78533E-07 -9.68121E-07 + -9.04618E-07 -7.41916E-07 -5.43240E-07 -3.58571E-07 -2.14642E-07 -1.16990E-07 + -5.82229E-08 -2.65111E-08 -1.10615E-08 -4.23408E-09 -1.48821E-09 -4.80666E-10 + -1.42745E-10 -3.89967E-11 -9.80443E-12 -2.26931E-12 + 8.19980E-13 3.54268E-12 1.40909E-11 5.15788E-11 1.73682E-10 5.37741E-10 + 1.52992E-09 3.99691E-09 9.57939E-09 2.10380E-08 4.22727E-08 7.75577E-08 + 1.29564E-07 1.96292E-07 2.68080E-07 3.26870E-07 3.49816E-07 3.17445E-07 + 2.23421E-07 8.06593E-08 -8.06593E-08 -2.23421E-07 -3.17445E-07 -3.49816E-07 + -3.26870E-07 -2.68080E-07 -1.96292E-07 -1.29564E-07 -7.75577E-08 -4.22727E-08 + -2.10380E-08 -9.57939E-09 -3.99691E-09 -1.52992E-09 -5.37741E-10 -1.73682E-10 + -5.15788E-11 -1.40909E-11 -3.54268E-12 -8.19980E-13 + 2.61142E-13 1.12825E-12 4.48757E-12 1.64265E-11 5.53130E-11 1.71256E-10 + 4.87240E-10 1.27291E-09 3.05079E-09 6.70004E-09 1.34627E-08 2.47001E-08 + 4.12628E-08 6.25138E-08 8.53765E-08 1.04100E-07 1.11407E-07 1.01098E-07 + 7.11537E-08 2.56879E-08 -2.56879E-08 -7.11537E-08 -1.01098E-07 -1.11407E-07 + -1.04100E-07 -8.53765E-08 -6.25138E-08 -4.12628E-08 -2.47001E-08 -1.34627E-08 + -6.70004E-09 -3.05079E-09 -1.27291E-09 -4.87240E-10 -1.71256E-10 -5.53130E-11 + -1.64265E-11 -4.48757E-12 -1.12825E-12 -2.61142E-13 + 7.32671E-14 3.16547E-13 1.25905E-12 4.60868E-12 1.55188E-11 4.80484E-11 + 1.36702E-10 3.57133E-10 8.55941E-10 1.87979E-09 3.77716E-09 6.92996E-09 + 1.15768E-08 1.75391E-08 2.39536E-08 2.92066E-08 3.12569E-08 2.83644E-08 + 1.99632E-08 7.20710E-09 -7.20710E-09 -1.99632E-08 -2.83644E-08 -3.12569E-08 + -2.92066E-08 -2.39536E-08 -1.75391E-08 -1.15768E-08 -6.92996E-09 -3.77716E-09 + -1.87979E-09 -8.55941E-10 -3.57133E-10 -1.36702E-10 -4.80484E-11 -1.55188E-11 + -4.60868E-12 -1.25905E-12 -3.16547E-13 -7.32671E-14 + 1.81041E-14 7.82177E-14 3.11108E-13 1.13879E-12 3.83466E-12 1.18726E-11 + 3.37786E-11 8.82464E-11 2.11500E-10 4.64490E-10 9.33325E-10 1.71237E-09 + 2.86060E-09 4.33386E-09 5.91885E-09 7.21686E-09 7.72347E-09 7.00876E-09 + 4.93284E-09 1.78085E-09 -1.78085E-09 -4.93284E-09 -7.00876E-09 -7.72347E-09 + -7.21686E-09 -5.91885E-09 -4.33386E-09 -2.86060E-09 -1.71237E-09 -9.33325E-10 + -4.64490E-10 -2.11500E-10 -8.82464E-11 -3.37786E-11 -1.18726E-11 -3.83466E-12 + -1.13879E-12 -3.11108E-13 -7.82177E-14 -1.81041E-14 + 3.93918E-15 1.70190E-14 6.76924E-14 2.47784E-13 8.34365E-13 2.58330E-12 + 7.34973E-12 1.92011E-11 4.60193E-11 1.01066E-10 2.03078E-10 3.72586E-10 + 6.22425E-10 9.42984E-10 1.28785E-09 1.57028E-09 1.68051E-09 1.52500E-09 + 1.07331E-09 3.87487E-10 -3.87487E-10 -1.07331E-09 -1.52500E-09 -1.68051E-09 + -1.57028E-09 -1.28785E-09 -9.42984E-10 -6.22425E-10 -3.72586E-10 -2.03078E-10 + -1.01066E-10 -4.60193E-11 -1.92011E-11 -7.34973E-12 -2.58330E-12 -8.34365E-13 + -2.47784E-13 -6.76924E-14 -1.70190E-14 -3.93918E-15 + 7.54662E-16 3.26048E-15 1.29684E-14 4.74701E-14 1.59846E-13 4.94905E-13 + 1.40805E-12 3.67852E-12 8.81632E-12 1.93621E-11 3.89053E-11 7.13796E-11 + 1.19243E-10 1.80656E-10 2.46725E-10 3.00832E-10 3.21950E-10 2.92158E-10 + 2.05624E-10 7.42342E-11 -7.42342E-11 -2.05624E-10 -2.92158E-10 -3.21950E-10 + -3.00832E-10 -2.46725E-10 -1.80656E-10 -1.19243E-10 -7.13796E-11 -3.89053E-11 + -1.93621E-11 -8.81632E-12 -3.67852E-12 -1.40805E-12 -4.94905E-13 -1.59846E-13 + -4.74701E-14 -1.29684E-14 -3.26048E-15 -7.54662E-16 + 1.27289E-16 5.49946E-16 2.18739E-15 8.00680E-15 2.69614E-14 8.34759E-14 + 2.37497E-13 6.20457E-13 1.48705E-12 3.26582E-12 6.56218E-12 1.20396E-11 + 2.01128E-11 3.04712E-11 4.16153E-11 5.07415E-11 5.43035E-11 4.92783E-11 + 3.46826E-11 1.25211E-11 -1.25211E-11 -3.46826E-11 -4.92783E-11 -5.43035E-11 + -5.07415E-11 -4.16153E-11 -3.04712E-11 -2.01128E-11 -1.20396E-11 -6.56218E-12 + -3.26582E-12 -1.48705E-12 -6.20457E-13 -2.37497E-13 -8.34759E-14 -2.69614E-14 + -8.00680E-15 -2.18739E-15 -5.49946E-16 -1.27289E-16 + 1.89020E-17 8.16649E-17 3.24819E-16 1.18898E-15 4.00366E-15 1.23958E-14 + 3.52673E-14 9.21355E-14 2.20821E-13 4.84961E-13 9.74458E-13 1.78784E-12 + 2.98667E-12 4.52486E-12 6.17970E-12 7.53492E-12 8.06386E-12 7.31764E-12 + 5.15023E-12 1.85934E-12 -1.85934E-12 -5.15023E-12 -7.31764E-12 -8.06386E-12 + -7.53492E-12 -6.17970E-12 -4.52486E-12 -2.98667E-12 -1.78784E-12 -9.74458E-13 + -4.84961E-13 -2.20821E-13 -9.21355E-14 -3.52673E-14 -1.23958E-14 -4.00366E-15 + -1.18898E-15 -3.24819E-16 -8.16649E-17 -1.89020E-17 + 2.47109E-18 1.06762E-17 4.24642E-17 1.55438E-16 5.23406E-16 1.62053E-15 + 4.61057E-15 1.20451E-14 2.88684E-14 6.33999E-14 1.27393E-13 2.33728E-13 + 3.90454E-13 5.91544E-13 8.07886E-13 9.85055E-13 1.05420E-12 9.56651E-13 + 6.73301E-13 2.43075E-13 -2.43075E-13 -6.73301E-13 -9.56651E-13 -1.05420E-12 + -9.85055E-13 -8.07886E-13 -5.91544E-13 -3.90454E-13 -2.33728E-13 -1.27393E-13 + -6.33999E-14 -2.88684E-14 -1.20451E-14 -4.61057E-15 -1.62053E-15 -5.23406E-16 + -1.55438E-16 -4.24642E-17 -1.06762E-17 -2.47109E-18 + 2.84402E-19 1.22874E-18 4.88728E-18 1.78896E-17 6.02397E-17 1.86510E-16 + 5.30638E-16 1.38629E-15 3.32252E-15 7.29680E-15 1.46618E-14 2.69001E-14 + 4.49380E-14 6.80818E-14 9.29808E-14 1.13372E-13 1.21330E-13 1.10102E-13 + 7.74912E-14 2.79759E-14 -2.79759E-14 -7.74912E-14 -1.10102E-13 -1.21330E-13 + -1.13372E-13 -9.29808E-14 -6.80818E-14 -4.49380E-14 -2.69001E-14 -1.46618E-14 + -7.29680E-15 -3.32252E-15 -1.38629E-15 -5.30638E-16 -1.86510E-16 -6.02397E-17 + -1.78896E-17 -4.88728E-18 -1.22874E-18 -2.84402E-19 + 6.02489E-20 2.60302E-19 1.03534E-18 3.78980E-18 1.27614E-17 3.95110E-17 + 1.12413E-16 2.93677E-16 7.03856E-16 1.54579E-15 3.10603E-15 5.69863E-15 + 9.51985E-15 1.44227E-14 1.96975E-14 2.40171E-14 2.57031E-14 2.33246E-14 + 1.64161E-14 5.92653E-15 -5.92653E-15 -1.64161E-14 -2.33246E-14 -2.57031E-14 + -2.40171E-14 -1.96975E-14 -1.44227E-14 -9.51985E-15 -5.69863E-15 -3.10603E-15 + -1.54579E-15 -7.03856E-16 -2.93677E-16 -1.12413E-16 -3.95110E-17 -1.27614E-17 + -3.78980E-18 -1.03534E-18 -2.60302E-19 -6.02489E-20 + 5.23487E-19 2.26170E-18 8.99580E-18 3.29286E-17 1.10881E-16 3.43301E-16 + 9.76723E-16 2.55168E-15 6.11561E-15 1.34309E-14 2.69874E-14 4.95139E-14 + 8.27155E-14 1.25315E-13 1.71146E-13 2.08678E-13 2.23327E-13 2.02661E-13 + 1.42635E-13 5.14940E-14 -5.14940E-14 -1.42635E-13 -2.02661E-13 -2.23327E-13 + -2.08678E-13 -1.71146E-13 -1.25315E-13 -8.27155E-14 -4.95139E-14 -2.69874E-14 + -1.34309E-14 -6.11561E-15 -2.55168E-15 -9.76723E-16 -3.43301E-16 -1.10881E-16 + -3.29286E-17 -8.99580E-18 -2.26170E-18 -5.23487E-19 + 4.00427E-18 1.73002E-17 6.88110E-17 2.51878E-16 8.48152E-16 2.62599E-15 + 7.47118E-15 1.95184E-14 4.67798E-14 1.02736E-13 2.06433E-13 3.78743E-13 + 6.32710E-13 9.58566E-13 1.30913E-12 1.59623E-12 1.70828E-12 1.55020E-12 + 1.09105E-12 3.93890E-13 -3.93890E-13 -1.09105E-12 -1.55020E-12 -1.70828E-12 + -1.59623E-12 -1.30913E-12 -9.58566E-13 -6.32710E-13 -3.78743E-13 -2.06433E-13 + -1.02736E-13 -4.67798E-14 -1.95184E-14 -7.47118E-15 -2.62599E-15 -8.48152E-16 + -2.51878E-16 -6.88110E-17 -1.73002E-17 -4.00427E-18 + 2.69655E-17 1.16503E-16 4.63386E-16 1.69619E-15 5.71161E-15 1.76839E-14 + 5.03123E-14 1.31440E-13 3.15023E-13 6.91844E-13 1.39016E-12 2.55052E-12 + 4.26078E-12 6.45516E-12 8.81595E-12 1.07493E-11 1.15039E-11 1.04393E-11 + 7.34731E-12 2.65252E-12 -2.65252E-12 -7.34731E-12 -1.04393E-11 -1.15039E-11 + -1.07493E-11 -8.81595E-12 -6.45516E-12 -4.26078E-12 -2.55052E-12 -1.39016E-12 + -6.91844E-13 -3.15023E-13 -1.31440E-13 -5.03123E-14 -1.76839E-14 -5.71161E-15 + -1.69619E-15 -4.63386E-16 -1.16503E-16 -2.69655E-17 + 1.59871E-16 6.90714E-16 2.74729E-15 1.00563E-14 3.38625E-14 1.04843E-13 + 2.98288E-13 7.79273E-13 1.86769E-12 4.10175E-12 8.24187E-12 1.51214E-11 + 2.52610E-11 3.82708E-11 5.22673E-11 6.37296E-11 6.82033E-11 6.18919E-11 + 4.35602E-11 1.57261E-11 -1.57261E-11 -4.35602E-11 -6.18919E-11 -6.82033E-11 + -6.37296E-11 -5.22673E-11 -3.82708E-11 -2.52610E-11 -1.51214E-11 -8.24187E-12 + -4.10175E-12 -1.86769E-12 -7.79273E-13 -2.98288E-13 -1.04843E-13 -3.38625E-14 + -1.00563E-14 -2.74729E-15 -6.90714E-16 -1.59871E-16 + 8.34492E-16 3.60538E-15 1.43402E-14 5.24916E-14 1.76755E-13 5.47257E-13 + 1.55700E-12 4.06764E-12 9.74893E-12 2.14103E-11 4.30208E-11 7.89303E-11 + 1.31857E-10 1.99766E-10 2.72824E-10 3.32655E-10 3.56007E-10 3.23063E-10 + 2.27375E-10 8.20868E-11 -8.20868E-11 -2.27375E-10 -3.23063E-10 -3.56007E-10 + -3.32655E-10 -2.72824E-10 -1.99766E-10 -1.31857E-10 -7.89303E-11 -4.30208E-11 + -2.14103E-11 -9.74893E-12 -4.06764E-12 -1.55700E-12 -5.47257E-13 -1.76755E-13 + -5.24916E-14 -1.43402E-14 -3.60538E-15 -8.34492E-16 + 3.83525E-15 1.65700E-14 6.59064E-14 2.41246E-13 8.12350E-13 2.51514E-12 + 7.15581E-12 1.86945E-11 4.48051E-11 9.83996E-11 1.97719E-10 3.62756E-10 + 6.06002E-10 9.18104E-10 1.25387E-09 1.52885E-09 1.63617E-09 1.48477E-09 + 1.04499E-09 3.77263E-10 -3.77263E-10 -1.04499E-09 -1.48477E-09 -1.63617E-09 + -1.52885E-09 -1.25387E-09 -9.18104E-10 -6.06002E-10 -3.62756E-10 -1.97719E-10 + -9.83996E-11 -4.48051E-11 -1.86945E-11 -7.15581E-12 -2.51514E-12 -8.12350E-13 + -2.41246E-13 -6.59064E-14 -1.65700E-14 -3.83525E-15 + 1.55212E-14 6.70586E-14 2.66723E-13 9.76323E-13 3.28758E-12 1.01788E-11 + 2.89595E-11 7.56565E-11 1.81326E-10 3.98223E-10 8.00170E-10 1.46807E-09 + 2.45249E-09 3.71556E-09 5.07443E-09 6.18725E-09 6.62158E-09 6.00884E-09 + 4.22908E-09 1.52678E-09 -1.52678E-09 -4.22908E-09 -6.00884E-09 -6.62158E-09 + -6.18725E-09 -5.07443E-09 -3.71556E-09 -2.45249E-09 -1.46807E-09 -8.00170E-10 + -3.98223E-10 -1.81326E-10 -7.56565E-11 -2.89595E-11 -1.01788E-11 -3.28758E-12 + -9.76323E-13 -2.66723E-13 -6.70586E-14 -1.55212E-14 + 5.53215E-14 2.39014E-13 9.50667E-13 3.47986E-12 1.17177E-11 3.62797E-11 + 1.03219E-10 2.69659E-10 6.46291E-10 1.41936E-09 2.85200E-09 5.23257E-09 + 8.74128E-09 1.32432E-08 1.80865E-08 2.20529E-08 2.36010E-08 2.14170E-08 + 1.50735E-08 5.44183E-09 -5.44183E-09 -1.50735E-08 -2.14170E-08 -2.36010E-08 + -2.20529E-08 -1.80865E-08 -1.32432E-08 -8.74128E-09 -5.23257E-09 -2.85200E-09 + -1.41936E-09 -6.46291E-10 -2.69659E-10 -1.03219E-10 -3.62797E-11 -1.17177E-11 + -3.47986E-12 -9.50667E-13 -2.39014E-13 -5.53215E-14 + 1.73708E-13 7.50497E-13 2.98507E-12 1.09267E-11 3.67934E-11 1.13917E-10 + 3.24105E-10 8.46722E-10 2.02934E-09 4.45677E-09 8.95522E-09 1.64301E-08 + 2.74474E-08 4.15833E-08 5.67912E-08 6.92456E-08 7.41065E-08 6.72488E-08 + 4.73304E-08 1.70872E-08 -1.70872E-08 -4.73304E-08 -6.72488E-08 -7.41065E-08 + -6.92456E-08 -5.67912E-08 -4.15833E-08 -2.74474E-08 -1.64301E-08 -8.95522E-09 + -4.45677E-09 -2.02934E-09 -8.46722E-10 -3.24105E-10 -1.13917E-10 -3.67934E-11 + -1.09267E-11 -2.98507E-12 -7.50497E-13 -1.73708E-13 + 4.80740E-13 2.07701E-12 8.26123E-12 3.02397E-11 1.01826E-10 3.15268E-10 + 8.96966E-10 2.34332E-09 5.61623E-09 1.23342E-08 2.47837E-08 4.54707E-08 + 7.59611E-08 1.15082E-07 1.57171E-07 1.91638E-07 2.05091E-07 1.86112E-07 + 1.30988E-07 4.72891E-08 -4.72891E-08 -1.30988E-07 -1.86112E-07 -2.05091E-07 + -1.91638E-07 -1.57171E-07 -1.15082E-07 -7.59611E-08 -4.54707E-08 -2.47837E-08 + -1.23342E-08 -5.61623E-09 -2.34332E-09 -8.96966E-10 -3.15268E-10 -1.01826E-10 + -3.02397E-11 -8.26123E-12 -2.07701E-12 -4.80740E-13 + 1.17356E-12 5.07031E-12 2.01669E-11 7.38199E-11 2.48574E-10 7.69618E-10 + 2.18963E-09 5.72040E-09 1.37101E-08 3.01097E-08 6.05009E-08 1.11001E-07 + 1.85433E-07 2.80934E-07 3.83678E-07 4.67819E-07 5.00659E-07 4.54329E-07 + 3.19761E-07 1.15440E-07 -1.15440E-07 -3.19761E-07 -4.54329E-07 -5.00659E-07 + -4.67819E-07 -3.83678E-07 -2.80934E-07 -1.85433E-07 -1.11001E-07 -6.05009E-08 + -3.01097E-08 -1.37101E-08 -5.72040E-09 -2.18963E-09 -7.69618E-10 -2.48574E-10 + -7.38199E-11 -2.01669E-11 -5.07031E-12 -1.17356E-12 + 2.53030E-12 1.09320E-11 4.34816E-11 1.59162E-10 5.35947E-10 1.65936E-09 + 4.72103E-09 1.23337E-08 2.95601E-08 6.49189E-08 1.30445E-07 2.39328E-07 + 3.99809E-07 6.05717E-07 8.27242E-07 1.00866E-06 1.07946E-06 9.79571E-07 + 6.89432E-07 2.48899E-07 -2.48899E-07 -6.89432E-07 -9.79571E-07 -1.07946E-06 + -1.00866E-06 -8.27242E-07 -6.05717E-07 -3.99809E-07 -2.39328E-07 -1.30445E-07 + -6.49189E-08 -2.95601E-08 -1.23337E-08 -4.72103E-09 -1.65936E-09 -5.35947E-10 + -1.59162E-10 -4.34816E-11 -1.09320E-11 -2.53030E-12 + 4.82869E-12 2.08621E-11 8.29781E-11 3.03736E-10 1.02277E-09 3.16664E-09 + 9.00938E-09 2.35369E-08 5.64110E-08 1.23888E-07 2.48935E-07 4.56721E-07 + 7.62975E-07 1.15592E-06 1.57867E-06 1.92487E-06 2.05999E-06 1.86936E-06 + 1.31568E-06 4.74986E-07 -4.74986E-07 -1.31568E-06 -1.86936E-06 -2.05999E-06 + -1.92487E-06 -1.57867E-06 -1.15592E-06 -7.62975E-07 -4.56721E-07 -2.48935E-07 + -1.23888E-07 -5.64110E-08 -2.35369E-08 -9.00938E-09 -3.16664E-09 -1.02277E-09 + -3.03736E-10 -8.29781E-11 -2.08621E-11 -4.82869E-12 + 8.18386E-12 3.53579E-11 1.40635E-10 5.14785E-10 1.73344E-09 5.36695E-09 + 1.52695E-08 3.98914E-08 9.56077E-08 2.09971E-07 4.21905E-07 7.74069E-07 + 1.29312E-06 1.95910E-06 2.67559E-06 3.26235E-06 3.49136E-06 3.16828E-06 + 2.22987E-06 8.05025E-07 -8.05025E-07 -2.22987E-06 -3.16828E-06 -3.49136E-06 + -3.26235E-06 -2.67559E-06 -1.95910E-06 -1.29312E-06 -7.74069E-07 -4.21905E-07 + -2.09971E-07 -9.56077E-08 -3.98914E-08 -1.52695E-08 -5.36695E-09 -1.73344E-09 + -5.14785E-10 -1.40635E-10 -3.53579E-11 -8.18386E-12 + 1.23839E-11 5.35041E-11 2.12810E-10 7.78979E-10 2.62306E-09 8.12134E-09 + 2.31060E-08 6.03641E-08 1.44675E-07 3.17730E-07 6.38432E-07 1.17133E-06 + 1.95677E-06 2.96454E-06 4.04873E-06 4.93662E-06 5.28317E-06 4.79427E-06 + 3.37426E-06 1.21817E-06 -1.21817E-06 -3.37426E-06 -4.79427E-06 -5.28317E-06 + -4.93662E-06 -4.04873E-06 -2.96454E-06 -1.95677E-06 -1.17133E-06 -6.38432E-07 + -3.17730E-07 -1.44675E-07 -6.03641E-08 -2.31060E-08 -8.12134E-09 -2.62306E-09 + -7.78979E-10 -2.12810E-10 -5.35041E-11 -1.23839E-11 + 1.68628E-11 7.28548E-11 2.89777E-10 1.06071E-09 3.57174E-09 1.10586E-08 + 3.14626E-08 8.21958E-08 1.96999E-07 4.32643E-07 8.69332E-07 1.59496E-06 + 2.66447E-06 4.03671E-06 5.51303E-06 6.72204E-06 7.19391E-06 6.52821E-06 + 4.59462E-06 1.65875E-06 -1.65875E-06 -4.59462E-06 -6.52821E-06 -7.19391E-06 + -6.72204E-06 -5.51303E-06 -4.03671E-06 -2.66447E-06 -1.59496E-06 -8.69332E-07 + -4.32643E-07 -1.96999E-07 -8.21958E-08 -3.14626E-08 -1.10586E-08 -3.57174E-09 + -1.06071E-09 -2.89777E-10 -7.28548E-11 -1.68628E-11 + 2.08836E-11 9.02266E-11 3.58873E-10 1.31363E-09 4.42340E-09 1.36954E-08 + 3.89647E-08 1.01795E-07 2.43972E-07 5.35804E-07 1.07662E-06 1.97527E-06 + 3.29980E-06 4.99925E-06 6.82758E-06 8.32488E-06 8.90927E-06 8.08483E-06 + 5.69018E-06 2.05427E-06 -2.05427E-06 -5.69018E-06 -8.08483E-06 -8.90927E-06 + -8.32488E-06 -6.82758E-06 -4.99925E-06 -3.29980E-06 -1.97527E-06 -1.07662E-06 + -5.35804E-07 -2.43972E-07 -1.01795E-07 -3.89647E-08 -1.36954E-08 -4.42340E-09 + -1.31363E-09 -3.58873E-10 -9.02266E-11 -2.08836E-11 + 2.38249E-11 1.02934E-10 4.09417E-10 1.49865E-09 5.04641E-09 1.56243E-08 + 4.44527E-08 1.16132E-07 2.78334E-07 6.11269E-07 1.22825E-06 2.25348E-06 + 3.76455E-06 5.70336E-06 7.78920E-06 9.49738E-06 1.01641E-05 9.22352E-06 + 6.49161E-06 2.34360E-06 -2.34360E-06 -6.49161E-06 -9.22352E-06 -1.01641E-05 + -9.49738E-06 -7.78920E-06 -5.70336E-06 -3.76455E-06 -2.25348E-06 -1.22825E-06 + -6.11269E-07 -2.78334E-07 -1.16132E-07 -4.44527E-08 -1.56243E-08 -5.04641E-09 + -1.49865E-09 -4.09417E-10 -1.02934E-10 -2.38249E-11 + 2.53484E-11 1.09516E-10 4.35596E-10 1.59447E-09 5.36908E-09 1.66234E-08 + 4.72950E-08 1.23558E-07 2.96131E-07 6.50354E-07 1.30679E-06 2.39757E-06 + 4.00526E-06 6.06804E-06 8.28726E-06 1.01047E-05 1.08140E-05 9.81329E-06 + 6.90669E-06 2.49345E-06 -2.49345E-06 -6.90669E-06 -9.81329E-06 -1.08140E-05 + -1.01047E-05 -8.28726E-06 -6.06804E-06 -4.00526E-06 -2.39757E-06 -1.30679E-06 + -6.50354E-07 -2.96131E-07 -1.23558E-07 -4.72950E-08 -1.66234E-08 -5.36908E-09 + -1.59447E-09 -4.35596E-10 -1.09516E-10 -2.53484E-11 + 2.53484E-11 1.09516E-10 4.35596E-10 1.59447E-09 5.36908E-09 1.66234E-08 + 4.72950E-08 1.23558E-07 2.96131E-07 6.50354E-07 1.30679E-06 2.39757E-06 + 4.00526E-06 6.06804E-06 8.28726E-06 1.01047E-05 1.08140E-05 9.81329E-06 + 6.90669E-06 2.49345E-06 -2.49345E-06 -6.90669E-06 -9.81329E-06 -1.08140E-05 + -1.01047E-05 -8.28726E-06 -6.06804E-06 -4.00526E-06 -2.39757E-06 -1.30679E-06 + -6.50354E-07 -2.96131E-07 -1.23558E-07 -4.72950E-08 -1.66234E-08 -5.36908E-09 + -1.59447E-09 -4.35596E-10 -1.09516E-10 -2.53484E-11 + 2.38249E-11 1.02934E-10 4.09417E-10 1.49865E-09 5.04641E-09 1.56243E-08 + 4.44527E-08 1.16132E-07 2.78334E-07 6.11269E-07 1.22825E-06 2.25348E-06 + 3.76455E-06 5.70336E-06 7.78920E-06 9.49738E-06 1.01641E-05 9.22352E-06 + 6.49161E-06 2.34360E-06 -2.34360E-06 -6.49161E-06 -9.22352E-06 -1.01641E-05 + -9.49738E-06 -7.78920E-06 -5.70336E-06 -3.76455E-06 -2.25348E-06 -1.22825E-06 + -6.11269E-07 -2.78334E-07 -1.16132E-07 -4.44527E-08 -1.56243E-08 -5.04641E-09 + -1.49865E-09 -4.09417E-10 -1.02934E-10 -2.38249E-11 + 2.08836E-11 9.02266E-11 3.58873E-10 1.31363E-09 4.42340E-09 1.36954E-08 + 3.89647E-08 1.01795E-07 2.43972E-07 5.35804E-07 1.07662E-06 1.97527E-06 + 3.29980E-06 4.99925E-06 6.82758E-06 8.32488E-06 8.90927E-06 8.08483E-06 + 5.69018E-06 2.05427E-06 -2.05427E-06 -5.69018E-06 -8.08483E-06 -8.90927E-06 + -8.32488E-06 -6.82758E-06 -4.99925E-06 -3.29980E-06 -1.97527E-06 -1.07662E-06 + -5.35804E-07 -2.43972E-07 -1.01795E-07 -3.89647E-08 -1.36954E-08 -4.42340E-09 + -1.31363E-09 -3.58873E-10 -9.02266E-11 -2.08836E-11 + 1.68628E-11 7.28548E-11 2.89777E-10 1.06071E-09 3.57174E-09 1.10586E-08 + 3.14626E-08 8.21958E-08 1.96999E-07 4.32643E-07 8.69332E-07 1.59496E-06 + 2.66447E-06 4.03671E-06 5.51303E-06 6.72204E-06 7.19391E-06 6.52821E-06 + 4.59462E-06 1.65875E-06 -1.65875E-06 -4.59462E-06 -6.52821E-06 -7.19391E-06 + -6.72204E-06 -5.51303E-06 -4.03671E-06 -2.66447E-06 -1.59496E-06 -8.69332E-07 + -4.32643E-07 -1.96999E-07 -8.21958E-08 -3.14626E-08 -1.10586E-08 -3.57174E-09 + -1.06071E-09 -2.89777E-10 -7.28548E-11 -1.68628E-11 + 1.23839E-11 5.35041E-11 2.12810E-10 7.78979E-10 2.62306E-09 8.12134E-09 + 2.31060E-08 6.03641E-08 1.44675E-07 3.17730E-07 6.38432E-07 1.17133E-06 + 1.95677E-06 2.96454E-06 4.04873E-06 4.93662E-06 5.28317E-06 4.79427E-06 + 3.37426E-06 1.21817E-06 -1.21817E-06 -3.37426E-06 -4.79427E-06 -5.28317E-06 + -4.93662E-06 -4.04873E-06 -2.96454E-06 -1.95677E-06 -1.17133E-06 -6.38432E-07 + -3.17730E-07 -1.44675E-07 -6.03641E-08 -2.31060E-08 -8.12134E-09 -2.62306E-09 + -7.78979E-10 -2.12810E-10 -5.35041E-11 -1.23839E-11 + 8.18386E-12 3.53579E-11 1.40635E-10 5.14785E-10 1.73344E-09 5.36695E-09 + 1.52695E-08 3.98914E-08 9.56077E-08 2.09971E-07 4.21905E-07 7.74069E-07 + 1.29312E-06 1.95910E-06 2.67559E-06 3.26235E-06 3.49136E-06 3.16828E-06 + 2.22987E-06 8.05025E-07 -8.05025E-07 -2.22987E-06 -3.16828E-06 -3.49136E-06 + -3.26235E-06 -2.67559E-06 -1.95910E-06 -1.29312E-06 -7.74069E-07 -4.21905E-07 + -2.09971E-07 -9.56077E-08 -3.98914E-08 -1.52695E-08 -5.36695E-09 -1.73344E-09 + -5.14785E-10 -1.40635E-10 -3.53579E-11 -8.18386E-12 + 4.82869E-12 2.08621E-11 8.29781E-11 3.03736E-10 1.02277E-09 3.16664E-09 + 9.00938E-09 2.35369E-08 5.64110E-08 1.23888E-07 2.48935E-07 4.56721E-07 + 7.62975E-07 1.15592E-06 1.57867E-06 1.92487E-06 2.05999E-06 1.86936E-06 + 1.31568E-06 4.74986E-07 -4.74986E-07 -1.31568E-06 -1.86936E-06 -2.05999E-06 + -1.92487E-06 -1.57867E-06 -1.15592E-06 -7.62975E-07 -4.56721E-07 -2.48935E-07 + -1.23888E-07 -5.64110E-08 -2.35369E-08 -9.00938E-09 -3.16664E-09 -1.02277E-09 + -3.03736E-10 -8.29781E-11 -2.08621E-11 -4.82869E-12 + 2.53030E-12 1.09320E-11 4.34816E-11 1.59162E-10 5.35947E-10 1.65936E-09 + 4.72103E-09 1.23337E-08 2.95601E-08 6.49189E-08 1.30445E-07 2.39328E-07 + 3.99809E-07 6.05717E-07 8.27242E-07 1.00866E-06 1.07946E-06 9.79571E-07 + 6.89432E-07 2.48899E-07 -2.48899E-07 -6.89432E-07 -9.79571E-07 -1.07946E-06 + -1.00866E-06 -8.27242E-07 -6.05717E-07 -3.99809E-07 -2.39328E-07 -1.30445E-07 + -6.49189E-08 -2.95601E-08 -1.23337E-08 -4.72103E-09 -1.65936E-09 -5.35947E-10 + -1.59162E-10 -4.34816E-11 -1.09320E-11 -2.53030E-12 + 1.17356E-12 5.07031E-12 2.01669E-11 7.38199E-11 2.48574E-10 7.69618E-10 + 2.18963E-09 5.72040E-09 1.37101E-08 3.01097E-08 6.05009E-08 1.11001E-07 + 1.85433E-07 2.80934E-07 3.83678E-07 4.67819E-07 5.00659E-07 4.54329E-07 + 3.19761E-07 1.15440E-07 -1.15440E-07 -3.19761E-07 -4.54329E-07 -5.00659E-07 + -4.67819E-07 -3.83678E-07 -2.80934E-07 -1.85433E-07 -1.11001E-07 -6.05009E-08 + -3.01097E-08 -1.37101E-08 -5.72040E-09 -2.18963E-09 -7.69618E-10 -2.48574E-10 + -7.38199E-11 -2.01669E-11 -5.07031E-12 -1.17356E-12 + 4.80740E-13 2.07701E-12 8.26123E-12 3.02397E-11 1.01826E-10 3.15268E-10 + 8.96966E-10 2.34332E-09 5.61623E-09 1.23342E-08 2.47837E-08 4.54707E-08 + 7.59611E-08 1.15082E-07 1.57171E-07 1.91638E-07 2.05091E-07 1.86112E-07 + 1.30988E-07 4.72891E-08 -4.72891E-08 -1.30988E-07 -1.86112E-07 -2.05091E-07 + -1.91638E-07 -1.57171E-07 -1.15082E-07 -7.59611E-08 -4.54707E-08 -2.47837E-08 + -1.23342E-08 -5.61623E-09 -2.34332E-09 -8.96966E-10 -3.15268E-10 -1.01826E-10 + -3.02397E-11 -8.26123E-12 -2.07701E-12 -4.80740E-13 + 1.73708E-13 7.50497E-13 2.98507E-12 1.09267E-11 3.67934E-11 1.13917E-10 + 3.24105E-10 8.46722E-10 2.02934E-09 4.45677E-09 8.95522E-09 1.64301E-08 + 2.74474E-08 4.15833E-08 5.67912E-08 6.92456E-08 7.41065E-08 6.72488E-08 + 4.73304E-08 1.70872E-08 -1.70872E-08 -4.73304E-08 -6.72488E-08 -7.41065E-08 + -6.92456E-08 -5.67912E-08 -4.15833E-08 -2.74474E-08 -1.64301E-08 -8.95522E-09 + -4.45677E-09 -2.02934E-09 -8.46722E-10 -3.24105E-10 -1.13917E-10 -3.67934E-11 + -1.09267E-11 -2.98507E-12 -7.50497E-13 -1.73708E-13 + 5.53215E-14 2.39014E-13 9.50667E-13 3.47986E-12 1.17177E-11 3.62797E-11 + 1.03219E-10 2.69659E-10 6.46291E-10 1.41936E-09 2.85200E-09 5.23257E-09 + 8.74128E-09 1.32432E-08 1.80865E-08 2.20529E-08 2.36010E-08 2.14170E-08 + 1.50735E-08 5.44183E-09 -5.44183E-09 -1.50735E-08 -2.14170E-08 -2.36010E-08 + -2.20529E-08 -1.80865E-08 -1.32432E-08 -8.74128E-09 -5.23257E-09 -2.85200E-09 + -1.41936E-09 -6.46291E-10 -2.69659E-10 -1.03219E-10 -3.62797E-11 -1.17177E-11 + -3.47986E-12 -9.50667E-13 -2.39014E-13 -5.53215E-14 + 1.55212E-14 6.70586E-14 2.66723E-13 9.76323E-13 3.28758E-12 1.01788E-11 + 2.89595E-11 7.56565E-11 1.81326E-10 3.98223E-10 8.00170E-10 1.46807E-09 + 2.45249E-09 3.71556E-09 5.07443E-09 6.18725E-09 6.62158E-09 6.00884E-09 + 4.22908E-09 1.52678E-09 -1.52678E-09 -4.22908E-09 -6.00884E-09 -6.62158E-09 + -6.18725E-09 -5.07443E-09 -3.71556E-09 -2.45249E-09 -1.46807E-09 -8.00170E-10 + -3.98223E-10 -1.81326E-10 -7.56565E-11 -2.89595E-11 -1.01788E-11 -3.28758E-12 + -9.76323E-13 -2.66723E-13 -6.70586E-14 -1.55212E-14 + 3.83525E-15 1.65700E-14 6.59064E-14 2.41246E-13 8.12350E-13 2.51514E-12 + 7.15581E-12 1.86945E-11 4.48051E-11 9.83996E-11 1.97719E-10 3.62756E-10 + 6.06002E-10 9.18104E-10 1.25387E-09 1.52885E-09 1.63617E-09 1.48477E-09 + 1.04499E-09 3.77263E-10 -3.77263E-10 -1.04499E-09 -1.48477E-09 -1.63617E-09 + -1.52885E-09 -1.25387E-09 -9.18104E-10 -6.06002E-10 -3.62756E-10 -1.97719E-10 + -9.83996E-11 -4.48051E-11 -1.86945E-11 -7.15581E-12 -2.51514E-12 -8.12350E-13 + -2.41246E-13 -6.59064E-14 -1.65700E-14 -3.83525E-15 + 8.34492E-16 3.60538E-15 1.43402E-14 5.24916E-14 1.76755E-13 5.47257E-13 + 1.55700E-12 4.06764E-12 9.74893E-12 2.14103E-11 4.30208E-11 7.89303E-11 + 1.31857E-10 1.99766E-10 2.72824E-10 3.32655E-10 3.56007E-10 3.23063E-10 + 2.27375E-10 8.20868E-11 -8.20868E-11 -2.27375E-10 -3.23063E-10 -3.56007E-10 + -3.32655E-10 -2.72824E-10 -1.99766E-10 -1.31857E-10 -7.89303E-11 -4.30208E-11 + -2.14103E-11 -9.74893E-12 -4.06764E-12 -1.55700E-12 -5.47257E-13 -1.76755E-13 + -5.24916E-14 -1.43402E-14 -3.60538E-15 -8.34492E-16 + 1.59871E-16 6.90714E-16 2.74729E-15 1.00563E-14 3.38625E-14 1.04843E-13 + 2.98288E-13 7.79273E-13 1.86769E-12 4.10175E-12 8.24187E-12 1.51214E-11 + 2.52610E-11 3.82708E-11 5.22673E-11 6.37296E-11 6.82033E-11 6.18919E-11 + 4.35602E-11 1.57261E-11 -1.57261E-11 -4.35602E-11 -6.18919E-11 -6.82033E-11 + -6.37296E-11 -5.22673E-11 -3.82708E-11 -2.52610E-11 -1.51214E-11 -8.24187E-12 + -4.10175E-12 -1.86769E-12 -7.79273E-13 -2.98288E-13 -1.04843E-13 -3.38625E-14 + -1.00563E-14 -2.74729E-15 -6.90714E-16 -1.59871E-16 + 2.69655E-17 1.16503E-16 4.63386E-16 1.69619E-15 5.71161E-15 1.76839E-14 + 5.03123E-14 1.31440E-13 3.15023E-13 6.91844E-13 1.39016E-12 2.55052E-12 + 4.26078E-12 6.45516E-12 8.81595E-12 1.07493E-11 1.15039E-11 1.04393E-11 + 7.34731E-12 2.65252E-12 -2.65252E-12 -7.34731E-12 -1.04393E-11 -1.15039E-11 + -1.07493E-11 -8.81595E-12 -6.45516E-12 -4.26078E-12 -2.55052E-12 -1.39016E-12 + -6.91844E-13 -3.15023E-13 -1.31440E-13 -5.03123E-14 -1.76839E-14 -5.71161E-15 + -1.69619E-15 -4.63386E-16 -1.16503E-16 -2.69655E-17 + 4.00427E-18 1.73002E-17 6.88110E-17 2.51878E-16 8.48152E-16 2.62599E-15 + 7.47118E-15 1.95184E-14 4.67798E-14 1.02736E-13 2.06433E-13 3.78743E-13 + 6.32710E-13 9.58566E-13 1.30913E-12 1.59623E-12 1.70828E-12 1.55020E-12 + 1.09105E-12 3.93890E-13 -3.93890E-13 -1.09105E-12 -1.55020E-12 -1.70828E-12 + -1.59623E-12 -1.30913E-12 -9.58566E-13 -6.32710E-13 -3.78743E-13 -2.06433E-13 + -1.02736E-13 -4.67798E-14 -1.95184E-14 -7.47118E-15 -2.62599E-15 -8.48152E-16 + -2.51878E-16 -6.88110E-17 -1.73002E-17 -4.00427E-18 + 5.23487E-19 2.26170E-18 8.99580E-18 3.29286E-17 1.10881E-16 3.43301E-16 + 9.76723E-16 2.55168E-15 6.11561E-15 1.34309E-14 2.69874E-14 4.95139E-14 + 8.27155E-14 1.25315E-13 1.71146E-13 2.08678E-13 2.23327E-13 2.02661E-13 + 1.42635E-13 5.14940E-14 -5.14940E-14 -1.42635E-13 -2.02661E-13 -2.23327E-13 + -2.08678E-13 -1.71146E-13 -1.25315E-13 -8.27155E-14 -4.95139E-14 -2.69874E-14 + -1.34309E-14 -6.11561E-15 -2.55168E-15 -9.76723E-16 -3.43301E-16 -1.10881E-16 + -3.29286E-17 -8.99580E-18 -2.26170E-18 -5.23487E-19 + 6.02489E-20 2.60302E-19 1.03534E-18 3.78980E-18 1.27614E-17 3.95110E-17 + 1.12413E-16 2.93677E-16 7.03856E-16 1.54579E-15 3.10603E-15 5.69863E-15 + 9.51985E-15 1.44227E-14 1.96975E-14 2.40171E-14 2.57031E-14 2.33246E-14 + 1.64161E-14 5.92653E-15 -5.92653E-15 -1.64161E-14 -2.33246E-14 -2.57031E-14 + -2.40171E-14 -1.96975E-14 -1.44227E-14 -9.51985E-15 -5.69863E-15 -3.10603E-15 + -1.54579E-15 -7.03856E-16 -2.93677E-16 -1.12413E-16 -3.95110E-17 -1.27614E-17 + -3.78980E-18 -1.03534E-18 -2.60302E-19 -6.02489E-20 + 1.08998E-20 4.70918E-20 1.87306E-19 6.85621E-19 2.30870E-18 7.14802E-18 + 2.03368E-17 5.31297E-17 1.27336E-16 2.79651E-16 5.61918E-16 1.03095E-15 + 1.72226E-15 2.60925E-15 3.56351E-15 4.34499E-15 4.65000E-15 4.21970E-15 + 2.96987E-15 1.07218E-15 -1.07218E-15 -2.96987E-15 -4.21970E-15 -4.65000E-15 + -4.34499E-15 -3.56351E-15 -2.60925E-15 -1.72226E-15 -1.03095E-15 -5.61918E-16 + -2.79651E-16 -1.27336E-16 -5.31297E-17 -2.03368E-17 -7.14802E-18 -2.30870E-18 + -6.85621E-19 -1.87306E-19 -4.70918E-20 -1.08998E-20 + 9.47050E-20 4.09168E-19 1.62745E-18 5.95718E-18 2.00596E-17 6.21073E-17 + 1.76701E-16 4.61629E-16 1.10639E-15 2.42981E-15 4.88235E-15 8.95766E-15 + 1.49642E-14 2.26710E-14 3.09624E-14 3.77524E-14 4.04026E-14 3.66638E-14 + 2.58044E-14 9.31589E-15 -9.31589E-15 -2.58044E-14 -3.66638E-14 -4.04026E-14 + -3.77524E-14 -3.09624E-14 -2.26710E-14 -1.49642E-14 -8.95766E-15 -4.88235E-15 + -2.42981E-15 -1.10639E-15 -4.61629E-16 -1.76701E-16 -6.21073E-17 -2.00596E-17 + -5.95718E-18 -1.62745E-18 -4.09168E-19 -9.47050E-20 + 7.24421E-19 3.12982E-18 1.24487E-17 4.55678E-17 1.53441E-16 4.75073E-16 + 1.35163E-15 3.53111E-15 8.46302E-15 1.85862E-14 3.73463E-14 6.85192E-14 + 1.14465E-13 1.73416E-13 2.36838E-13 2.88777E-13 3.09049E-13 2.80450E-13 + 1.97384E-13 7.12594E-14 -7.12594E-14 -1.97384E-13 -2.80450E-13 -3.09049E-13 + -2.88777E-13 -2.36838E-13 -1.73416E-13 -1.14465E-13 -6.85192E-14 -3.73463E-14 + -1.85862E-14 -8.46302E-15 -3.53111E-15 -1.35163E-15 -4.75073E-16 -1.53441E-16 + -4.55678E-17 -1.24487E-17 -3.12982E-18 -7.24421E-19 + 4.87838E-18 2.10768E-17 8.38321E-17 3.06862E-16 1.03330E-15 3.19923E-15 + 9.10210E-15 2.37791E-14 5.69915E-14 1.25163E-13 2.51497E-13 4.61421E-13 + 7.70827E-13 1.16782E-12 1.59491E-12 1.94468E-12 2.08119E-12 1.88860E-12 + 1.32922E-12 4.79874E-13 -4.79874E-13 -1.32922E-12 -1.88860E-12 -2.08119E-12 + -1.94468E-12 -1.59491E-12 -1.16782E-12 -7.70827E-13 -4.61421E-13 -2.51497E-13 + -1.25163E-13 -5.69915E-14 -2.37791E-14 -9.10210E-15 -3.19923E-15 -1.03330E-15 + -3.06862E-16 -8.38321E-17 -2.10768E-17 -4.87838E-18 + 2.89226E-17 1.24958E-16 4.97017E-16 1.81930E-15 6.12614E-15 1.89673E-14 + 5.39638E-14 1.40980E-13 3.37887E-13 7.42057E-13 1.49105E-12 2.73564E-12 + 4.57002E-12 6.92366E-12 9.45579E-12 1.15295E-11 1.23388E-11 1.11970E-11 + 7.88056E-12 2.84504E-12 -2.84504E-12 -7.88056E-12 -1.11970E-11 -1.23388E-11 + -1.15295E-11 -9.45579E-12 -6.92366E-12 -4.57002E-12 -2.73564E-12 -1.49105E-12 + -7.42057E-13 -3.37887E-13 -1.40980E-13 -5.39638E-14 -1.89673E-14 -6.12614E-15 + -1.81930E-15 -4.97017E-16 -1.24958E-16 -2.89226E-17 + 1.50970E-16 6.52257E-16 2.59432E-15 9.49636E-15 3.19772E-14 9.90055E-14 + 2.81680E-13 7.35886E-13 1.76370E-12 3.87338E-12 7.78298E-12 1.42794E-11 + 2.38545E-11 3.61400E-11 4.93572E-11 6.01813E-11 6.44059E-11 5.84460E-11 + 4.11349E-11 1.48505E-11 -1.48505E-11 -4.11349E-11 -5.84460E-11 -6.44059E-11 + -6.01813E-11 -4.93572E-11 -3.61400E-11 -2.38545E-11 -1.42794E-11 -7.78298E-12 + -3.87338E-12 -1.76370E-12 -7.35886E-13 -2.81680E-13 -9.90055E-14 -3.19772E-14 + -9.49636E-15 -2.59432E-15 -6.52257E-16 -1.50970E-16 + 6.93842E-16 2.99771E-15 1.19233E-14 4.36444E-14 1.46964E-13 4.55020E-13 + 1.29457E-12 3.38206E-12 8.10579E-12 1.78017E-11 3.57698E-11 6.56269E-11 + 1.09633E-10 1.66096E-10 2.26841E-10 2.76587E-10 2.96003E-10 2.68612E-10 + 1.89052E-10 6.82515E-11 -6.82515E-11 -1.89052E-10 -2.68612E-10 -2.96003E-10 + -2.76587E-10 -2.26841E-10 -1.66096E-10 -1.09633E-10 -6.56269E-11 -3.57698E-11 + -1.78017E-11 -8.10579E-12 -3.38206E-12 -1.29457E-12 -4.55020E-13 -1.46964E-13 + -4.36444E-14 -1.19233E-14 -2.99771E-15 -6.93842E-16 + 2.80798E-15 1.21317E-14 4.82534E-14 1.76629E-13 5.94763E-13 1.84146E-12 + 5.23913E-12 1.36872E-11 3.28041E-11 7.20433E-11 1.44760E-10 2.65592E-10 + 4.43685E-10 6.72190E-10 9.18025E-10 1.11935E-09 1.19792E-09 1.08707E-09 + 7.65092E-10 2.76213E-10 -2.76213E-10 -7.65092E-10 -1.08707E-09 -1.19792E-09 + -1.11935E-09 -9.18025E-10 -6.72190E-10 -4.43685E-10 -2.65592E-10 -1.44760E-10 + -7.20433E-11 -3.28041E-11 -1.36872E-11 -5.23913E-12 -1.84146E-12 -5.94763E-13 + -1.76629E-13 -4.82534E-14 -1.21317E-14 -2.80798E-15 + 1.00083E-14 4.32404E-14 1.71987E-13 6.29548E-13 2.11988E-12 6.56343E-12 + 1.86736E-11 4.87845E-11 1.16922E-10 2.56780E-10 5.15962E-10 9.46635E-10 + 1.58140E-09 2.39585E-09 3.27207E-09 3.98964E-09 4.26970E-09 3.87459E-09 + 2.72698E-09 9.84493E-10 -9.84493E-10 -2.72698E-09 -3.87459E-09 -4.26970E-09 + -3.98964E-09 -3.27207E-09 -2.39585E-09 -1.58140E-09 -9.46635E-10 -5.15962E-10 + -2.56780E-10 -1.16922E-10 -4.87845E-11 -1.86736E-11 -6.56343E-12 -2.11988E-12 + -6.29548E-13 -1.71987E-13 -4.32404E-14 -1.00083E-14 + 3.14259E-14 1.35774E-13 5.40035E-13 1.97677E-12 6.65638E-12 2.06090E-11 + 5.86345E-11 1.53182E-10 3.67132E-10 8.06284E-10 1.62011E-09 2.97241E-09 + 4.96557E-09 7.52292E-09 1.02742E-08 1.25274E-08 1.34068E-08 1.21661E-08 + 8.56265E-09 3.09128E-09 -3.09128E-09 -8.56265E-09 -1.21661E-08 -1.34068E-08 + -1.25274E-08 -1.02742E-08 -7.52292E-09 -4.96557E-09 -2.97241E-09 -1.62011E-09 + -8.06284E-10 -3.67132E-10 -1.53182E-10 -5.86345E-11 -2.06090E-11 -6.65638E-12 + -1.97677E-12 -5.40035E-13 -1.35774E-13 -3.14259E-14 + 8.69717E-14 3.75756E-13 1.49456E-12 5.47073E-12 1.84216E-11 5.70358E-11 + 1.62272E-10 4.23934E-10 1.01604E-09 2.23140E-09 4.48367E-09 8.22620E-09 + 1.37423E-08 2.08198E-08 2.84341E-08 3.46697E-08 3.71034E-08 3.36699E-08 + 2.36973E-08 8.55518E-09 -8.55518E-09 -2.36973E-08 -3.36699E-08 -3.71034E-08 + -3.46697E-08 -2.84341E-08 -2.08198E-08 -1.37423E-08 -8.22620E-09 -4.48367E-09 + -2.23140E-09 -1.01604E-09 -4.23934E-10 -1.62272E-10 -5.70358E-11 -1.84216E-11 + -5.47073E-12 -1.49456E-12 -3.75756E-13 -8.69717E-14 + 2.12311E-13 9.17280E-13 3.64844E-12 1.33549E-11 4.49701E-11 1.39233E-10 + 3.96131E-10 1.03489E-09 2.48032E-09 5.44720E-09 1.09453E-08 2.00814E-08 + 3.35471E-08 5.08244E-08 6.94120E-08 8.46341E-08 9.05752E-08 8.21936E-08 + 5.78487E-08 2.08845E-08 -2.08845E-08 -5.78487E-08 -8.21936E-08 -9.05752E-08 + -8.46341E-08 -6.94120E-08 -5.08244E-08 -3.35471E-08 -2.00814E-08 -1.09453E-08 + -5.44720E-09 -2.48032E-09 -1.03489E-09 -3.96131E-10 -1.39233E-10 -4.49701E-11 + -1.33549E-11 -3.64844E-12 -9.17280E-13 -2.12311E-13 + 4.57761E-13 1.97773E-12 7.86635E-12 2.87943E-11 9.69592E-11 3.00198E-10 + 8.54092E-10 2.23131E-09 5.34778E-09 1.17446E-08 2.35991E-08 4.32972E-08 + 7.23303E-08 1.09582E-07 1.49658E-07 1.82478E-07 1.95288E-07 1.77216E-07 + 1.24727E-07 4.50288E-08 -4.50288E-08 -1.24727E-07 -1.77216E-07 -1.95288E-07 + -1.82478E-07 -1.49658E-07 -1.09582E-07 -7.23303E-08 -4.32972E-08 -2.35991E-08 + -1.17446E-08 -5.34778E-09 -2.23131E-09 -8.54092E-10 -3.00198E-10 -9.69592E-11 + -2.87943E-11 -7.86635E-12 -1.97773E-12 -4.57761E-13 + 8.73568E-13 3.77421E-12 1.50117E-11 5.49496E-11 1.85032E-10 5.72883E-10 + 1.62991E-09 4.25811E-09 1.02054E-08 2.24128E-08 4.50353E-08 8.26263E-08 + 1.38031E-07 2.09120E-07 2.85600E-07 3.48232E-07 3.72677E-07 3.38190E-07 + 2.38022E-07 8.59306E-08 -8.59306E-08 -2.38022E-07 -3.38190E-07 -3.72677E-07 + -3.48232E-07 -2.85600E-07 -2.09120E-07 -1.38031E-07 -8.26263E-08 -4.50353E-08 + -2.24128E-08 -1.02054E-08 -4.25811E-09 -1.62991E-09 -5.72883E-10 -1.85032E-10 + -5.49496E-11 -1.50117E-11 -3.77421E-12 -8.73568E-13 + 1.48056E-12 6.39668E-12 2.54425E-11 9.31308E-11 3.13600E-10 9.70946E-10 + 2.76243E-09 7.21683E-09 1.72966E-08 3.79862E-08 7.63277E-08 1.40038E-07 + 2.33941E-07 3.54425E-07 4.84046E-07 5.90198E-07 6.31629E-07 5.73179E-07 + 4.03410E-07 1.45639E-07 -1.45639E-07 -4.03410E-07 -5.73179E-07 -6.31629E-07 + -5.90198E-07 -4.84046E-07 -3.54425E-07 -2.33941E-07 -1.40038E-07 -7.63277E-08 + -3.79862E-08 -1.72966E-08 -7.21683E-09 -2.76243E-09 -9.70946E-10 -3.13600E-10 + -9.31308E-11 -2.54425E-11 -6.39668E-12 -1.48056E-12 + 2.24040E-12 9.67953E-12 3.85000E-11 1.40927E-10 4.74544E-10 1.46925E-09 + 4.18015E-09 1.09206E-08 2.61734E-08 5.74812E-08 1.15500E-07 2.11908E-07 + 3.54003E-07 5.36320E-07 7.32465E-07 8.93095E-07 9.55789E-07 8.67342E-07 + 6.10444E-07 2.20382E-07 -2.20382E-07 -6.10444E-07 -8.67342E-07 -9.55789E-07 + -8.93095E-07 -7.32465E-07 -5.36320E-07 -3.54003E-07 -2.11908E-07 -1.15500E-07 + -5.74812E-08 -2.61734E-08 -1.09206E-08 -4.18015E-09 -1.46925E-09 -4.74544E-10 + -1.40927E-10 -3.85000E-11 -9.67953E-12 -2.24040E-12 + 3.05068E-12 1.31803E-11 5.24241E-11 1.91895E-10 6.46170E-10 2.00063E-09 + 5.69197E-09 1.48702E-08 3.56395E-08 7.82703E-08 1.57273E-07 2.88548E-07 + 4.82034E-07 7.30290E-07 9.97373E-07 1.21610E-06 1.30147E-06 1.18103E-06 + 8.31222E-07 3.00087E-07 -3.00087E-07 -8.31222E-07 -1.18103E-06 -1.30147E-06 + -1.21610E-06 -9.97373E-07 -7.30290E-07 -4.82034E-07 -2.88548E-07 -1.57273E-07 + -7.82703E-08 -3.56395E-08 -1.48702E-08 -5.69197E-09 -2.00063E-09 -6.46170E-10 + -1.91895E-10 -5.24241E-11 -1.31803E-11 -3.05068E-12 + 3.77810E-12 1.63231E-11 6.49244E-11 2.37652E-10 8.00247E-10 2.47767E-09 + 7.04919E-09 1.84159E-08 4.41375E-08 9.69335E-08 1.94774E-07 3.57351E-07 + 5.96973E-07 9.04424E-07 1.23519E-06 1.50607E-06 1.61179E-06 1.46264E-06 + 1.02942E-06 3.71642E-07 -3.71642E-07 -1.02942E-06 -1.46264E-06 -1.61179E-06 + -1.50607E-06 -1.23519E-06 -9.04424E-07 -5.96973E-07 -3.57351E-07 -1.94774E-07 + -9.69335E-08 -4.41375E-08 -1.84159E-08 -7.04919E-09 -2.47767E-09 -8.00247E-10 + -2.37652E-10 -6.49244E-11 -1.63231E-11 -3.77810E-12 + 4.31022E-12 1.86221E-11 7.40686E-11 2.71123E-10 9.12956E-10 2.82663E-09 + 8.04202E-09 2.10097E-08 5.03540E-08 1.10586E-07 2.22206E-07 4.07681E-07 + 6.81053E-07 1.03181E-06 1.40916E-06 1.71819E-06 1.83880E-06 1.66865E-06 + 1.17441E-06 4.23985E-07 -4.23985E-07 -1.17441E-06 -1.66865E-06 -1.83880E-06 + -1.71819E-06 -1.40916E-06 -1.03181E-06 -6.81053E-07 -4.07681E-07 -2.22206E-07 + -1.10586E-07 -5.03540E-08 -2.10097E-08 -8.04202E-09 -2.82663E-09 -9.12956E-10 + -2.71123E-10 -7.40686E-11 -1.86221E-11 -4.31022E-12 + 4.58582E-12 1.98128E-11 7.88046E-11 2.88460E-10 9.71332E-10 3.00737E-09 + 8.55625E-09 2.23531E-08 5.35737E-08 1.17657E-07 2.36414E-07 4.33749E-07 + 7.24600E-07 1.09778E-06 1.49927E-06 1.82805E-06 1.95638E-06 1.77534E-06 + 1.24950E-06 4.51096E-07 -4.51096E-07 -1.24950E-06 -1.77534E-06 -1.95638E-06 + -1.82805E-06 -1.49927E-06 -1.09778E-06 -7.24600E-07 -4.33749E-07 -2.36414E-07 + -1.17657E-07 -5.35737E-08 -2.23531E-08 -8.55625E-09 -3.00737E-09 -9.71332E-10 + -2.88460E-10 -7.88046E-11 -1.98128E-11 -4.58582E-12 + 4.58582E-12 1.98128E-11 7.88046E-11 2.88460E-10 9.71332E-10 3.00737E-09 + 8.55625E-09 2.23531E-08 5.35737E-08 1.17657E-07 2.36414E-07 4.33749E-07 + 7.24600E-07 1.09778E-06 1.49927E-06 1.82805E-06 1.95638E-06 1.77534E-06 + 1.24950E-06 4.51096E-07 -4.51096E-07 -1.24950E-06 -1.77534E-06 -1.95638E-06 + -1.82805E-06 -1.49927E-06 -1.09778E-06 -7.24600E-07 -4.33749E-07 -2.36414E-07 + -1.17657E-07 -5.35737E-08 -2.23531E-08 -8.55625E-09 -3.00737E-09 -9.71332E-10 + -2.88460E-10 -7.88046E-11 -1.98128E-11 -4.58582E-12 + 4.31022E-12 1.86221E-11 7.40686E-11 2.71123E-10 9.12956E-10 2.82663E-09 + 8.04202E-09 2.10097E-08 5.03540E-08 1.10586E-07 2.22206E-07 4.07681E-07 + 6.81053E-07 1.03181E-06 1.40916E-06 1.71819E-06 1.83880E-06 1.66865E-06 + 1.17441E-06 4.23985E-07 -4.23985E-07 -1.17441E-06 -1.66865E-06 -1.83880E-06 + -1.71819E-06 -1.40916E-06 -1.03181E-06 -6.81053E-07 -4.07681E-07 -2.22206E-07 + -1.10586E-07 -5.03540E-08 -2.10097E-08 -8.04202E-09 -2.82663E-09 -9.12956E-10 + -2.71123E-10 -7.40686E-11 -1.86221E-11 -4.31022E-12 + 3.77810E-12 1.63231E-11 6.49244E-11 2.37652E-10 8.00247E-10 2.47767E-09 + 7.04919E-09 1.84159E-08 4.41375E-08 9.69335E-08 1.94774E-07 3.57351E-07 + 5.96973E-07 9.04424E-07 1.23519E-06 1.50607E-06 1.61179E-06 1.46264E-06 + 1.02942E-06 3.71642E-07 -3.71642E-07 -1.02942E-06 -1.46264E-06 -1.61179E-06 + -1.50607E-06 -1.23519E-06 -9.04424E-07 -5.96973E-07 -3.57351E-07 -1.94774E-07 + -9.69335E-08 -4.41375E-08 -1.84159E-08 -7.04919E-09 -2.47767E-09 -8.00247E-10 + -2.37652E-10 -6.49244E-11 -1.63231E-11 -3.77810E-12 + 3.05068E-12 1.31803E-11 5.24241E-11 1.91895E-10 6.46170E-10 2.00063E-09 + 5.69197E-09 1.48702E-08 3.56395E-08 7.82703E-08 1.57273E-07 2.88548E-07 + 4.82034E-07 7.30290E-07 9.97373E-07 1.21610E-06 1.30147E-06 1.18103E-06 + 8.31222E-07 3.00087E-07 -3.00087E-07 -8.31222E-07 -1.18103E-06 -1.30147E-06 + -1.21610E-06 -9.97373E-07 -7.30290E-07 -4.82034E-07 -2.88548E-07 -1.57273E-07 + -7.82703E-08 -3.56395E-08 -1.48702E-08 -5.69197E-09 -2.00063E-09 -6.46170E-10 + -1.91895E-10 -5.24241E-11 -1.31803E-11 -3.05068E-12 + 2.24040E-12 9.67953E-12 3.85000E-11 1.40927E-10 4.74544E-10 1.46925E-09 + 4.18015E-09 1.09206E-08 2.61734E-08 5.74812E-08 1.15500E-07 2.11908E-07 + 3.54003E-07 5.36320E-07 7.32465E-07 8.93095E-07 9.55789E-07 8.67342E-07 + 6.10444E-07 2.20382E-07 -2.20382E-07 -6.10444E-07 -8.67342E-07 -9.55789E-07 + -8.93095E-07 -7.32465E-07 -5.36320E-07 -3.54003E-07 -2.11908E-07 -1.15500E-07 + -5.74812E-08 -2.61734E-08 -1.09206E-08 -4.18015E-09 -1.46925E-09 -4.74544E-10 + -1.40927E-10 -3.85000E-11 -9.67953E-12 -2.24040E-12 + 1.48056E-12 6.39668E-12 2.54425E-11 9.31308E-11 3.13600E-10 9.70946E-10 + 2.76243E-09 7.21683E-09 1.72966E-08 3.79862E-08 7.63277E-08 1.40038E-07 + 2.33941E-07 3.54425E-07 4.84046E-07 5.90198E-07 6.31629E-07 5.73179E-07 + 4.03410E-07 1.45639E-07 -1.45639E-07 -4.03410E-07 -5.73179E-07 -6.31629E-07 + -5.90198E-07 -4.84046E-07 -3.54425E-07 -2.33941E-07 -1.40038E-07 -7.63277E-08 + -3.79862E-08 -1.72966E-08 -7.21683E-09 -2.76243E-09 -9.70946E-10 -3.13600E-10 + -9.31308E-11 -2.54425E-11 -6.39668E-12 -1.48056E-12 + 8.73568E-13 3.77421E-12 1.50117E-11 5.49496E-11 1.85032E-10 5.72883E-10 + 1.62991E-09 4.25811E-09 1.02054E-08 2.24128E-08 4.50353E-08 8.26263E-08 + 1.38031E-07 2.09120E-07 2.85600E-07 3.48232E-07 3.72677E-07 3.38190E-07 + 2.38022E-07 8.59306E-08 -8.59306E-08 -2.38022E-07 -3.38190E-07 -3.72677E-07 + -3.48232E-07 -2.85600E-07 -2.09120E-07 -1.38031E-07 -8.26263E-08 -4.50353E-08 + -2.24128E-08 -1.02054E-08 -4.25811E-09 -1.62991E-09 -5.72883E-10 -1.85032E-10 + -5.49496E-11 -1.50117E-11 -3.77421E-12 -8.73568E-13 + 4.57761E-13 1.97773E-12 7.86635E-12 2.87943E-11 9.69592E-11 3.00198E-10 + 8.54092E-10 2.23131E-09 5.34778E-09 1.17446E-08 2.35991E-08 4.32972E-08 + 7.23303E-08 1.09582E-07 1.49658E-07 1.82478E-07 1.95288E-07 1.77216E-07 + 1.24727E-07 4.50288E-08 -4.50288E-08 -1.24727E-07 -1.77216E-07 -1.95288E-07 + -1.82478E-07 -1.49658E-07 -1.09582E-07 -7.23303E-08 -4.32972E-08 -2.35991E-08 + -1.17446E-08 -5.34778E-09 -2.23131E-09 -8.54092E-10 -3.00198E-10 -9.69592E-11 + -2.87943E-11 -7.86635E-12 -1.97773E-12 -4.57761E-13 + 2.12311E-13 9.17280E-13 3.64844E-12 1.33549E-11 4.49701E-11 1.39233E-10 + 3.96131E-10 1.03489E-09 2.48032E-09 5.44720E-09 1.09453E-08 2.00814E-08 + 3.35471E-08 5.08244E-08 6.94120E-08 8.46341E-08 9.05752E-08 8.21936E-08 + 5.78487E-08 2.08845E-08 -2.08845E-08 -5.78487E-08 -8.21936E-08 -9.05752E-08 + -8.46341E-08 -6.94120E-08 -5.08244E-08 -3.35471E-08 -2.00814E-08 -1.09453E-08 + -5.44720E-09 -2.48032E-09 -1.03489E-09 -3.96131E-10 -1.39233E-10 -4.49701E-11 + -1.33549E-11 -3.64844E-12 -9.17280E-13 -2.12311E-13 + 8.69717E-14 3.75756E-13 1.49456E-12 5.47073E-12 1.84216E-11 5.70358E-11 + 1.62272E-10 4.23934E-10 1.01604E-09 2.23140E-09 4.48367E-09 8.22620E-09 + 1.37423E-08 2.08198E-08 2.84341E-08 3.46697E-08 3.71034E-08 3.36699E-08 + 2.36973E-08 8.55518E-09 -8.55518E-09 -2.36973E-08 -3.36699E-08 -3.71034E-08 + -3.46697E-08 -2.84341E-08 -2.08198E-08 -1.37423E-08 -8.22620E-09 -4.48367E-09 + -2.23140E-09 -1.01604E-09 -4.23934E-10 -1.62272E-10 -5.70358E-11 -1.84216E-11 + -5.47073E-12 -1.49456E-12 -3.75756E-13 -8.69717E-14 + 3.14259E-14 1.35774E-13 5.40035E-13 1.97677E-12 6.65638E-12 2.06090E-11 + 5.86345E-11 1.53182E-10 3.67132E-10 8.06284E-10 1.62011E-09 2.97241E-09 + 4.96557E-09 7.52292E-09 1.02742E-08 1.25274E-08 1.34068E-08 1.21661E-08 + 8.56265E-09 3.09128E-09 -3.09128E-09 -8.56265E-09 -1.21661E-08 -1.34068E-08 + -1.25274E-08 -1.02742E-08 -7.52292E-09 -4.96557E-09 -2.97241E-09 -1.62011E-09 + -8.06284E-10 -3.67132E-10 -1.53182E-10 -5.86345E-11 -2.06090E-11 -6.65638E-12 + -1.97677E-12 -5.40035E-13 -1.35774E-13 -3.14259E-14 + 1.00083E-14 4.32404E-14 1.71987E-13 6.29548E-13 2.11988E-12 6.56343E-12 + 1.86736E-11 4.87845E-11 1.16922E-10 2.56780E-10 5.15962E-10 9.46635E-10 + 1.58140E-09 2.39585E-09 3.27207E-09 3.98964E-09 4.26970E-09 3.87459E-09 + 2.72698E-09 9.84493E-10 -9.84493E-10 -2.72698E-09 -3.87459E-09 -4.26970E-09 + -3.98964E-09 -3.27207E-09 -2.39585E-09 -1.58140E-09 -9.46635E-10 -5.15962E-10 + -2.56780E-10 -1.16922E-10 -4.87845E-11 -1.86736E-11 -6.56343E-12 -2.11988E-12 + -6.29548E-13 -1.71987E-13 -4.32404E-14 -1.00083E-14 + 2.80798E-15 1.21317E-14 4.82534E-14 1.76629E-13 5.94763E-13 1.84146E-12 + 5.23913E-12 1.36872E-11 3.28041E-11 7.20433E-11 1.44760E-10 2.65592E-10 + 4.43685E-10 6.72190E-10 9.18025E-10 1.11935E-09 1.19792E-09 1.08707E-09 + 7.65092E-10 2.76213E-10 -2.76213E-10 -7.65092E-10 -1.08707E-09 -1.19792E-09 + -1.11935E-09 -9.18025E-10 -6.72190E-10 -4.43685E-10 -2.65592E-10 -1.44760E-10 + -7.20433E-11 -3.28041E-11 -1.36872E-11 -5.23913E-12 -1.84146E-12 -5.94763E-13 + -1.76629E-13 -4.82534E-14 -1.21317E-14 -2.80798E-15 + 6.93842E-16 2.99771E-15 1.19233E-14 4.36444E-14 1.46964E-13 4.55020E-13 + 1.29457E-12 3.38206E-12 8.10579E-12 1.78017E-11 3.57698E-11 6.56269E-11 + 1.09633E-10 1.66096E-10 2.26841E-10 2.76587E-10 2.96003E-10 2.68612E-10 + 1.89052E-10 6.82515E-11 -6.82515E-11 -1.89052E-10 -2.68612E-10 -2.96003E-10 + -2.76587E-10 -2.26841E-10 -1.66096E-10 -1.09633E-10 -6.56269E-11 -3.57698E-11 + -1.78017E-11 -8.10579E-12 -3.38206E-12 -1.29457E-12 -4.55020E-13 -1.46964E-13 + -4.36444E-14 -1.19233E-14 -2.99771E-15 -6.93842E-16 + 1.50970E-16 6.52257E-16 2.59432E-15 9.49636E-15 3.19772E-14 9.90055E-14 + 2.81680E-13 7.35886E-13 1.76370E-12 3.87338E-12 7.78298E-12 1.42794E-11 + 2.38545E-11 3.61400E-11 4.93572E-11 6.01813E-11 6.44059E-11 5.84460E-11 + 4.11349E-11 1.48505E-11 -1.48505E-11 -4.11349E-11 -5.84460E-11 -6.44059E-11 + -6.01813E-11 -4.93572E-11 -3.61400E-11 -2.38545E-11 -1.42794E-11 -7.78298E-12 + -3.87338E-12 -1.76370E-12 -7.35886E-13 -2.81680E-13 -9.90055E-14 -3.19772E-14 + -9.49636E-15 -2.59432E-15 -6.52257E-16 -1.50970E-16 + 2.89226E-17 1.24958E-16 4.97017E-16 1.81930E-15 6.12614E-15 1.89673E-14 + 5.39638E-14 1.40980E-13 3.37887E-13 7.42057E-13 1.49105E-12 2.73564E-12 + 4.57002E-12 6.92366E-12 9.45579E-12 1.15295E-11 1.23388E-11 1.11970E-11 + 7.88056E-12 2.84504E-12 -2.84504E-12 -7.88056E-12 -1.11970E-11 -1.23388E-11 + -1.15295E-11 -9.45579E-12 -6.92366E-12 -4.57002E-12 -2.73564E-12 -1.49105E-12 + -7.42057E-13 -3.37887E-13 -1.40980E-13 -5.39638E-14 -1.89673E-14 -6.12614E-15 + -1.81930E-15 -4.97017E-16 -1.24958E-16 -2.89226E-17 + 4.87838E-18 2.10768E-17 8.38321E-17 3.06862E-16 1.03330E-15 3.19923E-15 + 9.10210E-15 2.37791E-14 5.69915E-14 1.25163E-13 2.51497E-13 4.61421E-13 + 7.70827E-13 1.16782E-12 1.59491E-12 1.94468E-12 2.08119E-12 1.88860E-12 + 1.32922E-12 4.79874E-13 -4.79874E-13 -1.32922E-12 -1.88860E-12 -2.08119E-12 + -1.94468E-12 -1.59491E-12 -1.16782E-12 -7.70827E-13 -4.61421E-13 -2.51497E-13 + -1.25163E-13 -5.69915E-14 -2.37791E-14 -9.10210E-15 -3.19923E-15 -1.03330E-15 + -3.06862E-16 -8.38321E-17 -2.10768E-17 -4.87838E-18 + 7.24421E-19 3.12982E-18 1.24487E-17 4.55678E-17 1.53441E-16 4.75073E-16 + 1.35163E-15 3.53111E-15 8.46302E-15 1.85862E-14 3.73463E-14 6.85192E-14 + 1.14465E-13 1.73416E-13 2.36838E-13 2.88777E-13 3.09049E-13 2.80450E-13 + 1.97384E-13 7.12594E-14 -7.12594E-14 -1.97384E-13 -2.80450E-13 -3.09049E-13 + -2.88777E-13 -2.36838E-13 -1.73416E-13 -1.14465E-13 -6.85192E-14 -3.73463E-14 + -1.85862E-14 -8.46302E-15 -3.53111E-15 -1.35163E-15 -4.75073E-16 -1.53441E-16 + -4.55678E-17 -1.24487E-17 -3.12982E-18 -7.24421E-19 + 9.47050E-20 4.09168E-19 1.62745E-18 5.95718E-18 2.00596E-17 6.21073E-17 + 1.76701E-16 4.61629E-16 1.10639E-15 2.42981E-15 4.88235E-15 8.95766E-15 + 1.49642E-14 2.26710E-14 3.09624E-14 3.77524E-14 4.04026E-14 3.66638E-14 + 2.58044E-14 9.31589E-15 -9.31589E-15 -2.58044E-14 -3.66638E-14 -4.04026E-14 + -3.77524E-14 -3.09624E-14 -2.26710E-14 -1.49642E-14 -8.95766E-15 -4.88235E-15 + -2.42981E-15 -1.10639E-15 -4.61629E-16 -1.76701E-16 -6.21073E-17 -2.00596E-17 + -5.95718E-18 -1.62745E-18 -4.09168E-19 -9.47050E-20 + 1.08998E-20 4.70918E-20 1.87306E-19 6.85621E-19 2.30870E-18 7.14802E-18 + 2.03368E-17 5.31297E-17 1.27336E-16 2.79651E-16 5.61918E-16 1.03095E-15 + 1.72226E-15 2.60925E-15 3.56351E-15 4.34499E-15 4.65000E-15 4.21970E-15 + 2.96987E-15 1.07218E-15 -1.07218E-15 -2.96987E-15 -4.21970E-15 -4.65000E-15 + -4.34499E-15 -3.56351E-15 -2.60925E-15 -1.72226E-15 -1.03095E-15 -5.61918E-16 + -2.79651E-16 -1.27336E-16 -5.31297E-17 -2.03368E-17 -7.14802E-18 -2.30870E-18 + -6.85621E-19 -1.87306E-19 -4.70918E-20 -1.08998E-20 + 1.68397E-21 7.27552E-21 2.89381E-20 1.05926E-19 3.56686E-19 1.10435E-18 + 3.14196E-18 8.20835E-18 1.96730E-17 4.32052E-17 8.68144E-17 1.59278E-16 + 2.66083E-16 4.03120E-16 5.50550E-16 6.71286E-16 7.18409E-16 6.51929E-16 + 4.58834E-16 1.65648E-16 -1.65648E-16 -4.58834E-16 -6.51929E-16 -7.18409E-16 + -6.71286E-16 -5.50550E-16 -4.03120E-16 -2.66083E-16 -1.59278E-16 -8.68144E-17 + -4.32052E-17 -1.96730E-17 -8.20835E-18 -3.14196E-18 -1.10435E-18 -3.56686E-19 + -1.05926E-19 -2.89381E-20 -7.27552E-21 -1.68397E-21 + 1.46316E-20 6.32151E-20 2.51435E-19 9.20363E-19 3.09915E-18 9.59536E-18 + 2.72997E-17 7.13202E-17 1.70933E-16 3.75398E-16 7.54307E-16 1.38393E-15 + 2.31192E-15 3.50260E-15 4.78358E-15 5.83262E-15 6.24206E-15 5.66443E-15 + 3.98669E-15 1.43927E-15 -1.43927E-15 -3.98669E-15 -5.66443E-15 -6.24206E-15 + -5.83262E-15 -4.78358E-15 -3.50260E-15 -2.31192E-15 -1.38393E-15 -7.54307E-16 + -3.75398E-16 -1.70933E-16 -7.13202E-17 -2.72997E-17 -9.59536E-18 -3.09915E-18 + -9.20363E-19 -2.51435E-19 -6.32151E-20 -1.46316E-20 + 1.11921E-19 4.83547E-19 1.92329E-18 7.04007E-18 2.37061E-17 7.33971E-17 + 2.08822E-16 5.45545E-16 1.30751E-15 2.87151E-15 5.76987E-15 1.05860E-14 + 1.76844E-14 2.67922E-14 3.65907E-14 4.46151E-14 4.77470E-14 4.33286E-14 + 3.04951E-14 1.10093E-14 -1.10093E-14 -3.04951E-14 -4.33286E-14 -4.77470E-14 + -4.46151E-14 -3.65907E-14 -2.67922E-14 -1.76844E-14 -1.05860E-14 -5.76987E-15 + -2.87151E-15 -1.30751E-15 -5.45545E-16 -2.08822E-16 -7.33971E-17 -2.37061E-17 + -7.04007E-18 -1.92329E-18 -4.83547E-19 -1.11921E-19 + 7.53693E-19 3.25629E-18 1.29518E-17 4.74091E-17 1.59641E-16 4.94270E-16 + 1.40624E-15 3.67380E-15 8.80500E-15 1.93372E-14 3.88554E-14 7.12879E-14 + 1.19090E-13 1.80424E-13 2.46408E-13 3.00446E-13 3.21537E-13 2.91782E-13 + 2.05360E-13 7.41388E-14 -7.41388E-14 -2.05360E-13 -2.91782E-13 -3.21537E-13 + -3.00446E-13 -2.46408E-13 -1.80424E-13 -1.19090E-13 -7.12879E-14 -3.88554E-14 + -1.93372E-14 -8.80500E-15 -3.67380E-15 -1.40624E-15 -4.94270E-16 -1.59641E-16 + -4.74091E-17 -1.29518E-17 -3.25629E-18 -7.53693E-19 + 4.46844E-18 1.93056E-17 7.67874E-17 2.81076E-16 9.46468E-16 2.93039E-15 + 8.33722E-15 2.17809E-14 5.22024E-14 1.14645E-13 2.30363E-13 4.22646E-13 + 7.06052E-13 1.06968E-12 1.46089E-12 1.78126E-12 1.90630E-12 1.72990E-12 + 1.21752E-12 4.39549E-13 -4.39549E-13 -1.21752E-12 -1.72990E-12 -1.90630E-12 + -1.78126E-12 -1.46089E-12 -1.06968E-12 -7.06052E-13 -4.22646E-13 -2.30363E-13 + -1.14645E-13 -5.22024E-14 -2.17809E-14 -8.33722E-15 -2.93039E-15 -9.46468E-16 + -2.81076E-16 -7.67874E-17 -1.93056E-17 -4.46844E-18 + 2.33243E-17 1.00771E-16 4.00814E-16 1.46716E-15 4.94036E-15 1.52960E-14 + 4.35186E-14 1.13692E-13 2.72485E-13 5.98424E-13 1.20244E-12 2.20612E-12 + 3.68544E-12 5.58351E-12 7.62552E-12 9.29781E-12 9.95050E-12 9.02970E-12 + 6.35520E-12 2.29435E-12 -2.29435E-12 -6.35520E-12 -9.02970E-12 -9.95050E-12 + -9.29781E-12 -7.62552E-12 -5.58351E-12 -3.68544E-12 -2.20612E-12 -1.20244E-12 + -5.98424E-13 -2.72485E-13 -1.13692E-13 -4.35186E-14 -1.52960E-14 -4.94036E-15 + -1.46716E-15 -4.00814E-16 -1.00771E-16 -2.33243E-17 + 1.07196E-16 4.63136E-16 1.84210E-15 6.74291E-15 2.27054E-14 7.02990E-14 + 2.00007E-13 5.22517E-13 1.25232E-12 2.75030E-12 5.52632E-12 1.01391E-11 + 1.69379E-11 2.56613E-11 3.50462E-11 4.27318E-11 4.57315E-11 4.14996E-11 + 2.92079E-11 1.05446E-11 -1.05446E-11 -2.92079E-11 -4.14996E-11 -4.57315E-11 + -4.27318E-11 -3.50462E-11 -2.56613E-11 -1.69379E-11 -1.01391E-11 -5.52632E-12 + -2.75030E-12 -1.25232E-12 -5.22517E-13 -2.00007E-13 -7.02990E-14 -2.27054E-14 + -6.74291E-15 -1.84210E-15 -4.63136E-16 -1.07196E-16 + 4.33823E-16 1.87431E-15 7.45498E-15 2.72885E-14 9.18888E-14 2.84500E-13 + 8.09428E-13 2.11462E-12 5.06812E-12 1.11304E-11 2.23650E-11 4.10330E-11 + 6.85478E-11 1.03851E-10 1.41832E-10 1.72935E-10 1.85075E-10 1.67949E-10 + 1.18204E-10 4.26740E-11 -4.26740E-11 -1.18204E-10 -1.67949E-10 -1.85075E-10 + -1.72935E-10 -1.41832E-10 -1.03851E-10 -6.85478E-11 -4.10330E-11 -2.23650E-11 + -1.11304E-11 -5.06812E-12 -2.11462E-12 -8.09428E-13 -2.84500E-13 -9.18888E-14 + -2.72885E-14 -7.45498E-15 -1.87431E-15 -4.33823E-16 + 1.54625E-15 6.68050E-15 2.65714E-14 9.72630E-14 3.27514E-13 1.01403E-12 + 2.88500E-12 7.53704E-12 1.80640E-11 3.96717E-11 7.97144E-11 1.46252E-10 + 2.44321E-10 3.70151E-10 5.05523E-10 6.16385E-10 6.59654E-10 5.98611E-10 + 4.21309E-10 1.52101E-10 -1.52101E-10 -4.21309E-10 -5.98611E-10 -6.59654E-10 + -6.16385E-10 -5.05523E-10 -3.70151E-10 -2.44321E-10 -1.46252E-10 -7.97144E-11 + -3.96717E-11 -1.80640E-11 -7.53704E-12 -2.88500E-12 -1.01403E-12 -3.27514E-13 + -9.72630E-14 -2.65714E-14 -6.68050E-15 -1.54625E-15 + 4.85519E-15 2.09766E-14 8.34336E-14 3.05404E-13 1.02839E-12 3.18402E-12 + 9.05884E-12 2.36661E-11 5.67206E-11 1.24568E-10 2.50301E-10 4.59227E-10 + 7.67163E-10 1.16226E-09 1.58733E-09 1.93543E-09 2.07130E-09 1.87962E-09 + 1.32290E-09 4.77593E-10 -4.77593E-10 -1.32290E-09 -1.87962E-09 -2.07130E-09 + -1.93543E-09 -1.58733E-09 -1.16226E-09 -7.67163E-10 -4.59227E-10 -2.50301E-10 + -1.24568E-10 -5.67206E-11 -2.36661E-11 -9.05884E-12 -3.18402E-12 -1.02839E-12 + -3.05404E-13 -8.34336E-14 -2.09766E-14 -4.85519E-15 + 1.34368E-14 5.80531E-14 2.30904E-13 8.45209E-13 2.84608E-12 8.81183E-12 + 2.50705E-11 6.54964E-11 1.56975E-10 3.44744E-10 6.92712E-10 1.27092E-09 + 2.12314E-09 3.21659E-09 4.39296E-09 5.35634E-09 5.73235E-09 5.20189E-09 + 3.66114E-09 1.32175E-09 -1.32175E-09 -3.66114E-09 -5.20189E-09 -5.73235E-09 + -5.35634E-09 -4.39296E-09 -3.21659E-09 -2.12314E-09 -1.27092E-09 -6.92712E-10 + -3.44744E-10 -1.56975E-10 -6.54964E-11 -2.50705E-11 -8.81183E-12 -2.84608E-12 + -8.45209E-13 -2.30904E-13 -5.80531E-14 -1.34368E-14 + 3.28014E-14 1.41717E-13 5.63672E-13 2.06329E-12 6.94772E-12 2.15110E-11 + 6.12009E-11 1.59887E-10 3.83201E-10 8.41574E-10 1.69102E-09 3.10251E-09 + 5.18291E-09 7.85219E-09 1.07239E-08 1.30757E-08 1.39936E-08 1.26986E-08 + 8.93742E-09 3.22659E-09 -3.22659E-09 -8.93742E-09 -1.26986E-08 -1.39936E-08 + -1.30757E-08 -1.07239E-08 -7.85219E-09 -5.18291E-09 -3.10251E-09 -1.69102E-09 + -8.41574E-10 -3.83201E-10 -1.59887E-10 -6.12009E-11 -2.15110E-11 -6.94772E-12 + -2.06329E-12 -5.63672E-13 -1.41717E-13 -3.28014E-14 + 7.07225E-14 3.05553E-13 1.21532E-12 4.44862E-12 1.49799E-11 4.63796E-11 + 1.31954E-10 3.44729E-10 8.26214E-10 1.81450E-09 3.64598E-09 6.68928E-09 + 1.11748E-08 1.69300E-08 2.31216E-08 2.81922E-08 3.01713E-08 2.73793E-08 + 1.92698E-08 6.95679E-09 -6.95679E-09 -1.92698E-08 -2.73793E-08 -3.01713E-08 + -2.81922E-08 -2.31216E-08 -1.69300E-08 -1.11748E-08 -6.68928E-09 -3.64598E-09 + -1.81450E-09 -8.26214E-10 -3.44729E-10 -1.31954E-10 -4.63796E-11 -1.49799E-11 + -4.44862E-12 -1.21532E-12 -3.05553E-13 -7.07225E-14 + 1.34963E-13 5.83102E-13 2.31926E-12 8.48952E-12 2.85868E-11 8.85085E-11 + 2.51815E-10 6.57864E-10 1.57670E-09 3.46271E-09 6.95780E-09 1.27655E-08 + 2.13254E-08 3.23083E-08 4.41242E-08 5.38006E-08 5.75774E-08 5.22493E-08 + 3.67736E-08 1.32760E-08 -1.32760E-08 -3.67736E-08 -5.22493E-08 -5.75774E-08 + -5.38006E-08 -4.41242E-08 -3.23083E-08 -2.13254E-08 -1.27655E-08 -6.95780E-09 + -3.46271E-09 -1.57670E-09 -6.57864E-10 -2.51815E-10 -8.85085E-11 -2.85868E-11 + -8.48952E-12 -2.31926E-12 -5.83102E-13 -1.34963E-13 + 2.28741E-13 9.88265E-13 3.93078E-12 1.43884E-11 4.84501E-11 1.50008E-10 + 4.26786E-10 1.11498E-09 2.67226E-09 5.86874E-09 1.17924E-08 2.16355E-08 + 3.61431E-08 5.47575E-08 7.47835E-08 9.11836E-08 9.75845E-08 8.85542E-08 + 6.23254E-08 2.25007E-08 -2.25007E-08 -6.23254E-08 -8.85542E-08 -9.75845E-08 + -9.11836E-08 -7.47835E-08 -5.47575E-08 -3.61431E-08 -2.16355E-08 -1.17924E-08 + -5.86874E-09 -2.67226E-09 -1.11498E-09 -4.26786E-10 -1.50008E-10 -4.84501E-11 + -1.43884E-11 -3.93078E-12 -9.88265E-13 -2.28741E-13 + 3.46134E-13 1.49545E-12 5.94811E-12 2.17727E-11 7.33153E-11 2.26994E-10 + 6.45818E-10 1.68719E-09 4.04370E-09 8.88065E-09 1.78444E-08 3.27390E-08 + 5.46922E-08 8.28597E-08 1.13163E-07 1.37980E-07 1.47666E-07 1.34001E-07 + 9.43115E-08 3.40483E-08 -3.40483E-08 -9.43115E-08 -1.34001E-07 -1.47666E-07 + -1.37980E-07 -1.13163E-07 -8.28597E-08 -5.46922E-08 -3.27390E-08 -1.78444E-08 + -8.88065E-09 -4.04370E-09 -1.68719E-09 -6.45818E-10 -2.26994E-10 -7.33153E-11 + -2.17727E-11 -5.94811E-12 -1.49545E-12 -3.46134E-13 + 4.71320E-13 2.03631E-12 8.09935E-12 2.96472E-11 9.98311E-11 3.09090E-10 + 8.79390E-10 2.29740E-09 5.50618E-09 1.20925E-08 2.42981E-08 4.45797E-08 + 7.44726E-08 1.12827E-07 1.54091E-07 1.87883E-07 2.01072E-07 1.82465E-07 + 1.28421E-07 4.63625E-08 -4.63625E-08 -1.28421E-07 -1.82465E-07 -2.01072E-07 + -1.87883E-07 -1.54091E-07 -1.12827E-07 -7.44726E-08 -4.45797E-08 -2.42981E-08 + -1.20925E-08 -5.50618E-09 -2.29740E-09 -8.79390E-10 -3.09090E-10 -9.98311E-11 + -2.96472E-11 -8.09935E-12 -2.03631E-12 -4.71320E-13 + 5.83704E-13 2.52186E-12 1.00306E-11 3.67164E-11 1.23635E-10 3.82791E-10 + 1.08908E-09 2.84520E-09 6.81910E-09 1.49759E-08 3.00918E-08 5.52095E-08 + 9.22303E-08 1.39730E-07 1.90833E-07 2.32683E-07 2.49017E-07 2.25973E-07 + 1.59042E-07 5.74174E-08 -5.74174E-08 -1.59042E-07 -2.25973E-07 -2.49017E-07 + -2.32683E-07 -1.90833E-07 -1.39730E-07 -9.22303E-08 -5.52095E-08 -3.00918E-08 + -1.49759E-08 -6.81910E-09 -2.84520E-09 -1.08908E-09 -3.82791E-10 -1.23635E-10 + -3.67164E-11 -1.00306E-11 -2.52186E-12 -5.83704E-13 + 6.65914E-13 2.87705E-12 1.14433E-11 4.18876E-11 1.41049E-10 4.36705E-10 + 1.24246E-09 3.24593E-09 7.77952E-09 1.70851E-08 3.43301E-08 6.29854E-08 + 1.05220E-07 1.59410E-07 2.17710E-07 2.65455E-07 2.84089E-07 2.57800E-07 + 1.81442E-07 6.55042E-08 -6.55042E-08 -1.81442E-07 -2.57800E-07 -2.84089E-07 + -2.65455E-07 -2.17710E-07 -1.59410E-07 -1.05220E-07 -6.29854E-08 -3.43301E-08 + -1.70851E-08 -7.77952E-09 -3.24593E-09 -1.24246E-09 -4.36705E-10 -1.41049E-10 + -4.18876E-11 -1.14433E-11 -2.87705E-12 -6.65914E-13 + 7.08494E-13 3.06101E-12 1.21750E-11 4.45660E-11 1.50067E-10 4.64628E-10 + 1.32191E-09 3.45348E-09 8.27696E-09 1.81776E-08 3.65252E-08 6.70128E-08 + 1.11948E-07 1.69604E-07 2.31631E-07 2.82428E-07 3.02254E-07 2.74284E-07 + 1.93044E-07 6.96927E-08 -6.96927E-08 -1.93044E-07 -2.74284E-07 -3.02254E-07 + -2.82428E-07 -2.31631E-07 -1.69604E-07 -1.11948E-07 -6.70128E-08 -3.65252E-08 + -1.81776E-08 -8.27696E-09 -3.45348E-09 -1.32191E-09 -4.64628E-10 -1.50067E-10 + -4.45660E-11 -1.21750E-11 -3.06101E-12 -7.08494E-13 + 7.08494E-13 3.06101E-12 1.21750E-11 4.45660E-11 1.50067E-10 4.64628E-10 + 1.32191E-09 3.45348E-09 8.27696E-09 1.81776E-08 3.65252E-08 6.70128E-08 + 1.11948E-07 1.69604E-07 2.31631E-07 2.82428E-07 3.02254E-07 2.74284E-07 + 1.93044E-07 6.96927E-08 -6.96927E-08 -1.93044E-07 -2.74284E-07 -3.02254E-07 + -2.82428E-07 -2.31631E-07 -1.69604E-07 -1.11948E-07 -6.70128E-08 -3.65252E-08 + -1.81776E-08 -8.27696E-09 -3.45348E-09 -1.32191E-09 -4.64628E-10 -1.50067E-10 + -4.45660E-11 -1.21750E-11 -3.06101E-12 -7.08494E-13 + 6.65914E-13 2.87705E-12 1.14433E-11 4.18876E-11 1.41049E-10 4.36705E-10 + 1.24246E-09 3.24593E-09 7.77952E-09 1.70851E-08 3.43301E-08 6.29854E-08 + 1.05220E-07 1.59410E-07 2.17710E-07 2.65455E-07 2.84089E-07 2.57800E-07 + 1.81442E-07 6.55042E-08 -6.55042E-08 -1.81442E-07 -2.57800E-07 -2.84089E-07 + -2.65455E-07 -2.17710E-07 -1.59410E-07 -1.05220E-07 -6.29854E-08 -3.43301E-08 + -1.70851E-08 -7.77952E-09 -3.24593E-09 -1.24246E-09 -4.36705E-10 -1.41049E-10 + -4.18876E-11 -1.14433E-11 -2.87705E-12 -6.65914E-13 + 5.83704E-13 2.52186E-12 1.00306E-11 3.67164E-11 1.23635E-10 3.82791E-10 + 1.08908E-09 2.84520E-09 6.81910E-09 1.49759E-08 3.00918E-08 5.52095E-08 + 9.22303E-08 1.39730E-07 1.90833E-07 2.32683E-07 2.49017E-07 2.25973E-07 + 1.59042E-07 5.74174E-08 -5.74174E-08 -1.59042E-07 -2.25973E-07 -2.49017E-07 + -2.32683E-07 -1.90833E-07 -1.39730E-07 -9.22303E-08 -5.52095E-08 -3.00918E-08 + -1.49759E-08 -6.81910E-09 -2.84520E-09 -1.08908E-09 -3.82791E-10 -1.23635E-10 + -3.67164E-11 -1.00306E-11 -2.52186E-12 -5.83704E-13 + 4.71320E-13 2.03631E-12 8.09935E-12 2.96472E-11 9.98311E-11 3.09090E-10 + 8.79390E-10 2.29740E-09 5.50618E-09 1.20925E-08 2.42981E-08 4.45797E-08 + 7.44726E-08 1.12827E-07 1.54091E-07 1.87883E-07 2.01072E-07 1.82465E-07 + 1.28421E-07 4.63625E-08 -4.63625E-08 -1.28421E-07 -1.82465E-07 -2.01072E-07 + -1.87883E-07 -1.54091E-07 -1.12827E-07 -7.44726E-08 -4.45797E-08 -2.42981E-08 + -1.20925E-08 -5.50618E-09 -2.29740E-09 -8.79390E-10 -3.09090E-10 -9.98311E-11 + -2.96472E-11 -8.09935E-12 -2.03631E-12 -4.71320E-13 + 3.46134E-13 1.49545E-12 5.94811E-12 2.17727E-11 7.33153E-11 2.26994E-10 + 6.45818E-10 1.68719E-09 4.04370E-09 8.88065E-09 1.78444E-08 3.27390E-08 + 5.46922E-08 8.28597E-08 1.13163E-07 1.37980E-07 1.47666E-07 1.34001E-07 + 9.43115E-08 3.40483E-08 -3.40483E-08 -9.43115E-08 -1.34001E-07 -1.47666E-07 + -1.37980E-07 -1.13163E-07 -8.28597E-08 -5.46922E-08 -3.27390E-08 -1.78444E-08 + -8.88065E-09 -4.04370E-09 -1.68719E-09 -6.45818E-10 -2.26994E-10 -7.33153E-11 + -2.17727E-11 -5.94811E-12 -1.49545E-12 -3.46134E-13 + 2.28741E-13 9.88265E-13 3.93078E-12 1.43884E-11 4.84501E-11 1.50008E-10 + 4.26786E-10 1.11498E-09 2.67226E-09 5.86874E-09 1.17924E-08 2.16355E-08 + 3.61431E-08 5.47575E-08 7.47835E-08 9.11836E-08 9.75845E-08 8.85542E-08 + 6.23254E-08 2.25007E-08 -2.25007E-08 -6.23254E-08 -8.85542E-08 -9.75845E-08 + -9.11836E-08 -7.47835E-08 -5.47575E-08 -3.61431E-08 -2.16355E-08 -1.17924E-08 + -5.86874E-09 -2.67226E-09 -1.11498E-09 -4.26786E-10 -1.50008E-10 -4.84501E-11 + -1.43884E-11 -3.93078E-12 -9.88265E-13 -2.28741E-13 + 1.34963E-13 5.83102E-13 2.31926E-12 8.48952E-12 2.85868E-11 8.85085E-11 + 2.51815E-10 6.57864E-10 1.57670E-09 3.46271E-09 6.95780E-09 1.27655E-08 + 2.13254E-08 3.23083E-08 4.41242E-08 5.38006E-08 5.75774E-08 5.22493E-08 + 3.67736E-08 1.32760E-08 -1.32760E-08 -3.67736E-08 -5.22493E-08 -5.75774E-08 + -5.38006E-08 -4.41242E-08 -3.23083E-08 -2.13254E-08 -1.27655E-08 -6.95780E-09 + -3.46271E-09 -1.57670E-09 -6.57864E-10 -2.51815E-10 -8.85085E-11 -2.85868E-11 + -8.48952E-12 -2.31926E-12 -5.83102E-13 -1.34963E-13 + 7.07225E-14 3.05553E-13 1.21532E-12 4.44862E-12 1.49799E-11 4.63796E-11 + 1.31954E-10 3.44729E-10 8.26214E-10 1.81450E-09 3.64598E-09 6.68928E-09 + 1.11748E-08 1.69300E-08 2.31216E-08 2.81922E-08 3.01713E-08 2.73793E-08 + 1.92698E-08 6.95679E-09 -6.95679E-09 -1.92698E-08 -2.73793E-08 -3.01713E-08 + -2.81922E-08 -2.31216E-08 -1.69300E-08 -1.11748E-08 -6.68928E-09 -3.64598E-09 + -1.81450E-09 -8.26214E-10 -3.44729E-10 -1.31954E-10 -4.63796E-11 -1.49799E-11 + -4.44862E-12 -1.21532E-12 -3.05553E-13 -7.07225E-14 + 3.28014E-14 1.41717E-13 5.63672E-13 2.06329E-12 6.94772E-12 2.15110E-11 + 6.12009E-11 1.59887E-10 3.83201E-10 8.41574E-10 1.69102E-09 3.10251E-09 + 5.18291E-09 7.85219E-09 1.07239E-08 1.30757E-08 1.39936E-08 1.26986E-08 + 8.93742E-09 3.22659E-09 -3.22659E-09 -8.93742E-09 -1.26986E-08 -1.39936E-08 + -1.30757E-08 -1.07239E-08 -7.85219E-09 -5.18291E-09 -3.10251E-09 -1.69102E-09 + -8.41574E-10 -3.83201E-10 -1.59887E-10 -6.12009E-11 -2.15110E-11 -6.94772E-12 + -2.06329E-12 -5.63672E-13 -1.41717E-13 -3.28014E-14 + 1.34368E-14 5.80531E-14 2.30904E-13 8.45209E-13 2.84608E-12 8.81183E-12 + 2.50705E-11 6.54964E-11 1.56975E-10 3.44744E-10 6.92712E-10 1.27092E-09 + 2.12314E-09 3.21659E-09 4.39296E-09 5.35634E-09 5.73235E-09 5.20189E-09 + 3.66114E-09 1.32175E-09 -1.32175E-09 -3.66114E-09 -5.20189E-09 -5.73235E-09 + -5.35634E-09 -4.39296E-09 -3.21659E-09 -2.12314E-09 -1.27092E-09 -6.92712E-10 + -3.44744E-10 -1.56975E-10 -6.54964E-11 -2.50705E-11 -8.81183E-12 -2.84608E-12 + -8.45209E-13 -2.30904E-13 -5.80531E-14 -1.34368E-14 + 4.85519E-15 2.09766E-14 8.34336E-14 3.05404E-13 1.02839E-12 3.18402E-12 + 9.05884E-12 2.36661E-11 5.67206E-11 1.24568E-10 2.50301E-10 4.59227E-10 + 7.67163E-10 1.16226E-09 1.58733E-09 1.93543E-09 2.07130E-09 1.87962E-09 + 1.32290E-09 4.77593E-10 -4.77593E-10 -1.32290E-09 -1.87962E-09 -2.07130E-09 + -1.93543E-09 -1.58733E-09 -1.16226E-09 -7.67163E-10 -4.59227E-10 -2.50301E-10 + -1.24568E-10 -5.67206E-11 -2.36661E-11 -9.05884E-12 -3.18402E-12 -1.02839E-12 + -3.05404E-13 -8.34336E-14 -2.09766E-14 -4.85519E-15 + 1.54625E-15 6.68050E-15 2.65714E-14 9.72630E-14 3.27514E-13 1.01403E-12 + 2.88500E-12 7.53704E-12 1.80640E-11 3.96717E-11 7.97144E-11 1.46252E-10 + 2.44321E-10 3.70151E-10 5.05523E-10 6.16385E-10 6.59654E-10 5.98611E-10 + 4.21309E-10 1.52101E-10 -1.52101E-10 -4.21309E-10 -5.98611E-10 -6.59654E-10 + -6.16385E-10 -5.05523E-10 -3.70151E-10 -2.44321E-10 -1.46252E-10 -7.97144E-11 + -3.96717E-11 -1.80640E-11 -7.53704E-12 -2.88500E-12 -1.01403E-12 -3.27514E-13 + -9.72630E-14 -2.65714E-14 -6.68050E-15 -1.54625E-15 + 4.33823E-16 1.87431E-15 7.45498E-15 2.72885E-14 9.18888E-14 2.84500E-13 + 8.09428E-13 2.11462E-12 5.06812E-12 1.11304E-11 2.23650E-11 4.10330E-11 + 6.85478E-11 1.03851E-10 1.41832E-10 1.72935E-10 1.85075E-10 1.67949E-10 + 1.18204E-10 4.26740E-11 -4.26740E-11 -1.18204E-10 -1.67949E-10 -1.85075E-10 + -1.72935E-10 -1.41832E-10 -1.03851E-10 -6.85478E-11 -4.10330E-11 -2.23650E-11 + -1.11304E-11 -5.06812E-12 -2.11462E-12 -8.09428E-13 -2.84500E-13 -9.18888E-14 + -2.72885E-14 -7.45498E-15 -1.87431E-15 -4.33823E-16 + 1.07196E-16 4.63136E-16 1.84210E-15 6.74291E-15 2.27054E-14 7.02990E-14 + 2.00007E-13 5.22517E-13 1.25232E-12 2.75030E-12 5.52632E-12 1.01391E-11 + 1.69379E-11 2.56613E-11 3.50462E-11 4.27318E-11 4.57315E-11 4.14996E-11 + 2.92079E-11 1.05446E-11 -1.05446E-11 -2.92079E-11 -4.14996E-11 -4.57315E-11 + -4.27318E-11 -3.50462E-11 -2.56613E-11 -1.69379E-11 -1.01391E-11 -5.52632E-12 + -2.75030E-12 -1.25232E-12 -5.22517E-13 -2.00007E-13 -7.02990E-14 -2.27054E-14 + -6.74291E-15 -1.84210E-15 -4.63136E-16 -1.07196E-16 + 2.33243E-17 1.00771E-16 4.00814E-16 1.46716E-15 4.94036E-15 1.52960E-14 + 4.35186E-14 1.13692E-13 2.72485E-13 5.98424E-13 1.20244E-12 2.20612E-12 + 3.68544E-12 5.58351E-12 7.62552E-12 9.29781E-12 9.95050E-12 9.02970E-12 + 6.35520E-12 2.29435E-12 -2.29435E-12 -6.35520E-12 -9.02970E-12 -9.95050E-12 + -9.29781E-12 -7.62552E-12 -5.58351E-12 -3.68544E-12 -2.20612E-12 -1.20244E-12 + -5.98424E-13 -2.72485E-13 -1.13692E-13 -4.35186E-14 -1.52960E-14 -4.94036E-15 + -1.46716E-15 -4.00814E-16 -1.00771E-16 -2.33243E-17 + 4.46844E-18 1.93056E-17 7.67874E-17 2.81076E-16 9.46468E-16 2.93039E-15 + 8.33722E-15 2.17809E-14 5.22024E-14 1.14645E-13 2.30363E-13 4.22646E-13 + 7.06052E-13 1.06968E-12 1.46089E-12 1.78126E-12 1.90630E-12 1.72990E-12 + 1.21752E-12 4.39549E-13 -4.39549E-13 -1.21752E-12 -1.72990E-12 -1.90630E-12 + -1.78126E-12 -1.46089E-12 -1.06968E-12 -7.06052E-13 -4.22646E-13 -2.30363E-13 + -1.14645E-13 -5.22024E-14 -2.17809E-14 -8.33722E-15 -2.93039E-15 -9.46468E-16 + -2.81076E-16 -7.67874E-17 -1.93056E-17 -4.46844E-18 + 7.53693E-19 3.25629E-18 1.29518E-17 4.74091E-17 1.59641E-16 4.94270E-16 + 1.40624E-15 3.67380E-15 8.80500E-15 1.93372E-14 3.88554E-14 7.12879E-14 + 1.19090E-13 1.80424E-13 2.46408E-13 3.00446E-13 3.21537E-13 2.91782E-13 + 2.05360E-13 7.41388E-14 -7.41388E-14 -2.05360E-13 -2.91782E-13 -3.21537E-13 + -3.00446E-13 -2.46408E-13 -1.80424E-13 -1.19090E-13 -7.12879E-14 -3.88554E-14 + -1.93372E-14 -8.80500E-15 -3.67380E-15 -1.40624E-15 -4.94270E-16 -1.59641E-16 + -4.74091E-17 -1.29518E-17 -3.25629E-18 -7.53693E-19 + 1.11921E-19 4.83547E-19 1.92329E-18 7.04007E-18 2.37061E-17 7.33971E-17 + 2.08822E-16 5.45545E-16 1.30751E-15 2.87151E-15 5.76987E-15 1.05860E-14 + 1.76844E-14 2.67922E-14 3.65907E-14 4.46151E-14 4.77470E-14 4.33286E-14 + 3.04951E-14 1.10093E-14 -1.10093E-14 -3.04951E-14 -4.33286E-14 -4.77470E-14 + -4.46151E-14 -3.65907E-14 -2.67922E-14 -1.76844E-14 -1.05860E-14 -5.76987E-15 + -2.87151E-15 -1.30751E-15 -5.45545E-16 -2.08822E-16 -7.33971E-17 -2.37061E-17 + -7.04007E-18 -1.92329E-18 -4.83547E-19 -1.11921E-19 + 1.46316E-20 6.32151E-20 2.51435E-19 9.20363E-19 3.09915E-18 9.59536E-18 + 2.72997E-17 7.13202E-17 1.70933E-16 3.75398E-16 7.54307E-16 1.38393E-15 + 2.31192E-15 3.50260E-15 4.78358E-15 5.83262E-15 6.24206E-15 5.66443E-15 + 3.98669E-15 1.43927E-15 -1.43927E-15 -3.98669E-15 -5.66443E-15 -6.24206E-15 + -5.83262E-15 -4.78358E-15 -3.50260E-15 -2.31192E-15 -1.38393E-15 -7.54307E-16 + -3.75398E-16 -1.70933E-16 -7.13202E-17 -2.72997E-17 -9.59536E-18 -3.09915E-18 + -9.20363E-19 -2.51435E-19 -6.32151E-20 -1.46316E-20 + 1.68397E-21 7.27552E-21 2.89381E-20 1.05926E-19 3.56686E-19 1.10435E-18 + 3.14196E-18 8.20835E-18 1.96730E-17 4.32052E-17 8.68144E-17 1.59278E-16 + 2.66083E-16 4.03120E-16 5.50550E-16 6.71286E-16 7.18409E-16 6.51929E-16 + 4.58834E-16 1.65648E-16 -1.65648E-16 -4.58834E-16 -6.51929E-16 -7.18409E-16 + -6.71286E-16 -5.50550E-16 -4.03120E-16 -2.66083E-16 -1.59278E-16 -8.68144E-17 + -4.32052E-17 -1.96730E-17 -8.20835E-18 -3.14196E-18 -1.10435E-18 -3.56686E-19 + -1.05926E-19 -2.89381E-20 -7.27552E-21 -1.68397E-21 + 2.22180E-22 9.59919E-22 3.81804E-21 1.39757E-20 4.70604E-20 1.45705E-19 + 4.14545E-19 1.08299E-18 2.59562E-18 5.70041E-18 1.14541E-17 2.10149E-17 + 3.51064E-17 5.31869E-17 7.26385E-17 8.85681E-17 9.47855E-17 8.60142E-17 + 6.05377E-17 2.18553E-17 -2.18553E-17 -6.05377E-17 -8.60142E-17 -9.47855E-17 + -8.85681E-17 -7.26385E-17 -5.31869E-17 -3.51064E-17 -2.10149E-17 -1.14541E-17 + -5.70041E-18 -2.59562E-18 -1.08299E-18 -4.14545E-19 -1.45705E-19 -4.70604E-20 + -1.39757E-20 -3.81804E-21 -9.59919E-22 -2.22180E-22 + 1.93047E-21 8.34048E-21 3.31739E-20 1.21431E-19 4.08896E-19 1.26599E-18 + 3.60187E-18 9.40985E-18 2.25526E-17 4.95293E-17 9.95219E-17 1.82593E-16 + 3.05031E-16 4.62126E-16 6.31136E-16 7.69545E-16 8.23566E-16 7.47355E-16 + 5.25996E-16 1.89895E-16 -1.89895E-16 -5.25996E-16 -7.47355E-16 -8.23566E-16 + -7.69545E-16 -6.31136E-16 -4.62126E-16 -3.05031E-16 -1.82593E-16 -9.95219E-17 + -4.95293E-17 -2.25526E-17 -9.40985E-18 -3.60187E-18 -1.26599E-18 -4.08896E-19 + -1.21431E-19 -3.31739E-20 -8.34048E-21 -1.93047E-21 + 1.47666E-20 6.37982E-20 2.53755E-19 9.28854E-19 3.12774E-18 9.68388E-18 + 2.75515E-17 7.19781E-17 1.72510E-16 3.78861E-16 7.61266E-16 1.39669E-15 + 2.33325E-15 3.53491E-15 4.82771E-15 5.88643E-15 6.29965E-15 5.71669E-15 + 4.02347E-15 1.45255E-15 -1.45255E-15 -4.02347E-15 -5.71669E-15 -6.29965E-15 + -5.88643E-15 -4.82771E-15 -3.53491E-15 -2.33325E-15 -1.39669E-15 -7.61266E-16 + -3.78861E-16 -1.72510E-16 -7.19781E-17 -2.75515E-17 -9.68388E-18 -3.12774E-18 + -9.28854E-19 -2.53755E-19 -6.37982E-20 -1.47666E-20 + 9.94409E-20 4.29629E-19 1.70883E-18 6.25507E-18 2.10628E-17 6.52130E-17 + 1.85537E-16 4.84714E-16 1.16171E-15 2.55132E-15 5.12650E-15 9.40559E-15 + 1.57125E-14 2.38047E-14 3.25107E-14 3.96403E-14 4.24230E-14 3.84972E-14 + 2.70947E-14 9.78174E-15 -9.78174E-15 -2.70947E-14 -3.84972E-14 -4.24230E-14 + -3.96403E-14 -3.25107E-14 -2.38047E-14 -1.57125E-14 -9.40559E-15 -5.12650E-15 + -2.55132E-15 -1.16171E-15 -4.84714E-16 -1.85537E-16 -6.52130E-17 -2.10628E-17 + -6.25507E-18 -1.70883E-18 -4.29629E-19 -9.94409E-20 + 5.89557E-19 2.54715E-18 1.01312E-17 3.70846E-17 1.24875E-16 3.86630E-16 + 1.10000E-15 2.87373E-15 6.88748E-15 1.51261E-14 3.03936E-14 5.57631E-14 + 9.31552E-14 1.41132E-13 1.92747E-13 2.35016E-13 2.51514E-13 2.28239E-13 + 1.60637E-13 5.79932E-14 -5.79932E-14 -1.60637E-13 -2.28239E-13 -2.51514E-13 + -2.35016E-13 -1.92747E-13 -1.41132E-13 -9.31552E-14 -5.57631E-14 -3.03936E-14 + -1.51261E-14 -6.88748E-15 -2.87373E-15 -1.10000E-15 -3.86630E-16 -1.24875E-16 + -3.70846E-17 -1.01312E-17 -2.54715E-18 -5.89557E-19 + 3.07736E-18 1.32956E-17 5.28827E-17 1.93574E-16 6.51822E-16 2.01813E-15 + 5.74176E-15 1.50003E-14 3.59512E-14 7.89549E-14 1.58648E-13 2.91072E-13 + 4.86251E-13 7.36678E-13 1.00610E-12 1.22673E-12 1.31285E-12 1.19136E-12 + 8.38492E-13 3.02712E-13 -3.02712E-13 -8.38492E-13 -1.19136E-12 -1.31285E-12 + -1.22673E-12 -1.00610E-12 -7.36678E-13 -4.86251E-13 -2.91072E-13 -1.58648E-13 + -7.89549E-14 -3.59512E-14 -1.50003E-14 -5.74176E-15 -2.01813E-15 -6.51822E-16 + -1.93574E-16 -5.28827E-17 -1.32956E-17 -3.07736E-18 + 1.41433E-17 6.11052E-17 2.43044E-16 8.89646E-16 2.99571E-15 9.27511E-15 + 2.63886E-14 6.89398E-14 1.65228E-13 3.62869E-13 7.29132E-13 1.33774E-12 + 2.23476E-12 3.38570E-12 4.62393E-12 5.63796E-12 6.03373E-12 5.47538E-12 + 3.85363E-12 1.39124E-12 -1.39124E-12 -3.85363E-12 -5.47538E-12 -6.03373E-12 + -5.63796E-12 -4.62393E-12 -3.38570E-12 -2.23476E-12 -1.33774E-12 -7.29132E-13 + -3.62869E-13 -1.65228E-13 -6.89398E-14 -2.63886E-14 -9.27511E-15 -2.99571E-15 + -8.89646E-16 -2.43044E-16 -6.11052E-17 -1.41433E-17 + 5.72377E-17 2.47293E-16 9.83596E-16 3.60039E-15 1.21236E-14 3.75363E-14 + 1.06794E-13 2.78999E-13 6.68678E-13 1.46853E-12 2.95079E-12 5.41382E-12 + 9.04407E-12 1.37019E-11 1.87130E-11 2.28168E-11 2.44185E-11 2.21588E-11 + 1.55956E-11 5.63033E-12 -5.63033E-12 -1.55956E-11 -2.21588E-11 -2.44185E-11 + -2.28168E-11 -1.87130E-11 -1.37019E-11 -9.04407E-12 -5.41382E-12 -2.95079E-12 + -1.46853E-12 -6.68678E-13 -2.78999E-13 -1.06794E-13 -3.75363E-14 -1.21236E-14 + -3.60039E-15 -9.83596E-16 -2.47293E-16 -5.72377E-17 + 2.04010E-16 8.81413E-16 3.50578E-15 1.28327E-14 4.32116E-14 1.33789E-13 + 3.80642E-13 9.94423E-13 2.38334E-12 5.23420E-12 1.05174E-11 1.92962E-11 + 3.22353E-11 4.88370E-11 6.66978E-11 8.13247E-11 8.70335E-11 7.89796E-11 + 5.55867E-11 2.00679E-11 -2.00679E-11 -5.55867E-11 -7.89796E-11 -8.70335E-11 + -8.13247E-11 -6.66978E-11 -4.88370E-11 -3.22353E-11 -1.92962E-11 -1.05174E-11 + -5.23420E-12 -2.38334E-12 -9.94423E-13 -3.80642E-13 -1.33789E-13 -4.32116E-14 + -1.28327E-14 -3.50578E-15 -8.81413E-16 -2.04010E-16 + 6.40585E-16 2.76761E-15 1.10081E-14 4.02944E-14 1.35684E-13 4.20094E-13 + 1.19521E-12 3.12246E-12 7.48361E-12 1.64353E-11 3.30243E-11 6.05896E-11 + 1.01218E-10 1.53347E-10 2.09429E-10 2.55357E-10 2.73283E-10 2.47994E-10 + 1.74541E-10 6.30127E-11 -6.30127E-11 -1.74541E-10 -2.47994E-10 -2.73283E-10 + -2.55357E-10 -2.09429E-10 -1.53347E-10 -1.01218E-10 -6.05896E-11 -3.30243E-11 + -1.64353E-11 -7.48361E-12 -3.12246E-12 -1.19521E-12 -4.20094E-13 -1.35684E-13 + -4.02944E-14 -1.10081E-14 -2.76761E-15 -6.40585E-16 + 1.77283E-15 7.65941E-15 3.04650E-14 1.11515E-13 3.75506E-13 1.16262E-12 + 3.30775E-12 8.64147E-12 2.07110E-11 4.54849E-11 9.13952E-11 1.67683E-10 + 2.80123E-10 4.24390E-10 5.79599E-10 7.06706E-10 7.56315E-10 6.86328E-10 + 4.83044E-10 1.74389E-10 -1.74389E-10 -4.83044E-10 -6.86328E-10 -7.56315E-10 + -7.06706E-10 -5.79599E-10 -4.24390E-10 -2.80123E-10 -1.67683E-10 -9.13952E-11 + -4.54849E-11 -2.07110E-11 -8.64147E-12 -3.30775E-12 -1.16262E-12 -3.75506E-13 + -1.11515E-13 -3.04650E-14 -7.65941E-15 -1.77283E-15 + 4.32775E-15 1.86978E-14 7.43698E-14 2.72226E-13 9.16669E-13 2.83813E-12 + 8.07473E-12 2.10952E-11 5.05588E-11 1.11036E-10 2.23110E-10 4.09340E-10 + 6.83823E-10 1.03600E-09 1.41489E-09 1.72518E-09 1.84628E-09 1.67543E-09 + 1.17919E-09 4.25710E-10 -4.25710E-10 -1.17919E-09 -1.67543E-09 -1.84628E-09 + -1.72518E-09 -1.41489E-09 -1.03600E-09 -6.83823E-10 -4.09340E-10 -2.23110E-10 + -1.11036E-10 -5.05588E-11 -2.10952E-11 -8.07473E-12 -2.83813E-12 -9.16669E-13 + -2.72226E-13 -7.43698E-14 -1.86978E-14 -4.32775E-15 + 9.33100E-15 4.03141E-14 1.60348E-13 5.86942E-13 1.97642E-12 6.11924E-12 + 1.74098E-11 4.54829E-11 1.09009E-10 2.39402E-10 4.81043E-10 8.82570E-10 + 1.47438E-09 2.23371E-09 3.05063E-09 3.71963E-09 3.98074E-09 3.61237E-09 + 2.54243E-09 9.17866E-10 -9.17866E-10 -2.54243E-09 -3.61237E-09 -3.98074E-09 + -3.71963E-09 -3.05063E-09 -2.23371E-09 -1.47438E-09 -8.82570E-10 -4.81043E-10 + -2.39402E-10 -1.09009E-10 -4.54829E-11 -1.74098E-11 -6.11924E-12 -1.97642E-12 + -5.86942E-13 -1.60348E-13 -4.03141E-14 -9.33100E-15 + 1.78068E-14 7.69333E-14 3.05999E-13 1.12009E-12 3.77169E-12 1.16776E-11 + 3.32240E-11 8.67973E-11 2.08027E-10 4.56863E-10 9.17999E-10 1.68425E-09 + 2.81363E-09 4.26270E-09 5.82166E-09 7.09835E-09 7.59665E-09 6.89367E-09 + 4.85184E-09 1.75161E-09 -1.75161E-09 -4.85184E-09 -6.89367E-09 -7.59665E-09 + -7.09835E-09 -5.82166E-09 -4.26270E-09 -2.81363E-09 -1.68425E-09 -9.17999E-10 + -4.56863E-10 -2.08027E-10 -8.67973E-11 -3.32240E-11 -1.16776E-11 -3.77169E-12 + -1.12009E-12 -3.05999E-13 -7.69333E-14 -1.78068E-14 + 3.01797E-14 1.30390E-13 5.18620E-13 1.89838E-12 6.39242E-12 1.97918E-11 + 5.63094E-11 1.47108E-10 3.52573E-10 7.74310E-10 1.55586E-09 2.85454E-09 + 4.76866E-09 7.22460E-09 9.86679E-09 1.20306E-08 1.28751E-08 1.16837E-08 + 8.22309E-09 2.96870E-09 -2.96870E-09 -8.22309E-09 -1.16837E-08 -1.28751E-08 + -1.20306E-08 -9.86679E-09 -7.22460E-09 -4.76866E-09 -2.85454E-09 -1.55586E-09 + -7.74310E-10 -3.52573E-10 -1.47108E-10 -5.63094E-11 -1.97918E-11 -6.39242E-12 + -1.89838E-12 -5.18620E-13 -1.30390E-13 -3.01797E-14 + 4.56683E-14 1.97308E-13 7.84782E-13 2.87265E-12 9.67309E-12 2.99491E-11 + 8.52081E-11 2.22605E-10 5.33518E-10 1.17170E-09 2.35435E-09 4.31953E-09 + 7.21599E-09 1.09323E-08 1.49306E-08 1.82048E-08 1.94828E-08 1.76799E-08 + 1.24433E-08 4.49227E-09 -4.49227E-09 -1.24433E-08 -1.76799E-08 -1.94828E-08 + -1.82048E-08 -1.49306E-08 -1.09323E-08 -7.21599E-09 -4.31953E-09 -2.35435E-09 + -1.17170E-09 -5.33518E-10 -2.22605E-10 -8.52081E-11 -2.99491E-11 -9.67309E-12 + -2.87265E-12 -7.84782E-13 -1.97308E-13 -4.56683E-14 + 6.21850E-14 2.68667E-13 1.06861E-12 3.91159E-12 1.31715E-11 4.07808E-11 + 1.16025E-10 3.03114E-10 7.26475E-10 1.59546E-09 3.20584E-09 5.88176E-09 + 9.82578E-09 1.48862E-08 2.03304E-08 2.47889E-08 2.65291E-08 2.40741E-08 + 1.69436E-08 6.11698E-09 -6.11698E-09 -1.69436E-08 -2.40741E-08 -2.65291E-08 + -2.47889E-08 -2.03304E-08 -1.48862E-08 -9.82578E-09 -5.88176E-09 -3.20584E-09 + -1.59546E-09 -7.26475E-10 -3.03114E-10 -1.16025E-10 -4.07808E-11 -1.31715E-11 + -3.91159E-12 -1.06861E-12 -2.68667E-13 -6.21850E-14 + 7.70128E-14 3.32730E-13 1.32342E-12 4.84429E-12 1.63122E-11 5.05047E-11 + 1.43691E-10 3.75390E-10 8.99699E-10 1.97589E-09 3.97026E-09 7.28424E-09 + 1.21687E-08 1.84358E-08 2.51781E-08 3.06997E-08 3.28548E-08 2.98145E-08 + 2.09837E-08 7.57554E-09 -7.57554E-09 -2.09837E-08 -2.98145E-08 -3.28548E-08 + -3.06997E-08 -2.51781E-08 -1.84358E-08 -1.21687E-08 -7.28424E-09 -3.97026E-09 + -1.97589E-09 -8.99699E-10 -3.75390E-10 -1.43691E-10 -5.05047E-11 -1.63122E-11 + -4.84429E-12 -1.32342E-12 -3.32730E-13 -7.70128E-14 + 8.78595E-14 3.79592E-13 1.50981E-12 5.52658E-12 1.86097E-11 5.76180E-11 + 1.63928E-10 4.28262E-10 1.02642E-09 2.25418E-09 4.52944E-09 8.31017E-09 + 1.38826E-08 2.10323E-08 2.87243E-08 3.50236E-08 3.74822E-08 3.40136E-08 + 2.39392E-08 8.64251E-09 -8.64251E-09 -2.39392E-08 -3.40136E-08 -3.74822E-08 + -3.50236E-08 -2.87243E-08 -2.10323E-08 -1.38826E-08 -8.31017E-09 -4.52944E-09 + -2.25418E-09 -1.02642E-09 -4.28262E-10 -1.63928E-10 -5.76180E-11 -1.86097E-11 + -5.52658E-12 -1.50981E-12 -3.79592E-13 -8.78595E-14 + 9.34774E-14 4.03864E-13 1.60635E-12 5.87996E-12 1.97996E-11 6.13022E-11 + 1.74410E-10 4.55645E-10 1.09205E-09 2.39832E-09 4.81907E-09 8.84154E-09 + 1.47702E-08 2.23772E-08 3.05610E-08 3.72630E-08 3.98788E-08 3.61885E-08 + 2.54699E-08 9.19513E-09 -9.19513E-09 -2.54699E-08 -3.61885E-08 -3.98788E-08 + -3.72630E-08 -3.05610E-08 -2.23772E-08 -1.47702E-08 -8.84154E-09 -4.81907E-09 + -2.39832E-09 -1.09205E-09 -4.55645E-10 -1.74410E-10 -6.13022E-11 -1.97996E-11 + -5.87996E-12 -1.60635E-12 -4.03864E-13 -9.34774E-14 + 9.34774E-14 4.03864E-13 1.60635E-12 5.87996E-12 1.97996E-11 6.13022E-11 + 1.74410E-10 4.55645E-10 1.09205E-09 2.39832E-09 4.81907E-09 8.84154E-09 + 1.47702E-08 2.23772E-08 3.05610E-08 3.72630E-08 3.98788E-08 3.61885E-08 + 2.54699E-08 9.19513E-09 -9.19513E-09 -2.54699E-08 -3.61885E-08 -3.98788E-08 + -3.72630E-08 -3.05610E-08 -2.23772E-08 -1.47702E-08 -8.84154E-09 -4.81907E-09 + -2.39832E-09 -1.09205E-09 -4.55645E-10 -1.74410E-10 -6.13022E-11 -1.97996E-11 + -5.87996E-12 -1.60635E-12 -4.03864E-13 -9.34774E-14 + 8.78595E-14 3.79592E-13 1.50981E-12 5.52658E-12 1.86097E-11 5.76180E-11 + 1.63928E-10 4.28262E-10 1.02642E-09 2.25418E-09 4.52944E-09 8.31017E-09 + 1.38826E-08 2.10323E-08 2.87243E-08 3.50236E-08 3.74822E-08 3.40136E-08 + 2.39392E-08 8.64251E-09 -8.64251E-09 -2.39392E-08 -3.40136E-08 -3.74822E-08 + -3.50236E-08 -2.87243E-08 -2.10323E-08 -1.38826E-08 -8.31017E-09 -4.52944E-09 + -2.25418E-09 -1.02642E-09 -4.28262E-10 -1.63928E-10 -5.76180E-11 -1.86097E-11 + -5.52658E-12 -1.50981E-12 -3.79592E-13 -8.78595E-14 + 7.70128E-14 3.32730E-13 1.32342E-12 4.84429E-12 1.63122E-11 5.05047E-11 + 1.43691E-10 3.75390E-10 8.99699E-10 1.97589E-09 3.97026E-09 7.28424E-09 + 1.21687E-08 1.84358E-08 2.51781E-08 3.06997E-08 3.28548E-08 2.98145E-08 + 2.09837E-08 7.57554E-09 -7.57554E-09 -2.09837E-08 -2.98145E-08 -3.28548E-08 + -3.06997E-08 -2.51781E-08 -1.84358E-08 -1.21687E-08 -7.28424E-09 -3.97026E-09 + -1.97589E-09 -8.99699E-10 -3.75390E-10 -1.43691E-10 -5.05047E-11 -1.63122E-11 + -4.84429E-12 -1.32342E-12 -3.32730E-13 -7.70128E-14 + 6.21850E-14 2.68667E-13 1.06861E-12 3.91159E-12 1.31715E-11 4.07808E-11 + 1.16025E-10 3.03114E-10 7.26475E-10 1.59546E-09 3.20584E-09 5.88176E-09 + 9.82578E-09 1.48862E-08 2.03304E-08 2.47889E-08 2.65291E-08 2.40741E-08 + 1.69436E-08 6.11698E-09 -6.11698E-09 -1.69436E-08 -2.40741E-08 -2.65291E-08 + -2.47889E-08 -2.03304E-08 -1.48862E-08 -9.82578E-09 -5.88176E-09 -3.20584E-09 + -1.59546E-09 -7.26475E-10 -3.03114E-10 -1.16025E-10 -4.07808E-11 -1.31715E-11 + -3.91159E-12 -1.06861E-12 -2.68667E-13 -6.21850E-14 + 4.56683E-14 1.97308E-13 7.84782E-13 2.87265E-12 9.67309E-12 2.99491E-11 + 8.52081E-11 2.22605E-10 5.33518E-10 1.17170E-09 2.35435E-09 4.31953E-09 + 7.21599E-09 1.09323E-08 1.49306E-08 1.82048E-08 1.94828E-08 1.76799E-08 + 1.24433E-08 4.49227E-09 -4.49227E-09 -1.24433E-08 -1.76799E-08 -1.94828E-08 + -1.82048E-08 -1.49306E-08 -1.09323E-08 -7.21599E-09 -4.31953E-09 -2.35435E-09 + -1.17170E-09 -5.33518E-10 -2.22605E-10 -8.52081E-11 -2.99491E-11 -9.67309E-12 + -2.87265E-12 -7.84782E-13 -1.97308E-13 -4.56683E-14 + 3.01797E-14 1.30390E-13 5.18620E-13 1.89838E-12 6.39242E-12 1.97918E-11 + 5.63094E-11 1.47108E-10 3.52573E-10 7.74310E-10 1.55586E-09 2.85454E-09 + 4.76866E-09 7.22460E-09 9.86679E-09 1.20306E-08 1.28751E-08 1.16837E-08 + 8.22309E-09 2.96870E-09 -2.96870E-09 -8.22309E-09 -1.16837E-08 -1.28751E-08 + -1.20306E-08 -9.86679E-09 -7.22460E-09 -4.76866E-09 -2.85454E-09 -1.55586E-09 + -7.74310E-10 -3.52573E-10 -1.47108E-10 -5.63094E-11 -1.97918E-11 -6.39242E-12 + -1.89838E-12 -5.18620E-13 -1.30390E-13 -3.01797E-14 + 1.78068E-14 7.69333E-14 3.05999E-13 1.12009E-12 3.77169E-12 1.16776E-11 + 3.32240E-11 8.67973E-11 2.08027E-10 4.56863E-10 9.17999E-10 1.68425E-09 + 2.81363E-09 4.26270E-09 5.82166E-09 7.09835E-09 7.59665E-09 6.89367E-09 + 4.85184E-09 1.75161E-09 -1.75161E-09 -4.85184E-09 -6.89367E-09 -7.59665E-09 + -7.09835E-09 -5.82166E-09 -4.26270E-09 -2.81363E-09 -1.68425E-09 -9.17999E-10 + -4.56863E-10 -2.08027E-10 -8.67973E-11 -3.32240E-11 -1.16776E-11 -3.77169E-12 + -1.12009E-12 -3.05999E-13 -7.69333E-14 -1.78068E-14 + 9.33100E-15 4.03141E-14 1.60348E-13 5.86942E-13 1.97642E-12 6.11924E-12 + 1.74098E-11 4.54829E-11 1.09009E-10 2.39402E-10 4.81043E-10 8.82570E-10 + 1.47438E-09 2.23371E-09 3.05063E-09 3.71963E-09 3.98074E-09 3.61237E-09 + 2.54243E-09 9.17866E-10 -9.17866E-10 -2.54243E-09 -3.61237E-09 -3.98074E-09 + -3.71963E-09 -3.05063E-09 -2.23371E-09 -1.47438E-09 -8.82570E-10 -4.81043E-10 + -2.39402E-10 -1.09009E-10 -4.54829E-11 -1.74098E-11 -6.11924E-12 -1.97642E-12 + -5.86942E-13 -1.60348E-13 -4.03141E-14 -9.33100E-15 + 4.32775E-15 1.86978E-14 7.43698E-14 2.72226E-13 9.16669E-13 2.83813E-12 + 8.07473E-12 2.10952E-11 5.05588E-11 1.11036E-10 2.23110E-10 4.09340E-10 + 6.83823E-10 1.03600E-09 1.41489E-09 1.72518E-09 1.84628E-09 1.67543E-09 + 1.17919E-09 4.25710E-10 -4.25710E-10 -1.17919E-09 -1.67543E-09 -1.84628E-09 + -1.72518E-09 -1.41489E-09 -1.03600E-09 -6.83823E-10 -4.09340E-10 -2.23110E-10 + -1.11036E-10 -5.05588E-11 -2.10952E-11 -8.07473E-12 -2.83813E-12 -9.16669E-13 + -2.72226E-13 -7.43698E-14 -1.86978E-14 -4.32775E-15 + 1.77283E-15 7.65941E-15 3.04650E-14 1.11515E-13 3.75506E-13 1.16262E-12 + 3.30775E-12 8.64147E-12 2.07110E-11 4.54849E-11 9.13952E-11 1.67683E-10 + 2.80123E-10 4.24390E-10 5.79599E-10 7.06706E-10 7.56315E-10 6.86328E-10 + 4.83044E-10 1.74389E-10 -1.74389E-10 -4.83044E-10 -6.86328E-10 -7.56315E-10 + -7.06706E-10 -5.79599E-10 -4.24390E-10 -2.80123E-10 -1.67683E-10 -9.13952E-11 + -4.54849E-11 -2.07110E-11 -8.64147E-12 -3.30775E-12 -1.16262E-12 -3.75506E-13 + -1.11515E-13 -3.04650E-14 -7.65941E-15 -1.77283E-15 + 6.40585E-16 2.76761E-15 1.10081E-14 4.02944E-14 1.35684E-13 4.20094E-13 + 1.19521E-12 3.12246E-12 7.48361E-12 1.64353E-11 3.30243E-11 6.05896E-11 + 1.01218E-10 1.53347E-10 2.09429E-10 2.55357E-10 2.73283E-10 2.47994E-10 + 1.74541E-10 6.30127E-11 -6.30127E-11 -1.74541E-10 -2.47994E-10 -2.73283E-10 + -2.55357E-10 -2.09429E-10 -1.53347E-10 -1.01218E-10 -6.05896E-11 -3.30243E-11 + -1.64353E-11 -7.48361E-12 -3.12246E-12 -1.19521E-12 -4.20094E-13 -1.35684E-13 + -4.02944E-14 -1.10081E-14 -2.76761E-15 -6.40585E-16 + 2.04010E-16 8.81413E-16 3.50578E-15 1.28327E-14 4.32116E-14 1.33789E-13 + 3.80642E-13 9.94423E-13 2.38334E-12 5.23420E-12 1.05174E-11 1.92962E-11 + 3.22353E-11 4.88370E-11 6.66978E-11 8.13247E-11 8.70335E-11 7.89796E-11 + 5.55867E-11 2.00679E-11 -2.00679E-11 -5.55867E-11 -7.89796E-11 -8.70335E-11 + -8.13247E-11 -6.66978E-11 -4.88370E-11 -3.22353E-11 -1.92962E-11 -1.05174E-11 + -5.23420E-12 -2.38334E-12 -9.94423E-13 -3.80642E-13 -1.33789E-13 -4.32116E-14 + -1.28327E-14 -3.50578E-15 -8.81413E-16 -2.04010E-16 + 5.72377E-17 2.47293E-16 9.83596E-16 3.60039E-15 1.21236E-14 3.75363E-14 + 1.06794E-13 2.78999E-13 6.68678E-13 1.46853E-12 2.95079E-12 5.41382E-12 + 9.04407E-12 1.37019E-11 1.87130E-11 2.28168E-11 2.44185E-11 2.21588E-11 + 1.55956E-11 5.63033E-12 -5.63033E-12 -1.55956E-11 -2.21588E-11 -2.44185E-11 + -2.28168E-11 -1.87130E-11 -1.37019E-11 -9.04407E-12 -5.41382E-12 -2.95079E-12 + -1.46853E-12 -6.68678E-13 -2.78999E-13 -1.06794E-13 -3.75363E-14 -1.21236E-14 + -3.60039E-15 -9.83596E-16 -2.47293E-16 -5.72377E-17 + 1.41433E-17 6.11052E-17 2.43044E-16 8.89646E-16 2.99571E-15 9.27511E-15 + 2.63886E-14 6.89398E-14 1.65228E-13 3.62869E-13 7.29132E-13 1.33774E-12 + 2.23476E-12 3.38570E-12 4.62393E-12 5.63796E-12 6.03373E-12 5.47538E-12 + 3.85363E-12 1.39124E-12 -1.39124E-12 -3.85363E-12 -5.47538E-12 -6.03373E-12 + -5.63796E-12 -4.62393E-12 -3.38570E-12 -2.23476E-12 -1.33774E-12 -7.29132E-13 + -3.62869E-13 -1.65228E-13 -6.89398E-14 -2.63886E-14 -9.27511E-15 -2.99571E-15 + -8.89646E-16 -2.43044E-16 -6.11052E-17 -1.41433E-17 + 3.07736E-18 1.32956E-17 5.28827E-17 1.93574E-16 6.51822E-16 2.01813E-15 + 5.74176E-15 1.50003E-14 3.59512E-14 7.89549E-14 1.58648E-13 2.91072E-13 + 4.86251E-13 7.36678E-13 1.00610E-12 1.22673E-12 1.31285E-12 1.19136E-12 + 8.38492E-13 3.02712E-13 -3.02712E-13 -8.38492E-13 -1.19136E-12 -1.31285E-12 + -1.22673E-12 -1.00610E-12 -7.36678E-13 -4.86251E-13 -2.91072E-13 -1.58648E-13 + -7.89549E-14 -3.59512E-14 -1.50003E-14 -5.74176E-15 -2.01813E-15 -6.51822E-16 + -1.93574E-16 -5.28827E-17 -1.32956E-17 -3.07736E-18 + 5.89557E-19 2.54715E-18 1.01312E-17 3.70846E-17 1.24875E-16 3.86630E-16 + 1.10000E-15 2.87373E-15 6.88748E-15 1.51261E-14 3.03936E-14 5.57631E-14 + 9.31552E-14 1.41132E-13 1.92747E-13 2.35016E-13 2.51514E-13 2.28239E-13 + 1.60637E-13 5.79932E-14 -5.79932E-14 -1.60637E-13 -2.28239E-13 -2.51514E-13 + -2.35016E-13 -1.92747E-13 -1.41132E-13 -9.31552E-14 -5.57631E-14 -3.03936E-14 + -1.51261E-14 -6.88748E-15 -2.87373E-15 -1.10000E-15 -3.86630E-16 -1.24875E-16 + -3.70846E-17 -1.01312E-17 -2.54715E-18 -5.89557E-19 + 9.94409E-20 4.29629E-19 1.70883E-18 6.25507E-18 2.10628E-17 6.52130E-17 + 1.85537E-16 4.84714E-16 1.16171E-15 2.55132E-15 5.12650E-15 9.40559E-15 + 1.57125E-14 2.38047E-14 3.25107E-14 3.96403E-14 4.24230E-14 3.84972E-14 + 2.70947E-14 9.78174E-15 -9.78174E-15 -2.70947E-14 -3.84972E-14 -4.24230E-14 + -3.96403E-14 -3.25107E-14 -2.38047E-14 -1.57125E-14 -9.40559E-15 -5.12650E-15 + -2.55132E-15 -1.16171E-15 -4.84714E-16 -1.85537E-16 -6.52130E-17 -2.10628E-17 + -6.25507E-18 -1.70883E-18 -4.29629E-19 -9.94409E-20 + 1.47666E-20 6.37982E-20 2.53755E-19 9.28854E-19 3.12774E-18 9.68388E-18 + 2.75515E-17 7.19781E-17 1.72510E-16 3.78861E-16 7.61266E-16 1.39669E-15 + 2.33325E-15 3.53491E-15 4.82771E-15 5.88643E-15 6.29965E-15 5.71669E-15 + 4.02347E-15 1.45255E-15 -1.45255E-15 -4.02347E-15 -5.71669E-15 -6.29965E-15 + -5.88643E-15 -4.82771E-15 -3.53491E-15 -2.33325E-15 -1.39669E-15 -7.61266E-16 + -3.78861E-16 -1.72510E-16 -7.19781E-17 -2.75515E-17 -9.68388E-18 -3.12774E-18 + -9.28854E-19 -2.53755E-19 -6.37982E-20 -1.47666E-20 + 1.93047E-21 8.34048E-21 3.31739E-20 1.21431E-19 4.08896E-19 1.26599E-18 + 3.60187E-18 9.40985E-18 2.25526E-17 4.95293E-17 9.95219E-17 1.82593E-16 + 3.05031E-16 4.62126E-16 6.31136E-16 7.69545E-16 8.23566E-16 7.47355E-16 + 5.25996E-16 1.89895E-16 -1.89895E-16 -5.25996E-16 -7.47355E-16 -8.23566E-16 + -7.69545E-16 -6.31136E-16 -4.62126E-16 -3.05031E-16 -1.82593E-16 -9.95219E-17 + -4.95293E-17 -2.25526E-17 -9.40985E-18 -3.60187E-18 -1.26599E-18 -4.08896E-19 + -1.21431E-19 -3.31739E-20 -8.34048E-21 -1.93047E-21 + 2.22180E-22 9.59919E-22 3.81804E-21 1.39757E-20 4.70604E-20 1.45705E-19 + 4.14545E-19 1.08299E-18 2.59562E-18 5.70041E-18 1.14541E-17 2.10149E-17 + 3.51064E-17 5.31869E-17 7.26385E-17 8.85681E-17 9.47855E-17 8.60142E-17 + 6.05377E-17 2.18553E-17 -2.18553E-17 -6.05377E-17 -8.60142E-17 -9.47855E-17 + -8.85681E-17 -7.26385E-17 -5.31869E-17 -3.51064E-17 -2.10149E-17 -1.14541E-17 + -5.70041E-18 -2.59562E-18 -1.08299E-18 -4.14545E-19 -1.45705E-19 -4.70604E-20 + -1.39757E-20 -3.81804E-21 -9.59919E-22 -2.22180E-22 + 2.50338E-23 1.08157E-22 4.30192E-22 1.57469E-21 5.30246E-21 1.64171E-20 + 4.67082E-20 1.22025E-19 2.92457E-19 6.42285E-19 1.29058E-18 2.36782E-18 + 3.95557E-18 5.99275E-18 8.18443E-18 9.97928E-18 1.06798E-17 9.69152E-18 + 6.82100E-18 2.46251E-18 -2.46251E-18 -6.82100E-18 -9.69152E-18 -1.06798E-17 + -9.97928E-18 -8.18443E-18 -5.99275E-18 -3.95557E-18 -2.36782E-18 -1.29058E-18 + -6.42285E-19 -2.92457E-19 -1.22025E-19 -4.67082E-20 -1.64171E-20 -5.30246E-21 + -1.57469E-21 -4.30192E-22 -1.08157E-22 -2.50338E-23 + 2.17512E-22 9.39751E-22 3.73782E-21 1.36821E-20 4.60717E-20 1.42644E-19 + 4.05835E-19 1.06024E-18 2.54108E-18 5.58064E-18 1.12135E-17 2.05734E-17 + 3.43689E-17 5.20694E-17 7.11123E-17 8.67073E-17 9.27940E-17 8.42071E-17 + 5.92658E-17 2.13961E-17 -2.13961E-17 -5.92658E-17 -8.42071E-17 -9.27940E-17 + -8.67073E-17 -7.11123E-17 -5.20694E-17 -3.43689E-17 -2.05734E-17 -1.12135E-17 + -5.58064E-18 -2.54108E-18 -1.06024E-18 -4.05835E-19 -1.42644E-19 -4.60717E-20 + -1.36821E-20 -3.73782E-21 -9.39751E-22 -2.17512E-22 + 1.66380E-21 7.18837E-21 2.85914E-20 1.04657E-19 3.52413E-19 1.09112E-18 + 3.10433E-18 8.11003E-18 1.94373E-17 4.26876E-17 8.57745E-17 1.57370E-16 + 2.62895E-16 3.98291E-16 5.43955E-16 6.63244E-16 7.09803E-16 6.44119E-16 + 4.53338E-16 1.63664E-16 -1.63664E-16 -4.53338E-16 -6.44119E-16 -7.09803E-16 + -6.63244E-16 -5.43955E-16 -3.98291E-16 -2.62895E-16 -1.57370E-16 -8.57745E-17 + -4.26876E-17 -1.94373E-17 -8.11003E-18 -3.10433E-18 -1.09112E-18 -3.52413E-19 + -1.04657E-19 -2.85914E-20 -7.18837E-21 -1.66380E-21 + 1.12043E-20 4.84078E-20 1.92540E-19 7.04781E-19 2.37321E-18 7.34778E-18 + 2.09051E-17 5.46144E-17 1.30894E-16 2.87466E-16 5.77621E-16 1.05976E-15 + 1.77039E-15 2.68216E-15 3.66309E-15 4.46641E-15 4.77994E-15 4.33762E-15 + 3.05286E-15 1.10214E-15 -1.10214E-15 -3.05286E-15 -4.33762E-15 -4.77994E-15 + -4.46641E-15 -3.66309E-15 -2.68216E-15 -1.77039E-15 -1.05976E-15 -5.77621E-16 + -2.87466E-16 -1.30894E-16 -5.46144E-17 -2.09051E-17 -7.34778E-18 -2.37321E-18 + -7.04781E-19 -1.92540E-19 -4.84078E-20 -1.12043E-20 + 6.64275E-20 2.86996E-19 1.14152E-18 4.17845E-18 1.40701E-17 4.35629E-17 + 1.23941E-16 3.23794E-16 7.76037E-16 1.70431E-15 3.42455E-15 6.28303E-15 + 1.04961E-14 1.59018E-14 2.17174E-14 2.64801E-14 2.83390E-14 2.57165E-14 + 1.80996E-14 6.53430E-15 -6.53430E-15 -1.80996E-14 -2.57165E-14 -2.83390E-14 + -2.64801E-14 -2.17174E-14 -1.59018E-14 -1.04961E-14 -6.28303E-15 -3.42455E-15 + -1.70431E-15 -7.76037E-16 -3.23794E-16 -1.23941E-16 -4.35629E-17 -1.40701E-17 + -4.17845E-18 -1.14152E-18 -2.86996E-19 -6.64275E-20 + 3.46737E-19 1.49806E-18 5.95847E-18 2.18106E-17 7.34431E-17 2.27389E-16 + 6.46944E-16 1.69013E-15 4.05075E-15 8.89612E-15 1.78754E-14 3.27961E-14 + 5.47875E-14 8.30040E-14 1.13360E-13 1.38221E-13 1.47923E-13 1.34235E-13 + 9.44759E-14 3.41077E-14 -3.41077E-14 -9.44759E-14 -1.34235E-13 -1.47923E-13 + -1.38221E-13 -1.13360E-13 -8.30040E-14 -5.47875E-14 -3.27961E-14 -1.78754E-14 + -8.89612E-15 -4.05075E-15 -1.69013E-15 -6.46944E-16 -2.27389E-16 -7.34431E-17 + -2.18106E-17 -5.95847E-18 -1.49806E-18 -3.46737E-19 + 1.59357E-18 6.88494E-18 2.73846E-17 1.00240E-16 3.37537E-16 1.04506E-15 + 2.97329E-15 7.76769E-15 1.86168E-14 4.08857E-14 8.21538E-14 1.50728E-13 + 2.51798E-13 3.81479E-13 5.20994E-13 6.35248E-13 6.79841E-13 6.16930E-13 + 4.34202E-13 1.56755E-13 -1.56755E-13 -4.34202E-13 -6.16930E-13 -6.79841E-13 + -6.35248E-13 -5.20994E-13 -3.81479E-13 -2.51798E-13 -1.50728E-13 -8.21538E-14 + -4.08857E-14 -1.86168E-14 -7.76769E-15 -2.97329E-15 -1.04506E-15 -3.37537E-16 + -1.00240E-16 -2.73846E-17 -6.88494E-18 -1.59357E-18 + 6.44918E-18 2.78633E-17 1.10825E-16 4.05669E-16 1.36601E-15 4.22935E-15 + 1.20329E-14 3.14358E-14 7.53423E-14 1.65464E-13 3.32476E-13 6.09994E-13 + 1.01903E-12 1.54384E-12 2.10846E-12 2.57085E-12 2.75132E-12 2.49671E-12 + 1.75721E-12 6.34389E-13 -6.34389E-13 -1.75721E-12 -2.49671E-12 -2.75132E-12 + -2.57085E-12 -2.10846E-12 -1.54384E-12 -1.01903E-12 -6.09994E-13 -3.32476E-13 + -1.65464E-13 -7.53423E-14 -3.14358E-14 -1.20329E-14 -4.22935E-15 -1.36601E-15 + -4.05669E-16 -1.10825E-16 -2.78633E-17 -6.44918E-18 + 2.29865E-17 9.93118E-17 3.95009E-16 1.44591E-15 4.86881E-15 1.50745E-14 + 4.28882E-14 1.12045E-13 2.68539E-13 5.89756E-13 1.18503E-12 2.17417E-12 + 3.63206E-12 5.50264E-12 7.51507E-12 9.16313E-12 9.80637E-12 8.89891E-12 + 6.26315E-12 2.26112E-12 -2.26112E-12 -6.26315E-12 -8.89891E-12 -9.80637E-12 + -9.16313E-12 -7.51507E-12 -5.50264E-12 -3.63206E-12 -2.17417E-12 -1.18503E-12 + -5.89756E-13 -2.68539E-13 -1.12045E-13 -4.28882E-14 -1.50745E-14 -4.86881E-15 + -1.44591E-15 -3.95009E-16 -9.93118E-17 -2.29865E-17 + 7.21770E-17 3.11837E-16 1.24032E-15 4.54011E-15 1.52879E-14 4.73334E-14 + 1.34668E-13 3.51819E-13 8.43205E-13 1.85182E-12 3.72096E-12 6.82684E-12 + 1.14046E-11 1.72781E-11 2.35972E-11 2.87720E-11 3.07918E-11 2.79424E-11 + 1.96661E-11 7.09986E-12 -7.09986E-12 -1.96661E-11 -2.79424E-11 -3.07918E-11 + -2.87720E-11 -2.35972E-11 -1.72781E-11 -1.14046E-11 -6.82684E-12 -3.72096E-12 + -1.85182E-12 -8.43205E-13 -3.51819E-13 -1.34668E-13 -4.73334E-14 -1.52879E-14 + -4.54011E-15 -1.24032E-15 -3.11837E-16 -7.21770E-17 + 1.99751E-16 8.63013E-16 3.43260E-15 1.25648E-14 4.23096E-14 1.30996E-13 + 3.72696E-13 9.73664E-13 2.33358E-12 5.12494E-12 1.02978E-11 1.88934E-11 + 3.15624E-11 4.78175E-11 6.53055E-11 7.96270E-11 8.52167E-11 7.73309E-11 + 5.44263E-11 1.96490E-11 -1.96490E-11 -5.44263E-11 -7.73309E-11 -8.52167E-11 + -7.96270E-11 -6.53055E-11 -4.78175E-11 -3.15624E-11 -1.88934E-11 -1.02978E-11 + -5.12494E-12 -2.33358E-12 -9.73664E-13 -3.72696E-13 -1.30996E-13 -4.23096E-14 + -1.25648E-14 -3.43260E-15 -8.63013E-16 -1.99751E-16 + 4.87623E-16 2.10675E-15 8.37951E-15 3.06727E-14 1.03284E-13 3.19782E-13 + 9.09809E-13 2.37687E-12 5.69664E-12 1.25108E-11 2.51386E-11 4.61217E-11 + 7.70487E-11 1.16730E-10 1.59421E-10 1.94382E-10 2.08027E-10 1.88777E-10 + 1.32863E-10 4.79662E-11 -4.79662E-11 -1.32863E-10 -1.88777E-10 -2.08027E-10 + -1.94382E-10 -1.59421E-10 -1.16730E-10 -7.70487E-11 -4.61217E-11 -2.51386E-11 + -1.25108E-11 -5.69664E-12 -2.37687E-12 -9.09809E-13 -3.19782E-13 -1.03284E-13 + -3.06727E-14 -8.37951E-15 -2.10675E-15 -4.87623E-16 + 1.05136E-15 4.54233E-15 1.80669E-14 6.61329E-14 2.22690E-13 6.89476E-13 + 1.96162E-12 5.12472E-12 1.22824E-11 2.69743E-11 5.42008E-11 9.94423E-11 + 1.66123E-10 2.51680E-10 3.43725E-10 4.19104E-10 4.48524E-10 4.07019E-10 + 2.86464E-10 1.03419E-10 -1.03419E-10 -2.86464E-10 -4.07019E-10 -4.48524E-10 + -4.19104E-10 -3.43725E-10 -2.51680E-10 -1.66123E-10 -9.94423E-11 -5.42008E-11 + -2.69743E-11 -1.22824E-11 -5.12472E-12 -1.96162E-12 -6.89476E-13 -2.22690E-13 + -6.61329E-14 -1.80669E-14 -4.54233E-15 -1.05136E-15 + 2.00635E-15 8.66835E-15 3.44780E-14 1.26205E-13 4.24970E-13 1.31576E-12 + 3.74346E-12 9.77976E-12 2.34392E-11 5.14764E-11 1.03434E-10 1.89771E-10 + 3.17022E-10 4.80293E-10 6.55947E-10 7.99796E-10 8.55941E-10 7.76734E-10 + 5.46673E-10 1.97360E-10 -1.97360E-10 -5.46673E-10 -7.76734E-10 -8.55941E-10 + -7.99796E-10 -6.55947E-10 -4.80293E-10 -3.17022E-10 -1.89771E-10 -1.03434E-10 + -5.14764E-11 -2.34392E-11 -9.77976E-12 -3.74346E-12 -1.31576E-12 -4.24970E-13 + -1.26205E-13 -3.44780E-14 -8.66835E-15 -2.00635E-15 + 3.40045E-15 1.46915E-14 5.84347E-14 2.13897E-13 7.20256E-13 2.23001E-12 + 6.34458E-12 1.65751E-11 3.97257E-11 8.72443E-11 1.75304E-10 3.21631E-10 + 5.37301E-10 8.14020E-10 1.11173E-09 1.35553E-09 1.45068E-09 1.31644E-09 + 9.26525E-10 3.34494E-10 -3.34494E-10 -9.26525E-10 -1.31644E-09 -1.45068E-09 + -1.35553E-09 -1.11173E-09 -8.14020E-10 -5.37301E-10 -3.21631E-10 -1.75304E-10 + -8.72443E-11 -3.97257E-11 -1.65751E-11 -6.34458E-12 -2.23001E-12 -7.20256E-13 + -2.13897E-13 -5.84347E-14 -1.46915E-14 -3.40045E-15 + 5.14561E-15 2.22313E-14 8.84242E-14 3.23671E-13 1.08990E-12 3.37447E-12 + 9.60069E-12 2.50817E-11 6.01134E-11 1.32019E-10 2.65273E-10 4.86696E-10 + 8.13051E-10 1.23179E-09 1.68228E-09 2.05120E-09 2.19519E-09 1.99205E-09 + 1.40203E-09 5.06160E-10 -5.06160E-10 -1.40203E-09 -1.99205E-09 -2.19519E-09 + -2.05120E-09 -1.68228E-09 -1.23179E-09 -8.13051E-10 -4.86696E-10 -2.65273E-10 + -1.32019E-10 -6.01134E-11 -2.50817E-11 -9.60069E-12 -3.37447E-12 -1.08990E-12 + -3.23671E-13 -8.84242E-14 -2.22313E-14 -5.14561E-15 + 7.00660E-15 3.02717E-14 1.20404E-13 4.40733E-13 1.48408E-12 4.59491E-12 + 1.30729E-11 3.41529E-11 8.18544E-11 1.79766E-10 3.61213E-10 6.62718E-10 + 1.10710E-09 1.67728E-09 2.29070E-09 2.79305E-09 2.98912E-09 2.71252E-09 + 1.90910E-09 6.89221E-10 -6.89221E-10 -1.90910E-09 -2.71252E-09 -2.98912E-09 + -2.79305E-09 -2.29070E-09 -1.67728E-09 -1.10710E-09 -6.62718E-10 -3.61213E-10 + -1.79766E-10 -8.18544E-11 -3.41529E-11 -1.30729E-11 -4.59491E-12 -1.48408E-12 + -4.40733E-13 -1.20404E-13 -3.02717E-14 -7.00660E-15 + 8.67730E-15 3.74898E-14 1.49114E-13 5.45823E-13 1.83795E-12 5.69054E-12 + 1.61901E-11 4.22965E-11 1.01372E-10 2.22630E-10 4.47343E-10 8.20740E-10 + 1.37109E-09 2.07722E-09 2.83691E-09 3.45905E-09 3.70186E-09 3.35930E-09 + 2.36431E-09 8.53563E-10 -8.53563E-10 -2.36431E-09 -3.35930E-09 -3.70186E-09 + -3.45905E-09 -2.83691E-09 -2.07722E-09 -1.37109E-09 -8.20740E-10 -4.47343E-10 + -2.22630E-10 -1.01372E-10 -4.22965E-11 -1.61901E-11 -5.69054E-12 -1.83795E-12 + -5.45823E-13 -1.49114E-13 -3.74898E-14 -8.67730E-15 + 9.89943E-15 4.27700E-14 1.70116E-13 6.22699E-13 2.09682E-12 6.49202E-12 + 1.84704E-11 4.82537E-11 1.15650E-10 2.53986E-10 5.10348E-10 9.36336E-10 + 1.56420E-09 2.36978E-09 3.23647E-09 3.94623E-09 4.22325E-09 3.83244E-09 + 2.69731E-09 9.73781E-10 -9.73781E-10 -2.69731E-09 -3.83244E-09 -4.22325E-09 + -3.94623E-09 -3.23647E-09 -2.36978E-09 -1.56420E-09 -9.36336E-10 -5.10348E-10 + -2.53986E-10 -1.15650E-10 -4.82537E-11 -1.84704E-11 -6.49202E-12 -2.09682E-12 + -6.22699E-13 -1.70116E-13 -4.27700E-14 -9.89943E-15 + 1.05324E-14 4.55048E-14 1.80993E-13 6.62515E-13 2.23089E-12 6.90713E-12 + 1.96514E-11 5.13392E-11 1.23045E-10 2.70227E-10 5.42981E-10 9.96207E-10 + 1.66422E-09 2.52131E-09 3.44341E-09 4.19856E-09 4.49329E-09 4.07749E-09 + 2.86978E-09 1.03605E-09 -1.03605E-09 -2.86978E-09 -4.07749E-09 -4.49329E-09 + -4.19856E-09 -3.44341E-09 -2.52131E-09 -1.66422E-09 -9.96207E-10 -5.42981E-10 + -2.70227E-10 -1.23045E-10 -5.13392E-11 -1.96514E-11 -6.90713E-12 -2.23089E-12 + -6.62515E-13 -1.80993E-13 -4.55048E-14 -1.05324E-14 + 1.05324E-14 4.55048E-14 1.80993E-13 6.62515E-13 2.23089E-12 6.90713E-12 + 1.96514E-11 5.13392E-11 1.23045E-10 2.70227E-10 5.42981E-10 9.96207E-10 + 1.66422E-09 2.52131E-09 3.44341E-09 4.19856E-09 4.49329E-09 4.07749E-09 + 2.86978E-09 1.03605E-09 -1.03605E-09 -2.86978E-09 -4.07749E-09 -4.49329E-09 + -4.19856E-09 -3.44341E-09 -2.52131E-09 -1.66422E-09 -9.96207E-10 -5.42981E-10 + -2.70227E-10 -1.23045E-10 -5.13392E-11 -1.96514E-11 -6.90713E-12 -2.23089E-12 + -6.62515E-13 -1.80993E-13 -4.55048E-14 -1.05324E-14 + 9.89943E-15 4.27700E-14 1.70116E-13 6.22699E-13 2.09682E-12 6.49202E-12 + 1.84704E-11 4.82537E-11 1.15650E-10 2.53986E-10 5.10348E-10 9.36336E-10 + 1.56420E-09 2.36978E-09 3.23647E-09 3.94623E-09 4.22325E-09 3.83244E-09 + 2.69731E-09 9.73781E-10 -9.73781E-10 -2.69731E-09 -3.83244E-09 -4.22325E-09 + -3.94623E-09 -3.23647E-09 -2.36978E-09 -1.56420E-09 -9.36336E-10 -5.10348E-10 + -2.53986E-10 -1.15650E-10 -4.82537E-11 -1.84704E-11 -6.49202E-12 -2.09682E-12 + -6.22699E-13 -1.70116E-13 -4.27700E-14 -9.89943E-15 + 8.67730E-15 3.74898E-14 1.49114E-13 5.45823E-13 1.83795E-12 5.69054E-12 + 1.61901E-11 4.22965E-11 1.01372E-10 2.22630E-10 4.47343E-10 8.20740E-10 + 1.37109E-09 2.07722E-09 2.83691E-09 3.45905E-09 3.70186E-09 3.35930E-09 + 2.36431E-09 8.53563E-10 -8.53563E-10 -2.36431E-09 -3.35930E-09 -3.70186E-09 + -3.45905E-09 -2.83691E-09 -2.07722E-09 -1.37109E-09 -8.20740E-10 -4.47343E-10 + -2.22630E-10 -1.01372E-10 -4.22965E-11 -1.61901E-11 -5.69054E-12 -1.83795E-12 + -5.45823E-13 -1.49114E-13 -3.74898E-14 -8.67730E-15 + 7.00660E-15 3.02717E-14 1.20404E-13 4.40733E-13 1.48408E-12 4.59491E-12 + 1.30729E-11 3.41529E-11 8.18544E-11 1.79766E-10 3.61213E-10 6.62718E-10 + 1.10710E-09 1.67728E-09 2.29070E-09 2.79305E-09 2.98912E-09 2.71252E-09 + 1.90910E-09 6.89221E-10 -6.89221E-10 -1.90910E-09 -2.71252E-09 -2.98912E-09 + -2.79305E-09 -2.29070E-09 -1.67728E-09 -1.10710E-09 -6.62718E-10 -3.61213E-10 + -1.79766E-10 -8.18544E-11 -3.41529E-11 -1.30729E-11 -4.59491E-12 -1.48408E-12 + -4.40733E-13 -1.20404E-13 -3.02717E-14 -7.00660E-15 + 5.14561E-15 2.22313E-14 8.84242E-14 3.23671E-13 1.08990E-12 3.37447E-12 + 9.60069E-12 2.50817E-11 6.01134E-11 1.32019E-10 2.65273E-10 4.86696E-10 + 8.13051E-10 1.23179E-09 1.68228E-09 2.05120E-09 2.19519E-09 1.99205E-09 + 1.40203E-09 5.06160E-10 -5.06160E-10 -1.40203E-09 -1.99205E-09 -2.19519E-09 + -2.05120E-09 -1.68228E-09 -1.23179E-09 -8.13051E-10 -4.86696E-10 -2.65273E-10 + -1.32019E-10 -6.01134E-11 -2.50817E-11 -9.60069E-12 -3.37447E-12 -1.08990E-12 + -3.23671E-13 -8.84242E-14 -2.22313E-14 -5.14561E-15 + 3.40045E-15 1.46915E-14 5.84347E-14 2.13897E-13 7.20256E-13 2.23001E-12 + 6.34458E-12 1.65751E-11 3.97257E-11 8.72443E-11 1.75304E-10 3.21631E-10 + 5.37301E-10 8.14020E-10 1.11173E-09 1.35553E-09 1.45068E-09 1.31644E-09 + 9.26525E-10 3.34494E-10 -3.34494E-10 -9.26525E-10 -1.31644E-09 -1.45068E-09 + -1.35553E-09 -1.11173E-09 -8.14020E-10 -5.37301E-10 -3.21631E-10 -1.75304E-10 + -8.72443E-11 -3.97257E-11 -1.65751E-11 -6.34458E-12 -2.23001E-12 -7.20256E-13 + -2.13897E-13 -5.84347E-14 -1.46915E-14 -3.40045E-15 + 2.00635E-15 8.66835E-15 3.44780E-14 1.26205E-13 4.24970E-13 1.31576E-12 + 3.74346E-12 9.77976E-12 2.34392E-11 5.14764E-11 1.03434E-10 1.89771E-10 + 3.17022E-10 4.80293E-10 6.55947E-10 7.99796E-10 8.55941E-10 7.76734E-10 + 5.46673E-10 1.97360E-10 -1.97360E-10 -5.46673E-10 -7.76734E-10 -8.55941E-10 + -7.99796E-10 -6.55947E-10 -4.80293E-10 -3.17022E-10 -1.89771E-10 -1.03434E-10 + -5.14764E-11 -2.34392E-11 -9.77976E-12 -3.74346E-12 -1.31576E-12 -4.24970E-13 + -1.26205E-13 -3.44780E-14 -8.66835E-15 -2.00635E-15 + 1.05136E-15 4.54233E-15 1.80669E-14 6.61329E-14 2.22690E-13 6.89476E-13 + 1.96162E-12 5.12472E-12 1.22824E-11 2.69743E-11 5.42008E-11 9.94423E-11 + 1.66123E-10 2.51680E-10 3.43725E-10 4.19104E-10 4.48524E-10 4.07019E-10 + 2.86464E-10 1.03419E-10 -1.03419E-10 -2.86464E-10 -4.07019E-10 -4.48524E-10 + -4.19104E-10 -3.43725E-10 -2.51680E-10 -1.66123E-10 -9.94423E-11 -5.42008E-11 + -2.69743E-11 -1.22824E-11 -5.12472E-12 -1.96162E-12 -6.89476E-13 -2.22690E-13 + -6.61329E-14 -1.80669E-14 -4.54233E-15 -1.05136E-15 + 4.87623E-16 2.10675E-15 8.37951E-15 3.06727E-14 1.03284E-13 3.19782E-13 + 9.09809E-13 2.37687E-12 5.69664E-12 1.25108E-11 2.51386E-11 4.61217E-11 + 7.70487E-11 1.16730E-10 1.59421E-10 1.94382E-10 2.08027E-10 1.88777E-10 + 1.32863E-10 4.79662E-11 -4.79662E-11 -1.32863E-10 -1.88777E-10 -2.08027E-10 + -1.94382E-10 -1.59421E-10 -1.16730E-10 -7.70487E-11 -4.61217E-11 -2.51386E-11 + -1.25108E-11 -5.69664E-12 -2.37687E-12 -9.09809E-13 -3.19782E-13 -1.03284E-13 + -3.06727E-14 -8.37951E-15 -2.10675E-15 -4.87623E-16 + 1.99751E-16 8.63013E-16 3.43260E-15 1.25648E-14 4.23096E-14 1.30996E-13 + 3.72696E-13 9.73664E-13 2.33358E-12 5.12494E-12 1.02978E-11 1.88934E-11 + 3.15624E-11 4.78175E-11 6.53055E-11 7.96270E-11 8.52167E-11 7.73309E-11 + 5.44263E-11 1.96490E-11 -1.96490E-11 -5.44263E-11 -7.73309E-11 -8.52167E-11 + -7.96270E-11 -6.53055E-11 -4.78175E-11 -3.15624E-11 -1.88934E-11 -1.02978E-11 + -5.12494E-12 -2.33358E-12 -9.73664E-13 -3.72696E-13 -1.30996E-13 -4.23096E-14 + -1.25648E-14 -3.43260E-15 -8.63013E-16 -1.99751E-16 + 7.21770E-17 3.11837E-16 1.24032E-15 4.54011E-15 1.52879E-14 4.73334E-14 + 1.34668E-13 3.51819E-13 8.43205E-13 1.85182E-12 3.72096E-12 6.82684E-12 + 1.14046E-11 1.72781E-11 2.35972E-11 2.87720E-11 3.07918E-11 2.79424E-11 + 1.96661E-11 7.09986E-12 -7.09986E-12 -1.96661E-11 -2.79424E-11 -3.07918E-11 + -2.87720E-11 -2.35972E-11 -1.72781E-11 -1.14046E-11 -6.82684E-12 -3.72096E-12 + -1.85182E-12 -8.43205E-13 -3.51819E-13 -1.34668E-13 -4.73334E-14 -1.52879E-14 + -4.54011E-15 -1.24032E-15 -3.11837E-16 -7.21770E-17 + 2.29865E-17 9.93118E-17 3.95009E-16 1.44591E-15 4.86881E-15 1.50745E-14 + 4.28882E-14 1.12045E-13 2.68539E-13 5.89756E-13 1.18503E-12 2.17417E-12 + 3.63206E-12 5.50264E-12 7.51507E-12 9.16313E-12 9.80637E-12 8.89891E-12 + 6.26315E-12 2.26112E-12 -2.26112E-12 -6.26315E-12 -8.89891E-12 -9.80637E-12 + -9.16313E-12 -7.51507E-12 -5.50264E-12 -3.63206E-12 -2.17417E-12 -1.18503E-12 + -5.89756E-13 -2.68539E-13 -1.12045E-13 -4.28882E-14 -1.50745E-14 -4.86881E-15 + -1.44591E-15 -3.95009E-16 -9.93118E-17 -2.29865E-17 + 6.44918E-18 2.78633E-17 1.10825E-16 4.05669E-16 1.36601E-15 4.22935E-15 + 1.20329E-14 3.14358E-14 7.53423E-14 1.65464E-13 3.32476E-13 6.09994E-13 + 1.01903E-12 1.54384E-12 2.10846E-12 2.57085E-12 2.75132E-12 2.49671E-12 + 1.75721E-12 6.34389E-13 -6.34389E-13 -1.75721E-12 -2.49671E-12 -2.75132E-12 + -2.57085E-12 -2.10846E-12 -1.54384E-12 -1.01903E-12 -6.09994E-13 -3.32476E-13 + -1.65464E-13 -7.53423E-14 -3.14358E-14 -1.20329E-14 -4.22935E-15 -1.36601E-15 + -4.05669E-16 -1.10825E-16 -2.78633E-17 -6.44918E-18 + 1.59357E-18 6.88494E-18 2.73846E-17 1.00240E-16 3.37537E-16 1.04506E-15 + 2.97329E-15 7.76769E-15 1.86168E-14 4.08857E-14 8.21538E-14 1.50728E-13 + 2.51798E-13 3.81479E-13 5.20994E-13 6.35248E-13 6.79841E-13 6.16930E-13 + 4.34202E-13 1.56755E-13 -1.56755E-13 -4.34202E-13 -6.16930E-13 -6.79841E-13 + -6.35248E-13 -5.20994E-13 -3.81479E-13 -2.51798E-13 -1.50728E-13 -8.21538E-14 + -4.08857E-14 -1.86168E-14 -7.76769E-15 -2.97329E-15 -1.04506E-15 -3.37537E-16 + -1.00240E-16 -2.73846E-17 -6.88494E-18 -1.59357E-18 + 3.46737E-19 1.49806E-18 5.95847E-18 2.18106E-17 7.34431E-17 2.27389E-16 + 6.46944E-16 1.69013E-15 4.05075E-15 8.89612E-15 1.78754E-14 3.27961E-14 + 5.47875E-14 8.30040E-14 1.13360E-13 1.38221E-13 1.47923E-13 1.34235E-13 + 9.44759E-14 3.41077E-14 -3.41077E-14 -9.44759E-14 -1.34235E-13 -1.47923E-13 + -1.38221E-13 -1.13360E-13 -8.30040E-14 -5.47875E-14 -3.27961E-14 -1.78754E-14 + -8.89612E-15 -4.05075E-15 -1.69013E-15 -6.46944E-16 -2.27389E-16 -7.34431E-17 + -2.18106E-17 -5.95847E-18 -1.49806E-18 -3.46737E-19 + 6.64275E-20 2.86996E-19 1.14152E-18 4.17845E-18 1.40701E-17 4.35629E-17 + 1.23941E-16 3.23794E-16 7.76037E-16 1.70431E-15 3.42455E-15 6.28303E-15 + 1.04961E-14 1.59018E-14 2.17174E-14 2.64801E-14 2.83390E-14 2.57165E-14 + 1.80996E-14 6.53430E-15 -6.53430E-15 -1.80996E-14 -2.57165E-14 -2.83390E-14 + -2.64801E-14 -2.17174E-14 -1.59018E-14 -1.04961E-14 -6.28303E-15 -3.42455E-15 + -1.70431E-15 -7.76037E-16 -3.23794E-16 -1.23941E-16 -4.35629E-17 -1.40701E-17 + -4.17845E-18 -1.14152E-18 -2.86996E-19 -6.64275E-20 + 1.12043E-20 4.84078E-20 1.92540E-19 7.04781E-19 2.37321E-18 7.34778E-18 + 2.09051E-17 5.46144E-17 1.30894E-16 2.87466E-16 5.77621E-16 1.05976E-15 + 1.77039E-15 2.68216E-15 3.66309E-15 4.46641E-15 4.77994E-15 4.33762E-15 + 3.05286E-15 1.10214E-15 -1.10214E-15 -3.05286E-15 -4.33762E-15 -4.77994E-15 + -4.46641E-15 -3.66309E-15 -2.68216E-15 -1.77039E-15 -1.05976E-15 -5.77621E-16 + -2.87466E-16 -1.30894E-16 -5.46144E-17 -2.09051E-17 -7.34778E-18 -2.37321E-18 + -7.04781E-19 -1.92540E-19 -4.84078E-20 -1.12043E-20 + 1.66380E-21 7.18837E-21 2.85914E-20 1.04657E-19 3.52413E-19 1.09112E-18 + 3.10433E-18 8.11003E-18 1.94373E-17 4.26876E-17 8.57745E-17 1.57370E-16 + 2.62895E-16 3.98291E-16 5.43955E-16 6.63244E-16 7.09803E-16 6.44119E-16 + 4.53338E-16 1.63664E-16 -1.63664E-16 -4.53338E-16 -6.44119E-16 -7.09803E-16 + -6.63244E-16 -5.43955E-16 -3.98291E-16 -2.62895E-16 -1.57370E-16 -8.57745E-17 + -4.26876E-17 -1.94373E-17 -8.11003E-18 -3.10433E-18 -1.09112E-18 -3.52413E-19 + -1.04657E-19 -2.85914E-20 -7.18837E-21 -1.66380E-21 + 2.17512E-22 9.39751E-22 3.73782E-21 1.36821E-20 4.60717E-20 1.42644E-19 + 4.05835E-19 1.06024E-18 2.54108E-18 5.58064E-18 1.12135E-17 2.05734E-17 + 3.43689E-17 5.20694E-17 7.11123E-17 8.67073E-17 9.27940E-17 8.42071E-17 + 5.92658E-17 2.13961E-17 -2.13961E-17 -5.92658E-17 -8.42071E-17 -9.27940E-17 + -8.67073E-17 -7.11123E-17 -5.20694E-17 -3.43689E-17 -2.05734E-17 -1.12135E-17 + -5.58064E-18 -2.54108E-18 -1.06024E-18 -4.05835E-19 -1.42644E-19 -4.60717E-20 + -1.36821E-20 -3.73782E-21 -9.39751E-22 -2.17512E-22 + 2.50338E-23 1.08157E-22 4.30192E-22 1.57469E-21 5.30246E-21 1.64171E-20 + 4.67082E-20 1.22025E-19 2.92457E-19 6.42285E-19 1.29058E-18 2.36782E-18 + 3.95557E-18 5.99275E-18 8.18443E-18 9.97928E-18 1.06798E-17 9.69152E-18 + 6.82100E-18 2.46251E-18 -2.46251E-18 -6.82100E-18 -9.69152E-18 -1.06798E-17 + -9.97928E-18 -8.18443E-18 -5.99275E-18 -3.95557E-18 -2.36782E-18 -1.29058E-18 + -6.42285E-19 -2.92457E-19 -1.22025E-19 -4.67082E-20 -1.64171E-20 -5.30246E-21 + -1.57469E-21 -4.30192E-22 -1.08157E-22 -2.50338E-23 + 2.40880E-24 1.04071E-23 4.13938E-23 1.51519E-22 5.10212E-22 1.57968E-21 + 4.49435E-21 1.17414E-20 2.81407E-20 6.18018E-20 1.24182E-19 2.27836E-19 + 3.80612E-19 5.76633E-19 7.87520E-19 9.60224E-19 1.02763E-18 9.32536E-19 + 6.56328E-19 2.36947E-19 -2.36947E-19 -6.56328E-19 -9.32535E-19 -1.02763E-18 + -9.60224E-19 -7.87520E-19 -5.76633E-19 -3.80612E-19 -2.27836E-19 -1.24182E-19 + -6.18018E-20 -2.81407E-20 -1.17414E-20 -4.49435E-21 -1.57968E-21 -5.10212E-22 + -1.51519E-22 -4.13938E-23 -1.04071E-23 -2.40880E-24 + 2.09294E-23 9.04244E-23 3.59660E-22 1.31651E-21 4.43310E-21 1.37254E-20 + 3.90502E-20 1.02018E-19 2.44507E-19 5.36979E-19 1.07898E-18 1.97960E-18 + 3.30703E-18 5.01021E-18 6.84255E-18 8.34313E-18 8.92880E-18 8.10255E-18 + 5.70266E-18 2.05877E-18 -2.05877E-18 -5.70266E-18 -8.10255E-18 -8.92880E-18 + -8.34313E-18 -6.84255E-18 -5.01021E-18 -3.30703E-18 -1.97960E-18 -1.07898E-18 + -5.36979E-19 -2.44507E-19 -1.02018E-19 -3.90502E-20 -1.37254E-20 -4.43310E-21 + -1.31651E-21 -3.59660E-22 -9.04244E-23 -2.09294E-23 + 1.60094E-22 6.91678E-22 2.75112E-21 1.00703E-20 3.39098E-20 1.04989E-19 + 2.98704E-19 7.80361E-19 1.87029E-18 4.10748E-18 8.25337E-18 1.51425E-17 + 2.52963E-17 3.83242E-17 5.23403E-17 6.38185E-17 6.82985E-17 6.19783E-17 + 4.36210E-17 1.57480E-17 -1.57480E-17 -4.36210E-17 -6.19783E-17 -6.82985E-17 + -6.38185E-17 -5.23403E-17 -3.83242E-17 -2.52963E-17 -1.51425E-17 -8.25337E-18 + -4.10748E-18 -1.87029E-18 -7.80361E-19 -2.98704E-19 -1.04989E-19 -3.39098E-20 + -1.00703E-20 -2.75112E-21 -6.91678E-22 -1.60094E-22 + 1.07810E-21 4.65788E-21 1.85265E-20 6.78153E-20 2.28355E-19 7.07016E-19 + 2.01153E-18 5.25509E-18 1.25949E-17 2.76605E-17 5.55797E-17 1.01972E-16 + 1.70350E-16 2.58082E-16 3.52469E-16 4.29766E-16 4.59934E-16 4.17373E-16 + 2.93752E-16 1.06050E-16 -1.06050E-16 -2.93752E-16 -4.17373E-16 -4.59934E-16 + -4.29766E-16 -3.52469E-16 -2.58082E-16 -1.70350E-16 -1.01972E-16 -5.55797E-17 + -2.76605E-17 -1.25949E-17 -5.25509E-18 -2.01153E-18 -7.07016E-19 -2.28355E-19 + -6.78153E-20 -1.85265E-20 -4.65788E-21 -1.07810E-21 + 6.39177E-21 2.76153E-20 1.09839E-19 4.02058E-19 1.35385E-18 4.19170E-18 + 1.19258E-17 3.11560E-17 7.46716E-17 1.63991E-16 3.29517E-16 6.04564E-16 + 1.00996E-15 1.53010E-15 2.08969E-15 2.54796E-15 2.72682E-15 2.47449E-15 + 1.74157E-15 6.28742E-16 -6.28742E-16 -1.74157E-15 -2.47449E-15 -2.72682E-15 + -2.54796E-15 -2.08969E-15 -1.53010E-15 -1.00996E-15 -6.04564E-16 -3.29517E-16 + -1.63991E-16 -7.46716E-17 -3.11560E-17 -1.19258E-17 -4.19170E-18 -1.35385E-18 + -4.02058E-19 -1.09839E-19 -2.76153E-20 -6.39177E-21 + 3.33637E-20 1.44146E-19 5.73335E-19 2.09866E-18 7.06682E-18 2.18798E-17 + 6.22501E-17 1.62628E-16 3.89770E-16 8.56001E-16 1.72001E-15 3.15570E-15 + 5.27175E-15 7.98679E-15 1.09077E-14 1.32998E-14 1.42334E-14 1.29163E-14 + 9.09063E-15 3.28190E-15 -3.28190E-15 -9.09063E-15 -1.29163E-14 -1.42334E-14 + -1.32998E-14 -1.09077E-14 -7.98679E-15 -5.27175E-15 -3.15570E-15 -1.72001E-15 + -8.56001E-16 -3.89770E-16 -1.62628E-16 -6.22501E-17 -2.18798E-17 -7.06682E-18 + -2.09866E-18 -5.73335E-19 -1.44146E-19 -3.33637E-20 + 1.53336E-19 6.62481E-19 2.63499E-18 9.64522E-18 3.24784E-17 1.00557E-16 + 2.86095E-16 7.47421E-16 1.79135E-15 3.93410E-15 7.90499E-15 1.45033E-14 + 2.42285E-14 3.67065E-14 5.01309E-14 6.11247E-14 6.54155E-14 5.93621E-14 + 4.17797E-14 1.50833E-14 -1.50833E-14 -4.17797E-14 -5.93621E-14 -6.54155E-14 + -6.11247E-14 -5.01309E-14 -3.67065E-14 -2.42285E-14 -1.45033E-14 -7.90499E-15 + -3.93410E-15 -1.79135E-15 -7.47421E-16 -2.86095E-16 -1.00557E-16 -3.24784E-17 + -9.64522E-18 -2.63499E-18 -6.62481E-19 -1.53336E-19 + 6.20551E-19 2.68106E-18 1.06638E-17 3.90342E-17 1.31440E-16 4.06956E-16 + 1.15783E-15 3.02481E-15 7.24957E-15 1.59213E-14 3.19914E-14 5.86947E-14 + 9.80525E-14 1.48551E-13 2.02880E-13 2.47371E-13 2.64736E-13 2.40238E-13 + 1.69082E-13 6.10420E-14 -6.10420E-14 -1.69082E-13 -2.40238E-13 -2.64736E-13 + -2.47371E-13 -2.02880E-13 -1.48551E-13 -9.80525E-14 -5.86947E-14 -3.19914E-14 + -1.59213E-14 -7.24957E-15 -3.02481E-15 -1.15783E-15 -4.06956E-16 -1.31440E-16 + -3.90342E-17 -1.06638E-17 -2.68106E-18 -6.20551E-19 + 2.21180E-18 9.55596E-18 3.80084E-17 1.39128E-16 4.68485E-16 1.45049E-15 + 4.12678E-15 1.07812E-14 2.58393E-14 5.67474E-14 1.14025E-13 2.09202E-13 + 3.49484E-13 5.29473E-13 7.23114E-13 8.81693E-13 9.43586E-13 8.56269E-13 + 6.02651E-13 2.17569E-13 -2.17569E-13 -6.02651E-13 -8.56269E-13 -9.43586E-13 + -8.81693E-13 -7.23114E-13 -5.29473E-13 -3.49484E-13 -2.09202E-13 -1.14025E-13 + -5.67474E-14 -2.58393E-14 -1.07812E-14 -4.12678E-15 -1.45049E-15 -4.68485E-16 + -1.39128E-16 -3.80084E-17 -9.55596E-18 -2.21180E-18 + 6.94499E-18 3.00055E-17 1.19346E-16 4.36857E-16 1.47103E-15 4.55451E-15 + 1.29580E-14 3.38526E-14 8.11347E-14 1.78185E-13 3.58037E-13 6.56891E-13 + 1.09737E-12 1.66253E-12 2.27056E-12 2.76849E-12 2.96284E-12 2.68866E-12 + 1.89231E-12 6.83161E-13 -6.83161E-13 -1.89231E-12 -2.68866E-12 -2.96284E-12 + -2.76849E-12 -2.27056E-12 -1.66253E-12 -1.09737E-12 -6.56891E-13 -3.58037E-13 + -1.78185E-13 -8.11347E-14 -3.38526E-14 -1.29580E-14 -4.55451E-15 -1.47103E-15 + -4.36857E-16 -1.19346E-16 -3.00055E-17 -6.94499E-18 + 1.92204E-17 8.30406E-17 3.30291E-16 1.20901E-15 4.07110E-15 1.26047E-14 + 3.58614E-14 9.36877E-14 2.24541E-13 4.93131E-13 9.90873E-13 1.81796E-12 + 3.03699E-12 4.60109E-12 6.28381E-12 7.66185E-12 8.19970E-12 7.44092E-12 + 5.23699E-12 1.89066E-12 -1.89066E-12 -5.23699E-12 -7.44092E-12 -8.19970E-12 + -7.66185E-12 -6.28381E-12 -4.60109E-12 -3.03699E-12 -1.81796E-12 -9.90873E-13 + -4.93131E-13 -2.24541E-13 -9.36877E-14 -3.58614E-14 -1.26047E-14 -4.07110E-15 + -1.20901E-15 -3.30291E-16 -8.30406E-17 -1.92204E-17 + 4.69199E-17 2.02715E-16 8.06291E-16 2.95138E-15 9.93820E-15 3.07700E-14 + 8.75434E-14 2.28706E-13 5.48141E-13 1.20381E-12 2.41888E-12 4.43791E-12 + 7.41376E-12 1.12320E-11 1.53398E-11 1.87038E-11 2.00167E-11 1.81644E-11 + 1.27843E-11 4.61539E-12 -4.61539E-12 -1.27843E-11 -1.81644E-11 -2.00167E-11 + -1.87038E-11 -1.53398E-11 -1.12320E-11 -7.41376E-12 -4.43791E-12 -2.41888E-12 + -1.20381E-12 -5.48141E-13 -2.28706E-13 -8.75434E-14 -3.07700E-14 -9.93820E-15 + -2.95138E-15 -8.06291E-16 -2.02715E-16 -4.69199E-17 + 1.01163E-16 4.37071E-16 1.73843E-15 6.36342E-15 2.14276E-14 6.63426E-14 + 1.88751E-13 4.93110E-13 1.18184E-12 2.59551E-12 5.21530E-12 9.56851E-12 + 1.59847E-11 2.42171E-11 3.30738E-11 4.03269E-11 4.31578E-11 3.91641E-11 + 2.75641E-11 9.95117E-12 -9.95117E-12 -2.75641E-11 -3.91641E-11 -4.31578E-11 + -4.03269E-11 -3.30738E-11 -2.42171E-11 -1.59847E-11 -9.56851E-12 -5.21530E-12 + -2.59551E-12 -1.18184E-12 -4.93110E-13 -1.88751E-13 -6.63426E-14 -2.14276E-14 + -6.36342E-15 -1.73843E-15 -4.37071E-16 -1.01163E-16 + 1.93055E-16 8.34084E-16 3.31753E-15 1.21436E-14 4.08913E-14 1.26605E-13 + 3.60202E-13 9.41026E-13 2.25536E-12 4.95314E-12 9.95262E-12 1.82601E-11 + 3.05044E-11 4.62146E-11 6.31164E-11 7.69578E-11 8.23601E-11 7.47387E-11 + 5.26019E-11 1.89903E-11 -1.89903E-11 -5.26019E-11 -7.47387E-11 -8.23601E-11 + -7.69578E-11 -6.31164E-11 -4.62146E-11 -3.05044E-11 -1.82601E-11 -9.95262E-12 + -4.95314E-12 -2.25536E-12 -9.41026E-13 -3.60202E-13 -1.26605E-13 -4.08913E-14 + -1.21436E-14 -3.31753E-15 -8.34084E-16 -1.93055E-16 + 3.27198E-16 1.41364E-15 5.62269E-15 2.05815E-14 6.93043E-14 2.14575E-13 + 6.10486E-13 1.59489E-12 3.82247E-12 8.39480E-12 1.68681E-11 3.09479E-11 + 5.17001E-11 7.83265E-11 1.06972E-10 1.30431E-10 1.39587E-10 1.26670E-10 + 8.91518E-11 3.21856E-11 -3.21856E-11 -8.91518E-11 -1.26670E-10 -1.39587E-10 + -1.30431E-10 -1.06972E-10 -7.83265E-11 -5.17001E-11 -3.09479E-11 -1.68681E-11 + -8.39480E-12 -3.82247E-12 -1.59489E-12 -6.10486E-13 -2.14575E-13 -6.93043E-14 + -2.05815E-14 -5.62269E-15 -1.41364E-15 -3.27198E-16 + 4.95119E-16 2.13914E-15 8.50833E-15 3.11442E-14 1.04872E-13 3.24698E-13 + 9.23795E-13 2.41341E-12 5.78422E-12 1.27031E-11 2.55250E-11 4.68308E-11 + 7.82332E-11 1.18525E-10 1.61872E-10 1.97370E-10 2.11225E-10 1.91679E-10 + 1.34906E-10 4.87036E-11 -4.87036E-11 -1.34906E-10 -1.91679E-10 -2.11225E-10 + -1.97370E-10 -1.61872E-10 -1.18525E-10 -7.82332E-11 -4.68308E-11 -2.55250E-11 + -1.27031E-11 -5.78422E-12 -2.41341E-12 -9.23795E-13 -3.24698E-13 -1.04872E-13 + -3.11442E-14 -8.50833E-15 -2.13914E-15 -4.95119E-16 + 6.74188E-16 2.91279E-15 1.15855E-14 4.24081E-14 1.42801E-13 4.42130E-13 + 1.25790E-12 3.28626E-12 7.87618E-12 1.72974E-11 3.47566E-11 6.37679E-11 + 1.06528E-10 1.61391E-10 2.20415E-10 2.68753E-10 2.87619E-10 2.61003E-10 + 1.83697E-10 6.63181E-11 -6.63181E-11 -1.83697E-10 -2.61003E-10 -2.87619E-10 + -2.68753E-10 -2.20415E-10 -1.61391E-10 -1.06528E-10 -6.37679E-11 -3.47566E-11 + -1.72974E-11 -7.87618E-12 -3.28626E-12 -1.25790E-12 -4.42130E-13 -1.42801E-13 + -4.24081E-14 -1.15855E-14 -2.91279E-15 -6.74188E-16 + 8.34945E-16 3.60733E-15 1.43480E-14 5.25201E-14 1.76851E-13 5.47554E-13 + 1.55784E-12 4.06985E-12 9.75421E-12 2.14219E-11 4.30441E-11 7.89731E-11 + 1.31929E-10 1.99874E-10 2.72972E-10 3.32835E-10 3.56200E-10 3.23238E-10 + 2.27498E-10 8.21313E-11 -8.21313E-11 -2.27498E-10 -3.23238E-10 -3.56200E-10 + -3.32835E-10 -2.72972E-10 -1.99874E-10 -1.31929E-10 -7.89731E-11 -4.30441E-11 + -2.14219E-11 -9.75421E-12 -4.06985E-12 -1.55784E-12 -5.47554E-13 -1.76851E-13 + -5.25201E-14 -1.43480E-14 -3.60733E-15 -8.34945E-16 + 9.52541E-16 4.11540E-15 1.63688E-14 5.99171E-14 2.01759E-13 6.24673E-13 + 1.77725E-12 4.64306E-12 1.11280E-11 2.44390E-11 4.91066E-11 9.00959E-11 + 1.50510E-10 2.28025E-10 3.11419E-10 3.79713E-10 4.06368E-10 3.68764E-10 + 2.59540E-10 9.36990E-11 -9.36990E-11 -2.59540E-10 -3.68764E-10 -4.06368E-10 + -3.79713E-10 -3.11419E-10 -2.28025E-10 -1.50510E-10 -9.00959E-11 -4.91066E-11 + -2.44390E-11 -1.11280E-11 -4.64306E-12 -1.77725E-12 -6.24673E-13 -2.01759E-13 + -5.99171E-14 -1.63688E-14 -4.11540E-15 -9.52541E-16 + 1.01345E-15 4.37855E-15 1.74155E-14 6.37484E-14 2.14660E-13 6.64616E-13 + 1.89089E-12 4.93994E-12 1.18396E-11 2.60017E-11 5.22466E-11 9.58568E-11 + 1.60134E-10 2.42605E-10 3.31331E-10 4.03993E-10 4.32352E-10 3.92343E-10 + 2.76135E-10 9.96903E-11 -9.96903E-11 -2.76135E-10 -3.92343E-10 -4.32352E-10 + -4.03993E-10 -3.31331E-10 -2.42605E-10 -1.60134E-10 -9.58568E-11 -5.22466E-11 + -2.60017E-11 -1.18396E-11 -4.93994E-12 -1.89089E-12 -6.64616E-13 -2.14660E-13 + -6.37484E-14 -1.74155E-14 -4.37855E-15 -1.01345E-15 + 1.01345E-15 4.37855E-15 1.74155E-14 6.37484E-14 2.14660E-13 6.64616E-13 + 1.89089E-12 4.93994E-12 1.18396E-11 2.60017E-11 5.22466E-11 9.58568E-11 + 1.60134E-10 2.42605E-10 3.31331E-10 4.03993E-10 4.32352E-10 3.92343E-10 + 2.76135E-10 9.96903E-11 -9.96903E-11 -2.76135E-10 -3.92343E-10 -4.32352E-10 + -4.03993E-10 -3.31331E-10 -2.42605E-10 -1.60134E-10 -9.58568E-11 -5.22466E-11 + -2.60017E-11 -1.18396E-11 -4.93994E-12 -1.89089E-12 -6.64616E-13 -2.14660E-13 + -6.37484E-14 -1.74155E-14 -4.37855E-15 -1.01345E-15 + 9.52541E-16 4.11540E-15 1.63688E-14 5.99171E-14 2.01759E-13 6.24673E-13 + 1.77725E-12 4.64306E-12 1.11280E-11 2.44390E-11 4.91066E-11 9.00959E-11 + 1.50510E-10 2.28025E-10 3.11419E-10 3.79713E-10 4.06368E-10 3.68764E-10 + 2.59540E-10 9.36990E-11 -9.36990E-11 -2.59540E-10 -3.68764E-10 -4.06368E-10 + -3.79713E-10 -3.11419E-10 -2.28025E-10 -1.50510E-10 -9.00959E-11 -4.91066E-11 + -2.44390E-11 -1.11280E-11 -4.64306E-12 -1.77725E-12 -6.24673E-13 -2.01759E-13 + -5.99171E-14 -1.63688E-14 -4.11540E-15 -9.52541E-16 + 8.34945E-16 3.60733E-15 1.43480E-14 5.25201E-14 1.76851E-13 5.47554E-13 + 1.55784E-12 4.06985E-12 9.75421E-12 2.14219E-11 4.30441E-11 7.89731E-11 + 1.31929E-10 1.99874E-10 2.72972E-10 3.32835E-10 3.56200E-10 3.23238E-10 + 2.27498E-10 8.21313E-11 -8.21313E-11 -2.27498E-10 -3.23238E-10 -3.56200E-10 + -3.32835E-10 -2.72972E-10 -1.99874E-10 -1.31929E-10 -7.89731E-11 -4.30441E-11 + -2.14219E-11 -9.75421E-12 -4.06985E-12 -1.55784E-12 -5.47554E-13 -1.76851E-13 + -5.25201E-14 -1.43480E-14 -3.60733E-15 -8.34945E-16 + 6.74188E-16 2.91279E-15 1.15855E-14 4.24081E-14 1.42801E-13 4.42130E-13 + 1.25790E-12 3.28626E-12 7.87618E-12 1.72974E-11 3.47566E-11 6.37679E-11 + 1.06528E-10 1.61391E-10 2.20415E-10 2.68753E-10 2.87619E-10 2.61003E-10 + 1.83697E-10 6.63181E-11 -6.63181E-11 -1.83697E-10 -2.61003E-10 -2.87619E-10 + -2.68753E-10 -2.20415E-10 -1.61391E-10 -1.06528E-10 -6.37679E-11 -3.47566E-11 + -1.72974E-11 -7.87618E-12 -3.28626E-12 -1.25790E-12 -4.42130E-13 -1.42801E-13 + -4.24081E-14 -1.15855E-14 -2.91279E-15 -6.74188E-16 + 4.95119E-16 2.13914E-15 8.50833E-15 3.11442E-14 1.04872E-13 3.24698E-13 + 9.23795E-13 2.41341E-12 5.78422E-12 1.27031E-11 2.55250E-11 4.68308E-11 + 7.82332E-11 1.18525E-10 1.61872E-10 1.97370E-10 2.11225E-10 1.91679E-10 + 1.34906E-10 4.87036E-11 -4.87036E-11 -1.34906E-10 -1.91679E-10 -2.11225E-10 + -1.97370E-10 -1.61872E-10 -1.18525E-10 -7.82332E-11 -4.68308E-11 -2.55250E-11 + -1.27031E-11 -5.78422E-12 -2.41341E-12 -9.23795E-13 -3.24698E-13 -1.04872E-13 + -3.11442E-14 -8.50833E-15 -2.13914E-15 -4.95119E-16 + 3.27198E-16 1.41364E-15 5.62269E-15 2.05815E-14 6.93043E-14 2.14575E-13 + 6.10486E-13 1.59489E-12 3.82247E-12 8.39480E-12 1.68681E-11 3.09479E-11 + 5.17001E-11 7.83265E-11 1.06972E-10 1.30431E-10 1.39587E-10 1.26670E-10 + 8.91518E-11 3.21856E-11 -3.21856E-11 -8.91518E-11 -1.26670E-10 -1.39587E-10 + -1.30431E-10 -1.06972E-10 -7.83265E-11 -5.17001E-11 -3.09479E-11 -1.68681E-11 + -8.39480E-12 -3.82247E-12 -1.59489E-12 -6.10486E-13 -2.14575E-13 -6.93043E-14 + -2.05815E-14 -5.62269E-15 -1.41364E-15 -3.27198E-16 + 1.93055E-16 8.34084E-16 3.31753E-15 1.21436E-14 4.08913E-14 1.26605E-13 + 3.60202E-13 9.41026E-13 2.25536E-12 4.95314E-12 9.95262E-12 1.82601E-11 + 3.05044E-11 4.62146E-11 6.31164E-11 7.69578E-11 8.23601E-11 7.47387E-11 + 5.26019E-11 1.89903E-11 -1.89903E-11 -5.26019E-11 -7.47387E-11 -8.23601E-11 + -7.69578E-11 -6.31164E-11 -4.62146E-11 -3.05044E-11 -1.82601E-11 -9.95262E-12 + -4.95314E-12 -2.25536E-12 -9.41026E-13 -3.60202E-13 -1.26605E-13 -4.08913E-14 + -1.21436E-14 -3.31753E-15 -8.34084E-16 -1.93055E-16 + 1.01163E-16 4.37071E-16 1.73843E-15 6.36342E-15 2.14276E-14 6.63426E-14 + 1.88751E-13 4.93110E-13 1.18184E-12 2.59551E-12 5.21530E-12 9.56851E-12 + 1.59847E-11 2.42171E-11 3.30738E-11 4.03269E-11 4.31578E-11 3.91641E-11 + 2.75641E-11 9.95117E-12 -9.95117E-12 -2.75641E-11 -3.91641E-11 -4.31578E-11 + -4.03269E-11 -3.30738E-11 -2.42171E-11 -1.59847E-11 -9.56851E-12 -5.21530E-12 + -2.59551E-12 -1.18184E-12 -4.93110E-13 -1.88751E-13 -6.63426E-14 -2.14276E-14 + -6.36342E-15 -1.73843E-15 -4.37071E-16 -1.01163E-16 + 4.69199E-17 2.02715E-16 8.06291E-16 2.95138E-15 9.93820E-15 3.07700E-14 + 8.75434E-14 2.28706E-13 5.48141E-13 1.20381E-12 2.41888E-12 4.43791E-12 + 7.41376E-12 1.12320E-11 1.53398E-11 1.87038E-11 2.00167E-11 1.81644E-11 + 1.27843E-11 4.61539E-12 -4.61539E-12 -1.27843E-11 -1.81644E-11 -2.00167E-11 + -1.87038E-11 -1.53398E-11 -1.12320E-11 -7.41376E-12 -4.43791E-12 -2.41888E-12 + -1.20381E-12 -5.48141E-13 -2.28706E-13 -8.75434E-14 -3.07700E-14 -9.93820E-15 + -2.95138E-15 -8.06291E-16 -2.02715E-16 -4.69199E-17 + 1.92204E-17 8.30406E-17 3.30291E-16 1.20901E-15 4.07110E-15 1.26047E-14 + 3.58614E-14 9.36877E-14 2.24541E-13 4.93131E-13 9.90873E-13 1.81796E-12 + 3.03699E-12 4.60109E-12 6.28381E-12 7.66185E-12 8.19970E-12 7.44092E-12 + 5.23699E-12 1.89066E-12 -1.89066E-12 -5.23699E-12 -7.44092E-12 -8.19970E-12 + -7.66185E-12 -6.28381E-12 -4.60109E-12 -3.03699E-12 -1.81796E-12 -9.90873E-13 + -4.93131E-13 -2.24541E-13 -9.36877E-14 -3.58614E-14 -1.26047E-14 -4.07110E-15 + -1.20901E-15 -3.30291E-16 -8.30406E-17 -1.92204E-17 + 6.94499E-18 3.00055E-17 1.19346E-16 4.36857E-16 1.47103E-15 4.55451E-15 + 1.29580E-14 3.38526E-14 8.11347E-14 1.78185E-13 3.58037E-13 6.56891E-13 + 1.09737E-12 1.66253E-12 2.27056E-12 2.76849E-12 2.96284E-12 2.68866E-12 + 1.89231E-12 6.83161E-13 -6.83161E-13 -1.89231E-12 -2.68866E-12 -2.96284E-12 + -2.76849E-12 -2.27056E-12 -1.66253E-12 -1.09737E-12 -6.56891E-13 -3.58037E-13 + -1.78185E-13 -8.11347E-14 -3.38526E-14 -1.29580E-14 -4.55451E-15 -1.47103E-15 + -4.36857E-16 -1.19346E-16 -3.00055E-17 -6.94499E-18 + 2.21180E-18 9.55596E-18 3.80084E-17 1.39128E-16 4.68485E-16 1.45049E-15 + 4.12678E-15 1.07812E-14 2.58393E-14 5.67474E-14 1.14025E-13 2.09202E-13 + 3.49484E-13 5.29473E-13 7.23114E-13 8.81693E-13 9.43586E-13 8.56269E-13 + 6.02651E-13 2.17569E-13 -2.17569E-13 -6.02651E-13 -8.56269E-13 -9.43586E-13 + -8.81693E-13 -7.23114E-13 -5.29473E-13 -3.49484E-13 -2.09202E-13 -1.14025E-13 + -5.67474E-14 -2.58393E-14 -1.07812E-14 -4.12678E-15 -1.45049E-15 -4.68485E-16 + -1.39128E-16 -3.80084E-17 -9.55596E-18 -2.21180E-18 + 6.20551E-19 2.68106E-18 1.06638E-17 3.90342E-17 1.31440E-16 4.06956E-16 + 1.15783E-15 3.02481E-15 7.24957E-15 1.59213E-14 3.19914E-14 5.86947E-14 + 9.80525E-14 1.48551E-13 2.02880E-13 2.47371E-13 2.64736E-13 2.40238E-13 + 1.69082E-13 6.10420E-14 -6.10420E-14 -1.69082E-13 -2.40238E-13 -2.64736E-13 + -2.47371E-13 -2.02880E-13 -1.48551E-13 -9.80525E-14 -5.86947E-14 -3.19914E-14 + -1.59213E-14 -7.24957E-15 -3.02481E-15 -1.15783E-15 -4.06956E-16 -1.31440E-16 + -3.90342E-17 -1.06638E-17 -2.68106E-18 -6.20551E-19 + 1.53336E-19 6.62481E-19 2.63499E-18 9.64522E-18 3.24784E-17 1.00557E-16 + 2.86095E-16 7.47421E-16 1.79135E-15 3.93410E-15 7.90499E-15 1.45033E-14 + 2.42285E-14 3.67065E-14 5.01309E-14 6.11247E-14 6.54155E-14 5.93621E-14 + 4.17797E-14 1.50833E-14 -1.50833E-14 -4.17797E-14 -5.93621E-14 -6.54155E-14 + -6.11247E-14 -5.01309E-14 -3.67065E-14 -2.42285E-14 -1.45033E-14 -7.90499E-15 + -3.93410E-15 -1.79135E-15 -7.47421E-16 -2.86095E-16 -1.00557E-16 -3.24784E-17 + -9.64522E-18 -2.63499E-18 -6.62481E-19 -1.53336E-19 + 3.33637E-20 1.44146E-19 5.73335E-19 2.09866E-18 7.06682E-18 2.18798E-17 + 6.22501E-17 1.62628E-16 3.89770E-16 8.56001E-16 1.72001E-15 3.15570E-15 + 5.27175E-15 7.98679E-15 1.09077E-14 1.32998E-14 1.42334E-14 1.29163E-14 + 9.09063E-15 3.28190E-15 -3.28190E-15 -9.09063E-15 -1.29163E-14 -1.42334E-14 + -1.32998E-14 -1.09077E-14 -7.98679E-15 -5.27175E-15 -3.15570E-15 -1.72001E-15 + -8.56001E-16 -3.89770E-16 -1.62628E-16 -6.22501E-17 -2.18798E-17 -7.06682E-18 + -2.09866E-18 -5.73335E-19 -1.44146E-19 -3.33637E-20 + 6.39177E-21 2.76153E-20 1.09839E-19 4.02058E-19 1.35385E-18 4.19170E-18 + 1.19258E-17 3.11560E-17 7.46716E-17 1.63991E-16 3.29517E-16 6.04564E-16 + 1.00996E-15 1.53010E-15 2.08969E-15 2.54796E-15 2.72682E-15 2.47449E-15 + 1.74157E-15 6.28742E-16 -6.28742E-16 -1.74157E-15 -2.47449E-15 -2.72682E-15 + -2.54796E-15 -2.08969E-15 -1.53010E-15 -1.00996E-15 -6.04564E-16 -3.29517E-16 + -1.63991E-16 -7.46716E-17 -3.11560E-17 -1.19258E-17 -4.19170E-18 -1.35385E-18 + -4.02058E-19 -1.09839E-19 -2.76153E-20 -6.39177E-21 + 1.07810E-21 4.65788E-21 1.85265E-20 6.78153E-20 2.28355E-19 7.07016E-19 + 2.01153E-18 5.25509E-18 1.25949E-17 2.76605E-17 5.55797E-17 1.01972E-16 + 1.70350E-16 2.58082E-16 3.52469E-16 4.29766E-16 4.59934E-16 4.17373E-16 + 2.93752E-16 1.06050E-16 -1.06050E-16 -2.93752E-16 -4.17373E-16 -4.59934E-16 + -4.29766E-16 -3.52469E-16 -2.58082E-16 -1.70350E-16 -1.01972E-16 -5.55797E-17 + -2.76605E-17 -1.25949E-17 -5.25509E-18 -2.01153E-18 -7.07016E-19 -2.28355E-19 + -6.78153E-20 -1.85265E-20 -4.65788E-21 -1.07810E-21 + 1.60094E-22 6.91678E-22 2.75112E-21 1.00703E-20 3.39098E-20 1.04989E-19 + 2.98704E-19 7.80361E-19 1.87029E-18 4.10748E-18 8.25337E-18 1.51425E-17 + 2.52963E-17 3.83242E-17 5.23403E-17 6.38185E-17 6.82985E-17 6.19783E-17 + 4.36210E-17 1.57480E-17 -1.57480E-17 -4.36210E-17 -6.19783E-17 -6.82985E-17 + -6.38185E-17 -5.23403E-17 -3.83242E-17 -2.52963E-17 -1.51425E-17 -8.25337E-18 + -4.10748E-18 -1.87029E-18 -7.80361E-19 -2.98704E-19 -1.04989E-19 -3.39098E-20 + -1.00703E-20 -2.75112E-21 -6.91678E-22 -1.60094E-22 + 2.09294E-23 9.04244E-23 3.59660E-22 1.31651E-21 4.43310E-21 1.37254E-20 + 3.90502E-20 1.02018E-19 2.44507E-19 5.36979E-19 1.07898E-18 1.97960E-18 + 3.30703E-18 5.01021E-18 6.84255E-18 8.34313E-18 8.92880E-18 8.10255E-18 + 5.70266E-18 2.05877E-18 -2.05877E-18 -5.70266E-18 -8.10255E-18 -8.92880E-18 + -8.34313E-18 -6.84255E-18 -5.01021E-18 -3.30703E-18 -1.97960E-18 -1.07898E-18 + -5.36979E-19 -2.44507E-19 -1.02018E-19 -3.90502E-20 -1.37254E-20 -4.43310E-21 + -1.31651E-21 -3.59660E-22 -9.04244E-23 -2.09294E-23 + 2.40880E-24 1.04071E-23 4.13938E-23 1.51519E-22 5.10212E-22 1.57968E-21 + 4.49435E-21 1.17414E-20 2.81407E-20 6.18018E-20 1.24182E-19 2.27836E-19 + 3.80612E-19 5.76633E-19 7.87520E-19 9.60224E-19 1.02763E-18 9.32536E-19 + 6.56328E-19 2.36947E-19 -2.36947E-19 -6.56328E-19 -9.32535E-19 -1.02763E-18 + -9.60224E-19 -7.87520E-19 -5.76633E-19 -3.80612E-19 -2.27836E-19 -1.24182E-19 + -6.18018E-20 -2.81407E-20 -1.17414E-20 -4.49435E-21 -1.57968E-21 -5.10212E-22 + -1.51519E-22 -4.13938E-23 -1.04071E-23 -2.40880E-24 + 1.97936E-25 8.55174E-25 3.40142E-24 1.24507E-23 4.19253E-23 1.29806E-22 + 3.69310E-22 9.64819E-22 2.31238E-21 5.07839E-21 1.02043E-20 1.87218E-20 + 3.12757E-20 4.73832E-20 6.47123E-20 7.89037E-20 8.44426E-20 7.66285E-20 + 5.39319E-20 1.94705E-20 -1.94705E-20 -5.39319E-20 -7.66285E-20 -8.44426E-20 + -7.89037E-20 -6.47123E-20 -4.73832E-20 -3.12757E-20 -1.87218E-20 -1.02043E-20 + -5.07839E-21 -2.31238E-21 -9.64819E-22 -3.69310E-22 -1.29806E-22 -4.19253E-23 + -1.24507E-23 -3.40142E-24 -8.55173E-25 -1.97936E-25 + 1.71982E-24 7.43037E-24 2.95540E-23 1.08181E-22 3.64277E-22 1.12785E-21 + 3.20884E-21 8.38306E-21 2.00917E-20 4.41247E-20 8.86621E-20 1.62668E-19 + 2.71746E-19 4.11700E-19 5.62267E-19 6.85573E-19 7.33699E-19 6.65804E-19 + 4.68600E-19 1.69174E-19 -1.69174E-19 -4.68600E-19 -6.65804E-19 -7.33699E-19 + -6.85573E-19 -5.62267E-19 -4.11700E-19 -2.71746E-19 -1.62668E-19 -8.86621E-20 + -4.41247E-20 -2.00917E-20 -8.38306E-21 -3.20884E-21 -1.12785E-21 -3.64277E-22 + -1.08181E-22 -2.95540E-23 -7.43037E-24 -1.71982E-24 + 1.31553E-23 5.68367E-23 2.26065E-22 8.27499E-22 2.78644E-21 8.62719E-21 + 2.45451E-20 6.41240E-20 1.53686E-19 3.37520E-19 6.78197E-19 1.24429E-18 + 2.07865E-18 3.14919E-18 4.30091E-18 5.24411E-18 5.61224E-18 5.09289E-18 + 3.58443E-18 1.29405E-18 -1.29405E-18 -3.58443E-18 -5.09289E-18 -5.61224E-18 + -5.24411E-18 -4.30091E-18 -3.14919E-18 -2.07865E-18 -1.24429E-18 -6.78197E-19 + -3.37520E-19 -1.53686E-19 -6.41240E-20 -2.45451E-20 -8.62719E-21 -2.78644E-21 + -8.27499E-22 -2.26065E-22 -5.68367E-23 -1.31553E-23 + 8.85900E-23 3.82748E-22 1.52237E-21 5.57253E-21 1.87644E-20 5.80970E-20 + 1.65291E-19 4.31822E-19 1.03495E-18 2.27292E-18 4.56710E-18 8.37927E-18 + 1.39980E-17 2.12072E-17 2.89631E-17 3.53148E-17 3.77938E-17 3.42965E-17 + 2.41382E-17 8.71437E-18 -8.71437E-18 -2.41382E-17 -3.42965E-17 -3.77938E-17 + -3.53148E-17 -2.89631E-17 -2.12072E-17 -1.39980E-17 -8.37927E-18 -4.56710E-18 + -2.27292E-18 -1.03495E-18 -4.31822E-19 -1.65291E-19 -5.80970E-20 -1.87644E-20 + -5.57253E-21 -1.52237E-21 -3.82748E-22 -8.85900E-23 + 5.25225E-22 2.26921E-21 9.02569E-21 3.30380E-20 1.11249E-19 3.44441E-19 + 9.79967E-19 2.56015E-18 6.13593E-18 1.34755E-17 2.70771E-17 4.96783E-17 + 8.29902E-17 1.25732E-16 1.71714E-16 2.09371E-16 2.24069E-16 2.03334E-16 + 1.43109E-16 5.16651E-17 -5.16651E-17 -1.43109E-16 -2.03334E-16 -2.24069E-16 + -2.09371E-16 -1.71714E-16 -1.25732E-16 -8.29902E-17 -4.96783E-17 -2.70771E-17 + -1.34755E-17 -6.13593E-18 -2.56015E-18 -9.79967E-19 -3.44441E-19 -1.11249E-19 + -3.30380E-20 -9.02568E-21 -2.26921E-21 -5.25225E-22 + 2.74157E-21 1.18448E-20 4.71122E-20 1.72451E-19 5.80696E-19 1.79791E-18 + 5.11522E-18 1.33635E-17 3.20283E-17 7.03394E-17 1.41337E-16 2.59310E-16 + 4.33191E-16 6.56292E-16 8.96313E-16 1.09288E-15 1.16959E-15 1.06136E-15 + 7.46997E-16 2.69681E-16 -2.69681E-16 -7.46997E-16 -1.06136E-15 -1.16959E-15 + -1.09288E-15 -8.96313E-16 -6.56292E-16 -4.33191E-16 -2.59310E-16 -1.41337E-16 + -7.03394E-17 -3.20283E-17 -1.33635E-17 -5.11522E-18 -1.79791E-18 -5.80696E-19 + -1.72451E-19 -4.71122E-20 -1.18448E-20 -2.74157E-21 + 1.26000E-20 5.44375E-20 2.16523E-19 7.92569E-19 2.66882E-18 8.26302E-18 + 2.35091E-17 6.14172E-17 1.47199E-16 3.23273E-16 6.49570E-16 1.19177E-15 + 1.99091E-15 3.01626E-15 4.11937E-15 5.02275E-15 5.37534E-15 4.87791E-15 + 3.43313E-15 1.23943E-15 -1.23943E-15 -3.43313E-15 -4.87791E-15 -5.37534E-15 + -5.02275E-15 -4.11937E-15 -3.01626E-15 -1.99091E-15 -1.19177E-15 -6.49570E-16 + -3.23273E-16 -1.47199E-16 -6.14172E-17 -2.35091E-17 -8.26302E-18 -2.66882E-18 + -7.92569E-19 -2.16523E-19 -5.44375E-20 -1.26000E-20 + 5.09920E-20 2.20308E-19 8.76268E-19 3.20752E-18 1.08007E-17 3.34404E-17 + 9.51411E-17 2.48555E-16 5.95713E-16 1.30829E-15 2.62881E-15 4.82307E-15 + 8.05719E-15 1.22068E-14 1.66711E-14 2.03270E-14 2.17540E-14 1.97409E-14 + 1.38938E-14 5.01595E-15 -5.01595E-15 -1.38938E-14 -1.97409E-14 -2.17540E-14 + -2.03270E-14 -1.66711E-14 -1.22068E-14 -8.05719E-15 -4.82307E-15 -2.62881E-15 + -1.30829E-15 -5.95713E-16 -2.48555E-16 -9.51411E-17 -3.34404E-17 -1.08007E-17 + -3.20752E-18 -8.76268E-19 -2.20308E-19 -5.09920E-20 + 1.81748E-19 7.85234E-19 3.12324E-18 1.14324E-17 3.84964E-17 1.19190E-16 + 3.39106E-16 8.85912E-16 2.12327E-15 4.66305E-15 9.36972E-15 1.71906E-14 + 2.87178E-14 4.35080E-14 5.94198E-14 7.24506E-14 7.75365E-14 7.03615E-14 + 4.95211E-14 1.78781E-14 -1.78781E-14 -4.95211E-14 -7.03615E-14 -7.75365E-14 + -7.24506E-14 -5.94198E-14 -4.35080E-14 -2.87178E-14 -1.71906E-14 -9.36972E-15 + -4.66305E-15 -2.12327E-15 -8.85912E-16 -3.39106E-16 -1.19190E-16 -3.84964E-17 + -1.14324E-17 -3.12324E-18 -7.85234E-19 -1.81748E-19 + 5.70685E-19 2.46562E-18 9.80688E-18 3.58975E-17 1.20878E-16 3.74254E-16 + 1.06479E-15 2.78174E-15 6.66701E-15 1.46419E-14 2.94207E-14 5.39781E-14 + 9.01733E-14 1.36614E-13 1.86577E-13 2.27493E-13 2.43463E-13 2.20933E-13 + 1.55495E-13 5.61368E-14 -5.61368E-14 -1.55495E-13 -2.20933E-13 -2.43463E-13 + -2.27493E-13 -1.86577E-13 -1.36614E-13 -9.01733E-14 -5.39781E-14 -2.94207E-14 + -1.46419E-14 -6.66701E-15 -2.78174E-15 -1.06479E-15 -3.74254E-16 -1.20878E-16 + -3.58975E-17 -9.80688E-18 -2.46562E-18 -5.70685E-19 + 1.57938E-18 6.82363E-18 2.71407E-17 9.93469E-17 3.34531E-16 1.03575E-15 + 2.94681E-15 7.69852E-15 1.84511E-14 4.05216E-14 8.14222E-14 1.49385E-13 + 2.49556E-13 3.78081E-13 5.16354E-13 6.29591E-13 6.73787E-13 6.11436E-13 + 4.30335E-13 1.55360E-13 -1.55360E-13 -4.30335E-13 -6.11436E-13 -6.73787E-13 + -6.29591E-13 -5.16354E-13 -3.78081E-13 -2.49556E-13 -1.49385E-13 -8.14222E-14 + -4.05216E-14 -1.84511E-14 -7.69852E-15 -2.94681E-15 -1.03575E-15 -3.34531E-16 + -9.93469E-17 -2.71407E-17 -6.82363E-18 -1.57938E-18 + 3.85551E-18 1.66575E-17 6.62547E-17 2.42521E-16 8.16643E-16 2.52843E-15 + 7.19363E-15 1.87933E-14 4.50419E-14 9.89196E-14 1.98764E-13 3.64673E-13 + 6.09205E-13 9.22956E-13 1.26050E-12 1.53693E-12 1.64482E-12 1.49261E-12 + 1.05052E-12 3.79257E-13 -3.79257E-13 -1.05052E-12 -1.49261E-12 -1.64482E-12 + -1.53693E-12 -1.26050E-12 -9.22956E-13 -6.09205E-13 -3.64673E-13 -1.98764E-13 + -9.89196E-14 -4.50419E-14 -1.87933E-14 -7.19363E-15 -2.52843E-15 -8.16643E-16 + -2.42521E-16 -6.62547E-17 -1.66575E-17 -3.85551E-18 + 8.31281E-18 3.59151E-17 1.42851E-16 5.22896E-16 1.76075E-15 5.45151E-15 + 1.55101E-14 4.05199E-14 9.71141E-14 2.13279E-13 4.28553E-13 7.86265E-13 + 1.31350E-12 1.98997E-12 2.71775E-12 3.31375E-12 3.54637E-12 3.21820E-12 + 2.26500E-12 8.17709E-13 -8.17709E-13 -2.26500E-12 -3.21820E-12 -3.54637E-12 + -3.31375E-12 -2.71775E-12 -1.98997E-12 -1.31350E-12 -7.86265E-13 -4.28553E-13 + -2.13279E-13 -9.71141E-14 -4.05199E-14 -1.55101E-14 -5.45151E-15 -1.76075E-15 + -5.22896E-16 -1.42851E-16 -3.59151E-17 -8.31281E-18 + 1.58637E-17 6.85385E-17 2.72609E-16 9.97868E-16 3.36013E-15 1.04034E-14 + 2.95986E-14 7.73261E-14 1.85328E-13 4.07011E-13 8.17828E-13 1.50047E-12 + 2.50661E-12 3.79756E-12 5.18641E-12 6.32379E-12 6.76771E-12 6.14144E-12 + 4.32241E-12 1.56048E-12 -1.56048E-12 -4.32241E-12 -6.14144E-12 -6.76771E-12 + -6.32379E-12 -5.18641E-12 -3.79756E-12 -2.50661E-12 -1.50047E-12 -8.17828E-13 + -4.07011E-13 -1.85328E-13 -7.73261E-14 -2.95986E-14 -1.04034E-14 -3.36013E-15 + -9.97868E-16 -2.72609E-16 -6.85385E-17 -1.58637E-17 + 2.68865E-17 1.16162E-16 4.62029E-16 1.69123E-15 5.69489E-15 1.76321E-14 + 5.01650E-14 1.31056E-13 3.14101E-13 6.89819E-13 1.38609E-12 2.54306E-12 + 4.24831E-12 6.43626E-12 8.79014E-12 1.07178E-11 1.14702E-11 1.04088E-11 + 7.32580E-12 2.64476E-12 -2.64476E-12 -7.32580E-12 -1.04088E-11 -1.14702E-11 + -1.07178E-11 -8.79014E-12 -6.43626E-12 -4.24831E-12 -2.54306E-12 -1.38609E-12 + -6.89819E-13 -3.14101E-13 -1.31056E-13 -5.01650E-14 -1.76321E-14 -5.69489E-15 + -1.69123E-15 -4.62029E-16 -1.16162E-16 -2.68865E-17 + 4.06850E-17 1.75778E-16 6.99148E-16 2.55919E-15 8.61757E-15 2.66811E-14 + 7.59103E-14 1.98315E-13 4.75302E-13 1.04384E-12 2.09745E-12 3.84819E-12 + 6.42859E-12 9.73942E-12 1.33013E-11 1.62183E-11 1.73568E-11 1.57507E-11 + 1.10855E-11 4.00208E-12 -4.00208E-12 -1.10855E-11 -1.57507E-11 -1.73568E-11 + -1.62183E-11 -1.33013E-11 -9.73942E-12 -6.42859E-12 -3.84819E-12 -2.09745E-12 + -1.04384E-12 -4.75302E-13 -1.98315E-13 -7.59103E-14 -2.66811E-14 -8.61757E-15 + -2.55919E-15 -6.99148E-16 -1.75778E-16 -4.06850E-17 + 5.53995E-17 2.39350E-16 9.52007E-16 3.48476E-15 1.17343E-14 3.63308E-14 + 1.03365E-13 2.70039E-13 6.47203E-13 1.42137E-12 2.85602E-12 5.23995E-12 + 8.75360E-12 1.32619E-11 1.81120E-11 2.20840E-11 2.36342E-11 2.14472E-11 + 1.50947E-11 5.44950E-12 -5.44950E-12 -1.50947E-11 -2.14472E-11 -2.36342E-11 + -2.20840E-11 -1.81120E-11 -1.32619E-11 -8.75360E-12 -5.23995E-12 -2.85602E-12 + -1.42137E-12 -6.47203E-13 -2.70039E-13 -1.03365E-13 -3.63308E-14 -1.17343E-14 + -3.48476E-15 -9.52007E-16 -2.39350E-16 -5.53995E-17 + 6.86092E-17 2.96422E-16 1.17901E-15 4.31569E-15 1.45322E-14 4.49937E-14 + 1.28011E-13 3.34428E-13 8.01525E-13 1.76028E-12 3.53703E-12 6.48939E-12 + 1.08409E-11 1.64241E-11 2.24307E-11 2.73498E-11 2.92697E-11 2.65612E-11 + 1.86940E-11 6.74891E-12 -6.74891E-12 -1.86940E-11 -2.65612E-11 -2.92697E-11 + -2.73498E-11 -2.24307E-11 -1.64241E-11 -1.08409E-11 -6.48939E-12 -3.53703E-12 + -1.76028E-12 -8.01525E-13 -3.34428E-13 -1.28011E-13 -4.49937E-14 -1.45322E-14 + -4.31569E-15 -1.17901E-15 -2.96422E-16 -6.86092E-17 + 7.82723E-17 3.38172E-16 1.34506E-15 4.92352E-15 1.65790E-14 5.13308E-14 + 1.46041E-13 3.81530E-13 9.14414E-13 2.00821E-12 4.03520E-12 7.40337E-12 + 1.23677E-11 1.87373E-11 2.55899E-11 3.12018E-11 3.33922E-11 3.03021E-11 + 2.13269E-11 7.69945E-12 -7.69945E-12 -2.13269E-11 -3.03021E-11 -3.33922E-11 + -3.12018E-11 -2.55899E-11 -1.87373E-11 -1.23677E-11 -7.40337E-12 -4.03520E-12 + -2.00821E-12 -9.14414E-13 -3.81530E-13 -1.46041E-13 -5.13308E-14 -1.65790E-14 + -4.92352E-15 -1.34506E-15 -3.38172E-16 -7.82723E-17 + 8.32772E-17 3.59795E-16 1.43107E-15 5.23834E-15 1.76391E-14 5.46130E-14 + 1.55379E-13 4.05926E-13 9.72884E-13 2.13662E-12 4.29321E-12 7.87676E-12 + 1.31585E-11 1.99354E-11 2.72262E-11 3.31969E-11 3.55273E-11 3.22397E-11 + 2.26906E-11 8.19177E-12 -8.19177E-12 -2.26906E-11 -3.22397E-11 -3.55273E-11 + -3.31969E-11 -2.72262E-11 -1.99354E-11 -1.31585E-11 -7.87676E-12 -4.29321E-12 + -2.13662E-12 -9.72884E-13 -4.05926E-13 -1.55379E-13 -5.46130E-14 -1.76391E-14 + -5.23834E-15 -1.43107E-15 -3.59795E-16 -8.32772E-17 + 8.32772E-17 3.59795E-16 1.43107E-15 5.23834E-15 1.76391E-14 5.46130E-14 + 1.55379E-13 4.05926E-13 9.72884E-13 2.13662E-12 4.29321E-12 7.87676E-12 + 1.31585E-11 1.99354E-11 2.72262E-11 3.31969E-11 3.55273E-11 3.22397E-11 + 2.26906E-11 8.19177E-12 -8.19177E-12 -2.26906E-11 -3.22397E-11 -3.55273E-11 + -3.31969E-11 -2.72262E-11 -1.99354E-11 -1.31585E-11 -7.87676E-12 -4.29321E-12 + -2.13662E-12 -9.72884E-13 -4.05926E-13 -1.55379E-13 -5.46130E-14 -1.76391E-14 + -5.23834E-15 -1.43107E-15 -3.59795E-16 -8.32772E-17 + 7.82723E-17 3.38172E-16 1.34506E-15 4.92352E-15 1.65790E-14 5.13308E-14 + 1.46041E-13 3.81530E-13 9.14414E-13 2.00821E-12 4.03520E-12 7.40337E-12 + 1.23677E-11 1.87373E-11 2.55899E-11 3.12018E-11 3.33922E-11 3.03021E-11 + 2.13269E-11 7.69945E-12 -7.69945E-12 -2.13269E-11 -3.03021E-11 -3.33922E-11 + -3.12018E-11 -2.55899E-11 -1.87373E-11 -1.23677E-11 -7.40337E-12 -4.03520E-12 + -2.00821E-12 -9.14414E-13 -3.81530E-13 -1.46041E-13 -5.13308E-14 -1.65790E-14 + -4.92352E-15 -1.34506E-15 -3.38172E-16 -7.82723E-17 + 6.86092E-17 2.96422E-16 1.17901E-15 4.31569E-15 1.45322E-14 4.49937E-14 + 1.28011E-13 3.34428E-13 8.01525E-13 1.76028E-12 3.53703E-12 6.48939E-12 + 1.08409E-11 1.64241E-11 2.24307E-11 2.73498E-11 2.92697E-11 2.65612E-11 + 1.86940E-11 6.74891E-12 -6.74891E-12 -1.86940E-11 -2.65612E-11 -2.92697E-11 + -2.73498E-11 -2.24307E-11 -1.64241E-11 -1.08409E-11 -6.48939E-12 -3.53703E-12 + -1.76028E-12 -8.01525E-13 -3.34428E-13 -1.28011E-13 -4.49937E-14 -1.45322E-14 + -4.31569E-15 -1.17901E-15 -2.96422E-16 -6.86092E-17 + 5.53995E-17 2.39350E-16 9.52007E-16 3.48476E-15 1.17343E-14 3.63308E-14 + 1.03365E-13 2.70039E-13 6.47203E-13 1.42137E-12 2.85602E-12 5.23995E-12 + 8.75360E-12 1.32619E-11 1.81120E-11 2.20840E-11 2.36342E-11 2.14472E-11 + 1.50947E-11 5.44950E-12 -5.44950E-12 -1.50947E-11 -2.14472E-11 -2.36342E-11 + -2.20840E-11 -1.81120E-11 -1.32619E-11 -8.75360E-12 -5.23995E-12 -2.85602E-12 + -1.42137E-12 -6.47203E-13 -2.70039E-13 -1.03365E-13 -3.63308E-14 -1.17343E-14 + -3.48476E-15 -9.52007E-16 -2.39350E-16 -5.53995E-17 + 4.06850E-17 1.75778E-16 6.99148E-16 2.55919E-15 8.61757E-15 2.66811E-14 + 7.59103E-14 1.98315E-13 4.75302E-13 1.04384E-12 2.09745E-12 3.84819E-12 + 6.42859E-12 9.73942E-12 1.33013E-11 1.62183E-11 1.73568E-11 1.57507E-11 + 1.10855E-11 4.00208E-12 -4.00208E-12 -1.10855E-11 -1.57507E-11 -1.73568E-11 + -1.62183E-11 -1.33013E-11 -9.73942E-12 -6.42859E-12 -3.84819E-12 -2.09745E-12 + -1.04384E-12 -4.75302E-13 -1.98315E-13 -7.59103E-14 -2.66811E-14 -8.61757E-15 + -2.55919E-15 -6.99148E-16 -1.75778E-16 -4.06850E-17 + 2.68865E-17 1.16162E-16 4.62029E-16 1.69123E-15 5.69489E-15 1.76321E-14 + 5.01650E-14 1.31056E-13 3.14101E-13 6.89819E-13 1.38609E-12 2.54306E-12 + 4.24831E-12 6.43626E-12 8.79014E-12 1.07178E-11 1.14702E-11 1.04088E-11 + 7.32580E-12 2.64476E-12 -2.64476E-12 -7.32580E-12 -1.04088E-11 -1.14702E-11 + -1.07178E-11 -8.79014E-12 -6.43626E-12 -4.24831E-12 -2.54306E-12 -1.38609E-12 + -6.89819E-13 -3.14101E-13 -1.31056E-13 -5.01650E-14 -1.76321E-14 -5.69489E-15 + -1.69123E-15 -4.62029E-16 -1.16162E-16 -2.68865E-17 + 1.58637E-17 6.85385E-17 2.72609E-16 9.97868E-16 3.36013E-15 1.04034E-14 + 2.95986E-14 7.73261E-14 1.85328E-13 4.07011E-13 8.17828E-13 1.50047E-12 + 2.50661E-12 3.79756E-12 5.18641E-12 6.32379E-12 6.76771E-12 6.14144E-12 + 4.32241E-12 1.56048E-12 -1.56048E-12 -4.32241E-12 -6.14144E-12 -6.76771E-12 + -6.32379E-12 -5.18641E-12 -3.79756E-12 -2.50661E-12 -1.50047E-12 -8.17828E-13 + -4.07011E-13 -1.85328E-13 -7.73261E-14 -2.95986E-14 -1.04034E-14 -3.36013E-15 + -9.97868E-16 -2.72609E-16 -6.85385E-17 -1.58637E-17 + 8.31281E-18 3.59151E-17 1.42851E-16 5.22896E-16 1.76075E-15 5.45151E-15 + 1.55101E-14 4.05199E-14 9.71141E-14 2.13279E-13 4.28553E-13 7.86265E-13 + 1.31350E-12 1.98997E-12 2.71775E-12 3.31375E-12 3.54637E-12 3.21820E-12 + 2.26500E-12 8.17709E-13 -8.17709E-13 -2.26500E-12 -3.21820E-12 -3.54637E-12 + -3.31375E-12 -2.71775E-12 -1.98997E-12 -1.31350E-12 -7.86265E-13 -4.28553E-13 + -2.13279E-13 -9.71141E-14 -4.05199E-14 -1.55101E-14 -5.45151E-15 -1.76075E-15 + -5.22896E-16 -1.42851E-16 -3.59151E-17 -8.31281E-18 + 3.85551E-18 1.66575E-17 6.62547E-17 2.42521E-16 8.16643E-16 2.52843E-15 + 7.19363E-15 1.87933E-14 4.50419E-14 9.89196E-14 1.98764E-13 3.64673E-13 + 6.09205E-13 9.22956E-13 1.26050E-12 1.53693E-12 1.64482E-12 1.49261E-12 + 1.05052E-12 3.79257E-13 -3.79257E-13 -1.05052E-12 -1.49261E-12 -1.64482E-12 + -1.53693E-12 -1.26050E-12 -9.22956E-13 -6.09205E-13 -3.64673E-13 -1.98764E-13 + -9.89196E-14 -4.50419E-14 -1.87933E-14 -7.19363E-15 -2.52843E-15 -8.16643E-16 + -2.42521E-16 -6.62547E-17 -1.66575E-17 -3.85551E-18 + 1.57938E-18 6.82363E-18 2.71407E-17 9.93469E-17 3.34531E-16 1.03575E-15 + 2.94681E-15 7.69852E-15 1.84511E-14 4.05216E-14 8.14222E-14 1.49385E-13 + 2.49556E-13 3.78081E-13 5.16354E-13 6.29591E-13 6.73787E-13 6.11436E-13 + 4.30335E-13 1.55360E-13 -1.55360E-13 -4.30335E-13 -6.11436E-13 -6.73787E-13 + -6.29591E-13 -5.16354E-13 -3.78081E-13 -2.49556E-13 -1.49385E-13 -8.14222E-14 + -4.05216E-14 -1.84511E-14 -7.69852E-15 -2.94681E-15 -1.03575E-15 -3.34531E-16 + -9.93469E-17 -2.71407E-17 -6.82363E-18 -1.57938E-18 + 5.70685E-19 2.46562E-18 9.80688E-18 3.58975E-17 1.20878E-16 3.74254E-16 + 1.06479E-15 2.78174E-15 6.66701E-15 1.46419E-14 2.94207E-14 5.39781E-14 + 9.01733E-14 1.36614E-13 1.86577E-13 2.27493E-13 2.43463E-13 2.20933E-13 + 1.55495E-13 5.61368E-14 -5.61368E-14 -1.55495E-13 -2.20933E-13 -2.43463E-13 + -2.27493E-13 -1.86577E-13 -1.36614E-13 -9.01733E-14 -5.39781E-14 -2.94207E-14 + -1.46419E-14 -6.66701E-15 -2.78174E-15 -1.06479E-15 -3.74254E-16 -1.20878E-16 + -3.58975E-17 -9.80688E-18 -2.46562E-18 -5.70685E-19 + 1.81748E-19 7.85234E-19 3.12324E-18 1.14324E-17 3.84964E-17 1.19190E-16 + 3.39106E-16 8.85912E-16 2.12327E-15 4.66305E-15 9.36972E-15 1.71906E-14 + 2.87178E-14 4.35080E-14 5.94198E-14 7.24506E-14 7.75365E-14 7.03615E-14 + 4.95211E-14 1.78781E-14 -1.78781E-14 -4.95211E-14 -7.03615E-14 -7.75365E-14 + -7.24506E-14 -5.94198E-14 -4.35080E-14 -2.87178E-14 -1.71906E-14 -9.36972E-15 + -4.66305E-15 -2.12327E-15 -8.85912E-16 -3.39106E-16 -1.19190E-16 -3.84964E-17 + -1.14324E-17 -3.12324E-18 -7.85234E-19 -1.81748E-19 + 5.09920E-20 2.20308E-19 8.76268E-19 3.20752E-18 1.08007E-17 3.34404E-17 + 9.51411E-17 2.48555E-16 5.95713E-16 1.30829E-15 2.62881E-15 4.82307E-15 + 8.05719E-15 1.22068E-14 1.66711E-14 2.03270E-14 2.17540E-14 1.97409E-14 + 1.38938E-14 5.01595E-15 -5.01595E-15 -1.38938E-14 -1.97409E-14 -2.17540E-14 + -2.03270E-14 -1.66711E-14 -1.22068E-14 -8.05719E-15 -4.82307E-15 -2.62881E-15 + -1.30829E-15 -5.95713E-16 -2.48555E-16 -9.51411E-17 -3.34404E-17 -1.08007E-17 + -3.20752E-18 -8.76268E-19 -2.20308E-19 -5.09920E-20 + 1.26000E-20 5.44375E-20 2.16523E-19 7.92569E-19 2.66882E-18 8.26302E-18 + 2.35091E-17 6.14172E-17 1.47199E-16 3.23273E-16 6.49570E-16 1.19177E-15 + 1.99091E-15 3.01626E-15 4.11937E-15 5.02275E-15 5.37534E-15 4.87791E-15 + 3.43313E-15 1.23943E-15 -1.23943E-15 -3.43313E-15 -4.87791E-15 -5.37534E-15 + -5.02275E-15 -4.11937E-15 -3.01626E-15 -1.99091E-15 -1.19177E-15 -6.49570E-16 + -3.23273E-16 -1.47199E-16 -6.14172E-17 -2.35091E-17 -8.26302E-18 -2.66882E-18 + -7.92569E-19 -2.16523E-19 -5.44375E-20 -1.26000E-20 + 2.74157E-21 1.18448E-20 4.71122E-20 1.72451E-19 5.80696E-19 1.79791E-18 + 5.11522E-18 1.33635E-17 3.20283E-17 7.03394E-17 1.41337E-16 2.59310E-16 + 4.33191E-16 6.56292E-16 8.96313E-16 1.09288E-15 1.16959E-15 1.06136E-15 + 7.46997E-16 2.69681E-16 -2.69681E-16 -7.46997E-16 -1.06136E-15 -1.16959E-15 + -1.09288E-15 -8.96313E-16 -6.56292E-16 -4.33191E-16 -2.59310E-16 -1.41337E-16 + -7.03394E-17 -3.20283E-17 -1.33635E-17 -5.11522E-18 -1.79791E-18 -5.80696E-19 + -1.72451E-19 -4.71122E-20 -1.18448E-20 -2.74157E-21 + 5.25225E-22 2.26921E-21 9.02569E-21 3.30380E-20 1.11249E-19 3.44441E-19 + 9.79967E-19 2.56015E-18 6.13593E-18 1.34755E-17 2.70771E-17 4.96783E-17 + 8.29902E-17 1.25732E-16 1.71714E-16 2.09371E-16 2.24069E-16 2.03334E-16 + 1.43109E-16 5.16651E-17 -5.16651E-17 -1.43109E-16 -2.03334E-16 -2.24069E-16 + -2.09371E-16 -1.71714E-16 -1.25732E-16 -8.29902E-17 -4.96783E-17 -2.70771E-17 + -1.34755E-17 -6.13593E-18 -2.56015E-18 -9.79967E-19 -3.44441E-19 -1.11249E-19 + -3.30380E-20 -9.02568E-21 -2.26921E-21 -5.25225E-22 + 8.85900E-23 3.82748E-22 1.52237E-21 5.57253E-21 1.87644E-20 5.80970E-20 + 1.65291E-19 4.31822E-19 1.03495E-18 2.27292E-18 4.56710E-18 8.37927E-18 + 1.39980E-17 2.12072E-17 2.89631E-17 3.53148E-17 3.77938E-17 3.42965E-17 + 2.41382E-17 8.71437E-18 -8.71437E-18 -2.41382E-17 -3.42965E-17 -3.77938E-17 + -3.53148E-17 -2.89631E-17 -2.12072E-17 -1.39980E-17 -8.37927E-18 -4.56710E-18 + -2.27292E-18 -1.03495E-18 -4.31822E-19 -1.65291E-19 -5.80970E-20 -1.87644E-20 + -5.57253E-21 -1.52237E-21 -3.82748E-22 -8.85900E-23 + 1.31553E-23 5.68367E-23 2.26065E-22 8.27499E-22 2.78644E-21 8.62719E-21 + 2.45451E-20 6.41240E-20 1.53686E-19 3.37520E-19 6.78197E-19 1.24429E-18 + 2.07865E-18 3.14919E-18 4.30091E-18 5.24411E-18 5.61224E-18 5.09289E-18 + 3.58443E-18 1.29405E-18 -1.29405E-18 -3.58443E-18 -5.09289E-18 -5.61224E-18 + -5.24411E-18 -4.30091E-18 -3.14919E-18 -2.07865E-18 -1.24429E-18 -6.78197E-19 + -3.37520E-19 -1.53686E-19 -6.41240E-20 -2.45451E-20 -8.62719E-21 -2.78644E-21 + -8.27499E-22 -2.26065E-22 -5.68367E-23 -1.31553E-23 + 1.71982E-24 7.43037E-24 2.95540E-23 1.08181E-22 3.64277E-22 1.12785E-21 + 3.20884E-21 8.38306E-21 2.00917E-20 4.41247E-20 8.86621E-20 1.62668E-19 + 2.71746E-19 4.11700E-19 5.62267E-19 6.85573E-19 7.33699E-19 6.65804E-19 + 4.68600E-19 1.69174E-19 -1.69174E-19 -4.68600E-19 -6.65804E-19 -7.33699E-19 + -6.85573E-19 -5.62267E-19 -4.11700E-19 -2.71746E-19 -1.62668E-19 -8.86621E-20 + -4.41247E-20 -2.00917E-20 -8.38306E-21 -3.20884E-21 -1.12785E-21 -3.64277E-22 + -1.08181E-22 -2.95540E-23 -7.43037E-24 -1.71982E-24 + 1.97936E-25 8.55174E-25 3.40142E-24 1.24507E-23 4.19253E-23 1.29806E-22 + 3.69310E-22 9.64819E-22 2.31238E-21 5.07839E-21 1.02043E-20 1.87218E-20 + 3.12757E-20 4.73832E-20 6.47123E-20 7.89037E-20 8.44426E-20 7.66285E-20 + 5.39319E-20 1.94705E-20 -1.94705E-20 -5.39319E-20 -7.66285E-20 -8.44426E-20 + -7.89037E-20 -6.47123E-20 -4.73832E-20 -3.12757E-20 -1.87218E-20 -1.02043E-20 + -5.07839E-21 -2.31238E-21 -9.64819E-22 -3.69310E-22 -1.29806E-22 -4.19253E-23 + -1.24507E-23 -3.40142E-24 -8.55173E-25 -1.97936E-25 diff --git a/samples/notebooks/benzene_molecule/MO_alpha_19.cube b/samples/notebooks/benzene_molecule/MO_alpha_19.cube new file mode 100644 index 0000000000..6ef17ff2ba --- /dev/null +++ b/samples/notebooks/benzene_molecule/MO_alpha_19.cube @@ -0,0 +1,11216 @@ +MO_alpha_19 +PySCF Version: 2.11.0 Date: Fri Oct 31 21:22:46 2025 + 10 -14.064801 -12.638058 -10.000000 + 40 0.721272 0.000000 0.000000 + 40 0.000000 0.648106 0.000000 + 40 0.000000 0.000000 0.512821 + 6 0.000000 0.000000 2.638058 0.000000 + 6 0.000000 2.284824 1.319029 0.000000 + 6 0.000000 2.284824 -1.319029 0.000000 + 6 0.000000 0.000000 -2.638058 0.000000 + 6 0.000000 -2.284824 -1.319029 0.000000 + 6 0.000000 -2.284824 1.319029 0.000000 + 1 0.000000 4.064801 2.347040 0.000000 + 1 0.000000 4.064801 -2.347040 0.000000 + 1 0.000000 -4.064801 -2.347040 0.000000 + 1 0.000000 -4.064801 2.347040 0.000000 + -1.31849E-25 -5.69647E-25 -2.26575E-24 -8.29363E-24 -2.79272E-23 -8.64663E-23 + -2.46005E-22 -6.42684E-22 -1.54032E-21 -3.38281E-21 -6.79726E-21 -1.24709E-20 + -2.08333E-20 -3.15628E-20 -4.31061E-20 -5.25592E-20 -5.62488E-20 -5.10437E-20 + -3.59251E-20 -1.29696E-20 1.29697E-20 3.59251E-20 5.10437E-20 5.62488E-20 + 5.25593E-20 4.31061E-20 3.15628E-20 2.08333E-20 1.24709E-20 6.79726E-21 + 3.38281E-21 1.54032E-21 6.42685E-22 2.46005E-22 8.64663E-23 2.79272E-23 + 8.29364E-24 2.26575E-24 5.69648E-25 1.31849E-25 + -1.14163E-24 -4.93234E-24 -1.96182E-23 -7.18111E-23 -2.41810E-22 -7.48676E-22 + -2.13005E-21 -5.56474E-21 -1.33370E-20 -2.92903E-20 -5.88546E-20 -1.07981E-19 + -1.80387E-19 -2.73290E-19 -3.73238E-19 -4.55089E-19 -4.87035E-19 -4.41966E-19 + -3.11060E-19 -1.12299E-19 1.12299E-19 3.11060E-19 4.41966E-19 4.87035E-19 + 4.55089E-19 3.73238E-19 2.73290E-19 1.80387E-19 1.07981E-19 5.88546E-20 + 2.92904E-20 1.33370E-20 5.56474E-21 2.13005E-21 7.48676E-22 2.41810E-22 + 7.18112E-23 1.96182E-23 4.93234E-24 1.14163E-24 + -8.70868E-24 -3.76254E-23 -1.49654E-22 -5.47798E-22 -1.84460E-21 -5.71113E-21 + -1.62487E-20 -4.24496E-20 -1.01739E-19 -2.23436E-19 -4.48961E-19 -8.23709E-19 + -1.37605E-18 -2.08474E-18 -2.84717E-18 -3.47156E-18 -3.71526E-18 -3.37145E-18 + -2.37286E-18 -8.56651E-19 8.56651E-19 2.37286E-18 3.37145E-18 3.71526E-18 + 3.47156E-18 2.84717E-18 2.08474E-18 1.37605E-18 8.23709E-19 4.48961E-19 + 2.23436E-19 1.01739E-19 4.24496E-20 1.62487E-20 5.71113E-21 1.84460E-21 + 5.47798E-22 1.49654E-22 3.76254E-23 8.70869E-24 + -5.85169E-23 -2.52819E-22 -1.00558E-21 -3.68085E-21 -1.23946E-20 -3.83752E-20 + -1.09181E-19 -2.85234E-19 -6.83621E-19 -1.50135E-18 -3.01674E-18 -5.53481E-18 + -9.24618E-18 -1.40081E-17 -1.91312E-17 -2.33267E-17 -2.49642E-17 -2.26540E-17 + -1.59441E-17 -5.75615E-18 5.75615E-18 1.59442E-17 2.26540E-17 2.49642E-17 + 2.33267E-17 1.91312E-17 1.40081E-17 9.24618E-18 5.53481E-18 3.01674E-18 + 1.50135E-18 6.83621E-19 2.85234E-19 1.09181E-19 3.83752E-20 1.23946E-20 + 3.68085E-21 1.00558E-21 2.52819E-22 5.85169E-23 + -3.46292E-22 -1.49613E-21 -5.95081E-21 -2.17826E-20 -7.33487E-20 -2.27097E-19 + -6.46112E-19 -1.68796E-18 -4.04554E-18 -8.88469E-18 -1.78525E-17 -3.27539E-17 + -5.47171E-17 -8.28973E-17 -1.13215E-16 -1.38043E-16 -1.47733E-16 -1.34062E-16 + -9.43544E-17 -3.40638E-17 3.40638E-17 9.43544E-17 1.34062E-16 1.47733E-16 + 1.38043E-16 1.13215E-16 8.28973E-17 5.47171E-17 3.27539E-17 1.78525E-17 + 8.88469E-18 4.04554E-18 1.68796E-18 6.46112E-19 2.27097E-19 7.33487E-20 + 2.17826E-20 5.95081E-21 1.49613E-21 3.46292E-22 + -1.80457E-21 -7.79655E-21 -3.10105E-20 -1.13512E-19 -3.82229E-19 -1.18343E-18 + -3.36697E-18 -8.79619E-18 -2.10818E-17 -4.62993E-17 -9.30315E-17 -1.70685E-16 + -2.85138E-16 -4.31989E-16 -5.89977E-16 -7.19359E-16 -7.69857E-16 -6.98616E-16 + -4.91693E-16 -1.77511E-16 1.77511E-16 4.91693E-16 6.98616E-16 7.69857E-16 + 7.19359E-16 5.89977E-16 4.31989E-16 2.85138E-16 1.70685E-16 9.30315E-17 + 4.62993E-17 2.10818E-17 8.79619E-18 3.36697E-18 1.18343E-18 3.82229E-19 + 1.13512E-19 3.10105E-20 7.79655E-21 1.80457E-21 + -8.27971E-21 -3.57721E-20 -1.42282E-19 -5.20814E-19 -1.75374E-18 -5.42981E-18 + -1.54483E-17 -4.03586E-17 -9.67275E-17 -2.12430E-16 -4.26846E-16 -7.83135E-16 + -1.30827E-15 -1.98205E-15 -2.70693E-15 -3.30056E-15 -3.53225E-15 -3.20538E-15 + -2.25598E-15 -8.14454E-16 8.14454E-16 2.25598E-15 3.20538E-15 3.53225E-15 + 3.30056E-15 2.70693E-15 1.98205E-15 1.30827E-15 7.83135E-16 4.26846E-16 + 2.12430E-16 9.67275E-17 4.03586E-17 1.54483E-17 5.42981E-18 1.75374E-18 + 5.20814E-19 1.42282E-19 3.57721E-20 8.27972E-21 + -3.34422E-20 -1.44485E-19 -5.74684E-19 -2.10360E-18 -7.08345E-18 -2.19313E-17 + -6.23966E-17 -1.63010E-16 -3.90687E-16 -8.58015E-16 -1.72406E-15 -3.16312E-15 + -5.28416E-15 -8.00559E-15 -1.09334E-14 -1.33311E-14 -1.42669E-14 -1.29467E-14 + -9.11203E-15 -3.28962E-15 3.28962E-15 9.11203E-15 1.29467E-14 1.42669E-14 + 1.33311E-14 1.09334E-14 8.00559E-15 5.28416E-15 3.16312E-15 1.72406E-15 + 8.58015E-16 3.90687E-16 1.63010E-16 6.23966E-17 2.19313E-17 7.08345E-18 + 2.10360E-18 5.74684E-19 1.44485E-19 3.34422E-20 + -1.18882E-19 -5.13624E-19 -2.04292E-18 -7.47798E-18 -2.51807E-17 -7.79626E-17 + -2.21811E-16 -5.79478E-16 -1.38884E-15 -3.05012E-15 -6.12877E-15 -1.12444E-14 + -1.87844E-14 -2.84587E-14 -3.88667E-14 -4.73902E-14 -5.07169E-14 -4.60237E-14 + -3.23919E-14 -1.16941E-14 1.16941E-14 3.23919E-14 4.60237E-14 5.07169E-14 + 4.73902E-14 3.88667E-14 2.84587E-14 1.87844E-14 1.12444E-14 6.12877E-15 + 3.05012E-15 1.38884E-15 5.79478E-16 2.21811E-16 7.79626E-17 2.51807E-17 + 7.47798E-18 2.04292E-18 5.13624E-19 1.18882E-19 + -3.71826E-19 -1.60645E-18 -6.38961E-18 -2.33888E-17 -7.87572E-17 -2.43842E-16 + -6.93754E-16 -1.81243E-15 -4.34384E-15 -9.53981E-15 -1.91688E-14 -3.51691E-14 + -5.87518E-14 -8.90099E-14 -1.21563E-13 -1.48222E-13 -1.58627E-13 -1.43948E-13 + -1.01312E-13 -3.65756E-14 3.65756E-14 1.01312E-13 1.43948E-13 1.58627E-13 + 1.48222E-13 1.21563E-13 8.90099E-14 5.87518E-14 3.51691E-14 1.91688E-14 + 9.53981E-15 4.34384E-15 1.81243E-15 6.93754E-16 2.43842E-16 7.87572E-17 + 2.33888E-17 6.38961E-18 1.60645E-18 3.71826E-19 + -1.02268E-18 -4.41843E-18 -1.75741E-17 -6.43290E-17 -2.16616E-16 -6.70670E-16 + -1.90812E-15 -4.98494E-15 -1.19474E-14 -2.62385E-14 -5.27225E-14 -9.67299E-14 + -1.61592E-13 -2.44815E-13 -3.34349E-13 -4.07672E-13 -4.36290E-13 -3.95917E-13 + -2.78650E-13 -1.00598E-13 1.00598E-13 2.78650E-13 3.95917E-13 4.36290E-13 + 4.07672E-13 3.34349E-13 2.44815E-13 1.61592E-13 9.67299E-14 5.27225E-14 + 2.62385E-14 1.19474E-14 4.98494E-15 1.90812E-15 6.70670E-16 2.16616E-16 + 6.43290E-17 1.75741E-17 4.41843E-18 1.02268E-18 + -2.47142E-18 -1.06776E-17 -4.24699E-17 -1.55458E-16 -5.23476E-16 -1.62075E-15 + -4.61119E-15 -1.20467E-14 -2.88723E-14 -6.34084E-14 -1.27410E-13 -2.33759E-13 + -3.90506E-13 -5.91623E-13 -8.07993E-13 -9.85187E-13 -1.05435E-12 -9.56779E-13 + -6.73391E-13 -2.43107E-13 2.43107E-13 6.73391E-13 9.56779E-13 1.05435E-12 + 9.85187E-13 8.07993E-13 5.91623E-13 3.90506E-13 2.33759E-13 1.27410E-13 + 6.34084E-14 2.88723E-14 1.20467E-14 4.61119E-15 1.62075E-15 5.23476E-16 + 1.55458E-16 4.24699E-17 1.06776E-17 2.47142E-18 + -5.24012E-18 -2.26397E-17 -9.00484E-17 -3.29616E-16 -1.10992E-15 -3.43646E-15 + -9.77704E-15 -2.55424E-14 -6.12176E-14 -1.34444E-13 -2.70145E-13 -4.95636E-13 + -8.27985E-13 -1.25441E-12 -1.71318E-12 -2.08888E-12 -2.23551E-12 -2.02864E-12 + -1.42778E-12 -5.15457E-13 5.15457E-13 1.42778E-12 2.02864E-12 2.23551E-12 + 2.08888E-12 1.71318E-12 1.25441E-12 8.27985E-13 4.95636E-13 2.70145E-13 + 1.34444E-13 6.12176E-14 2.55424E-14 9.77704E-15 3.43646E-15 1.10992E-15 + 3.29616E-16 9.00484E-17 2.26397E-17 5.24012E-18 + -9.72427E-18 -4.20132E-17 -1.67106E-16 -6.11680E-16 -2.05972E-15 -6.37715E-15 + -1.81436E-14 -4.73999E-14 -1.13603E-13 -2.49492E-13 -5.01318E-13 -9.19768E-13 + -1.53652E-12 -2.32785E-12 -3.17920E-12 -3.87640E-12 -4.14852E-12 -3.76462E-12 + -2.64958E-12 -9.56551E-13 9.56551E-13 2.64958E-12 3.76462E-12 4.14852E-12 + 3.87640E-12 3.17920E-12 2.32785E-12 1.53652E-12 9.19768E-13 5.01318E-13 + 2.49492E-13 1.13603E-13 4.73999E-14 1.81436E-14 6.37715E-15 2.05972E-15 + 6.11680E-16 1.67106E-16 4.20132E-17 9.72427E-18 + -1.57261E-17 -6.79436E-17 -2.70243E-16 -9.89207E-16 -3.33097E-15 -1.03131E-14 + -2.93417E-14 -7.66550E-14 -1.83719E-13 -4.03478E-13 -8.10730E-13 -1.48745E-12 + -2.48485E-12 -3.76460E-12 -5.14139E-12 -6.26890E-12 -6.70897E-12 -6.08814E-12 + -4.28489E-12 -1.54693E-12 1.54693E-12 4.28489E-12 6.08814E-12 6.70897E-12 + 6.26890E-12 5.14139E-12 3.76460E-12 2.48485E-12 1.48745E-12 8.10730E-13 + 4.03478E-13 1.83719E-13 7.66550E-14 2.93417E-14 1.03131E-14 3.33097E-15 + 9.89207E-16 2.70243E-16 6.79436E-17 1.57261E-17 + -2.19896E-17 -9.50049E-17 -3.77878E-16 -1.38320E-15 -4.65766E-15 -1.44207E-14 + -4.10283E-14 -1.07186E-13 -2.56893E-13 -5.64180E-13 -1.13364E-12 -2.07988E-12 + -3.47455E-12 -5.26400E-12 -7.18916E-12 -8.76575E-12 -9.38109E-12 -8.51299E-12 + -5.99153E-12 -2.16306E-12 2.16306E-12 5.99153E-12 8.51299E-12 9.38109E-12 + 8.76575E-12 7.18916E-12 5.26400E-12 3.47455E-12 2.07988E-12 1.13364E-12 + 5.64180E-13 2.56893E-13 1.07186E-13 4.10283E-14 1.44207E-14 4.65766E-15 + 1.38320E-15 3.77878E-16 9.50049E-17 2.19896E-17 + -2.61846E-17 -1.13129E-16 -4.49967E-16 -1.64708E-15 -5.54621E-15 -1.71718E-14 + -4.88554E-14 -1.27634E-13 -3.05901E-13 -6.71810E-13 -1.34990E-12 -2.47667E-12 + -4.13740E-12 -6.26823E-12 -8.56066E-12 -1.04380E-11 -1.11708E-11 -1.01370E-11 + -7.13455E-12 -2.57571E-12 2.57571E-12 7.13455E-12 1.01370E-11 1.11708E-11 + 1.04380E-11 8.56066E-12 6.26823E-12 4.13740E-12 2.47667E-12 1.34990E-12 + 6.71810E-13 3.05901E-13 1.27634E-13 4.88554E-14 1.71718E-14 5.54621E-15 + 1.64708E-15 4.49967E-16 1.13129E-16 2.61846E-17 + -2.56960E-17 -1.11018E-16 -4.41571E-16 -1.61634E-15 -5.44273E-15 -1.68514E-14 + -4.79438E-14 -1.25253E-13 -3.00193E-13 -6.59275E-13 -1.32472E-12 -2.43045E-12 + -4.06020E-12 -6.15127E-12 -8.40093E-12 -1.02433E-11 -1.09623E-11 -9.94789E-12 + -7.00143E-12 -2.52765E-12 2.52765E-12 7.00143E-12 9.94789E-12 1.09623E-11 + 1.02433E-11 8.40093E-12 6.15127E-12 4.06020E-12 2.43045E-12 1.32472E-12 + 6.59275E-13 3.00193E-13 1.25253E-13 4.79438E-14 1.68514E-14 5.44273E-15 + 1.61634E-15 4.41571E-16 1.11018E-16 2.56960E-17 + -1.90363E-17 -8.22453E-17 -3.27127E-16 -1.19743E-15 -4.03211E-15 -1.24839E-14 + -3.55180E-14 -9.27904E-14 -2.22391E-13 -4.88408E-13 -9.81384E-13 -1.80054E-12 + -3.00790E-12 -4.55702E-12 -6.22363E-12 -7.58847E-12 -8.12117E-12 -7.36966E-12 + -5.18684E-12 -1.87255E-12 1.87255E-12 5.18684E-12 7.36966E-12 8.12117E-12 + 7.58847E-12 6.22363E-12 4.55702E-12 3.00790E-12 1.80054E-12 9.81384E-13 + 4.88408E-13 2.22391E-13 9.27904E-14 3.55180E-14 1.24839E-14 4.03211E-15 + 1.19743E-15 3.27127E-16 8.22453E-17 1.90363E-17 + -7.04884E-18 -3.04541E-17 -1.21130E-16 -4.43389E-16 -1.49303E-15 -4.62261E-15 + -1.31518E-14 -3.43588E-14 -8.23479E-14 -1.80850E-13 -3.63391E-13 -6.66713E-13 + -1.11378E-12 -1.68739E-12 -2.30451E-12 -2.80989E-12 -3.00714E-12 -2.72887E-12 + -1.92060E-12 -6.93376E-13 6.93376E-13 1.92060E-12 2.72887E-12 3.00714E-12 + 2.80989E-12 2.30451E-12 1.68739E-12 1.11378E-12 6.66713E-13 3.63391E-13 + 1.80850E-13 8.23479E-14 3.43588E-14 1.31518E-14 4.62261E-15 1.49303E-15 + 4.43389E-16 1.21130E-16 3.04541E-17 7.04884E-18 + 7.04884E-18 3.04541E-17 1.21130E-16 4.43389E-16 1.49303E-15 4.62261E-15 + 1.31518E-14 3.43588E-14 8.23479E-14 1.80850E-13 3.63391E-13 6.66713E-13 + 1.11378E-12 1.68739E-12 2.30451E-12 2.80989E-12 3.00714E-12 2.72887E-12 + 1.92060E-12 6.93376E-13 -6.93376E-13 -1.92060E-12 -2.72887E-12 -3.00714E-12 + -2.80989E-12 -2.30451E-12 -1.68739E-12 -1.11378E-12 -6.66713E-13 -3.63391E-13 + -1.80850E-13 -8.23479E-14 -3.43588E-14 -1.31518E-14 -4.62261E-15 -1.49303E-15 + -4.43389E-16 -1.21130E-16 -3.04541E-17 -7.04884E-18 + 1.90363E-17 8.22453E-17 3.27127E-16 1.19743E-15 4.03211E-15 1.24839E-14 + 3.55180E-14 9.27904E-14 2.22391E-13 4.88408E-13 9.81384E-13 1.80054E-12 + 3.00790E-12 4.55702E-12 6.22363E-12 7.58847E-12 8.12117E-12 7.36966E-12 + 5.18684E-12 1.87255E-12 -1.87255E-12 -5.18684E-12 -7.36966E-12 -8.12117E-12 + -7.58847E-12 -6.22363E-12 -4.55702E-12 -3.00790E-12 -1.80054E-12 -9.81384E-13 + -4.88408E-13 -2.22391E-13 -9.27904E-14 -3.55180E-14 -1.24839E-14 -4.03211E-15 + -1.19743E-15 -3.27127E-16 -8.22453E-17 -1.90363E-17 + 2.56960E-17 1.11018E-16 4.41571E-16 1.61634E-15 5.44273E-15 1.68514E-14 + 4.79438E-14 1.25253E-13 3.00193E-13 6.59275E-13 1.32472E-12 2.43045E-12 + 4.06020E-12 6.15127E-12 8.40093E-12 1.02433E-11 1.09623E-11 9.94789E-12 + 7.00143E-12 2.52765E-12 -2.52765E-12 -7.00143E-12 -9.94789E-12 -1.09623E-11 + -1.02433E-11 -8.40093E-12 -6.15127E-12 -4.06020E-12 -2.43045E-12 -1.32472E-12 + -6.59275E-13 -3.00193E-13 -1.25253E-13 -4.79438E-14 -1.68514E-14 -5.44273E-15 + -1.61634E-15 -4.41571E-16 -1.11018E-16 -2.56960E-17 + 2.61846E-17 1.13129E-16 4.49967E-16 1.64708E-15 5.54621E-15 1.71718E-14 + 4.88554E-14 1.27634E-13 3.05901E-13 6.71810E-13 1.34990E-12 2.47667E-12 + 4.13740E-12 6.26823E-12 8.56066E-12 1.04380E-11 1.11708E-11 1.01370E-11 + 7.13455E-12 2.57571E-12 -2.57571E-12 -7.13455E-12 -1.01370E-11 -1.11708E-11 + -1.04380E-11 -8.56066E-12 -6.26823E-12 -4.13740E-12 -2.47667E-12 -1.34990E-12 + -6.71810E-13 -3.05901E-13 -1.27634E-13 -4.88554E-14 -1.71718E-14 -5.54621E-15 + -1.64708E-15 -4.49967E-16 -1.13129E-16 -2.61846E-17 + 2.19896E-17 9.50049E-17 3.77878E-16 1.38320E-15 4.65766E-15 1.44207E-14 + 4.10283E-14 1.07186E-13 2.56893E-13 5.64180E-13 1.13364E-12 2.07988E-12 + 3.47455E-12 5.26400E-12 7.18916E-12 8.76575E-12 9.38109E-12 8.51299E-12 + 5.99153E-12 2.16306E-12 -2.16306E-12 -5.99153E-12 -8.51299E-12 -9.38109E-12 + -8.76575E-12 -7.18916E-12 -5.26400E-12 -3.47455E-12 -2.07988E-12 -1.13364E-12 + -5.64180E-13 -2.56893E-13 -1.07186E-13 -4.10283E-14 -1.44207E-14 -4.65766E-15 + -1.38320E-15 -3.77878E-16 -9.50049E-17 -2.19896E-17 + 1.57261E-17 6.79436E-17 2.70243E-16 9.89207E-16 3.33097E-15 1.03131E-14 + 2.93417E-14 7.66550E-14 1.83719E-13 4.03478E-13 8.10730E-13 1.48745E-12 + 2.48485E-12 3.76460E-12 5.14139E-12 6.26890E-12 6.70897E-12 6.08814E-12 + 4.28489E-12 1.54693E-12 -1.54693E-12 -4.28489E-12 -6.08814E-12 -6.70897E-12 + -6.26890E-12 -5.14139E-12 -3.76460E-12 -2.48485E-12 -1.48745E-12 -8.10730E-13 + -4.03478E-13 -1.83719E-13 -7.66550E-14 -2.93417E-14 -1.03131E-14 -3.33097E-15 + -9.89207E-16 -2.70243E-16 -6.79436E-17 -1.57261E-17 + 9.72427E-18 4.20132E-17 1.67106E-16 6.11680E-16 2.05972E-15 6.37715E-15 + 1.81436E-14 4.73999E-14 1.13603E-13 2.49492E-13 5.01318E-13 9.19768E-13 + 1.53652E-12 2.32785E-12 3.17920E-12 3.87640E-12 4.14852E-12 3.76462E-12 + 2.64958E-12 9.56551E-13 -9.56551E-13 -2.64958E-12 -3.76462E-12 -4.14852E-12 + -3.87640E-12 -3.17920E-12 -2.32785E-12 -1.53652E-12 -9.19768E-13 -5.01318E-13 + -2.49492E-13 -1.13603E-13 -4.73999E-14 -1.81436E-14 -6.37715E-15 -2.05972E-15 + -6.11680E-16 -1.67106E-16 -4.20132E-17 -9.72427E-18 + 5.24012E-18 2.26397E-17 9.00484E-17 3.29616E-16 1.10992E-15 3.43646E-15 + 9.77704E-15 2.55424E-14 6.12176E-14 1.34444E-13 2.70145E-13 4.95636E-13 + 8.27985E-13 1.25441E-12 1.71318E-12 2.08888E-12 2.23551E-12 2.02864E-12 + 1.42778E-12 5.15457E-13 -5.15457E-13 -1.42778E-12 -2.02864E-12 -2.23551E-12 + -2.08888E-12 -1.71318E-12 -1.25441E-12 -8.27985E-13 -4.95636E-13 -2.70145E-13 + -1.34444E-13 -6.12176E-14 -2.55424E-14 -9.77704E-15 -3.43646E-15 -1.10992E-15 + -3.29616E-16 -9.00484E-17 -2.26397E-17 -5.24012E-18 + 2.47142E-18 1.06776E-17 4.24699E-17 1.55458E-16 5.23476E-16 1.62075E-15 + 4.61119E-15 1.20467E-14 2.88723E-14 6.34084E-14 1.27410E-13 2.33759E-13 + 3.90506E-13 5.91623E-13 8.07993E-13 9.85187E-13 1.05435E-12 9.56779E-13 + 6.73391E-13 2.43107E-13 -2.43107E-13 -6.73391E-13 -9.56779E-13 -1.05435E-12 + -9.85187E-13 -8.07993E-13 -5.91623E-13 -3.90506E-13 -2.33759E-13 -1.27410E-13 + -6.34084E-14 -2.88723E-14 -1.20467E-14 -4.61119E-15 -1.62075E-15 -5.23476E-16 + -1.55458E-16 -4.24699E-17 -1.06776E-17 -2.47142E-18 + 1.02268E-18 4.41843E-18 1.75741E-17 6.43290E-17 2.16616E-16 6.70670E-16 + 1.90812E-15 4.98494E-15 1.19474E-14 2.62385E-14 5.27225E-14 9.67299E-14 + 1.61592E-13 2.44815E-13 3.34349E-13 4.07672E-13 4.36290E-13 3.95917E-13 + 2.78650E-13 1.00598E-13 -1.00598E-13 -2.78650E-13 -3.95917E-13 -4.36290E-13 + -4.07672E-13 -3.34349E-13 -2.44815E-13 -1.61592E-13 -9.67299E-14 -5.27225E-14 + -2.62385E-14 -1.19474E-14 -4.98494E-15 -1.90812E-15 -6.70670E-16 -2.16616E-16 + -6.43290E-17 -1.75741E-17 -4.41843E-18 -1.02268E-18 + 3.71826E-19 1.60645E-18 6.38961E-18 2.33888E-17 7.87572E-17 2.43842E-16 + 6.93754E-16 1.81243E-15 4.34384E-15 9.53981E-15 1.91688E-14 3.51691E-14 + 5.87518E-14 8.90099E-14 1.21563E-13 1.48222E-13 1.58627E-13 1.43948E-13 + 1.01312E-13 3.65756E-14 -3.65756E-14 -1.01312E-13 -1.43948E-13 -1.58627E-13 + -1.48222E-13 -1.21563E-13 -8.90099E-14 -5.87518E-14 -3.51691E-14 -1.91688E-14 + -9.53981E-15 -4.34384E-15 -1.81243E-15 -6.93754E-16 -2.43842E-16 -7.87572E-17 + -2.33888E-17 -6.38961E-18 -1.60645E-18 -3.71826E-19 + 1.18882E-19 5.13624E-19 2.04292E-18 7.47798E-18 2.51807E-17 7.79626E-17 + 2.21811E-16 5.79478E-16 1.38884E-15 3.05012E-15 6.12877E-15 1.12444E-14 + 1.87844E-14 2.84587E-14 3.88667E-14 4.73902E-14 5.07169E-14 4.60237E-14 + 3.23919E-14 1.16941E-14 -1.16941E-14 -3.23919E-14 -4.60237E-14 -5.07169E-14 + -4.73902E-14 -3.88667E-14 -2.84587E-14 -1.87844E-14 -1.12444E-14 -6.12877E-15 + -3.05012E-15 -1.38884E-15 -5.79478E-16 -2.21811E-16 -7.79626E-17 -2.51807E-17 + -7.47798E-18 -2.04292E-18 -5.13624E-19 -1.18882E-19 + 3.34422E-20 1.44485E-19 5.74684E-19 2.10360E-18 7.08345E-18 2.19313E-17 + 6.23966E-17 1.63010E-16 3.90687E-16 8.58015E-16 1.72406E-15 3.16312E-15 + 5.28416E-15 8.00559E-15 1.09334E-14 1.33311E-14 1.42669E-14 1.29467E-14 + 9.11203E-15 3.28962E-15 -3.28962E-15 -9.11203E-15 -1.29467E-14 -1.42669E-14 + -1.33311E-14 -1.09334E-14 -8.00559E-15 -5.28416E-15 -3.16312E-15 -1.72406E-15 + -8.58015E-16 -3.90687E-16 -1.63010E-16 -6.23966E-17 -2.19313E-17 -7.08345E-18 + -2.10360E-18 -5.74684E-19 -1.44485E-19 -3.34422E-20 + 8.27971E-21 3.57721E-20 1.42282E-19 5.20814E-19 1.75374E-18 5.42981E-18 + 1.54483E-17 4.03586E-17 9.67275E-17 2.12430E-16 4.26846E-16 7.83135E-16 + 1.30827E-15 1.98205E-15 2.70693E-15 3.30056E-15 3.53225E-15 3.20538E-15 + 2.25598E-15 8.14454E-16 -8.14454E-16 -2.25598E-15 -3.20538E-15 -3.53225E-15 + -3.30056E-15 -2.70693E-15 -1.98205E-15 -1.30827E-15 -7.83135E-16 -4.26846E-16 + -2.12430E-16 -9.67275E-17 -4.03586E-17 -1.54483E-17 -5.42981E-18 -1.75374E-18 + -5.20814E-19 -1.42282E-19 -3.57721E-20 -8.27972E-21 + 1.80457E-21 7.79655E-21 3.10105E-20 1.13512E-19 3.82229E-19 1.18343E-18 + 3.36697E-18 8.79619E-18 2.10818E-17 4.62993E-17 9.30315E-17 1.70685E-16 + 2.85138E-16 4.31989E-16 5.89977E-16 7.19359E-16 7.69857E-16 6.98616E-16 + 4.91693E-16 1.77511E-16 -1.77511E-16 -4.91693E-16 -6.98616E-16 -7.69857E-16 + -7.19359E-16 -5.89977E-16 -4.31989E-16 -2.85138E-16 -1.70685E-16 -9.30315E-17 + -4.62993E-17 -2.10818E-17 -8.79619E-18 -3.36697E-18 -1.18343E-18 -3.82229E-19 + -1.13512E-19 -3.10105E-20 -7.79655E-21 -1.80457E-21 + 3.46292E-22 1.49613E-21 5.95081E-21 2.17826E-20 7.33487E-20 2.27097E-19 + 6.46112E-19 1.68796E-18 4.04554E-18 8.88469E-18 1.78525E-17 3.27539E-17 + 5.47171E-17 8.28973E-17 1.13215E-16 1.38043E-16 1.47733E-16 1.34062E-16 + 9.43544E-17 3.40638E-17 -3.40638E-17 -9.43544E-17 -1.34062E-16 -1.47733E-16 + -1.38043E-16 -1.13215E-16 -8.28973E-17 -5.47171E-17 -3.27539E-17 -1.78525E-17 + -8.88469E-18 -4.04554E-18 -1.68796E-18 -6.46112E-19 -2.27097E-19 -7.33487E-20 + -2.17826E-20 -5.95081E-21 -1.49613E-21 -3.46292E-22 + 5.85169E-23 2.52819E-22 1.00558E-21 3.68085E-21 1.23946E-20 3.83752E-20 + 1.09181E-19 2.85234E-19 6.83621E-19 1.50135E-18 3.01674E-18 5.53481E-18 + 9.24618E-18 1.40081E-17 1.91312E-17 2.33267E-17 2.49642E-17 2.26540E-17 + 1.59441E-17 5.75615E-18 -5.75615E-18 -1.59442E-17 -2.26540E-17 -2.49642E-17 + -2.33267E-17 -1.91312E-17 -1.40081E-17 -9.24618E-18 -5.53481E-18 -3.01674E-18 + -1.50135E-18 -6.83621E-19 -2.85234E-19 -1.09181E-19 -3.83752E-20 -1.23946E-20 + -3.68085E-21 -1.00558E-21 -2.52819E-22 -5.85169E-23 + 8.70868E-24 3.76254E-23 1.49654E-22 5.47798E-22 1.84460E-21 5.71113E-21 + 1.62487E-20 4.24496E-20 1.01739E-19 2.23436E-19 4.48961E-19 8.23709E-19 + 1.37605E-18 2.08474E-18 2.84717E-18 3.47156E-18 3.71526E-18 3.37145E-18 + 2.37286E-18 8.56650E-19 -8.56651E-19 -2.37286E-18 -3.37145E-18 -3.71526E-18 + -3.47156E-18 -2.84717E-18 -2.08474E-18 -1.37605E-18 -8.23709E-19 -4.48961E-19 + -2.23436E-19 -1.01739E-19 -4.24496E-20 -1.62487E-20 -5.71113E-21 -1.84460E-21 + -5.47798E-22 -1.49654E-22 -3.76254E-23 -8.70869E-24 + 1.14163E-24 4.93234E-24 1.96182E-23 7.18111E-23 2.41810E-22 7.48676E-22 + 2.13005E-21 5.56474E-21 1.33370E-20 2.92903E-20 5.88546E-20 1.07981E-19 + 1.80387E-19 2.73290E-19 3.73238E-19 4.55089E-19 4.87035E-19 4.41966E-19 + 3.11060E-19 1.12299E-19 -1.12299E-19 -3.11060E-19 -4.41966E-19 -4.87035E-19 + -4.55089E-19 -3.73238E-19 -2.73290E-19 -1.80387E-19 -1.07981E-19 -5.88546E-20 + -2.92904E-20 -1.33370E-20 -5.56474E-21 -2.13005E-21 -7.48676E-22 -2.41810E-22 + -7.18112E-23 -1.96182E-23 -4.93234E-24 -1.14163E-24 + 1.31849E-25 5.69647E-25 2.26575E-24 8.29363E-24 2.79272E-23 8.64663E-23 + 2.46005E-22 6.42684E-22 1.54032E-21 3.38281E-21 6.79726E-21 1.24709E-20 + 2.08333E-20 3.15628E-20 4.31061E-20 5.25592E-20 5.62488E-20 5.10437E-20 + 3.59251E-20 1.29696E-20 -1.29697E-20 -3.59251E-20 -5.10437E-20 -5.62488E-20 + -5.25593E-20 -4.31061E-20 -3.15628E-20 -2.08333E-20 -1.24709E-20 -6.79726E-21 + -3.38281E-21 -1.54032E-21 -6.42685E-22 -2.46005E-22 -8.64663E-23 -2.79272E-23 + -8.29364E-24 -2.26575E-24 -5.69648E-25 -1.31849E-25 + -1.62011E-24 -6.99958E-24 -2.78406E-23 -1.01909E-22 -3.43158E-22 -1.06246E-21 + -3.02280E-21 -7.89703E-21 -1.89268E-20 -4.15665E-20 -8.35218E-20 -1.53237E-19 + -2.55991E-19 -3.87831E-19 -5.29669E-19 -6.45826E-19 -6.91161E-19 -6.27203E-19 + -4.41432E-19 -1.59366E-19 1.59366E-19 4.41432E-19 6.27203E-19 6.91162E-19 + 6.45826E-19 5.29669E-19 3.87831E-19 2.55991E-19 1.53237E-19 8.35218E-20 + 4.15665E-20 1.89268E-20 7.89703E-21 3.02280E-21 1.06246E-21 3.43158E-22 + 1.01909E-22 2.78406E-23 6.99958E-24 1.62011E-24 + -1.39974E-23 -6.04751E-23 -2.40537E-22 -8.80471E-22 -2.96482E-21 -9.17946E-21 + -2.61164E-20 -6.82289E-20 -1.63524E-19 -3.59127E-19 -7.21613E-19 -1.32394E-18 + -2.21171E-18 -3.35078E-18 -4.57624E-18 -5.57981E-18 -5.97151E-18 -5.41892E-18 + -3.81389E-18 -1.37689E-18 1.37689E-18 3.81389E-18 5.41892E-18 5.97151E-18 + 5.57981E-18 4.57624E-18 3.35078E-18 2.21171E-18 1.32394E-18 7.21613E-19 + 3.59127E-19 1.63524E-19 6.82289E-20 2.61164E-20 9.17946E-21 2.96482E-21 + 8.80472E-22 2.40537E-22 6.04751E-23 1.39974E-23 + -1.06596E-22 -4.60544E-22 -1.83180E-21 -6.70518E-21 -2.25784E-20 -6.99056E-20 + -1.98888E-19 -5.19593E-19 -1.24531E-18 -2.73491E-18 -5.49540E-18 -1.00824E-17 + -1.68432E-17 -2.55177E-17 -3.48501E-17 -4.24927E-17 -4.54756E-17 -4.12674E-17 + -2.90444E-17 -1.04856E-17 1.04856E-17 2.90444E-17 4.12674E-17 4.54756E-17 + 4.24927E-17 3.48501E-17 2.55177E-17 1.68432E-17 1.00824E-17 5.49540E-18 + 2.73491E-18 1.24531E-18 5.19593E-19 1.98888E-19 6.99056E-20 2.25784E-20 + 6.70518E-21 1.83180E-21 4.60544E-22 1.06596E-22 + -7.15323E-22 -3.09051E-21 -1.22924E-20 -4.49956E-20 -1.51514E-19 -4.69107E-19 + -1.33465E-18 -3.48676E-18 -8.35674E-18 -1.83528E-17 -3.68772E-17 -6.76587E-17 + -1.13027E-16 -1.71238E-16 -2.33864E-16 -2.85150E-16 -3.05167E-16 -2.76928E-16 + -1.94905E-16 -7.03644E-17 7.03645E-17 1.94905E-16 2.76928E-16 3.05167E-16 + 2.85150E-16 2.33864E-16 1.71238E-16 1.13027E-16 6.76587E-17 3.68772E-17 + 1.83528E-17 8.35674E-18 3.48676E-18 1.33465E-18 4.69107E-19 1.51514E-19 + 4.49956E-20 1.22924E-20 3.09051E-21 7.15323E-22 + -4.22884E-21 -1.82705E-20 -7.26702E-20 -2.66005E-19 -8.95720E-19 -2.77326E-18 + -7.89019E-18 -2.06130E-17 -4.94033E-17 -1.08498E-16 -2.18011E-16 -3.99984E-16 + -6.68195E-16 -1.01233E-15 -1.38256E-15 -1.68575E-15 -1.80409E-15 -1.63714E-15 + -1.15224E-15 -4.15980E-16 4.15980E-16 1.15224E-15 1.63714E-15 1.80409E-15 + 1.68575E-15 1.38256E-15 1.01233E-15 6.68195E-16 3.99984E-16 2.18011E-16 + 1.08498E-16 4.94033E-17 2.06131E-17 7.89019E-18 2.77326E-18 8.95720E-19 + 2.66005E-19 7.26702E-20 1.82705E-20 4.22885E-21 + -2.20197E-20 -9.51351E-20 -3.78396E-19 -1.38510E-18 -4.66404E-18 -1.44405E-17 + -4.10845E-17 -1.07333E-16 -2.57245E-16 -5.64953E-16 -1.13519E-15 -2.08273E-15 + -3.47931E-15 -5.27121E-15 -7.19902E-15 -8.77776E-15 -9.39395E-15 -8.52465E-15 + -5.99974E-15 -2.16602E-15 2.16602E-15 5.99974E-15 8.52465E-15 9.39395E-15 + 8.77776E-15 7.19902E-15 5.27121E-15 3.47931E-15 2.08273E-15 1.13519E-15 + 5.64953E-16 2.57245E-16 1.07333E-16 4.10845E-17 1.44405E-17 4.66404E-18 + 1.38510E-18 3.78396E-19 9.51351E-20 2.20197E-20 + -1.00969E-19 -4.36233E-19 -1.73510E-18 -6.35122E-18 -2.13865E-17 -6.62154E-17 + -1.88389E-16 -4.92164E-16 -1.17957E-15 -2.59053E-15 -5.20530E-15 -9.55016E-15 + -1.59540E-14 -2.41706E-14 -3.30104E-14 -4.02496E-14 -4.30750E-14 -3.90889E-14 + -2.75112E-14 -9.93209E-15 9.93209E-15 2.75112E-14 3.90889E-14 4.30750E-14 + 4.02496E-14 3.30104E-14 2.41706E-14 1.59540E-14 9.55016E-15 5.20530E-15 + 2.59053E-15 1.17957E-15 4.92164E-16 1.88389E-16 6.62154E-17 2.13865E-17 + 6.35122E-18 1.73510E-18 4.36233E-19 1.00969E-19 + -4.07629E-19 -1.76114E-18 -7.00485E-18 -2.56408E-17 -8.63406E-17 -2.67322E-16 + -7.60555E-16 -1.98694E-15 -4.76211E-15 -1.04584E-14 -2.10146E-14 -3.85555E-14 + -6.44089E-14 -9.75805E-14 -1.33268E-13 -1.62494E-13 -1.73900E-13 -1.57808E-13 + -1.11067E-13 -4.00974E-14 4.00974E-14 1.11067E-13 1.57808E-13 1.73900E-13 + 1.62494E-13 1.33268E-13 9.75805E-14 6.44089E-14 3.85555E-14 2.10146E-14 + 1.04584E-14 4.76211E-15 1.98694E-15 7.60555E-16 2.67322E-16 8.63406E-17 + 2.56408E-17 7.00485E-18 1.76114E-18 4.07629E-19 + -1.44853E-18 -6.25832E-18 -2.48922E-17 -9.11164E-17 -3.06817E-16 -9.49945E-16 + -2.70268E-15 -7.06073E-15 -1.69225E-14 -3.71646E-14 -7.46767E-14 -1.37009E-13 + -2.28881E-13 -3.46759E-13 -4.73576E-13 -5.77432E-13 -6.17966E-13 -5.60781E-13 + -3.94684E-13 -1.42489E-13 1.42489E-13 3.94684E-13 5.60781E-13 6.17966E-13 + 5.77432E-13 4.73576E-13 3.46759E-13 2.28881E-13 1.37009E-13 7.46767E-14 + 3.71646E-14 1.69225E-14 7.06073E-15 2.70268E-15 9.49945E-16 3.06817E-16 + 9.11164E-17 2.48922E-17 6.25832E-18 1.44853E-18 + -4.52929E-18 -1.95686E-17 -7.78331E-17 -2.84903E-16 -9.59357E-16 -2.97029E-15 + -8.45076E-15 -2.20775E-14 -5.29133E-14 -1.16206E-13 -2.33500E-13 -4.28402E-13 + -7.15667E-13 -1.08425E-12 -1.48078E-12 -1.80552E-12 -1.93226E-12 -1.75346E-12 + -1.23410E-12 -4.45534E-13 4.45534E-13 1.23410E-12 1.75346E-12 1.93226E-12 + 1.80552E-12 1.48078E-12 1.08425E-12 7.15667E-13 4.28402E-13 2.33500E-13 + 1.16206E-13 5.29133E-14 2.20775E-14 8.45076E-15 2.97029E-15 9.59357E-16 + 2.84903E-16 7.78331E-17 1.95686E-17 4.52929E-18 + -1.24548E-17 -5.38102E-17 -2.14028E-16 -7.83436E-16 -2.63807E-15 -8.16780E-15 + -2.32382E-14 -6.07095E-14 -1.45503E-13 -3.19548E-13 -6.42085E-13 -1.17803E-12 + -1.96796E-12 -2.98150E-12 -4.07190E-12 -4.96487E-12 -5.31339E-12 -4.82170E-12 + -3.39356E-12 -1.22514E-12 1.22514E-12 3.39356E-12 4.82170E-12 5.31339E-12 + 4.96487E-12 4.07190E-12 2.98150E-12 1.96796E-12 1.17803E-12 6.42085E-13 + 3.19548E-13 1.45503E-13 6.07095E-14 2.32382E-14 8.16780E-15 2.63807E-15 + 7.83436E-16 2.14028E-16 5.38102E-17 1.24548E-17 + -3.00934E-17 -1.30017E-16 -5.17137E-16 -1.89295E-15 -6.37414E-15 -1.97352E-14 + -5.61484E-14 -1.46687E-13 -3.51565E-13 -7.72096E-13 -1.55141E-12 -2.84638E-12 + -4.75502E-12 -7.20394E-12 -9.83858E-12 -1.19962E-11 -1.28383E-11 -1.16503E-11 + -8.19958E-12 -2.96021E-12 2.96021E-12 8.19958E-12 1.16503E-11 1.28383E-11 + 1.19962E-11 9.83858E-12 7.20394E-12 4.75502E-12 2.84638E-12 1.55141E-12 + 7.72096E-13 3.51565E-13 1.46687E-13 5.61484E-14 1.97352E-14 6.37414E-15 + 1.89295E-15 5.17137E-16 1.30017E-16 3.00934E-17 + -6.37985E-17 -2.75638E-16 -1.09634E-15 -4.01308E-15 -1.35133E-14 -4.18389E-14 + -1.19035E-13 -3.10979E-13 -7.45324E-13 -1.63686E-12 -3.28902E-12 -6.03437E-12 + -1.00807E-11 -1.52725E-11 -2.08579E-11 -2.54321E-11 -2.72174E-11 -2.46988E-11 + -1.73832E-11 -6.27569E-12 6.27569E-12 1.73832E-11 2.46988E-11 2.72174E-11 + 2.54321E-11 2.08579E-11 1.52725E-11 1.00807E-11 6.03437E-12 3.28902E-12 + 1.63686E-12 7.45324E-13 3.10979E-13 1.19035E-13 4.18389E-14 1.35133E-14 + 4.01308E-15 1.09634E-15 2.75638E-16 6.37985E-17 + -1.18382E-16 -5.11461E-16 -2.03432E-15 -7.44649E-15 -2.50746E-14 -7.76342E-14 + -2.20877E-13 -5.77038E-13 -1.38299E-12 -3.03727E-12 -6.10295E-12 -1.11971E-11 + -1.87053E-11 -2.83389E-11 -3.87030E-11 -4.71906E-11 -5.05033E-11 -4.58299E-11 + -3.22555E-11 -1.16449E-11 1.16449E-11 3.22555E-11 4.58299E-11 5.05033E-11 + 4.71906E-11 3.87030E-11 2.83389E-11 1.87053E-11 1.11971E-11 6.10295E-12 + 3.03727E-12 1.38299E-12 5.77038E-13 2.20877E-13 7.76342E-14 2.50746E-14 + 7.44649E-15 2.03432E-15 5.11461E-16 1.18382E-16 + -1.91432E-16 -8.27072E-16 -3.28965E-15 -1.20415E-14 -4.05476E-14 -1.25541E-13 + -3.57175E-13 -9.33115E-13 -2.23640E-12 -4.91151E-12 -9.86895E-12 -1.81066E-11 + -3.02479E-11 -4.58261E-11 -6.25858E-11 -7.63109E-11 -8.16678E-11 -7.41104E-11 + -5.21597E-11 -1.88307E-11 1.88307E-11 5.21597E-11 7.41104E-11 8.16678E-11 + 7.63109E-11 6.25858E-11 4.58261E-11 3.02479E-11 1.81066E-11 9.86895E-12 + 4.91151E-12 2.23640E-12 9.33115E-13 3.57175E-13 1.25541E-13 4.05476E-14 + 1.20415E-14 3.28965E-15 8.27072E-16 1.91432E-16 + -2.67663E-16 -1.15642E-15 -4.59963E-15 -1.68367E-14 -5.66942E-14 -1.75533E-13 + -4.99406E-13 -1.30469E-12 -3.12696E-12 -6.86734E-12 -1.37989E-11 -2.53168E-11 + -4.22931E-11 -6.40747E-11 -8.75083E-11 -1.06699E-10 -1.14189E-10 -1.03622E-10 + -7.29304E-11 -2.63293E-11 2.63293E-11 7.29304E-11 1.03622E-10 1.14189E-10 + 1.06699E-10 8.75083E-11 6.40747E-11 4.22931E-11 2.53168E-11 1.37989E-11 + 6.86734E-12 3.12696E-12 1.30469E-12 4.99406E-13 1.75533E-13 5.66942E-14 + 1.68367E-14 4.59963E-15 1.15642E-15 2.67663E-16 + -3.18713E-16 -1.37698E-15 -5.47689E-15 -2.00478E-14 -6.75072E-14 -2.09011E-13 + -5.94656E-13 -1.55353E-12 -3.72336E-12 -8.17711E-12 -1.64307E-11 -3.01454E-11 + -5.03595E-11 -7.62954E-11 -1.04198E-10 -1.27049E-10 -1.35968E-10 -1.23386E-10 + -8.68401E-11 -3.13510E-11 3.13510E-11 8.68401E-11 1.23386E-10 1.35968E-10 + 1.27049E-10 1.04198E-10 7.62954E-11 5.03595E-11 3.01454E-11 1.64307E-11 + 8.17711E-12 3.72336E-12 1.55353E-12 5.94656E-13 2.09011E-13 6.75072E-14 + 2.00478E-14 5.47689E-15 1.37698E-15 3.18713E-16 + -3.12757E-16 -1.35125E-15 -5.37455E-15 -1.96732E-14 -6.62457E-14 -2.05105E-13 + -5.83544E-13 -1.52450E-12 -3.65378E-12 -8.02431E-12 -1.61237E-11 -2.95821E-11 + -4.94184E-11 -7.48697E-11 -1.02251E-10 -1.24675E-10 -1.33427E-10 -1.21080E-10 + -8.52173E-11 -3.07651E-11 3.07651E-11 8.52173E-11 1.21080E-10 1.33427E-10 + 1.24675E-10 1.02251E-10 7.48697E-11 4.94184E-11 2.95821E-11 1.61237E-11 + 8.02431E-12 3.65378E-12 1.52450E-12 5.83544E-13 2.05105E-13 6.62457E-14 + 1.96732E-14 5.37455E-15 1.35125E-15 3.12757E-16 + -2.31695E-16 -1.00103E-15 -3.98154E-15 -1.45742E-14 -4.90757E-14 -1.51945E-13 + -4.32297E-13 -1.12937E-12 -2.70677E-12 -5.94452E-12 -1.19446E-11 -2.19148E-11 + -3.66098E-11 -5.54645E-11 -7.57491E-11 -9.23609E-11 -9.88445E-11 -8.96976E-11 + -6.31301E-11 -2.27912E-11 2.27912E-11 6.31301E-11 8.96976E-11 9.88445E-11 + 9.23609E-11 7.57491E-11 5.54645E-11 3.66098E-11 2.19148E-11 1.19446E-11 + 5.94452E-12 2.70677E-12 1.12937E-12 4.32297E-13 1.51945E-13 4.90757E-14 + 1.45742E-14 3.98154E-15 1.00103E-15 2.31695E-16 + -8.57922E-17 -3.70661E-16 -1.47429E-15 -5.39654E-15 -1.81718E-14 -5.62623E-14 + -1.60071E-13 -4.18185E-13 -1.00226E-12 -2.20114E-12 -4.42287E-12 -8.11464E-12 + -1.35559E-11 -2.05374E-11 -2.80484E-11 -3.41995E-11 -3.66002E-11 -3.32133E-11 + -2.33759E-11 -8.43916E-12 8.43916E-12 2.33759E-11 3.32133E-11 3.66002E-11 + 3.41995E-11 2.80484E-11 2.05374E-11 1.35559E-11 8.11464E-12 4.42287E-12 + 2.20114E-12 1.00226E-12 4.18185E-13 1.60071E-13 5.62623E-14 1.81718E-14 + 5.39654E-15 1.47429E-15 3.70661E-16 8.57922E-17 + 8.57922E-17 3.70661E-16 1.47429E-15 5.39654E-15 1.81718E-14 5.62623E-14 + 1.60071E-13 4.18185E-13 1.00226E-12 2.20114E-12 4.42287E-12 8.11464E-12 + 1.35559E-11 2.05374E-11 2.80484E-11 3.41995E-11 3.66002E-11 3.32133E-11 + 2.33759E-11 8.43916E-12 -8.43916E-12 -2.33759E-11 -3.32133E-11 -3.66002E-11 + -3.41995E-11 -2.80484E-11 -2.05374E-11 -1.35559E-11 -8.11464E-12 -4.42287E-12 + -2.20114E-12 -1.00226E-12 -4.18185E-13 -1.60071E-13 -5.62623E-14 -1.81718E-14 + -5.39654E-15 -1.47429E-15 -3.70661E-16 -8.57922E-17 + 2.31695E-16 1.00103E-15 3.98154E-15 1.45742E-14 4.90757E-14 1.51945E-13 + 4.32297E-13 1.12937E-12 2.70677E-12 5.94452E-12 1.19446E-11 2.19148E-11 + 3.66098E-11 5.54645E-11 7.57491E-11 9.23609E-11 9.88445E-11 8.96976E-11 + 6.31301E-11 2.27912E-11 -2.27912E-11 -6.31301E-11 -8.96976E-11 -9.88445E-11 + -9.23609E-11 -7.57491E-11 -5.54645E-11 -3.66098E-11 -2.19148E-11 -1.19446E-11 + -5.94452E-12 -2.70677E-12 -1.12937E-12 -4.32297E-13 -1.51945E-13 -4.90757E-14 + -1.45742E-14 -3.98154E-15 -1.00103E-15 -2.31695E-16 + 3.12757E-16 1.35125E-15 5.37455E-15 1.96732E-14 6.62457E-14 2.05105E-13 + 5.83544E-13 1.52450E-12 3.65378E-12 8.02431E-12 1.61237E-11 2.95821E-11 + 4.94184E-11 7.48697E-11 1.02251E-10 1.24675E-10 1.33427E-10 1.21080E-10 + 8.52173E-11 3.07651E-11 -3.07651E-11 -8.52173E-11 -1.21080E-10 -1.33427E-10 + -1.24675E-10 -1.02251E-10 -7.48697E-11 -4.94184E-11 -2.95821E-11 -1.61237E-11 + -8.02431E-12 -3.65378E-12 -1.52450E-12 -5.83544E-13 -2.05105E-13 -6.62457E-14 + -1.96732E-14 -5.37455E-15 -1.35125E-15 -3.12757E-16 + 3.18713E-16 1.37698E-15 5.47689E-15 2.00478E-14 6.75072E-14 2.09011E-13 + 5.94656E-13 1.55353E-12 3.72336E-12 8.17711E-12 1.64307E-11 3.01454E-11 + 5.03595E-11 7.62954E-11 1.04198E-10 1.27049E-10 1.35968E-10 1.23386E-10 + 8.68401E-11 3.13510E-11 -3.13510E-11 -8.68401E-11 -1.23386E-10 -1.35968E-10 + -1.27049E-10 -1.04198E-10 -7.62954E-11 -5.03595E-11 -3.01454E-11 -1.64307E-11 + -8.17711E-12 -3.72336E-12 -1.55353E-12 -5.94656E-13 -2.09011E-13 -6.75072E-14 + -2.00478E-14 -5.47689E-15 -1.37698E-15 -3.18713E-16 + 2.67663E-16 1.15642E-15 4.59963E-15 1.68367E-14 5.66942E-14 1.75533E-13 + 4.99406E-13 1.30469E-12 3.12696E-12 6.86734E-12 1.37989E-11 2.53168E-11 + 4.22931E-11 6.40747E-11 8.75083E-11 1.06699E-10 1.14189E-10 1.03622E-10 + 7.29304E-11 2.63293E-11 -2.63293E-11 -7.29304E-11 -1.03622E-10 -1.14189E-10 + -1.06699E-10 -8.75083E-11 -6.40747E-11 -4.22931E-11 -2.53168E-11 -1.37989E-11 + -6.86734E-12 -3.12696E-12 -1.30469E-12 -4.99406E-13 -1.75533E-13 -5.66942E-14 + -1.68367E-14 -4.59963E-15 -1.15642E-15 -2.67663E-16 + 1.91432E-16 8.27072E-16 3.28965E-15 1.20415E-14 4.05476E-14 1.25541E-13 + 3.57175E-13 9.33115E-13 2.23640E-12 4.91151E-12 9.86895E-12 1.81066E-11 + 3.02479E-11 4.58261E-11 6.25858E-11 7.63109E-11 8.16678E-11 7.41104E-11 + 5.21597E-11 1.88307E-11 -1.88307E-11 -5.21597E-11 -7.41104E-11 -8.16678E-11 + -7.63109E-11 -6.25858E-11 -4.58261E-11 -3.02479E-11 -1.81066E-11 -9.86895E-12 + -4.91151E-12 -2.23640E-12 -9.33115E-13 -3.57175E-13 -1.25541E-13 -4.05476E-14 + -1.20415E-14 -3.28965E-15 -8.27072E-16 -1.91432E-16 + 1.18382E-16 5.11461E-16 2.03432E-15 7.44649E-15 2.50746E-14 7.76342E-14 + 2.20877E-13 5.77038E-13 1.38299E-12 3.03727E-12 6.10295E-12 1.11971E-11 + 1.87053E-11 2.83389E-11 3.87030E-11 4.71906E-11 5.05033E-11 4.58299E-11 + 3.22555E-11 1.16449E-11 -1.16449E-11 -3.22555E-11 -4.58299E-11 -5.05033E-11 + -4.71906E-11 -3.87030E-11 -2.83389E-11 -1.87053E-11 -1.11971E-11 -6.10295E-12 + -3.03727E-12 -1.38299E-12 -5.77038E-13 -2.20877E-13 -7.76342E-14 -2.50746E-14 + -7.44649E-15 -2.03432E-15 -5.11461E-16 -1.18382E-16 + 6.37985E-17 2.75638E-16 1.09634E-15 4.01308E-15 1.35133E-14 4.18389E-14 + 1.19035E-13 3.10979E-13 7.45324E-13 1.63686E-12 3.28902E-12 6.03437E-12 + 1.00807E-11 1.52725E-11 2.08579E-11 2.54321E-11 2.72174E-11 2.46988E-11 + 1.73832E-11 6.27569E-12 -6.27569E-12 -1.73832E-11 -2.46988E-11 -2.72174E-11 + -2.54321E-11 -2.08579E-11 -1.52725E-11 -1.00807E-11 -6.03437E-12 -3.28902E-12 + -1.63686E-12 -7.45324E-13 -3.10979E-13 -1.19035E-13 -4.18389E-14 -1.35133E-14 + -4.01308E-15 -1.09634E-15 -2.75638E-16 -6.37985E-17 + 3.00934E-17 1.30017E-16 5.17137E-16 1.89295E-15 6.37414E-15 1.97352E-14 + 5.61484E-14 1.46687E-13 3.51565E-13 7.72096E-13 1.55141E-12 2.84638E-12 + 4.75502E-12 7.20394E-12 9.83858E-12 1.19962E-11 1.28383E-11 1.16503E-11 + 8.19958E-12 2.96021E-12 -2.96021E-12 -8.19958E-12 -1.16503E-11 -1.28383E-11 + -1.19962E-11 -9.83858E-12 -7.20394E-12 -4.75502E-12 -2.84638E-12 -1.55141E-12 + -7.72096E-13 -3.51565E-13 -1.46687E-13 -5.61484E-14 -1.97352E-14 -6.37414E-15 + -1.89295E-15 -5.17137E-16 -1.30017E-16 -3.00934E-17 + 1.24548E-17 5.38102E-17 2.14028E-16 7.83436E-16 2.63807E-15 8.16780E-15 + 2.32382E-14 6.07095E-14 1.45503E-13 3.19548E-13 6.42085E-13 1.17803E-12 + 1.96796E-12 2.98150E-12 4.07190E-12 4.96487E-12 5.31339E-12 4.82170E-12 + 3.39356E-12 1.22514E-12 -1.22514E-12 -3.39356E-12 -4.82170E-12 -5.31339E-12 + -4.96487E-12 -4.07190E-12 -2.98150E-12 -1.96796E-12 -1.17803E-12 -6.42085E-13 + -3.19548E-13 -1.45503E-13 -6.07095E-14 -2.32382E-14 -8.16780E-15 -2.63807E-15 + -7.83436E-16 -2.14028E-16 -5.38102E-17 -1.24548E-17 + 4.52929E-18 1.95686E-17 7.78331E-17 2.84903E-16 9.59357E-16 2.97029E-15 + 8.45076E-15 2.20775E-14 5.29133E-14 1.16206E-13 2.33500E-13 4.28402E-13 + 7.15667E-13 1.08425E-12 1.48078E-12 1.80552E-12 1.93226E-12 1.75346E-12 + 1.23410E-12 4.45534E-13 -4.45534E-13 -1.23410E-12 -1.75346E-12 -1.93226E-12 + -1.80552E-12 -1.48078E-12 -1.08425E-12 -7.15667E-13 -4.28402E-13 -2.33500E-13 + -1.16206E-13 -5.29133E-14 -2.20775E-14 -8.45076E-15 -2.97029E-15 -9.59357E-16 + -2.84903E-16 -7.78331E-17 -1.95686E-17 -4.52929E-18 + 1.44853E-18 6.25832E-18 2.48922E-17 9.11164E-17 3.06817E-16 9.49945E-16 + 2.70268E-15 7.06073E-15 1.69225E-14 3.71646E-14 7.46767E-14 1.37009E-13 + 2.28881E-13 3.46759E-13 4.73576E-13 5.77432E-13 6.17966E-13 5.60781E-13 + 3.94684E-13 1.42489E-13 -1.42489E-13 -3.94684E-13 -5.60781E-13 -6.17966E-13 + -5.77432E-13 -4.73576E-13 -3.46759E-13 -2.28881E-13 -1.37009E-13 -7.46767E-14 + -3.71646E-14 -1.69225E-14 -7.06073E-15 -2.70268E-15 -9.49945E-16 -3.06817E-16 + -9.11164E-17 -2.48922E-17 -6.25832E-18 -1.44853E-18 + 4.07629E-19 1.76114E-18 7.00485E-18 2.56408E-17 8.63406E-17 2.67322E-16 + 7.60555E-16 1.98694E-15 4.76211E-15 1.04584E-14 2.10146E-14 3.85555E-14 + 6.44089E-14 9.75805E-14 1.33268E-13 1.62494E-13 1.73900E-13 1.57808E-13 + 1.11067E-13 4.00974E-14 -4.00974E-14 -1.11067E-13 -1.57808E-13 -1.73900E-13 + -1.62494E-13 -1.33268E-13 -9.75805E-14 -6.44089E-14 -3.85555E-14 -2.10146E-14 + -1.04584E-14 -4.76211E-15 -1.98694E-15 -7.60555E-16 -2.67322E-16 -8.63406E-17 + -2.56408E-17 -7.00485E-18 -1.76114E-18 -4.07629E-19 + 1.00969E-19 4.36233E-19 1.73510E-18 6.35122E-18 2.13865E-17 6.62154E-17 + 1.88389E-16 4.92164E-16 1.17957E-15 2.59053E-15 5.20530E-15 9.55016E-15 + 1.59540E-14 2.41706E-14 3.30104E-14 4.02496E-14 4.30750E-14 3.90889E-14 + 2.75112E-14 9.93209E-15 -9.93209E-15 -2.75112E-14 -3.90889E-14 -4.30750E-14 + -4.02496E-14 -3.30104E-14 -2.41706E-14 -1.59540E-14 -9.55016E-15 -5.20530E-15 + -2.59053E-15 -1.17957E-15 -4.92164E-16 -1.88389E-16 -6.62154E-17 -2.13865E-17 + -6.35122E-18 -1.73510E-18 -4.36233E-19 -1.00969E-19 + 2.20197E-20 9.51351E-20 3.78396E-19 1.38510E-18 4.66404E-18 1.44405E-17 + 4.10845E-17 1.07333E-16 2.57245E-16 5.64953E-16 1.13519E-15 2.08273E-15 + 3.47931E-15 5.27121E-15 7.19902E-15 8.77776E-15 9.39395E-15 8.52465E-15 + 5.99974E-15 2.16602E-15 -2.16602E-15 -5.99974E-15 -8.52465E-15 -9.39395E-15 + -8.77776E-15 -7.19902E-15 -5.27121E-15 -3.47931E-15 -2.08273E-15 -1.13519E-15 + -5.64953E-16 -2.57245E-16 -1.07333E-16 -4.10845E-17 -1.44405E-17 -4.66404E-18 + -1.38510E-18 -3.78396E-19 -9.51351E-20 -2.20197E-20 + 4.22884E-21 1.82705E-20 7.26702E-20 2.66005E-19 8.95720E-19 2.77326E-18 + 7.89019E-18 2.06130E-17 4.94033E-17 1.08498E-16 2.18011E-16 3.99984E-16 + 6.68195E-16 1.01233E-15 1.38256E-15 1.68575E-15 1.80409E-15 1.63714E-15 + 1.15224E-15 4.15980E-16 -4.15980E-16 -1.15224E-15 -1.63714E-15 -1.80409E-15 + -1.68575E-15 -1.38256E-15 -1.01233E-15 -6.68195E-16 -3.99984E-16 -2.18011E-16 + -1.08498E-16 -4.94033E-17 -2.06131E-17 -7.89019E-18 -2.77326E-18 -8.95720E-19 + -2.66005E-19 -7.26702E-20 -1.82705E-20 -4.22885E-21 + 7.15323E-22 3.09051E-21 1.22924E-20 4.49956E-20 1.51514E-19 4.69107E-19 + 1.33465E-18 3.48676E-18 8.35674E-18 1.83528E-17 3.68772E-17 6.76587E-17 + 1.13027E-16 1.71238E-16 2.33864E-16 2.85150E-16 3.05167E-16 2.76928E-16 + 1.94905E-16 7.03644E-17 -7.03645E-17 -1.94905E-16 -2.76928E-16 -3.05167E-16 + -2.85150E-16 -2.33864E-16 -1.71238E-16 -1.13027E-16 -6.76587E-17 -3.68772E-17 + -1.83528E-17 -8.35674E-18 -3.48676E-18 -1.33465E-18 -4.69107E-19 -1.51514E-19 + -4.49956E-20 -1.22924E-20 -3.09051E-21 -7.15323E-22 + 1.06596E-22 4.60544E-22 1.83180E-21 6.70518E-21 2.25784E-20 6.99056E-20 + 1.98888E-19 5.19593E-19 1.24531E-18 2.73491E-18 5.49540E-18 1.00824E-17 + 1.68432E-17 2.55177E-17 3.48501E-17 4.24927E-17 4.54756E-17 4.12674E-17 + 2.90444E-17 1.04856E-17 -1.04856E-17 -2.90444E-17 -4.12674E-17 -4.54756E-17 + -4.24927E-17 -3.48501E-17 -2.55177E-17 -1.68432E-17 -1.00824E-17 -5.49540E-18 + -2.73491E-18 -1.24531E-18 -5.19593E-19 -1.98888E-19 -6.99056E-20 -2.25784E-20 + -6.70518E-21 -1.83180E-21 -4.60544E-22 -1.06596E-22 + 1.39974E-23 6.04751E-23 2.40537E-22 8.80471E-22 2.96482E-21 9.17946E-21 + 2.61164E-20 6.82289E-20 1.63524E-19 3.59127E-19 7.21613E-19 1.32394E-18 + 2.21171E-18 3.35078E-18 4.57624E-18 5.57981E-18 5.97151E-18 5.41892E-18 + 3.81389E-18 1.37689E-18 -1.37689E-18 -3.81389E-18 -5.41892E-18 -5.97151E-18 + -5.57981E-18 -4.57624E-18 -3.35078E-18 -2.21171E-18 -1.32394E-18 -7.21613E-19 + -3.59127E-19 -1.63524E-19 -6.82289E-20 -2.61164E-20 -9.17946E-21 -2.96482E-21 + -8.80472E-22 -2.40537E-22 -6.04751E-23 -1.39974E-23 + 1.62011E-24 6.99958E-24 2.78406E-23 1.01909E-22 3.43158E-22 1.06246E-21 + 3.02280E-21 7.89703E-21 1.89268E-20 4.15665E-20 8.35218E-20 1.53237E-19 + 2.55991E-19 3.87831E-19 5.29669E-19 6.45826E-19 6.91161E-19 6.27203E-19 + 4.41432E-19 1.59366E-19 -1.59366E-19 -4.41432E-19 -6.27203E-19 -6.91162E-19 + -6.45826E-19 -5.29669E-19 -3.87831E-19 -2.55991E-19 -1.53237E-19 -8.35218E-20 + -4.15665E-20 -1.89268E-20 -7.89703E-21 -3.02280E-21 -1.06246E-21 -3.43158E-22 + -1.01909E-22 -2.78406E-23 -6.99958E-24 -1.62011E-24 + -1.71038E-23 -7.38961E-23 -2.93919E-22 -1.07587E-21 -3.62279E-21 -1.12166E-20 + -3.19123E-20 -8.33706E-20 -1.99815E-19 -4.38826E-19 -8.81757E-19 -1.61776E-18 + -2.70255E-18 -4.09441E-18 -5.59183E-18 -6.81812E-18 -7.29674E-18 -6.62151E-18 + -4.66029E-18 -1.68246E-18 1.68246E-18 4.66029E-18 6.62151E-18 7.29674E-18 + 6.81812E-18 5.59183E-18 4.09441E-18 2.70255E-18 1.61776E-18 8.81757E-19 + 4.38826E-19 1.99815E-19 8.33707E-20 3.19123E-20 1.12166E-20 3.62279E-21 + 1.07587E-21 2.93919E-22 7.38961E-23 1.71038E-23 + -1.47257E-22 -6.36218E-22 -2.53053E-21 -9.26285E-21 -3.11909E-20 -9.65710E-20 + -2.74753E-19 -7.17791E-19 -1.72033E-18 -3.77813E-18 -7.59160E-18 -1.39283E-17 + -2.32680E-17 -3.52514E-17 -4.81436E-17 -5.87015E-17 -6.28222E-17 -5.70088E-17 + -4.01234E-17 -1.44853E-17 1.44853E-17 4.01234E-17 5.70088E-17 6.28222E-17 + 5.87015E-17 4.81436E-17 3.52514E-17 2.32680E-17 1.39283E-17 7.59160E-18 + 3.77813E-18 1.72033E-18 7.17791E-19 2.74753E-19 9.65710E-20 3.11909E-20 + 9.26285E-21 2.53053E-21 6.36218E-22 1.47257E-22 + -1.11837E-21 -4.83185E-21 -1.92185E-20 -7.03480E-20 -2.36883E-19 -7.33422E-19 + -2.08665E-18 -5.45136E-18 -1.30653E-17 -2.86936E-17 -5.76555E-17 -1.05781E-16 + -1.76712E-16 -2.67721E-16 -3.65633E-16 -4.45817E-16 -4.77112E-16 -4.32961E-16 + -3.04723E-16 -1.10011E-16 1.10011E-16 3.04723E-16 4.32961E-16 4.77112E-16 + 4.45817E-16 3.65633E-16 2.67721E-16 1.76712E-16 1.05781E-16 5.76555E-17 + 2.86936E-17 1.30653E-17 5.45136E-18 2.08665E-18 7.33422E-19 2.36883E-19 + 7.03480E-20 1.92185E-20 4.83185E-21 1.11837E-21 + -7.48890E-21 -3.23554E-20 -1.28692E-19 -4.71070E-19 -1.58624E-18 -4.91120E-18 + -1.39728E-17 -3.65038E-17 -8.74888E-17 -1.92140E-16 -3.86077E-16 -7.08336E-16 + -1.18331E-15 -1.79274E-15 -2.44838E-15 -2.98531E-15 -3.19488E-15 -2.89923E-15 + -2.04051E-15 -7.36663E-16 7.36664E-16 2.04051E-15 2.89923E-15 3.19488E-15 + 2.98531E-15 2.44838E-15 1.79274E-15 1.18331E-15 7.08336E-16 3.86077E-16 + 1.92140E-16 8.74888E-17 3.65038E-17 1.39728E-17 4.91120E-18 1.58624E-18 + 4.71070E-19 1.28692E-19 3.23554E-20 7.48890E-21 + -4.41995E-20 -1.90962E-19 -7.59543E-19 -2.78026E-18 -9.36199E-18 -2.89859E-17 + -8.24676E-17 -2.15446E-16 -5.16360E-16 -1.13401E-15 -2.27863E-15 -4.18060E-15 + -6.98392E-15 -1.05807E-14 -1.44504E-14 -1.76193E-14 -1.88562E-14 -1.71113E-14 + -1.20431E-14 -4.34779E-15 4.34779E-15 1.20431E-14 1.71113E-14 1.88562E-14 + 1.76193E-14 1.44504E-14 1.05807E-14 6.98392E-15 4.18060E-15 2.27863E-15 + 1.13401E-15 5.16360E-16 2.15446E-16 8.24676E-17 2.89859E-17 9.36199E-18 + 2.78026E-18 7.59543E-19 1.90962E-19 4.41995E-20 + -2.29853E-19 -9.93066E-19 -3.94988E-18 -1.44583E-17 -4.86855E-17 -1.50737E-16 + -4.28860E-16 -1.12039E-15 -2.68525E-15 -5.89725E-15 -1.18497E-14 -2.17406E-14 + -3.63187E-14 -5.50235E-14 -7.51468E-14 -9.16265E-14 -9.80586E-14 -8.89844E-14 + -6.26282E-14 -2.26100E-14 2.26100E-14 6.26282E-14 8.89844E-14 9.80586E-14 + 9.16265E-14 7.51468E-14 5.50235E-14 3.63187E-14 2.17406E-14 1.18497E-14 + 5.89725E-15 2.68525E-15 1.12039E-15 4.28860E-16 1.50737E-16 4.86855E-17 + 1.44583E-17 3.94988E-18 9.93066E-19 2.29853E-19 + -1.05292E-18 -4.54907E-18 -1.80937E-17 -6.62310E-17 -2.23020E-16 -6.90499E-16 + -1.96453E-15 -5.13233E-15 -1.23007E-14 -2.70143E-14 -5.42813E-14 -9.95899E-14 + -1.66370E-13 -2.52053E-13 -3.44235E-13 -4.19726E-13 -4.49190E-13 -4.07623E-13 + -2.86889E-13 -1.03573E-13 1.03573E-13 2.86889E-13 4.07623E-13 4.49190E-13 + 4.19726E-13 3.44235E-13 2.52053E-13 1.66370E-13 9.95899E-14 5.42813E-14 + 2.70143E-14 1.23007E-14 5.13233E-15 1.96453E-15 6.90499E-16 2.23020E-16 + 6.62310E-17 1.80937E-17 4.54907E-18 1.05292E-18 + -4.24751E-18 -1.83511E-17 -7.29908E-17 -2.67178E-16 -8.99672E-16 -2.78550E-15 + -7.92501E-15 -2.07040E-14 -4.96213E-14 -1.08977E-13 -2.18973E-13 -4.01749E-13 + -6.71143E-13 -1.01679E-12 -1.38866E-12 -1.69319E-12 -1.81205E-12 -1.64437E-12 + -1.15732E-12 -4.17816E-13 4.17816E-13 1.15732E-12 1.64437E-12 1.81205E-12 + 1.69319E-12 1.38866E-12 1.01679E-12 6.71143E-13 4.01749E-13 2.18973E-13 + 1.08977E-13 4.96213E-14 2.07040E-14 7.92501E-15 2.78550E-15 8.99672E-16 + 2.67178E-16 7.29908E-17 1.83511E-17 4.24751E-18 + -1.50848E-17 -6.51730E-17 -2.59223E-16 -9.48870E-16 -3.19514E-15 -9.89256E-15 + -2.81452E-14 -7.35292E-14 -1.76228E-13 -3.87025E-13 -7.77670E-13 -1.42679E-12 + -2.38353E-12 -3.61109E-12 -4.93174E-12 -6.01327E-12 -6.43540E-12 -5.83988E-12 + -4.11017E-12 -1.48385E-12 1.48385E-12 4.11017E-12 5.83988E-12 6.43540E-12 + 6.01327E-12 4.93174E-12 3.61109E-12 2.38353E-12 1.42679E-12 7.77670E-13 + 3.87025E-13 1.76228E-13 7.35292E-14 2.81452E-14 9.89256E-15 3.19514E-15 + 9.48870E-16 2.59223E-16 6.51730E-17 1.50848E-17 + -4.71455E-17 -2.03690E-16 -8.10167E-16 -2.96557E-15 -9.98598E-15 -3.09179E-14 + -8.79642E-14 -2.29806E-13 -5.50776E-13 -1.20960E-12 -2.43051E-12 -4.45925E-12 + -7.44940E-12 -1.12860E-11 -1.54135E-11 -1.87937E-11 -2.01130E-11 -1.82518E-11 + -1.28458E-11 -4.63758E-12 4.63758E-12 1.28458E-11 1.82518E-11 2.01130E-11 + 1.87937E-11 1.54135E-11 1.12860E-11 7.44940E-12 4.45925E-12 2.43051E-12 + 1.20960E-12 5.50776E-13 2.29806E-13 8.79642E-14 3.09179E-14 9.98598E-15 + 2.96557E-15 8.10167E-16 2.03690E-16 4.71455E-17 + -1.29596E-16 -5.59913E-16 -2.22703E-15 -8.15191E-15 -2.74500E-14 -8.49887E-14 + -2.41801E-13 -6.31702E-13 -1.51400E-12 -3.32500E-12 -6.68110E-12 -1.22578E-11 + -2.04773E-11 -3.10235E-11 -4.23695E-11 -5.16611E-11 -5.52876E-11 -5.01714E-11 + -3.53112E-11 -1.27480E-11 1.27480E-11 3.53112E-11 5.01714E-11 5.52876E-11 + 5.16611E-11 4.23695E-11 3.10235E-11 2.04773E-11 1.22578E-11 6.68110E-12 + 3.32500E-12 1.51400E-12 6.31702E-13 2.41801E-13 8.49887E-14 2.74500E-14 + 8.15191E-15 2.22703E-15 5.59913E-16 1.29596E-16 + -3.13046E-16 -1.35250E-15 -5.37951E-15 -1.96914E-14 -6.63069E-14 -2.05295E-13 + -5.84083E-13 -1.52591E-12 -3.65715E-12 -8.03172E-12 -1.61386E-11 -2.96094E-11 + -4.94641E-11 -7.49389E-11 -1.02346E-10 -1.24790E-10 -1.33550E-10 -1.21192E-10 + -8.52960E-11 -3.07936E-11 3.07936E-11 8.52960E-11 1.21192E-10 1.33550E-10 + 1.24790E-10 1.02346E-10 7.49389E-11 4.94641E-11 2.96094E-11 1.61386E-11 + 8.03172E-12 3.65715E-12 1.52591E-12 5.84083E-13 2.05295E-13 6.63069E-14 + 1.96914E-14 5.37951E-15 1.35250E-15 3.13046E-16 + -6.63524E-16 -2.86672E-15 -1.14023E-14 -4.17373E-14 -1.40542E-13 -4.35137E-13 + -1.23801E-12 -3.23428E-12 -7.75160E-12 -1.70238E-11 -3.42069E-11 -6.27593E-11 + -1.04843E-10 -1.58838E-10 -2.16929E-10 -2.64502E-10 -2.83069E-10 -2.56875E-10 + -1.80791E-10 -6.52692E-11 6.52692E-11 1.80791E-10 2.56875E-10 2.83069E-10 + 2.64502E-10 2.16929E-10 1.58838E-10 1.04843E-10 6.27593E-11 3.42069E-11 + 1.70238E-11 7.75160E-12 3.23428E-12 1.23801E-12 4.35137E-13 1.40542E-13 + 4.17373E-14 1.14023E-14 2.86672E-15 6.63524E-16 + -1.23101E-15 -5.31850E-15 -2.11541E-14 -7.74334E-14 -2.60742E-13 -8.07291E-13 + -2.29682E-12 -6.00041E-12 -1.43812E-11 -3.15835E-11 -6.34625E-11 -1.16435E-10 + -1.94510E-10 -2.94686E-10 -4.02459E-10 -4.90718E-10 -5.25166E-10 -4.76568E-10 + -3.35414E-10 -1.21091E-10 1.21091E-10 3.35414E-10 4.76568E-10 5.25166E-10 + 4.90718E-10 4.02459E-10 2.94686E-10 1.94510E-10 1.16435E-10 6.34625E-11 + 3.15835E-11 1.43812E-11 6.00041E-12 2.29682E-12 8.07291E-13 2.60742E-13 + 7.74334E-14 2.11541E-14 5.31850E-15 1.23101E-15 + -1.99039E-15 -8.59939E-15 -3.42037E-14 -1.25201E-13 -4.21589E-13 -1.30529E-12 + -3.71368E-12 -9.70196E-12 -2.32527E-11 -5.10668E-11 -1.02611E-10 -1.88261E-10 + -3.14499E-10 -4.76472E-10 -6.50728E-10 -7.93434E-10 -8.49131E-10 -7.70555E-10 + -5.42324E-10 -1.95790E-10 1.95790E-10 5.42324E-10 7.70555E-10 8.49131E-10 + 7.93434E-10 6.50728E-10 4.76472E-10 3.14499E-10 1.88261E-10 1.02611E-10 + 5.10668E-11 2.32527E-11 9.70196E-12 3.71368E-12 1.30529E-12 4.21589E-13 + 1.25201E-13 3.42037E-14 8.59939E-15 1.99039E-15 + -2.78274E-15 -1.20227E-14 -4.78198E-14 -1.75041E-13 -5.89418E-13 -1.82491E-12 + -5.19205E-12 -1.35642E-11 -3.25093E-11 -7.13959E-11 -1.43459E-10 -2.63205E-10 + -4.39698E-10 -6.66149E-10 -9.09775E-10 -1.10929E-09 -1.18716E-09 -1.07730E-09 + -7.58216E-10 -2.73731E-10 2.73731E-10 7.58216E-10 1.07730E-09 1.18716E-09 + 1.10929E-09 9.09775E-10 6.66149E-10 4.39698E-10 2.63205E-10 1.43459E-10 + 7.13959E-11 3.25093E-11 1.35642E-11 5.19205E-12 1.82491E-12 5.89418E-13 + 1.75041E-13 4.78198E-14 1.20227E-14 2.78274E-15 + -3.31326E-15 -1.43148E-14 -5.69364E-14 -2.08412E-13 -7.01788E-13 -2.17283E-12 + -6.18190E-12 -1.61501E-11 -3.87071E-11 -8.50073E-11 -1.70810E-10 -3.13384E-10 + -5.23525E-10 -7.93148E-10 -1.08322E-09 -1.32077E-09 -1.41349E-09 -1.28269E-09 + -9.02768E-10 -3.25917E-10 3.25917E-10 9.02768E-10 1.28269E-09 1.41349E-09 + 1.32077E-09 1.08322E-09 7.93148E-10 5.23525E-10 3.13384E-10 1.70810E-10 + 8.50073E-11 3.87071E-11 1.61501E-11 6.18190E-12 2.17283E-12 7.01788E-13 + 2.08412E-13 5.69364E-14 1.43148E-14 3.31326E-15 + -3.25120E-15 -1.40466E-14 -5.58699E-14 -2.04508E-13 -6.88642E-13 -2.13213E-12 + -6.06610E-12 -1.58476E-11 -3.79820E-11 -8.34149E-11 -1.67610E-10 -3.07514E-10 + -5.13718E-10 -7.78291E-10 -1.06293E-09 -1.29603E-09 -1.38701E-09 -1.25866E-09 + -8.85857E-10 -3.19812E-10 3.19812E-10 8.85857E-10 1.25866E-09 1.38701E-09 + 1.29603E-09 1.06293E-09 7.78291E-10 5.13718E-10 3.07514E-10 1.67610E-10 + 8.34149E-11 3.79820E-11 1.58476E-11 6.06610E-12 2.13213E-12 6.88642E-13 + 2.04508E-13 5.58699E-14 1.40466E-14 3.25120E-15 + -2.40846E-15 -1.04056E-14 -4.13880E-14 -1.51498E-13 -5.10141E-13 -1.57946E-12 + -4.49371E-12 -1.17398E-11 -2.81368E-11 -6.17931E-11 -1.24164E-10 -2.27804E-10 + -3.80558E-10 -5.76552E-10 -7.87409E-10 -9.60089E-10 -1.02749E-09 -9.32404E-10 + -6.56236E-10 -2.36914E-10 2.36914E-10 6.56236E-10 9.32404E-10 1.02749E-09 + 9.60089E-10 7.87409E-10 5.76552E-10 3.80558E-10 2.27804E-10 1.24164E-10 + 6.17931E-11 2.81368E-11 1.17398E-11 4.49371E-12 1.57946E-12 5.10141E-13 + 1.51498E-13 4.13880E-14 1.04056E-14 2.40846E-15 + -8.91795E-16 -3.85295E-15 -1.53250E-14 -5.60961E-14 -1.88893E-13 -5.84836E-13 + -1.66391E-12 -4.34696E-12 -1.04184E-11 -2.28805E-11 -4.59749E-11 -8.43502E-11 + -1.40911E-10 -2.13483E-10 -2.91559E-10 -3.55498E-10 -3.80453E-10 -3.45247E-10 + -2.42988E-10 -8.77235E-11 8.77235E-11 2.42988E-10 3.45247E-10 3.80453E-10 + 3.55498E-10 2.91559E-10 2.13483E-10 1.40911E-10 8.43502E-11 4.59749E-11 + 2.28805E-11 1.04184E-11 4.34696E-12 1.66391E-12 5.84836E-13 1.88893E-13 + 5.60961E-14 1.53250E-14 3.85295E-15 8.91795E-16 + 8.91795E-16 3.85295E-15 1.53250E-14 5.60961E-14 1.88893E-13 5.84836E-13 + 1.66391E-12 4.34696E-12 1.04184E-11 2.28805E-11 4.59749E-11 8.43502E-11 + 1.40911E-10 2.13483E-10 2.91559E-10 3.55498E-10 3.80453E-10 3.45247E-10 + 2.42988E-10 8.77235E-11 -8.77235E-11 -2.42988E-10 -3.45247E-10 -3.80453E-10 + -3.55498E-10 -2.91559E-10 -2.13483E-10 -1.40911E-10 -8.43502E-11 -4.59749E-11 + -2.28805E-11 -1.04184E-11 -4.34696E-12 -1.66391E-12 -5.84836E-13 -1.88893E-13 + -5.60961E-14 -1.53250E-14 -3.85295E-15 -8.91795E-16 + 2.40846E-15 1.04056E-14 4.13880E-14 1.51498E-13 5.10141E-13 1.57946E-12 + 4.49371E-12 1.17398E-11 2.81368E-11 6.17931E-11 1.24164E-10 2.27804E-10 + 3.80558E-10 5.76552E-10 7.87409E-10 9.60089E-10 1.02749E-09 9.32404E-10 + 6.56236E-10 2.36914E-10 -2.36914E-10 -6.56236E-10 -9.32404E-10 -1.02749E-09 + -9.60089E-10 -7.87409E-10 -5.76552E-10 -3.80558E-10 -2.27804E-10 -1.24164E-10 + -6.17931E-11 -2.81368E-11 -1.17398E-11 -4.49371E-12 -1.57946E-12 -5.10141E-13 + -1.51498E-13 -4.13880E-14 -1.04056E-14 -2.40846E-15 + 3.25120E-15 1.40466E-14 5.58699E-14 2.04508E-13 6.88642E-13 2.13213E-12 + 6.06610E-12 1.58476E-11 3.79820E-11 8.34149E-11 1.67610E-10 3.07514E-10 + 5.13718E-10 7.78291E-10 1.06293E-09 1.29603E-09 1.38701E-09 1.25866E-09 + 8.85857E-10 3.19812E-10 -3.19812E-10 -8.85857E-10 -1.25866E-09 -1.38701E-09 + -1.29603E-09 -1.06293E-09 -7.78291E-10 -5.13718E-10 -3.07514E-10 -1.67610E-10 + -8.34149E-11 -3.79820E-11 -1.58476E-11 -6.06610E-12 -2.13213E-12 -6.88642E-13 + -2.04508E-13 -5.58699E-14 -1.40466E-14 -3.25120E-15 + 3.31326E-15 1.43148E-14 5.69364E-14 2.08412E-13 7.01788E-13 2.17283E-12 + 6.18190E-12 1.61501E-11 3.87071E-11 8.50073E-11 1.70810E-10 3.13384E-10 + 5.23525E-10 7.93148E-10 1.08322E-09 1.32077E-09 1.41349E-09 1.28269E-09 + 9.02768E-10 3.25917E-10 -3.25917E-10 -9.02768E-10 -1.28269E-09 -1.41349E-09 + -1.32077E-09 -1.08322E-09 -7.93148E-10 -5.23525E-10 -3.13384E-10 -1.70810E-10 + -8.50073E-11 -3.87071E-11 -1.61501E-11 -6.18190E-12 -2.17283E-12 -7.01788E-13 + -2.08412E-13 -5.69364E-14 -1.43148E-14 -3.31326E-15 + 2.78274E-15 1.20227E-14 4.78198E-14 1.75041E-13 5.89418E-13 1.82491E-12 + 5.19205E-12 1.35642E-11 3.25093E-11 7.13959E-11 1.43459E-10 2.63205E-10 + 4.39698E-10 6.66149E-10 9.09775E-10 1.10929E-09 1.18716E-09 1.07730E-09 + 7.58216E-10 2.73731E-10 -2.73731E-10 -7.58216E-10 -1.07730E-09 -1.18716E-09 + -1.10929E-09 -9.09775E-10 -6.66149E-10 -4.39698E-10 -2.63205E-10 -1.43459E-10 + -7.13959E-11 -3.25093E-11 -1.35642E-11 -5.19205E-12 -1.82491E-12 -5.89418E-13 + -1.75041E-13 -4.78198E-14 -1.20227E-14 -2.78274E-15 + 1.99039E-15 8.59939E-15 3.42037E-14 1.25201E-13 4.21589E-13 1.30529E-12 + 3.71368E-12 9.70196E-12 2.32527E-11 5.10668E-11 1.02611E-10 1.88261E-10 + 3.14499E-10 4.76472E-10 6.50728E-10 7.93434E-10 8.49131E-10 7.70555E-10 + 5.42324E-10 1.95790E-10 -1.95790E-10 -5.42324E-10 -7.70555E-10 -8.49131E-10 + -7.93434E-10 -6.50728E-10 -4.76472E-10 -3.14499E-10 -1.88261E-10 -1.02611E-10 + -5.10668E-11 -2.32527E-11 -9.70196E-12 -3.71368E-12 -1.30529E-12 -4.21589E-13 + -1.25201E-13 -3.42037E-14 -8.59939E-15 -1.99039E-15 + 1.23101E-15 5.31850E-15 2.11541E-14 7.74334E-14 2.60742E-13 8.07291E-13 + 2.29682E-12 6.00041E-12 1.43812E-11 3.15835E-11 6.34625E-11 1.16435E-10 + 1.94510E-10 2.94686E-10 4.02459E-10 4.90718E-10 5.25166E-10 4.76568E-10 + 3.35414E-10 1.21091E-10 -1.21091E-10 -3.35414E-10 -4.76568E-10 -5.25166E-10 + -4.90718E-10 -4.02459E-10 -2.94686E-10 -1.94510E-10 -1.16435E-10 -6.34625E-11 + -3.15835E-11 -1.43812E-11 -6.00041E-12 -2.29682E-12 -8.07291E-13 -2.60742E-13 + -7.74334E-14 -2.11541E-14 -5.31850E-15 -1.23101E-15 + 6.63524E-16 2.86672E-15 1.14023E-14 4.17373E-14 1.40542E-13 4.35137E-13 + 1.23801E-12 3.23428E-12 7.75160E-12 1.70238E-11 3.42069E-11 6.27593E-11 + 1.04843E-10 1.58838E-10 2.16929E-10 2.64502E-10 2.83069E-10 2.56875E-10 + 1.80791E-10 6.52692E-11 -6.52692E-11 -1.80791E-10 -2.56875E-10 -2.83069E-10 + -2.64502E-10 -2.16929E-10 -1.58838E-10 -1.04843E-10 -6.27593E-11 -3.42069E-11 + -1.70238E-11 -7.75160E-12 -3.23428E-12 -1.23801E-12 -4.35137E-13 -1.40542E-13 + -4.17373E-14 -1.14023E-14 -2.86672E-15 -6.63524E-16 + 3.13046E-16 1.35250E-15 5.37951E-15 1.96914E-14 6.63069E-14 2.05295E-13 + 5.84083E-13 1.52591E-12 3.65715E-12 8.03172E-12 1.61386E-11 2.96094E-11 + 4.94641E-11 7.49389E-11 1.02346E-10 1.24790E-10 1.33550E-10 1.21192E-10 + 8.52960E-11 3.07936E-11 -3.07936E-11 -8.52960E-11 -1.21192E-10 -1.33550E-10 + -1.24790E-10 -1.02346E-10 -7.49389E-11 -4.94641E-11 -2.96094E-11 -1.61386E-11 + -8.03172E-12 -3.65715E-12 -1.52591E-12 -5.84083E-13 -2.05295E-13 -6.63069E-14 + -1.96914E-14 -5.37951E-15 -1.35250E-15 -3.13046E-16 + 1.29596E-16 5.59913E-16 2.22703E-15 8.15191E-15 2.74500E-14 8.49887E-14 + 2.41801E-13 6.31702E-13 1.51400E-12 3.32500E-12 6.68110E-12 1.22578E-11 + 2.04773E-11 3.10235E-11 4.23695E-11 5.16611E-11 5.52876E-11 5.01714E-11 + 3.53112E-11 1.27480E-11 -1.27480E-11 -3.53112E-11 -5.01714E-11 -5.52876E-11 + -5.16611E-11 -4.23695E-11 -3.10235E-11 -2.04773E-11 -1.22578E-11 -6.68110E-12 + -3.32500E-12 -1.51400E-12 -6.31702E-13 -2.41801E-13 -8.49887E-14 -2.74500E-14 + -8.15191E-15 -2.22703E-15 -5.59913E-16 -1.29596E-16 + 4.71455E-17 2.03690E-16 8.10167E-16 2.96557E-15 9.98598E-15 3.09179E-14 + 8.79642E-14 2.29806E-13 5.50776E-13 1.20960E-12 2.43051E-12 4.45925E-12 + 7.44940E-12 1.12860E-11 1.54135E-11 1.87937E-11 2.01130E-11 1.82518E-11 + 1.28458E-11 4.63758E-12 -4.63758E-12 -1.28458E-11 -1.82518E-11 -2.01130E-11 + -1.87937E-11 -1.54135E-11 -1.12860E-11 -7.44940E-12 -4.45925E-12 -2.43051E-12 + -1.20960E-12 -5.50776E-13 -2.29806E-13 -8.79642E-14 -3.09179E-14 -9.98598E-15 + -2.96557E-15 -8.10167E-16 -2.03690E-16 -4.71455E-17 + 1.50848E-17 6.51730E-17 2.59223E-16 9.48870E-16 3.19514E-15 9.89256E-15 + 2.81452E-14 7.35292E-14 1.76228E-13 3.87025E-13 7.77670E-13 1.42679E-12 + 2.38353E-12 3.61109E-12 4.93174E-12 6.01327E-12 6.43540E-12 5.83988E-12 + 4.11017E-12 1.48385E-12 -1.48385E-12 -4.11017E-12 -5.83988E-12 -6.43540E-12 + -6.01327E-12 -4.93174E-12 -3.61109E-12 -2.38353E-12 -1.42679E-12 -7.77670E-13 + -3.87025E-13 -1.76228E-13 -7.35292E-14 -2.81452E-14 -9.89256E-15 -3.19514E-15 + -9.48870E-16 -2.59223E-16 -6.51730E-17 -1.50848E-17 + 4.24751E-18 1.83511E-17 7.29908E-17 2.67178E-16 8.99672E-16 2.78550E-15 + 7.92501E-15 2.07040E-14 4.96213E-14 1.08977E-13 2.18973E-13 4.01749E-13 + 6.71143E-13 1.01679E-12 1.38866E-12 1.69319E-12 1.81205E-12 1.64437E-12 + 1.15732E-12 4.17816E-13 -4.17816E-13 -1.15732E-12 -1.64437E-12 -1.81205E-12 + -1.69319E-12 -1.38866E-12 -1.01679E-12 -6.71143E-13 -4.01749E-13 -2.18973E-13 + -1.08977E-13 -4.96213E-14 -2.07040E-14 -7.92501E-15 -2.78550E-15 -8.99672E-16 + -2.67178E-16 -7.29908E-17 -1.83511E-17 -4.24751E-18 + 1.05292E-18 4.54907E-18 1.80937E-17 6.62310E-17 2.23020E-16 6.90499E-16 + 1.96453E-15 5.13233E-15 1.23007E-14 2.70143E-14 5.42813E-14 9.95899E-14 + 1.66370E-13 2.52053E-13 3.44235E-13 4.19726E-13 4.49190E-13 4.07623E-13 + 2.86889E-13 1.03573E-13 -1.03573E-13 -2.86889E-13 -4.07623E-13 -4.49190E-13 + -4.19726E-13 -3.44235E-13 -2.52053E-13 -1.66370E-13 -9.95899E-14 -5.42813E-14 + -2.70143E-14 -1.23007E-14 -5.13233E-15 -1.96453E-15 -6.90499E-16 -2.23020E-16 + -6.62310E-17 -1.80937E-17 -4.54907E-18 -1.05292E-18 + 2.29853E-19 9.93066E-19 3.94988E-18 1.44583E-17 4.86855E-17 1.50737E-16 + 4.28860E-16 1.12039E-15 2.68525E-15 5.89725E-15 1.18497E-14 2.17406E-14 + 3.63187E-14 5.50235E-14 7.51468E-14 9.16265E-14 9.80586E-14 8.89844E-14 + 6.26282E-14 2.26100E-14 -2.26100E-14 -6.26282E-14 -8.89844E-14 -9.80586E-14 + -9.16265E-14 -7.51468E-14 -5.50235E-14 -3.63187E-14 -2.17406E-14 -1.18497E-14 + -5.89725E-15 -2.68525E-15 -1.12039E-15 -4.28860E-16 -1.50737E-16 -4.86855E-17 + -1.44583E-17 -3.94988E-18 -9.93066E-19 -2.29853E-19 + 4.41995E-20 1.90962E-19 7.59543E-19 2.78026E-18 9.36199E-18 2.89859E-17 + 8.24676E-17 2.15446E-16 5.16360E-16 1.13401E-15 2.27863E-15 4.18060E-15 + 6.98392E-15 1.05807E-14 1.44504E-14 1.76193E-14 1.88562E-14 1.71113E-14 + 1.20431E-14 4.34779E-15 -4.34779E-15 -1.20431E-14 -1.71113E-14 -1.88562E-14 + -1.76193E-14 -1.44504E-14 -1.05807E-14 -6.98392E-15 -4.18060E-15 -2.27863E-15 + -1.13401E-15 -5.16360E-16 -2.15446E-16 -8.24676E-17 -2.89859E-17 -9.36199E-18 + -2.78026E-18 -7.59543E-19 -1.90962E-19 -4.41995E-20 + 7.48890E-21 3.23554E-20 1.28692E-19 4.71070E-19 1.58624E-18 4.91120E-18 + 1.39728E-17 3.65038E-17 8.74888E-17 1.92140E-16 3.86077E-16 7.08336E-16 + 1.18331E-15 1.79274E-15 2.44838E-15 2.98531E-15 3.19488E-15 2.89923E-15 + 2.04051E-15 7.36663E-16 -7.36664E-16 -2.04051E-15 -2.89923E-15 -3.19488E-15 + -2.98531E-15 -2.44838E-15 -1.79274E-15 -1.18331E-15 -7.08336E-16 -3.86077E-16 + -1.92140E-16 -8.74888E-17 -3.65038E-17 -1.39728E-17 -4.91120E-18 -1.58624E-18 + -4.71070E-19 -1.28692E-19 -3.23554E-20 -7.48890E-21 + 1.11837E-21 4.83185E-21 1.92185E-20 7.03480E-20 2.36883E-19 7.33422E-19 + 2.08665E-18 5.45136E-18 1.30653E-17 2.86936E-17 5.76555E-17 1.05781E-16 + 1.76712E-16 2.67721E-16 3.65633E-16 4.45817E-16 4.77112E-16 4.32961E-16 + 3.04723E-16 1.10011E-16 -1.10011E-16 -3.04723E-16 -4.32961E-16 -4.77112E-16 + -4.45817E-16 -3.65633E-16 -2.67721E-16 -1.76712E-16 -1.05781E-16 -5.76555E-17 + -2.86936E-17 -1.30653E-17 -5.45136E-18 -2.08665E-18 -7.33422E-19 -2.36883E-19 + -7.03480E-20 -1.92185E-20 -4.83185E-21 -1.11837E-21 + 1.47257E-22 6.36218E-22 2.53053E-21 9.26285E-21 3.11909E-20 9.65710E-20 + 2.74753E-19 7.17791E-19 1.72033E-18 3.77813E-18 7.59160E-18 1.39283E-17 + 2.32680E-17 3.52514E-17 4.81436E-17 5.87015E-17 6.28222E-17 5.70088E-17 + 4.01234E-17 1.44853E-17 -1.44853E-17 -4.01234E-17 -5.70088E-17 -6.28222E-17 + -5.87015E-17 -4.81436E-17 -3.52514E-17 -2.32680E-17 -1.39283E-17 -7.59160E-18 + -3.77813E-18 -1.72033E-18 -7.17791E-19 -2.74753E-19 -9.65710E-20 -3.11909E-20 + -9.26285E-21 -2.53053E-21 -6.36218E-22 -1.47257E-22 + 1.71038E-23 7.38961E-23 2.93919E-22 1.07587E-21 3.62279E-21 1.12166E-20 + 3.19123E-20 8.33706E-20 1.99815E-19 4.38826E-19 8.81757E-19 1.61776E-18 + 2.70255E-18 4.09441E-18 5.59183E-18 6.81812E-18 7.29674E-18 6.62151E-18 + 4.66029E-18 1.68246E-18 -1.68246E-18 -4.66029E-18 -6.62151E-18 -7.29674E-18 + -6.81812E-18 -5.59183E-18 -4.09441E-18 -2.70255E-18 -1.61776E-18 -8.81757E-19 + -4.38826E-19 -1.99815E-19 -8.33707E-20 -3.19123E-20 -1.12166E-20 -3.62279E-21 + -1.07587E-21 -2.93919E-22 -7.38961E-23 -1.71038E-23 + -1.55701E-22 -6.72696E-22 -2.67562E-21 -9.79395E-21 -3.29792E-20 -1.02108E-19 + -2.90507E-19 -7.58946E-19 -1.81897E-18 -3.99476E-18 -8.02688E-18 -1.47269E-17 + -2.46021E-17 -3.72725E-17 -5.09039E-17 -6.20672E-17 -6.64242E-17 -6.02775E-17 + -4.24239E-17 -1.53159E-17 1.53159E-17 4.24239E-17 6.02775E-17 6.64242E-17 + 6.20672E-17 5.09039E-17 3.72725E-17 2.46021E-17 1.47269E-17 8.02688E-18 + 3.99476E-18 1.81897E-18 7.58946E-19 2.90507E-19 1.02108E-19 3.29792E-20 + 9.79395E-21 2.67562E-21 6.72696E-22 1.55701E-22 + -1.33309E-21 -5.75954E-21 -2.29083E-20 -8.38546E-20 -2.82364E-19 -8.74236E-19 + -2.48728E-18 -6.49800E-18 -1.55738E-17 -3.42026E-17 -6.87251E-17 -1.26090E-16 + -2.10640E-16 -3.19123E-16 -4.35833E-16 -5.31412E-16 -5.68716E-16 -5.16088E-16 + -3.63228E-16 -1.31133E-16 1.31133E-16 3.63228E-16 5.16088E-16 5.68716E-16 + 5.31412E-16 4.35833E-16 3.19123E-16 2.10640E-16 1.26090E-16 6.87251E-17 + 3.42026E-17 1.55738E-17 6.49800E-18 2.48728E-18 8.74236E-19 2.82364E-19 + 8.38546E-20 2.29083E-20 5.75954E-21 1.33309E-21 + -1.00801E-20 -4.35504E-20 -1.73220E-19 -6.34060E-19 -2.13508E-18 -6.61047E-18 + -1.88074E-17 -4.91342E-17 -1.17760E-16 -2.58621E-16 -5.19660E-16 -9.53420E-16 + -1.59274E-15 -2.41302E-15 -3.29552E-15 -4.01823E-15 -4.30030E-15 -3.90236E-15 + -2.74652E-15 -9.91549E-16 9.91549E-16 2.74652E-15 3.90236E-15 4.30030E-15 + 4.01823E-15 3.29552E-15 2.41302E-15 1.59274E-15 9.53420E-16 5.19660E-16 + 2.58621E-16 1.17760E-16 4.91342E-17 1.88074E-17 6.61047E-18 2.13508E-18 + 6.34060E-19 1.73220E-19 4.35504E-20 1.00801E-20 + -6.72672E-20 -2.90625E-19 -1.15595E-18 -4.23127E-18 -1.42480E-17 -4.41137E-17 + -1.25507E-16 -3.27887E-16 -7.85847E-16 -1.72585E-15 -3.46785E-15 -6.36246E-15 + -1.06288E-14 -1.61028E-14 -2.19920E-14 -2.68149E-14 -2.86972E-14 -2.60416E-14 + -1.83284E-14 -6.61690E-15 6.61690E-15 1.83284E-14 2.60416E-14 2.86972E-14 + 2.68149E-14 2.19920E-14 1.61028E-14 1.06288E-14 6.36246E-15 3.46785E-15 + 1.72585E-15 7.85847E-16 3.27887E-16 1.25507E-16 4.41137E-17 1.42480E-17 + 4.23127E-18 1.15595E-18 2.90625E-19 6.72672E-20 + -3.95947E-19 -1.71067E-18 -6.80411E-18 -2.49060E-17 -8.38662E-17 -2.59661E-16 + -7.38759E-16 -1.93000E-15 -4.62564E-15 -1.01587E-14 -2.04124E-14 -3.74505E-14 + -6.25631E-14 -9.47841E-14 -1.29449E-13 -1.57837E-13 -1.68917E-13 -1.53286E-13 + -1.07884E-13 -3.89483E-14 3.89483E-14 1.07884E-13 1.53286E-13 1.68917E-13 + 1.57837E-13 1.29449E-13 9.47841E-14 6.25631E-14 3.74505E-14 2.04124E-14 + 1.01587E-14 4.62564E-15 1.93000E-15 7.38759E-16 2.59661E-16 8.38662E-17 + 2.49060E-17 6.80411E-18 1.71067E-18 3.95947E-19 + -2.05475E-18 -8.87745E-18 -3.53097E-17 -1.29249E-16 -4.35221E-16 -1.34750E-15 + -3.83376E-15 -1.00157E-14 -2.40046E-14 -5.27181E-14 -1.05929E-13 -1.94348E-13 + -3.24669E-13 -4.91879E-13 -6.71770E-13 -8.19090E-13 -8.76588E-13 -7.95471E-13 + -5.59861E-13 -2.02121E-13 2.02121E-13 5.59861E-13 7.95471E-13 8.76588E-13 + 8.19090E-13 6.71770E-13 4.91879E-13 3.24669E-13 1.94348E-13 1.05929E-13 + 5.27181E-14 2.40046E-14 1.00157E-14 3.83376E-15 1.34750E-15 4.35221E-16 + 1.29249E-16 3.53097E-17 8.87745E-18 2.05475E-18 + -9.39718E-18 -4.06000E-17 -1.61485E-16 -5.91105E-16 -1.99043E-15 -6.16264E-15 + -1.75333E-14 -4.58055E-14 -1.09782E-13 -2.41100E-13 -4.84455E-13 -8.88830E-13 + -1.48484E-12 -2.24955E-12 -3.07226E-12 -3.74601E-12 -4.00898E-12 -3.63799E-12 + -2.56046E-12 -9.24376E-13 9.24376E-13 2.56046E-12 3.63799E-12 4.00898E-12 + 3.74601E-12 3.07226E-12 2.24955E-12 1.48484E-12 8.88830E-13 4.84455E-13 + 2.41100E-13 1.09782E-13 4.58055E-14 1.75333E-14 6.16264E-15 1.99043E-15 + 5.91105E-16 1.61485E-16 4.06000E-17 9.39718E-18 + -3.78608E-17 -1.63575E-16 -6.50615E-16 -2.38154E-15 -8.01936E-15 -2.48290E-14 + -7.06408E-14 -1.84548E-13 -4.42307E-13 -9.71381E-13 -1.95185E-12 -3.58105E-12 + -5.98233E-12 -9.06334E-12 -1.23780E-11 -1.50925E-11 -1.61520E-11 -1.46573E-11 + -1.03160E-11 -3.72427E-12 3.72427E-12 1.03160E-11 1.46573E-11 1.61520E-11 + 1.50925E-11 1.23780E-11 9.06334E-12 5.98233E-12 3.58105E-12 1.95185E-12 + 9.71381E-13 4.42307E-13 1.84548E-13 7.06408E-14 2.48290E-14 8.01936E-15 + 2.38154E-15 6.50615E-16 1.63575E-16 3.78608E-17 + -1.34329E-16 -5.80362E-16 -2.30837E-15 -8.44963E-15 -2.84525E-14 -8.80927E-14 + -2.50632E-13 -6.54773E-13 -1.56930E-12 -3.44644E-12 -6.92511E-12 -1.27055E-11 + -2.12252E-11 -3.21565E-11 -4.39169E-11 -5.35479E-11 -5.73068E-11 -5.20038E-11 + -3.66008E-11 -1.32136E-11 1.32136E-11 3.66008E-11 5.20038E-11 5.73068E-11 + 5.35479E-11 4.39169E-11 3.21565E-11 2.12252E-11 1.27055E-11 6.92511E-12 + 3.44644E-12 1.56930E-12 6.54773E-13 2.50632E-13 8.80927E-14 2.84525E-14 + 8.44963E-15 2.30837E-15 5.80362E-16 1.34329E-16 + -4.19511E-16 -1.81247E-15 -7.20904E-15 -2.63883E-14 -8.88574E-14 -2.75114E-13 + -7.82725E-13 -2.04486E-12 -4.90092E-12 -1.07632E-11 -2.16272E-11 -3.96794E-11 + -6.62864E-11 -1.00425E-10 -1.37153E-10 -1.67230E-10 -1.78970E-10 -1.62408E-10 + -1.14305E-10 -4.12662E-11 4.12662E-11 1.14305E-10 1.62408E-10 1.78970E-10 + 1.67230E-10 1.37153E-10 1.00425E-10 6.62864E-11 3.96794E-11 2.16272E-11 + 1.07632E-11 4.90092E-12 2.04486E-12 7.82725E-13 2.75114E-13 8.88574E-14 + 2.63883E-14 7.20904E-15 1.81247E-15 4.19511E-16 + -1.15250E-15 -4.97932E-15 -1.98050E-14 -7.24952E-14 -2.44113E-13 -7.55807E-13 + -2.15034E-12 -5.61774E-12 -1.34641E-11 -2.95693E-11 -5.94152E-11 -1.09009E-10 + -1.82105E-10 -2.75893E-10 -3.76793E-10 -4.59424E-10 -4.91674E-10 -4.46176E-10 + -3.14023E-10 -1.13369E-10 1.13369E-10 3.14023E-10 4.46176E-10 4.91674E-10 + 4.59424E-10 3.76793E-10 2.75893E-10 1.82105E-10 1.09009E-10 5.94152E-11 + 2.95693E-11 1.34641E-11 5.61774E-12 2.15034E-12 7.55807E-13 2.44113E-13 + 7.24952E-14 1.98050E-14 4.97932E-15 1.15250E-15 + -2.78268E-15 -1.20224E-14 -4.78187E-14 -1.75037E-13 -5.89404E-13 -1.82487E-12 + -5.19193E-12 -1.35639E-11 -3.25086E-11 -7.13942E-11 -1.43456E-10 -2.63199E-10 + -4.39688E-10 -6.66134E-10 -9.09754E-10 -1.10926E-09 -1.18713E-09 -1.07728E-09 + -7.58199E-10 -2.73725E-10 2.73725E-10 7.58199E-10 1.07728E-09 1.18713E-09 + 1.10926E-09 9.09754E-10 6.66134E-10 4.39688E-10 2.63199E-10 1.43456E-10 + 7.13942E-11 3.25086E-11 1.35639E-11 5.19193E-12 1.82487E-12 5.89404E-13 + 1.75037E-13 4.78187E-14 1.20224E-14 2.78268E-15 + -5.89605E-15 -2.54736E-14 -1.01320E-13 -3.70876E-13 -1.24885E-12 -3.86661E-12 + -1.10009E-11 -2.87397E-11 -6.88804E-11 -1.51273E-10 -3.03961E-10 -5.57677E-10 + -9.31628E-10 -1.41143E-09 -1.92762E-09 -2.35035E-09 -2.51534E-09 -2.28258E-09 + -1.60650E-09 -5.79979E-10 5.79979E-10 1.60650E-09 2.28258E-09 2.51534E-09 + 2.35035E-09 1.92762E-09 1.41143E-09 9.31628E-10 5.57677E-10 3.03961E-10 + 1.51273E-10 6.88804E-11 2.87397E-11 1.10009E-11 3.86661E-12 1.24885E-12 + 3.70876E-13 1.01320E-13 2.54736E-14 5.89605E-15 + -1.09358E-14 -4.72476E-14 -1.87925E-13 -6.87889E-13 -2.31633E-12 -7.17167E-12 + -2.04041E-11 -5.33054E-11 -1.27757E-10 -2.80576E-10 -5.63776E-10 -1.03436E-09 + -1.72795E-09 -2.61788E-09 -3.57529E-09 -4.35936E-09 -4.66538E-09 -4.23365E-09 + -2.97969E-09 -1.07573E-09 1.07573E-09 2.97969E-09 4.23365E-09 4.66538E-09 + 4.35936E-09 3.57529E-09 2.61788E-09 1.72795E-09 1.03436E-09 5.63776E-10 + 2.80576E-10 1.27757E-10 5.33054E-11 2.04041E-11 7.17167E-12 2.31633E-12 + 6.87889E-13 1.87925E-13 4.72476E-14 1.09358E-14 + -1.76784E-14 -7.63784E-14 -3.03792E-13 -1.11201E-12 -3.74449E-12 -1.15934E-11 + -3.29843E-11 -8.61713E-11 -2.06527E-10 -4.53568E-10 -9.11378E-10 -1.67210E-09 + -2.79334E-09 -4.23195E-09 -5.77967E-09 -7.04716E-09 -7.54186E-09 -6.84395E-09 + -4.81684E-09 -1.73897E-09 1.73897E-09 4.81684E-09 6.84395E-09 7.54186E-09 + 7.04716E-09 5.77967E-09 4.23195E-09 2.79334E-09 1.67210E-09 9.11378E-10 + 4.53568E-10 2.06527E-10 8.61713E-11 3.29843E-11 1.15934E-11 3.74449E-12 + 1.11201E-12 3.03792E-13 7.63784E-14 1.76784E-14 + -2.47122E-14 -1.06768E-13 -4.24664E-13 -1.55446E-12 -5.23434E-12 -1.62062E-11 + -4.61081E-11 -1.20457E-10 -2.88699E-10 -6.34032E-10 -1.27399E-09 -2.33740E-09 + -3.90474E-09 -5.91575E-09 -8.07928E-09 -9.85106E-09 -1.05426E-08 -9.56700E-09 + -6.73336E-09 -2.43087E-09 2.43087E-09 6.73336E-09 9.56700E-09 1.05426E-08 + 9.85106E-09 8.07928E-09 5.91575E-09 3.90474E-09 2.33740E-09 1.27399E-09 + 6.34032E-10 2.88699E-10 1.20457E-10 4.61081E-11 1.62062E-11 5.23434E-12 + 1.55446E-12 4.24664E-13 1.06768E-13 2.47122E-14 + -2.94203E-14 -1.27109E-13 -5.05570E-13 -1.85061E-12 -6.23157E-12 -1.92937E-11 + -5.48925E-11 -1.43406E-10 -3.43702E-10 -7.54826E-10 -1.51671E-09 -2.78271E-09 + -4.64866E-09 -7.04280E-09 -9.61851E-09 -1.17279E-08 -1.25511E-08 -1.13897E-08 + -8.01618E-09 -2.89400E-09 2.89400E-09 8.01618E-09 1.13897E-08 1.25511E-08 + 1.17279E-08 9.61851E-09 7.04280E-09 4.64866E-09 2.78271E-09 1.51671E-09 + 7.54826E-10 3.43702E-10 1.43406E-10 5.48925E-11 1.92937E-11 6.23157E-12 + 1.85061E-12 5.05570E-13 1.27109E-13 2.94203E-14 + -2.88670E-14 -1.24718E-13 -4.96062E-13 -1.81580E-12 -6.11437E-12 -1.89309E-11 + -5.38601E-11 -1.40709E-10 -3.37238E-10 -7.40631E-10 -1.48819E-09 -2.73038E-09 + -4.56124E-09 -6.91035E-09 -9.43762E-09 -1.15073E-08 -1.23151E-08 -1.11755E-08 + -7.86542E-09 -2.83957E-09 2.83957E-09 7.86542E-09 1.11755E-08 1.23151E-08 + 1.15073E-08 9.43762E-09 6.91035E-09 4.56124E-09 2.73038E-09 1.48819E-09 + 7.40631E-10 3.37238E-10 1.40709E-10 5.38601E-11 1.89309E-11 6.11437E-12 + 1.81580E-12 4.96062E-13 1.24718E-13 2.88670E-14 + -2.13834E-14 -9.23859E-14 -3.67461E-13 -1.34507E-12 -4.52926E-12 -1.40232E-11 + -3.98972E-11 -1.04231E-10 -2.49811E-10 -5.48627E-10 -1.10238E-09 -2.02255E-09 + -3.37877E-09 -5.11889E-09 -6.99098E-09 -8.52410E-09 -9.12248E-09 -8.27831E-09 + -5.82636E-09 -2.10343E-09 2.10343E-09 5.82636E-09 8.27831E-09 9.12248E-09 + 8.52410E-09 6.99098E-09 5.11889E-09 3.37877E-09 2.02255E-09 1.10238E-09 + 5.48627E-10 2.49811E-10 1.04231E-10 3.98972E-11 1.40232E-11 4.52926E-12 + 1.34507E-12 3.67461E-13 9.23859E-14 2.13834E-14 + -7.91758E-15 -3.42075E-14 -1.36059E-13 -4.98035E-13 -1.67704E-12 -5.19232E-12 + -1.47726E-11 -3.85934E-11 -9.24968E-11 -2.03139E-10 -4.08177E-10 -7.48882E-10 + -1.25105E-09 -1.89536E-09 -2.58853E-09 -3.15620E-09 -3.37776E-09 -3.06519E-09 + -2.15731E-09 -7.78831E-10 7.78831E-10 2.15731E-09 3.06519E-09 3.37776E-09 + 3.15620E-09 2.58853E-09 1.89536E-09 1.25105E-09 7.48882E-10 4.08177E-10 + 2.03139E-10 9.24968E-11 3.85934E-11 1.47726E-11 5.19232E-12 1.67704E-12 + 4.98035E-13 1.36059E-13 3.42075E-14 7.91758E-15 + 7.91758E-15 3.42075E-14 1.36059E-13 4.98035E-13 1.67704E-12 5.19232E-12 + 1.47726E-11 3.85934E-11 9.24968E-11 2.03139E-10 4.08177E-10 7.48882E-10 + 1.25105E-09 1.89536E-09 2.58853E-09 3.15620E-09 3.37776E-09 3.06519E-09 + 2.15731E-09 7.78831E-10 -7.78831E-10 -2.15731E-09 -3.06519E-09 -3.37776E-09 + -3.15620E-09 -2.58853E-09 -1.89536E-09 -1.25105E-09 -7.48882E-10 -4.08177E-10 + -2.03139E-10 -9.24968E-11 -3.85934E-11 -1.47726E-11 -5.19232E-12 -1.67704E-12 + -4.98035E-13 -1.36059E-13 -3.42075E-14 -7.91758E-15 + 2.13834E-14 9.23859E-14 3.67461E-13 1.34507E-12 4.52926E-12 1.40232E-11 + 3.98972E-11 1.04231E-10 2.49811E-10 5.48627E-10 1.10238E-09 2.02255E-09 + 3.37877E-09 5.11889E-09 6.99098E-09 8.52410E-09 9.12248E-09 8.27831E-09 + 5.82636E-09 2.10343E-09 -2.10343E-09 -5.82636E-09 -8.27831E-09 -9.12248E-09 + -8.52410E-09 -6.99098E-09 -5.11889E-09 -3.37877E-09 -2.02255E-09 -1.10238E-09 + -5.48627E-10 -2.49811E-10 -1.04231E-10 -3.98972E-11 -1.40232E-11 -4.52926E-12 + -1.34507E-12 -3.67461E-13 -9.23859E-14 -2.13834E-14 + 2.88670E-14 1.24718E-13 4.96062E-13 1.81580E-12 6.11437E-12 1.89309E-11 + 5.38601E-11 1.40709E-10 3.37238E-10 7.40631E-10 1.48819E-09 2.73038E-09 + 4.56124E-09 6.91035E-09 9.43762E-09 1.15073E-08 1.23151E-08 1.11755E-08 + 7.86542E-09 2.83957E-09 -2.83957E-09 -7.86542E-09 -1.11755E-08 -1.23151E-08 + -1.15073E-08 -9.43762E-09 -6.91035E-09 -4.56124E-09 -2.73038E-09 -1.48819E-09 + -7.40631E-10 -3.37238E-10 -1.40709E-10 -5.38601E-11 -1.89309E-11 -6.11437E-12 + -1.81580E-12 -4.96062E-13 -1.24718E-13 -2.88670E-14 + 2.94203E-14 1.27109E-13 5.05570E-13 1.85061E-12 6.23157E-12 1.92937E-11 + 5.48925E-11 1.43406E-10 3.43702E-10 7.54826E-10 1.51671E-09 2.78271E-09 + 4.64866E-09 7.04280E-09 9.61851E-09 1.17279E-08 1.25511E-08 1.13897E-08 + 8.01618E-09 2.89400E-09 -2.89400E-09 -8.01618E-09 -1.13897E-08 -1.25511E-08 + -1.17279E-08 -9.61851E-09 -7.04280E-09 -4.64866E-09 -2.78271E-09 -1.51671E-09 + -7.54826E-10 -3.43702E-10 -1.43406E-10 -5.48925E-11 -1.92937E-11 -6.23157E-12 + -1.85061E-12 -5.05570E-13 -1.27109E-13 -2.94203E-14 + 2.47122E-14 1.06768E-13 4.24664E-13 1.55446E-12 5.23434E-12 1.62062E-11 + 4.61081E-11 1.20457E-10 2.88699E-10 6.34032E-10 1.27399E-09 2.33740E-09 + 3.90474E-09 5.91575E-09 8.07928E-09 9.85106E-09 1.05426E-08 9.56700E-09 + 6.73336E-09 2.43087E-09 -2.43087E-09 -6.73336E-09 -9.56700E-09 -1.05426E-08 + -9.85106E-09 -8.07928E-09 -5.91575E-09 -3.90474E-09 -2.33740E-09 -1.27399E-09 + -6.34032E-10 -2.88699E-10 -1.20457E-10 -4.61081E-11 -1.62062E-11 -5.23434E-12 + -1.55446E-12 -4.24664E-13 -1.06768E-13 -2.47122E-14 + 1.76784E-14 7.63784E-14 3.03792E-13 1.11201E-12 3.74449E-12 1.15934E-11 + 3.29843E-11 8.61713E-11 2.06527E-10 4.53568E-10 9.11378E-10 1.67210E-09 + 2.79334E-09 4.23195E-09 5.77967E-09 7.04716E-09 7.54186E-09 6.84395E-09 + 4.81684E-09 1.73897E-09 -1.73897E-09 -4.81684E-09 -6.84395E-09 -7.54186E-09 + -7.04716E-09 -5.77967E-09 -4.23195E-09 -2.79334E-09 -1.67210E-09 -9.11378E-10 + -4.53568E-10 -2.06527E-10 -8.61713E-11 -3.29843E-11 -1.15934E-11 -3.74449E-12 + -1.11201E-12 -3.03792E-13 -7.63784E-14 -1.76784E-14 + 1.09358E-14 4.72476E-14 1.87925E-13 6.87889E-13 2.31633E-12 7.17167E-12 + 2.04041E-11 5.33054E-11 1.27757E-10 2.80576E-10 5.63776E-10 1.03436E-09 + 1.72795E-09 2.61788E-09 3.57529E-09 4.35936E-09 4.66538E-09 4.23365E-09 + 2.97969E-09 1.07573E-09 -1.07573E-09 -2.97969E-09 -4.23365E-09 -4.66538E-09 + -4.35936E-09 -3.57529E-09 -2.61788E-09 -1.72795E-09 -1.03436E-09 -5.63776E-10 + -2.80576E-10 -1.27757E-10 -5.33054E-11 -2.04041E-11 -7.17167E-12 -2.31633E-12 + -6.87889E-13 -1.87925E-13 -4.72476E-14 -1.09358E-14 + 5.89605E-15 2.54736E-14 1.01320E-13 3.70876E-13 1.24885E-12 3.86661E-12 + 1.10009E-11 2.87397E-11 6.88804E-11 1.51273E-10 3.03961E-10 5.57677E-10 + 9.31628E-10 1.41143E-09 1.92762E-09 2.35035E-09 2.51534E-09 2.28258E-09 + 1.60650E-09 5.79979E-10 -5.79979E-10 -1.60650E-09 -2.28258E-09 -2.51534E-09 + -2.35035E-09 -1.92762E-09 -1.41143E-09 -9.31628E-10 -5.57677E-10 -3.03961E-10 + -1.51273E-10 -6.88804E-11 -2.87397E-11 -1.10009E-11 -3.86661E-12 -1.24885E-12 + -3.70876E-13 -1.01320E-13 -2.54736E-14 -5.89605E-15 + 2.78268E-15 1.20224E-14 4.78187E-14 1.75037E-13 5.89404E-13 1.82487E-12 + 5.19193E-12 1.35639E-11 3.25086E-11 7.13942E-11 1.43456E-10 2.63199E-10 + 4.39688E-10 6.66134E-10 9.09754E-10 1.10926E-09 1.18713E-09 1.07728E-09 + 7.58199E-10 2.73725E-10 -2.73725E-10 -7.58199E-10 -1.07728E-09 -1.18713E-09 + -1.10926E-09 -9.09754E-10 -6.66134E-10 -4.39688E-10 -2.63199E-10 -1.43456E-10 + -7.13942E-11 -3.25086E-11 -1.35639E-11 -5.19193E-12 -1.82487E-12 -5.89404E-13 + -1.75037E-13 -4.78187E-14 -1.20224E-14 -2.78268E-15 + 1.15250E-15 4.97932E-15 1.98050E-14 7.24952E-14 2.44113E-13 7.55807E-13 + 2.15034E-12 5.61774E-12 1.34641E-11 2.95693E-11 5.94152E-11 1.09009E-10 + 1.82105E-10 2.75893E-10 3.76793E-10 4.59424E-10 4.91674E-10 4.46176E-10 + 3.14023E-10 1.13369E-10 -1.13369E-10 -3.14023E-10 -4.46176E-10 -4.91674E-10 + -4.59424E-10 -3.76793E-10 -2.75893E-10 -1.82105E-10 -1.09009E-10 -5.94152E-11 + -2.95693E-11 -1.34641E-11 -5.61774E-12 -2.15034E-12 -7.55807E-13 -2.44113E-13 + -7.24952E-14 -1.98050E-14 -4.97932E-15 -1.15250E-15 + 4.19511E-16 1.81247E-15 7.20904E-15 2.63883E-14 8.88574E-14 2.75114E-13 + 7.82725E-13 2.04486E-12 4.90092E-12 1.07632E-11 2.16272E-11 3.96794E-11 + 6.62864E-11 1.00425E-10 1.37153E-10 1.67230E-10 1.78970E-10 1.62408E-10 + 1.14305E-10 4.12662E-11 -4.12662E-11 -1.14305E-10 -1.62408E-10 -1.78970E-10 + -1.67230E-10 -1.37153E-10 -1.00425E-10 -6.62864E-11 -3.96794E-11 -2.16272E-11 + -1.07632E-11 -4.90092E-12 -2.04486E-12 -7.82725E-13 -2.75114E-13 -8.88574E-14 + -2.63883E-14 -7.20904E-15 -1.81247E-15 -4.19511E-16 + 1.34329E-16 5.80362E-16 2.30837E-15 8.44963E-15 2.84525E-14 8.80927E-14 + 2.50632E-13 6.54773E-13 1.56930E-12 3.44644E-12 6.92511E-12 1.27055E-11 + 2.12252E-11 3.21565E-11 4.39169E-11 5.35479E-11 5.73068E-11 5.20038E-11 + 3.66008E-11 1.32136E-11 -1.32136E-11 -3.66008E-11 -5.20038E-11 -5.73068E-11 + -5.35479E-11 -4.39169E-11 -3.21565E-11 -2.12252E-11 -1.27055E-11 -6.92511E-12 + -3.44644E-12 -1.56930E-12 -6.54773E-13 -2.50632E-13 -8.80927E-14 -2.84525E-14 + -8.44963E-15 -2.30837E-15 -5.80362E-16 -1.34329E-16 + 3.78608E-17 1.63575E-16 6.50615E-16 2.38154E-15 8.01936E-15 2.48290E-14 + 7.06408E-14 1.84548E-13 4.42307E-13 9.71381E-13 1.95185E-12 3.58105E-12 + 5.98233E-12 9.06334E-12 1.23780E-11 1.50925E-11 1.61520E-11 1.46573E-11 + 1.03160E-11 3.72427E-12 -3.72427E-12 -1.03160E-11 -1.46573E-11 -1.61520E-11 + -1.50925E-11 -1.23780E-11 -9.06334E-12 -5.98233E-12 -3.58105E-12 -1.95185E-12 + -9.71381E-13 -4.42307E-13 -1.84548E-13 -7.06408E-14 -2.48290E-14 -8.01936E-15 + -2.38154E-15 -6.50615E-16 -1.63575E-16 -3.78608E-17 + 9.39718E-18 4.06000E-17 1.61485E-16 5.91105E-16 1.99043E-15 6.16264E-15 + 1.75333E-14 4.58055E-14 1.09782E-13 2.41100E-13 4.84455E-13 8.88830E-13 + 1.48484E-12 2.24955E-12 3.07226E-12 3.74601E-12 4.00898E-12 3.63799E-12 + 2.56046E-12 9.24376E-13 -9.24376E-13 -2.56046E-12 -3.63799E-12 -4.00898E-12 + -3.74601E-12 -3.07226E-12 -2.24955E-12 -1.48484E-12 -8.88830E-13 -4.84455E-13 + -2.41100E-13 -1.09782E-13 -4.58055E-14 -1.75333E-14 -6.16264E-15 -1.99043E-15 + -5.91105E-16 -1.61485E-16 -4.06000E-17 -9.39718E-18 + 2.05475E-18 8.87745E-18 3.53097E-17 1.29249E-16 4.35221E-16 1.34750E-15 + 3.83376E-15 1.00157E-14 2.40046E-14 5.27181E-14 1.05929E-13 1.94348E-13 + 3.24669E-13 4.91879E-13 6.71770E-13 8.19090E-13 8.76588E-13 7.95471E-13 + 5.59861E-13 2.02121E-13 -2.02121E-13 -5.59861E-13 -7.95471E-13 -8.76588E-13 + -8.19090E-13 -6.71770E-13 -4.91879E-13 -3.24669E-13 -1.94348E-13 -1.05929E-13 + -5.27181E-14 -2.40046E-14 -1.00157E-14 -3.83376E-15 -1.34750E-15 -4.35221E-16 + -1.29249E-16 -3.53097E-17 -8.87745E-18 -2.05475E-18 + 3.95947E-19 1.71067E-18 6.80411E-18 2.49060E-17 8.38662E-17 2.59661E-16 + 7.38759E-16 1.93000E-15 4.62564E-15 1.01587E-14 2.04124E-14 3.74505E-14 + 6.25631E-14 9.47841E-14 1.29449E-13 1.57837E-13 1.68917E-13 1.53286E-13 + 1.07884E-13 3.89483E-14 -3.89483E-14 -1.07884E-13 -1.53286E-13 -1.68917E-13 + -1.57837E-13 -1.29449E-13 -9.47841E-14 -6.25631E-14 -3.74505E-14 -2.04124E-14 + -1.01587E-14 -4.62564E-15 -1.93000E-15 -7.38759E-16 -2.59661E-16 -8.38662E-17 + -2.49060E-17 -6.80411E-18 -1.71067E-18 -3.95947E-19 + 6.72672E-20 2.90625E-19 1.15595E-18 4.23127E-18 1.42480E-17 4.41137E-17 + 1.25507E-16 3.27887E-16 7.85847E-16 1.72585E-15 3.46785E-15 6.36246E-15 + 1.06288E-14 1.61028E-14 2.19920E-14 2.68149E-14 2.86972E-14 2.60416E-14 + 1.83284E-14 6.61690E-15 -6.61690E-15 -1.83284E-14 -2.60416E-14 -2.86972E-14 + -2.68149E-14 -2.19920E-14 -1.61028E-14 -1.06288E-14 -6.36246E-15 -3.46785E-15 + -1.72585E-15 -7.85847E-16 -3.27887E-16 -1.25507E-16 -4.41137E-17 -1.42480E-17 + -4.23127E-18 -1.15595E-18 -2.90625E-19 -6.72672E-20 + 1.00801E-20 4.35504E-20 1.73220E-19 6.34060E-19 2.13508E-18 6.61047E-18 + 1.88074E-17 4.91342E-17 1.17760E-16 2.58621E-16 5.19660E-16 9.53420E-16 + 1.59274E-15 2.41302E-15 3.29552E-15 4.01823E-15 4.30030E-15 3.90236E-15 + 2.74652E-15 9.91549E-16 -9.91549E-16 -2.74652E-15 -3.90236E-15 -4.30030E-15 + -4.01823E-15 -3.29552E-15 -2.41302E-15 -1.59274E-15 -9.53420E-16 -5.19660E-16 + -2.58621E-16 -1.17760E-16 -4.91342E-17 -1.88074E-17 -6.61047E-18 -2.13508E-18 + -6.34060E-19 -1.73220E-19 -4.35504E-20 -1.00801E-20 + 1.33309E-21 5.75954E-21 2.29083E-20 8.38546E-20 2.82364E-19 8.74236E-19 + 2.48728E-18 6.49800E-18 1.55738E-17 3.42026E-17 6.87251E-17 1.26090E-16 + 2.10640E-16 3.19123E-16 4.35833E-16 5.31412E-16 5.68716E-16 5.16088E-16 + 3.63228E-16 1.31133E-16 -1.31133E-16 -3.63228E-16 -5.16088E-16 -5.68716E-16 + -5.31412E-16 -4.35833E-16 -3.19123E-16 -2.10640E-16 -1.26090E-16 -6.87251E-17 + -3.42026E-17 -1.55738E-17 -6.49800E-18 -2.48728E-18 -8.74236E-19 -2.82364E-19 + -8.38546E-20 -2.29083E-20 -5.75954E-21 -1.33309E-21 + 1.55701E-22 6.72696E-22 2.67562E-21 9.79395E-21 3.29792E-20 1.02108E-19 + 2.90507E-19 7.58946E-19 1.81897E-18 3.99476E-18 8.02688E-18 1.47269E-17 + 2.46021E-17 3.72725E-17 5.09039E-17 6.20672E-17 6.64242E-17 6.02775E-17 + 4.24239E-17 1.53159E-17 -1.53159E-17 -4.24239E-17 -6.02775E-17 -6.64242E-17 + -6.20672E-17 -5.09039E-17 -3.72725E-17 -2.46021E-17 -1.47269E-17 -8.02688E-18 + -3.99476E-18 -1.81897E-18 -7.58946E-19 -2.90507E-19 -1.02108E-19 -3.29792E-20 + -9.79395E-21 -2.67562E-21 -6.72696E-22 -1.55701E-22 + -1.22885E-21 -5.30918E-21 -2.11171E-20 -7.72977E-20 -2.60285E-19 -8.05876E-19 + -2.29279E-18 -5.98990E-18 -1.43560E-17 -3.15282E-17 -6.33513E-17 -1.16231E-16 + -1.94169E-16 -2.94169E-16 -4.01754E-16 -4.89859E-16 -5.24246E-16 -4.75733E-16 + -3.34826E-16 -1.20879E-16 1.20879E-16 3.34826E-16 4.75733E-16 5.24246E-16 + 4.89859E-16 4.01754E-16 2.94169E-16 1.94169E-16 1.16231E-16 6.33513E-17 + 3.15282E-17 1.43560E-17 5.98990E-18 2.29279E-18 8.05876E-19 2.60285E-19 + 7.72977E-20 2.11171E-20 5.30918E-21 1.22885E-21 + -1.04307E-20 -4.50652E-20 -1.79245E-19 -6.56115E-19 -2.20934E-18 -6.84040E-18 + -1.94616E-17 -5.08432E-17 -1.21856E-16 -2.67616E-16 -5.37735E-16 -9.86583E-16 + -1.64814E-15 -2.49696E-15 -3.41015E-15 -4.15800E-15 -4.44988E-15 -4.03810E-15 + -2.84206E-15 -1.02604E-15 1.02604E-15 2.84206E-15 4.03810E-15 4.44988E-15 + 4.15800E-15 3.41015E-15 2.49696E-15 1.64814E-15 9.86583E-16 5.37735E-16 + 2.67616E-16 1.21856E-16 5.08432E-17 1.94616E-17 6.84040E-18 2.20934E-18 + 6.56115E-19 1.79245E-19 4.50652E-20 1.04307E-20 + -7.83283E-20 -3.38413E-19 -1.34603E-18 -4.92704E-18 -1.65909E-17 -5.13675E-17 + -1.46145E-16 -3.81803E-16 -9.15068E-16 -2.00964E-15 -4.03808E-15 -7.40867E-15 + -1.23766E-14 -1.87507E-14 -2.56082E-14 -3.12241E-14 -3.34160E-14 -3.03238E-14 + -2.13422E-14 -7.70495E-15 7.70495E-15 2.13422E-14 3.03238E-14 3.34160E-14 + 3.12241E-14 2.56082E-14 1.87507E-14 1.23766E-14 7.40867E-15 4.03808E-15 + 2.00964E-15 9.15068E-16 3.81803E-16 1.46145E-16 5.13675E-17 1.65909E-17 + 4.92704E-18 1.34603E-18 3.38413E-19 7.83283E-20 + -5.19858E-19 -2.24602E-18 -8.93345E-18 -3.27003E-17 -1.10112E-16 -3.40921E-16 + -9.69953E-16 -2.53399E-15 -6.07323E-15 -1.33378E-14 -2.68004E-14 -4.91707E-14 + -8.21421E-14 -1.24447E-13 -1.69960E-13 -2.07232E-13 -2.21779E-13 -2.01256E-13 + -1.41646E-13 -5.11371E-14 5.11371E-14 1.41646E-13 2.01256E-13 2.21779E-13 + 2.07232E-13 1.69960E-13 1.24447E-13 8.21421E-14 4.91707E-14 2.68004E-14 + 1.33378E-14 6.07323E-15 2.53399E-15 9.69953E-16 3.40921E-16 1.10112E-16 + 3.27003E-17 8.93345E-18 2.24602E-18 5.19858E-19 + -3.04683E-18 -1.31637E-17 -5.23579E-17 -1.91653E-16 -6.45354E-16 -1.99810E-15 + -5.68478E-15 -1.48514E-14 -3.55945E-14 -7.81714E-14 -1.57074E-13 -2.88183E-13 + -4.81425E-13 -7.29367E-13 -9.96113E-13 -1.21456E-12 -1.29982E-12 -1.17954E-12 + -8.30172E-13 -2.99708E-13 2.99708E-13 8.30172E-13 1.17954E-12 1.29982E-12 + 1.21456E-12 9.96113E-13 7.29367E-13 4.81425E-13 2.88183E-13 1.57074E-13 + 7.81714E-14 3.55945E-14 1.48514E-14 5.68478E-15 1.99810E-15 6.45354E-16 + 1.91653E-16 5.23579E-17 1.31637E-17 3.04683E-18 + -1.57581E-17 -6.80821E-17 -2.70794E-16 -9.91224E-16 -3.33776E-15 -1.03341E-14 + -2.94015E-14 -7.68112E-14 -1.84094E-13 -4.04301E-13 -8.12382E-13 -1.49048E-12 + -2.48992E-12 -3.77227E-12 -5.15187E-12 -6.28168E-12 -6.72265E-12 -6.10055E-12 + -4.29363E-12 -1.55008E-12 1.55008E-12 4.29363E-12 6.10055E-12 6.72265E-12 + 6.28168E-12 5.15187E-12 3.77227E-12 2.48992E-12 1.49048E-12 8.12382E-13 + 4.04301E-13 1.84094E-13 7.68112E-14 2.94015E-14 1.03341E-14 3.33776E-15 + 9.91224E-16 2.70794E-16 6.80821E-17 1.57581E-17 + -7.18781E-17 -3.10546E-16 -1.23518E-15 -4.52131E-15 -1.52246E-14 -4.71375E-14 + -1.34110E-13 -3.50362E-13 -8.39714E-13 -1.84415E-12 -3.70555E-12 -6.79858E-12 + -1.13574E-11 -1.72066E-11 -2.34995E-11 -2.86529E-11 -3.06643E-11 -2.78267E-11 + -1.95847E-11 -7.07046E-12 7.07046E-12 1.95847E-11 2.78267E-11 3.06643E-11 + 2.86529E-11 2.34995E-11 1.72066E-11 1.13574E-11 6.79858E-12 3.70555E-12 + 1.84415E-12 8.39714E-13 3.50362E-13 1.34110E-13 4.71375E-14 1.52246E-14 + 4.52131E-15 1.23518E-15 3.10546E-16 7.18781E-17 + -2.88999E-16 -1.24861E-15 -4.96628E-15 -1.81788E-14 -6.12135E-14 -1.89525E-13 + -5.39216E-13 -1.40870E-12 -3.37623E-12 -7.41476E-12 -1.48989E-11 -2.73349E-11 + -4.56644E-11 -6.91824E-11 -9.44839E-11 -1.15204E-10 -1.23291E-10 -1.11882E-10 + -7.87439E-11 -2.84281E-11 2.84281E-11 7.87439E-11 1.11882E-10 1.23291E-10 + 1.15204E-10 9.44839E-11 6.91824E-11 4.56644E-11 2.73349E-11 1.48989E-11 + 7.41476E-12 3.37623E-12 1.40870E-12 5.39216E-13 1.89525E-13 6.12135E-14 + 1.81788E-14 4.96628E-15 1.24861E-15 2.88999E-16 + -1.02373E-15 -4.42297E-15 -1.75922E-14 -6.43950E-14 -2.16838E-13 -6.71358E-13 + -1.91008E-12 -4.99006E-12 -1.19597E-11 -2.62655E-11 -5.27766E-11 -9.68292E-11 + -1.61758E-10 -2.45066E-10 -3.34692E-10 -4.08091E-10 -4.36738E-10 -3.96323E-10 + -2.78936E-10 -1.00702E-10 1.00702E-10 2.78936E-10 3.96323E-10 4.36738E-10 + 4.08091E-10 3.34692E-10 2.45066E-10 1.61758E-10 9.68292E-11 5.27766E-11 + 2.62655E-11 1.19597E-11 4.99006E-12 1.91008E-12 6.71358E-13 2.16838E-13 + 6.43950E-14 1.75922E-14 4.42297E-15 1.02373E-15 + -3.19316E-15 -1.37959E-14 -5.48726E-14 -2.00858E-13 -6.76350E-13 -2.09407E-12 + -5.95781E-12 -1.55647E-11 -3.73040E-11 -8.19259E-11 -1.64618E-10 -3.02025E-10 + -5.04548E-10 -7.64398E-10 -1.04396E-09 -1.27290E-09 -1.36225E-09 -1.23619E-09 + -8.70044E-10 -3.14103E-10 3.14103E-10 8.70044E-10 1.23619E-09 1.36225E-09 + 1.27290E-09 1.04396E-09 7.64398E-10 5.04548E-10 3.02025E-10 1.64618E-10 + 8.19259E-11 3.73040E-11 1.55647E-11 5.95781E-12 2.09407E-12 6.76350E-13 + 2.00858E-13 5.48726E-14 1.37959E-14 3.19316E-15 + -8.76403E-15 -3.78645E-14 -1.50605E-13 -5.51279E-13 -1.85633E-12 -5.74743E-12 + -1.63520E-11 -4.27193E-11 -1.02386E-10 -2.24856E-10 -4.51815E-10 -8.28944E-10 + -1.38479E-09 -2.09799E-09 -2.86527E-09 -3.49362E-09 -3.73887E-09 -3.39288E-09 + -2.38794E-09 -8.62095E-10 8.62095E-10 2.38794E-09 3.39288E-09 3.73887E-09 + 3.49362E-09 2.86527E-09 2.09799E-09 1.38479E-09 8.28944E-10 4.51815E-10 + 2.24856E-10 1.02386E-10 4.27193E-11 1.63520E-11 5.74743E-12 1.85633E-12 + 5.51279E-13 1.50605E-13 3.78645E-14 8.76403E-15 + -2.11449E-14 -9.13554E-14 -3.63362E-13 -1.33006E-12 -4.47874E-12 -1.38668E-11 + -3.94522E-11 -1.03068E-10 -2.47024E-10 -5.42507E-10 -1.09009E-09 -1.99998E-09 + -3.34108E-09 -5.06179E-09 -6.91300E-09 -8.42902E-09 -9.02072E-09 -8.18597E-09 + -5.76137E-09 -2.07997E-09 2.07997E-09 5.76137E-09 8.18597E-09 9.02072E-09 + 8.42902E-09 6.91300E-09 5.06179E-09 3.34108E-09 1.99998E-09 1.09009E-09 + 5.42507E-10 2.47024E-10 1.03068E-10 3.94522E-11 1.38668E-11 4.47874E-12 + 1.33006E-12 3.63362E-13 9.13554E-14 2.11449E-14 + -4.47773E-14 -1.93458E-13 -7.69470E-13 -2.81660E-12 -9.48435E-12 -2.93648E-11 + -8.35455E-11 -2.18262E-10 -5.23109E-10 -1.14883E-09 -2.30841E-09 -4.23525E-09 + -7.07520E-09 -1.07190E-08 -1.46392E-08 -1.78496E-08 -1.91026E-08 -1.73349E-08 + -1.22005E-08 -4.40462E-09 4.40462E-09 1.22005E-08 1.73349E-08 1.91026E-08 + 1.78496E-08 1.46392E-08 1.07190E-08 7.07520E-09 4.23525E-09 2.30841E-09 + 1.14883E-09 5.23109E-10 2.18262E-10 8.35455E-11 2.93648E-11 9.48435E-12 + 2.81660E-12 7.69470E-13 1.93458E-13 4.47773E-14 + -8.30154E-14 -3.58664E-13 -1.42657E-12 -5.22187E-12 -1.75836E-11 -5.44412E-11 + -1.54890E-10 -4.04650E-10 -9.69825E-10 -2.12990E-09 -4.27972E-09 -7.85199E-09 + -1.31172E-08 -1.98727E-08 -2.71406E-08 -3.30926E-08 -3.54156E-08 -3.21383E-08 + -2.26193E-08 -8.16601E-09 8.16601E-09 2.26193E-08 3.21383E-08 3.54156E-08 + 3.30926E-08 2.71406E-08 1.98727E-08 1.31172E-08 7.85199E-09 4.27972E-09 + 2.12990E-09 9.69825E-10 4.04650E-10 1.54890E-10 5.44412E-11 1.75836E-11 + 5.22187E-12 1.42657E-12 3.58664E-13 8.30154E-14 + -1.34155E-13 -5.79610E-13 -2.30538E-12 -8.43869E-12 -2.84156E-11 -8.79785E-11 + -2.50307E-10 -6.53925E-10 -1.56726E-09 -3.44197E-09 -6.91614E-09 -1.26890E-08 + -2.11977E-08 -3.21148E-08 -4.38600E-08 -5.34785E-08 -5.72326E-08 -5.19364E-08 + -3.65534E-08 -1.31965E-08 1.31965E-08 3.65534E-08 5.19364E-08 5.72326E-08 + 5.34785E-08 4.38600E-08 3.21148E-08 2.11977E-08 1.26890E-08 6.91614E-09 + 3.44197E-09 1.56726E-09 6.53925E-10 2.50307E-10 8.79785E-11 2.84156E-11 + 8.43869E-12 2.30538E-12 5.79610E-13 1.34155E-13 + -1.87486E-13 -8.10025E-13 -3.22184E-12 -1.17934E-11 -3.97118E-11 -1.22953E-10 + -3.49813E-10 -9.13882E-10 -2.19030E-09 -4.81027E-09 -9.66554E-09 -1.77334E-08 + -2.96245E-08 -4.48816E-08 -6.12958E-08 -7.47380E-08 -7.99845E-08 -7.25829E-08 + -5.10846E-08 -1.84425E-08 1.84425E-08 5.10846E-08 7.25829E-08 7.99845E-08 + 7.47380E-08 6.12958E-08 4.48816E-08 2.96245E-08 1.77334E-08 9.66554E-09 + 4.81027E-09 2.19030E-09 9.13882E-10 3.49813E-10 1.22953E-10 3.97118E-11 + 1.17934E-11 3.22184E-12 8.10025E-13 1.87486E-13 + -2.23166E-13 -9.64176E-13 -3.83497E-12 -1.40377E-11 -4.72691E-11 -1.46351E-10 + -4.16383E-10 -1.08780E-09 -2.60713E-09 -5.72569E-09 -1.15049E-08 -2.11081E-08 + -3.52621E-08 -5.34227E-08 -7.29606E-08 -8.89609E-08 -9.52058E-08 -8.63957E-08 + -6.08062E-08 -2.19522E-08 2.19522E-08 6.08062E-08 8.63957E-08 9.52058E-08 + 8.89609E-08 7.29606E-08 5.34227E-08 3.52621E-08 2.11081E-08 1.15049E-08 + 5.72569E-09 2.60713E-09 1.08780E-09 4.16383E-10 1.46351E-10 4.72691E-11 + 1.40377E-11 3.83497E-12 9.64176E-13 2.23166E-13 + -2.18941E-13 -9.45925E-13 -3.76238E-12 -1.37719E-11 -4.63744E-11 -1.43581E-10 + -4.08501E-10 -1.06721E-09 -2.55778E-09 -5.61730E-09 -1.12871E-08 -2.07085E-08 + -3.45947E-08 -5.24115E-08 -7.15795E-08 -8.72770E-08 -9.34037E-08 -8.47603E-08 + -5.96552E-08 -2.15367E-08 2.15367E-08 5.96552E-08 8.47603E-08 9.34037E-08 + 8.72770E-08 7.15795E-08 5.24115E-08 3.45947E-08 2.07085E-08 1.12871E-08 + 5.61730E-09 2.55778E-09 1.06721E-09 4.08501E-10 1.43581E-10 4.63744E-11 + 1.37719E-11 3.76238E-12 9.45925E-13 2.18941E-13 + -1.62169E-13 -7.00644E-13 -2.78678E-12 -1.02008E-11 -3.43494E-11 -1.06350E-10 + -3.02576E-10 -7.90477E-10 -1.89454E-09 -4.16072E-09 -8.36036E-09 -1.53388E-08 + -2.56242E-08 -3.88211E-08 -5.30188E-08 -6.46458E-08 -6.91839E-08 -6.27817E-08 + -4.41864E-08 -1.59522E-08 1.59522E-08 4.41864E-08 6.27817E-08 6.91839E-08 + 6.46458E-08 5.30188E-08 3.88211E-08 2.56242E-08 1.53388E-08 8.36036E-09 + 4.16072E-09 1.89454E-09 7.90477E-10 3.02576E-10 1.06350E-10 3.43494E-11 + 1.02008E-11 2.78678E-12 7.00644E-13 1.62169E-13 + -6.00437E-14 -2.59416E-13 -1.03182E-12 -3.77690E-12 -1.27180E-11 -3.93765E-11 + -1.12030E-10 -2.92677E-10 -7.01459E-10 -1.54052E-09 -3.09545E-09 -5.67922E-09 + -9.48743E-09 -1.43736E-08 -1.96304E-08 -2.39353E-08 -2.56155E-08 -2.32451E-08 + -1.63602E-08 -5.90634E-09 5.90634E-09 1.63602E-08 2.32451E-08 2.56155E-08 + 2.39353E-08 1.96304E-08 1.43736E-08 9.48743E-09 5.67922E-09 3.09545E-09 + 1.54052E-09 7.01459E-10 2.92677E-10 1.12030E-10 3.93765E-11 1.27180E-11 + 3.77690E-12 1.03182E-12 2.59416E-13 6.00437E-14 + 6.00437E-14 2.59416E-13 1.03182E-12 3.77690E-12 1.27180E-11 3.93765E-11 + 1.12030E-10 2.92677E-10 7.01459E-10 1.54052E-09 3.09545E-09 5.67922E-09 + 9.48743E-09 1.43736E-08 1.96304E-08 2.39353E-08 2.56155E-08 2.32451E-08 + 1.63602E-08 5.90634E-09 -5.90634E-09 -1.63602E-08 -2.32451E-08 -2.56155E-08 + -2.39353E-08 -1.96304E-08 -1.43736E-08 -9.48743E-09 -5.67922E-09 -3.09545E-09 + -1.54052E-09 -7.01459E-10 -2.92677E-10 -1.12030E-10 -3.93765E-11 -1.27180E-11 + -3.77690E-12 -1.03182E-12 -2.59416E-13 -6.00437E-14 + 1.62169E-13 7.00644E-13 2.78678E-12 1.02008E-11 3.43494E-11 1.06350E-10 + 3.02576E-10 7.90477E-10 1.89454E-09 4.16072E-09 8.36036E-09 1.53388E-08 + 2.56242E-08 3.88211E-08 5.30188E-08 6.46458E-08 6.91839E-08 6.27817E-08 + 4.41864E-08 1.59522E-08 -1.59522E-08 -4.41864E-08 -6.27817E-08 -6.91839E-08 + -6.46458E-08 -5.30188E-08 -3.88211E-08 -2.56242E-08 -1.53388E-08 -8.36036E-09 + -4.16072E-09 -1.89454E-09 -7.90477E-10 -3.02576E-10 -1.06350E-10 -3.43494E-11 + -1.02008E-11 -2.78678E-12 -7.00644E-13 -1.62169E-13 + 2.18941E-13 9.45925E-13 3.76238E-12 1.37719E-11 4.63744E-11 1.43581E-10 + 4.08501E-10 1.06721E-09 2.55778E-09 5.61730E-09 1.12871E-08 2.07085E-08 + 3.45947E-08 5.24115E-08 7.15795E-08 8.72770E-08 9.34037E-08 8.47603E-08 + 5.96552E-08 2.15367E-08 -2.15367E-08 -5.96552E-08 -8.47603E-08 -9.34037E-08 + -8.72770E-08 -7.15795E-08 -5.24115E-08 -3.45947E-08 -2.07085E-08 -1.12871E-08 + -5.61730E-09 -2.55778E-09 -1.06721E-09 -4.08501E-10 -1.43581E-10 -4.63744E-11 + -1.37719E-11 -3.76238E-12 -9.45925E-13 -2.18941E-13 + 2.23166E-13 9.64176E-13 3.83497E-12 1.40377E-11 4.72691E-11 1.46351E-10 + 4.16383E-10 1.08780E-09 2.60713E-09 5.72569E-09 1.15049E-08 2.11081E-08 + 3.52621E-08 5.34227E-08 7.29606E-08 8.89609E-08 9.52058E-08 8.63957E-08 + 6.08062E-08 2.19522E-08 -2.19522E-08 -6.08062E-08 -8.63957E-08 -9.52058E-08 + -8.89609E-08 -7.29606E-08 -5.34227E-08 -3.52621E-08 -2.11081E-08 -1.15049E-08 + -5.72569E-09 -2.60713E-09 -1.08780E-09 -4.16383E-10 -1.46351E-10 -4.72691E-11 + -1.40377E-11 -3.83497E-12 -9.64176E-13 -2.23166E-13 + 1.87486E-13 8.10025E-13 3.22184E-12 1.17934E-11 3.97118E-11 1.22953E-10 + 3.49813E-10 9.13882E-10 2.19030E-09 4.81027E-09 9.66554E-09 1.77334E-08 + 2.96245E-08 4.48816E-08 6.12958E-08 7.47380E-08 7.99845E-08 7.25829E-08 + 5.10846E-08 1.84425E-08 -1.84425E-08 -5.10846E-08 -7.25829E-08 -7.99845E-08 + -7.47380E-08 -6.12958E-08 -4.48816E-08 -2.96245E-08 -1.77334E-08 -9.66554E-09 + -4.81027E-09 -2.19030E-09 -9.13882E-10 -3.49813E-10 -1.22953E-10 -3.97118E-11 + -1.17934E-11 -3.22184E-12 -8.10025E-13 -1.87486E-13 + 1.34155E-13 5.79610E-13 2.30538E-12 8.43869E-12 2.84156E-11 8.79785E-11 + 2.50307E-10 6.53925E-10 1.56726E-09 3.44197E-09 6.91614E-09 1.26890E-08 + 2.11977E-08 3.21148E-08 4.38600E-08 5.34785E-08 5.72326E-08 5.19364E-08 + 3.65534E-08 1.31965E-08 -1.31965E-08 -3.65534E-08 -5.19364E-08 -5.72326E-08 + -5.34785E-08 -4.38600E-08 -3.21148E-08 -2.11977E-08 -1.26890E-08 -6.91614E-09 + -3.44197E-09 -1.56726E-09 -6.53925E-10 -2.50307E-10 -8.79785E-11 -2.84156E-11 + -8.43869E-12 -2.30538E-12 -5.79610E-13 -1.34155E-13 + 8.30154E-14 3.58664E-13 1.42657E-12 5.22187E-12 1.75836E-11 5.44412E-11 + 1.54890E-10 4.04650E-10 9.69825E-10 2.12990E-09 4.27972E-09 7.85199E-09 + 1.31172E-08 1.98727E-08 2.71406E-08 3.30926E-08 3.54156E-08 3.21383E-08 + 2.26193E-08 8.16601E-09 -8.16601E-09 -2.26193E-08 -3.21383E-08 -3.54156E-08 + -3.30926E-08 -2.71406E-08 -1.98727E-08 -1.31172E-08 -7.85199E-09 -4.27972E-09 + -2.12990E-09 -9.69825E-10 -4.04650E-10 -1.54890E-10 -5.44412E-11 -1.75836E-11 + -5.22187E-12 -1.42657E-12 -3.58664E-13 -8.30154E-14 + 4.47773E-14 1.93458E-13 7.69470E-13 2.81660E-12 9.48435E-12 2.93648E-11 + 8.35455E-11 2.18262E-10 5.23109E-10 1.14883E-09 2.30841E-09 4.23525E-09 + 7.07520E-09 1.07190E-08 1.46392E-08 1.78496E-08 1.91026E-08 1.73349E-08 + 1.22005E-08 4.40462E-09 -4.40462E-09 -1.22005E-08 -1.73349E-08 -1.91026E-08 + -1.78496E-08 -1.46392E-08 -1.07190E-08 -7.07520E-09 -4.23525E-09 -2.30841E-09 + -1.14883E-09 -5.23109E-10 -2.18262E-10 -8.35455E-11 -2.93648E-11 -9.48435E-12 + -2.81660E-12 -7.69470E-13 -1.93458E-13 -4.47773E-14 + 2.11449E-14 9.13554E-14 3.63362E-13 1.33006E-12 4.47874E-12 1.38668E-11 + 3.94522E-11 1.03068E-10 2.47024E-10 5.42507E-10 1.09009E-09 1.99998E-09 + 3.34108E-09 5.06179E-09 6.91300E-09 8.42902E-09 9.02072E-09 8.18597E-09 + 5.76137E-09 2.07997E-09 -2.07997E-09 -5.76137E-09 -8.18597E-09 -9.02072E-09 + -8.42902E-09 -6.91300E-09 -5.06179E-09 -3.34108E-09 -1.99998E-09 -1.09009E-09 + -5.42507E-10 -2.47024E-10 -1.03068E-10 -3.94522E-11 -1.38668E-11 -4.47874E-12 + -1.33006E-12 -3.63362E-13 -9.13554E-14 -2.11449E-14 + 8.76403E-15 3.78645E-14 1.50605E-13 5.51279E-13 1.85633E-12 5.74743E-12 + 1.63520E-11 4.27193E-11 1.02386E-10 2.24856E-10 4.51815E-10 8.28944E-10 + 1.38479E-09 2.09799E-09 2.86527E-09 3.49362E-09 3.73887E-09 3.39288E-09 + 2.38794E-09 8.62095E-10 -8.62095E-10 -2.38794E-09 -3.39288E-09 -3.73887E-09 + -3.49362E-09 -2.86527E-09 -2.09799E-09 -1.38479E-09 -8.28944E-10 -4.51815E-10 + -2.24856E-10 -1.02386E-10 -4.27193E-11 -1.63520E-11 -5.74743E-12 -1.85633E-12 + -5.51279E-13 -1.50605E-13 -3.78645E-14 -8.76403E-15 + 3.19316E-15 1.37959E-14 5.48726E-14 2.00858E-13 6.76350E-13 2.09407E-12 + 5.95781E-12 1.55647E-11 3.73040E-11 8.19259E-11 1.64618E-10 3.02025E-10 + 5.04548E-10 7.64398E-10 1.04396E-09 1.27290E-09 1.36225E-09 1.23619E-09 + 8.70044E-10 3.14103E-10 -3.14103E-10 -8.70044E-10 -1.23619E-09 -1.36225E-09 + -1.27290E-09 -1.04396E-09 -7.64398E-10 -5.04548E-10 -3.02025E-10 -1.64618E-10 + -8.19259E-11 -3.73040E-11 -1.55647E-11 -5.95781E-12 -2.09407E-12 -6.76350E-13 + -2.00858E-13 -5.48726E-14 -1.37959E-14 -3.19316E-15 + 1.02373E-15 4.42297E-15 1.75922E-14 6.43950E-14 2.16838E-13 6.71358E-13 + 1.91008E-12 4.99006E-12 1.19597E-11 2.62655E-11 5.27766E-11 9.68292E-11 + 1.61758E-10 2.45066E-10 3.34692E-10 4.08091E-10 4.36738E-10 3.96323E-10 + 2.78936E-10 1.00702E-10 -1.00702E-10 -2.78936E-10 -3.96323E-10 -4.36738E-10 + -4.08091E-10 -3.34692E-10 -2.45066E-10 -1.61758E-10 -9.68292E-11 -5.27766E-11 + -2.62655E-11 -1.19597E-11 -4.99006E-12 -1.91008E-12 -6.71358E-13 -2.16838E-13 + -6.43950E-14 -1.75922E-14 -4.42297E-15 -1.02373E-15 + 2.88999E-16 1.24861E-15 4.96628E-15 1.81788E-14 6.12135E-14 1.89525E-13 + 5.39216E-13 1.40870E-12 3.37623E-12 7.41476E-12 1.48989E-11 2.73349E-11 + 4.56644E-11 6.91824E-11 9.44839E-11 1.15204E-10 1.23291E-10 1.11882E-10 + 7.87439E-11 2.84281E-11 -2.84281E-11 -7.87439E-11 -1.11882E-10 -1.23291E-10 + -1.15204E-10 -9.44839E-11 -6.91824E-11 -4.56644E-11 -2.73349E-11 -1.48989E-11 + -7.41476E-12 -3.37623E-12 -1.40870E-12 -5.39216E-13 -1.89525E-13 -6.12135E-14 + -1.81788E-14 -4.96628E-15 -1.24861E-15 -2.88999E-16 + 7.18781E-17 3.10546E-16 1.23518E-15 4.52131E-15 1.52246E-14 4.71375E-14 + 1.34110E-13 3.50362E-13 8.39714E-13 1.84415E-12 3.70555E-12 6.79858E-12 + 1.13574E-11 1.72066E-11 2.34995E-11 2.86529E-11 3.06643E-11 2.78267E-11 + 1.95847E-11 7.07046E-12 -7.07046E-12 -1.95847E-11 -2.78267E-11 -3.06643E-11 + -2.86529E-11 -2.34995E-11 -1.72066E-11 -1.13574E-11 -6.79858E-12 -3.70555E-12 + -1.84415E-12 -8.39714E-13 -3.50362E-13 -1.34110E-13 -4.71375E-14 -1.52246E-14 + -4.52131E-15 -1.23518E-15 -3.10546E-16 -7.18781E-17 + 1.57581E-17 6.80821E-17 2.70794E-16 9.91224E-16 3.33776E-15 1.03341E-14 + 2.94015E-14 7.68112E-14 1.84094E-13 4.04301E-13 8.12382E-13 1.49048E-12 + 2.48992E-12 3.77227E-12 5.15187E-12 6.28168E-12 6.72265E-12 6.10055E-12 + 4.29363E-12 1.55008E-12 -1.55008E-12 -4.29363E-12 -6.10055E-12 -6.72265E-12 + -6.28168E-12 -5.15187E-12 -3.77227E-12 -2.48992E-12 -1.49048E-12 -8.12382E-13 + -4.04301E-13 -1.84094E-13 -7.68112E-14 -2.94015E-14 -1.03341E-14 -3.33776E-15 + -9.91224E-16 -2.70794E-16 -6.80821E-17 -1.57581E-17 + 3.04683E-18 1.31637E-17 5.23579E-17 1.91653E-16 6.45354E-16 1.99810E-15 + 5.68478E-15 1.48514E-14 3.55945E-14 7.81714E-14 1.57074E-13 2.88183E-13 + 4.81425E-13 7.29367E-13 9.96113E-13 1.21456E-12 1.29982E-12 1.17954E-12 + 8.30172E-13 2.99708E-13 -2.99708E-13 -8.30172E-13 -1.17954E-12 -1.29982E-12 + -1.21456E-12 -9.96113E-13 -7.29367E-13 -4.81425E-13 -2.88183E-13 -1.57074E-13 + -7.81714E-14 -3.55945E-14 -1.48514E-14 -5.68478E-15 -1.99810E-15 -6.45354E-16 + -1.91653E-16 -5.23579E-17 -1.31637E-17 -3.04683E-18 + 5.19858E-19 2.24602E-18 8.93345E-18 3.27003E-17 1.10112E-16 3.40921E-16 + 9.69953E-16 2.53399E-15 6.07323E-15 1.33378E-14 2.68004E-14 4.91707E-14 + 8.21421E-14 1.24447E-13 1.69960E-13 2.07232E-13 2.21779E-13 2.01256E-13 + 1.41646E-13 5.11371E-14 -5.11371E-14 -1.41646E-13 -2.01256E-13 -2.21779E-13 + -2.07232E-13 -1.69960E-13 -1.24447E-13 -8.21421E-14 -4.91707E-14 -2.68004E-14 + -1.33378E-14 -6.07323E-15 -2.53399E-15 -9.69953E-16 -3.40921E-16 -1.10112E-16 + -3.27003E-17 -8.93345E-18 -2.24602E-18 -5.19858E-19 + 7.83283E-20 3.38413E-19 1.34603E-18 4.92704E-18 1.65909E-17 5.13675E-17 + 1.46145E-16 3.81803E-16 9.15068E-16 2.00964E-15 4.03808E-15 7.40867E-15 + 1.23766E-14 1.87507E-14 2.56082E-14 3.12241E-14 3.34160E-14 3.03238E-14 + 2.13422E-14 7.70495E-15 -7.70495E-15 -2.13422E-14 -3.03238E-14 -3.34160E-14 + -3.12241E-14 -2.56082E-14 -1.87507E-14 -1.23766E-14 -7.40867E-15 -4.03808E-15 + -2.00964E-15 -9.15068E-16 -3.81803E-16 -1.46145E-16 -5.13675E-17 -1.65909E-17 + -4.92704E-18 -1.34603E-18 -3.38413E-19 -7.83283E-20 + 1.04307E-20 4.50652E-20 1.79245E-19 6.56115E-19 2.20934E-18 6.84040E-18 + 1.94616E-17 5.08432E-17 1.21856E-16 2.67616E-16 5.37735E-16 9.86583E-16 + 1.64814E-15 2.49696E-15 3.41015E-15 4.15800E-15 4.44988E-15 4.03810E-15 + 2.84206E-15 1.02604E-15 -1.02604E-15 -2.84206E-15 -4.03810E-15 -4.44988E-15 + -4.15800E-15 -3.41015E-15 -2.49696E-15 -1.64814E-15 -9.86583E-16 -5.37735E-16 + -2.67616E-16 -1.21856E-16 -5.08432E-17 -1.94616E-17 -6.84040E-18 -2.20934E-18 + -6.56115E-19 -1.79245E-19 -4.50652E-20 -1.04307E-20 + 1.22885E-21 5.30918E-21 2.11171E-20 7.72977E-20 2.60285E-19 8.05876E-19 + 2.29279E-18 5.98990E-18 1.43560E-17 3.15282E-17 6.33513E-17 1.16231E-16 + 1.94169E-16 2.94169E-16 4.01754E-16 4.89859E-16 5.24246E-16 4.75733E-16 + 3.34826E-16 1.20879E-16 -1.20879E-16 -3.34826E-16 -4.75733E-16 -5.24246E-16 + -4.89859E-16 -4.01754E-16 -2.94169E-16 -1.94169E-16 -1.16231E-16 -6.33513E-17 + -3.15282E-17 -1.43560E-17 -5.98990E-18 -2.29279E-18 -8.05876E-19 -2.60285E-19 + -7.72977E-20 -2.11171E-20 -5.30918E-21 -1.22885E-21 + -8.47410E-21 -3.66119E-20 -1.45622E-19 -5.33042E-19 -1.79492E-18 -5.55729E-18 + -1.58110E-17 -4.13061E-17 -9.89984E-17 -2.17417E-16 -4.36868E-16 -8.01521E-16 + -1.33898E-15 -2.02858E-15 -2.77048E-15 -3.37805E-15 -3.61518E-15 -3.28064E-15 + -2.30895E-15 -8.33575E-16 8.33575E-16 2.30895E-15 3.28064E-15 3.61518E-15 + 3.37805E-15 2.77048E-15 2.02858E-15 1.33898E-15 8.01521E-16 4.36868E-16 + 2.17417E-16 9.89984E-17 4.13061E-17 1.58110E-17 5.55729E-18 1.79492E-18 + 5.33042E-19 1.45622E-19 3.66119E-20 8.47410E-21 + -7.10012E-20 -3.06757E-19 -1.22011E-18 -4.46615E-18 -1.50389E-17 -4.65623E-17 + -1.32474E-16 -3.46088E-16 -8.29469E-16 -1.82165E-15 -3.66034E-15 -6.71563E-15 + -1.12188E-14 -1.69967E-14 -2.32127E-14 -2.83033E-14 -3.02902E-14 -2.74872E-14 + -1.93458E-14 -6.98420E-15 6.98420E-15 1.93458E-14 2.74872E-14 3.02902E-14 + 2.83033E-14 2.32127E-14 1.69967E-14 1.12188E-14 6.71563E-15 3.66034E-15 + 1.82165E-15 8.29469E-16 3.46088E-16 1.32474E-16 4.65623E-17 1.50389E-17 + 4.46615E-18 1.22011E-18 3.06757E-19 7.10012E-20 + -5.27570E-19 -2.27934E-18 -9.06598E-18 -3.31855E-17 -1.11746E-16 -3.45979E-16 + -9.84342E-16 -2.57158E-15 -6.16332E-15 -1.35357E-14 -2.71980E-14 -4.99001E-14 + -8.33607E-14 -1.26293E-13 -1.72481E-13 -2.10306E-13 -2.25069E-13 -2.04242E-13 + -1.43748E-13 -5.18957E-14 5.18957E-14 1.43748E-13 2.04242E-13 2.25069E-13 + 2.10306E-13 1.72481E-13 1.26293E-13 8.33607E-14 4.99001E-14 2.71980E-14 + 1.35357E-14 6.16332E-15 2.57158E-15 9.84342E-16 3.45979E-16 1.11746E-16 + 3.31855E-17 9.06598E-18 2.27934E-18 5.27570E-19 + -3.47177E-18 -1.49996E-17 -5.96603E-17 -2.18383E-16 -7.35362E-16 -2.27678E-15 + -6.47764E-15 -1.69228E-14 -4.05588E-14 -8.90740E-14 -1.78981E-13 -3.28377E-13 + -5.48570E-13 -8.31093E-13 -1.13504E-12 -1.38396E-12 -1.48111E-12 -1.34405E-12 + -9.45956E-13 -3.41509E-13 3.41509E-13 9.45956E-13 1.34405E-12 1.48111E-12 + 1.38396E-12 1.13504E-12 8.31093E-13 5.48570E-13 3.28377E-13 1.78981E-13 + 8.90740E-14 4.05588E-14 1.69228E-14 6.47764E-15 2.27678E-15 7.35362E-16 + 2.18383E-16 5.96603E-17 1.49996E-17 3.47177E-18 + -2.02100E-17 -8.73162E-17 -3.47297E-16 -1.27126E-15 -4.28072E-15 -1.32537E-14 + -3.77079E-14 -9.85115E-14 -2.36103E-13 -5.18521E-13 -1.04189E-12 -1.91156E-12 + -3.19336E-12 -4.83799E-12 -6.60735E-12 -8.05635E-12 -8.62189E-12 -7.82404E-12 + -5.50664E-12 -1.98801E-12 1.98801E-12 5.50664E-12 7.82404E-12 8.62189E-12 + 8.05635E-12 6.60735E-12 4.83799E-12 3.19336E-12 1.91156E-12 1.04189E-12 + 5.18521E-13 2.36103E-13 9.85115E-14 3.77079E-14 1.32537E-14 4.28072E-15 + 1.27126E-15 3.47297E-16 8.73162E-17 2.02100E-17 + -1.03965E-16 -4.49177E-16 -1.78658E-15 -6.53968E-15 -2.20211E-14 -6.81802E-14 + -1.93979E-13 -5.06768E-13 -1.21457E-12 -2.66741E-12 -5.35976E-12 -9.83355E-12 + -1.64275E-11 -2.48879E-11 -3.39899E-11 -4.14439E-11 -4.43532E-11 -4.02489E-11 + -2.83276E-11 -1.02268E-11 1.02268E-11 2.83276E-11 4.02489E-11 4.43532E-11 + 4.14439E-11 3.39899E-11 2.48879E-11 1.64275E-11 9.83355E-12 5.35976E-12 + 2.66741E-12 1.21457E-12 5.06768E-13 1.93979E-13 6.81802E-14 2.20211E-14 + 6.53968E-15 1.78658E-15 4.49177E-16 1.03965E-16 + -4.72220E-16 -2.04020E-15 -8.11482E-15 -2.97038E-14 -1.00022E-13 -3.09680E-13 + -8.81070E-13 -2.30179E-12 -5.51670E-12 -1.21156E-11 -2.43445E-11 -4.46648E-11 + -7.46149E-11 -1.13043E-10 -1.54385E-10 -1.88242E-10 -2.01456E-10 -1.82814E-10 + -1.28666E-10 -4.64511E-11 4.64511E-11 1.28666E-10 1.82814E-10 2.01456E-10 + 1.88242E-10 1.54385E-10 1.13043E-10 7.46149E-11 4.46648E-11 2.43445E-11 + 1.21156E-11 5.51670E-12 2.30179E-12 8.81070E-13 3.09680E-13 1.00022E-13 + 2.97038E-14 8.11482E-15 2.04020E-15 4.72220E-16 + -1.89237E-15 -8.17587E-15 -3.25192E-14 -1.19034E-13 -4.00826E-13 -1.24101E-12 + -3.53078E-12 -9.22414E-12 -2.21075E-11 -4.85518E-11 -9.75577E-11 -1.78989E-10 + -2.99010E-10 -4.53006E-10 -6.18680E-10 -7.54357E-10 -8.07312E-10 -7.32605E-10 + -5.15615E-10 -1.86147E-10 1.86147E-10 5.15615E-10 7.32605E-10 8.07312E-10 + 7.54357E-10 6.18680E-10 4.53006E-10 2.99010E-10 1.78989E-10 9.75577E-11 + 4.85518E-11 2.21075E-11 9.22414E-12 3.53078E-12 1.24101E-12 4.00826E-13 + 1.19034E-13 3.25192E-14 8.17587E-15 1.89237E-15 + -6.68605E-15 -2.88867E-14 -1.14896E-13 -4.20569E-13 -1.41619E-12 -4.38469E-12 + -1.24749E-11 -3.25904E-11 -7.81096E-11 -1.71542E-10 -3.44688E-10 -6.32399E-10 + -1.05645E-09 -1.60055E-09 -2.18590E-09 -2.66527E-09 -2.85237E-09 -2.58842E-09 + -1.82176E-09 -6.57690E-10 6.57690E-10 1.82176E-09 2.58842E-09 2.85237E-09 + 2.66527E-09 2.18590E-09 1.60055E-09 1.05645E-09 6.32399E-10 3.44688E-10 + 1.71542E-10 7.81096E-11 3.25904E-11 1.24749E-11 4.38469E-12 1.41619E-12 + 4.20569E-13 1.14896E-13 2.88867E-14 6.68605E-15 + -2.08129E-14 -8.99209E-14 -3.57657E-13 -1.30918E-12 -4.40841E-12 -1.36490E-11 + -3.88327E-11 -1.01450E-10 -2.43146E-10 -5.33989E-10 -1.07297E-09 -1.96858E-09 + -3.28862E-09 -4.98231E-09 -6.80445E-09 -8.29667E-09 -8.87908E-09 -8.05743E-09 + -5.67090E-09 -2.04731E-09 2.04731E-09 5.67090E-09 8.05743E-09 8.87908E-09 + 8.29667E-09 6.80445E-09 4.98231E-09 3.28862E-09 1.96858E-09 1.07297E-09 + 5.33989E-10 2.43146E-10 1.01450E-10 3.88327E-11 1.36490E-11 4.40841E-12 + 1.30918E-12 3.57657E-13 8.99209E-14 2.08129E-14 + -5.70344E-14 -2.46414E-13 -9.80103E-13 -3.58761E-12 -1.20806E-11 -3.74030E-11 + -1.06415E-10 -2.78008E-10 -6.66303E-10 -1.46331E-09 -2.94031E-09 -5.39459E-09 + -9.01194E-09 -1.36532E-08 -1.86465E-08 -2.27357E-08 -2.43317E-08 -2.20801E-08 + -1.55402E-08 -5.61033E-09 5.61033E-09 1.55402E-08 2.20801E-08 2.43317E-08 + 2.27357E-08 1.86465E-08 1.36532E-08 9.01194E-09 5.39459E-09 2.94031E-09 + 1.46331E-09 6.66303E-10 2.78008E-10 1.06415E-10 3.74030E-11 1.20806E-11 + 3.58761E-12 9.80103E-13 2.46414E-13 5.70344E-14 + -1.37440E-13 -5.93804E-13 -2.36183E-12 -8.64534E-12 -2.91115E-11 -9.01331E-11 + -2.56437E-10 -6.69939E-10 -1.60564E-09 -3.52626E-09 -7.08551E-09 -1.29998E-08 + -2.17168E-08 -3.29013E-08 -4.49341E-08 -5.47881E-08 -5.86342E-08 -5.32083E-08 + -3.74485E-08 -1.35197E-08 1.35197E-08 3.74485E-08 5.32083E-08 5.86342E-08 + 5.47881E-08 4.49341E-08 3.29013E-08 2.17168E-08 1.29998E-08 7.08551E-09 + 3.52626E-09 1.60564E-09 6.69939E-10 2.56437E-10 9.01331E-11 2.91115E-11 + 8.64534E-12 2.36183E-12 5.93804E-13 1.37440E-13 + -2.90779E-13 -1.25630E-12 -4.99687E-12 -1.82907E-11 -6.15905E-11 -1.90692E-10 + -5.42537E-10 -1.41737E-09 -3.39702E-09 -7.46043E-09 -1.49906E-08 -2.75033E-08 + -4.59457E-08 -6.96085E-08 -9.50658E-08 -1.15914E-07 -1.24051E-07 -1.12571E-07 + -7.92289E-08 -2.86032E-08 2.86032E-08 7.92289E-08 1.12571E-07 1.24051E-07 + 1.15914E-07 9.50658E-08 6.96085E-08 4.59457E-08 2.75033E-08 1.49906E-08 + 7.46043E-09 3.39702E-09 1.41737E-09 5.42537E-10 1.90692E-10 6.15905E-11 + 1.82907E-11 4.99687E-12 1.25630E-12 2.90779E-13 + -5.38711E-13 -2.32747E-12 -9.25742E-12 -3.38862E-11 -1.14105E-10 -3.53285E-10 + -1.00513E-09 -2.62589E-09 -6.29347E-09 -1.38215E-08 -2.77723E-08 -5.09539E-08 + -8.51210E-08 -1.28960E-07 -1.76123E-07 -2.14747E-07 -2.29822E-07 -2.08555E-07 + -1.46783E-07 -5.29916E-08 5.29916E-08 1.46783E-07 2.08555E-07 2.29822E-07 + 2.14747E-07 1.76123E-07 1.28960E-07 8.51210E-08 5.09539E-08 2.77723E-08 + 1.38215E-08 6.29347E-09 2.62589E-09 1.00513E-09 3.53285E-10 1.14105E-10 + 3.38862E-11 9.25742E-12 2.32747E-12 5.38711E-13 + -8.70101E-13 -3.75923E-12 -1.49522E-11 -5.47315E-11 -1.84298E-10 -5.70610E-10 + -1.62344E-09 -4.24122E-09 -1.01649E-08 -2.23239E-08 -4.48566E-08 -8.22984E-08 + -1.37484E-07 -2.08290E-07 -2.84466E-07 -3.46850E-07 -3.71198E-07 -3.36848E-07 + -2.37077E-07 -8.55896E-08 8.55896E-08 2.37077E-07 3.36848E-07 3.71198E-07 + 3.46850E-07 2.84466E-07 2.08290E-07 1.37484E-07 8.22984E-08 4.48566E-08 + 2.23239E-08 1.01649E-08 4.24122E-09 1.62344E-09 5.70610E-10 1.84298E-10 + 5.47315E-11 1.49522E-11 3.75923E-12 8.70101E-13 + -1.21551E-12 -5.25153E-12 -2.08877E-11 -7.64583E-11 -2.57458E-10 -7.97125E-10 + -2.26789E-09 -5.92485E-09 -1.42001E-08 -3.11858E-08 -6.26633E-08 -1.14968E-07 + -1.92060E-07 -2.90975E-07 -3.97391E-07 -4.84539E-07 -5.18553E-07 -4.70567E-07 + -3.31190E-07 -1.19566E-07 1.19566E-07 3.31190E-07 4.70567E-07 5.18553E-07 + 4.84539E-07 3.97391E-07 2.90975E-07 1.92060E-07 1.14968E-07 6.26633E-08 + 3.11858E-08 1.42001E-08 5.92485E-09 2.26789E-09 7.97125E-10 2.57458E-10 + 7.64583E-11 2.08877E-11 5.25153E-12 1.21551E-12 + -1.44639E-12 -6.24907E-12 -2.48554E-11 -9.09817E-11 -3.06363E-10 -9.48540E-10 + -2.69868E-09 -7.05029E-09 -1.68974E-08 -3.71096E-08 -7.45663E-08 -1.36807E-07 + -2.28543E-07 -3.46246E-07 -4.72876E-07 -5.76578E-07 -6.17053E-07 -5.59952E-07 + -3.94100E-07 -1.42278E-07 1.42278E-07 3.94100E-07 5.59952E-07 6.17053E-07 + 5.76578E-07 4.72876E-07 3.46246E-07 2.28543E-07 1.36807E-07 7.45663E-08 + 3.71096E-08 1.68974E-08 7.05029E-09 2.69868E-09 9.48540E-10 3.06363E-10 + 9.09817E-11 2.48554E-11 6.24907E-12 1.44639E-12 + -1.41872E-12 -6.12952E-12 -2.43799E-11 -8.92411E-11 -3.00502E-10 -9.30394E-10 + -2.64706E-09 -6.91541E-09 -1.65742E-08 -3.63997E-08 -7.31398E-08 -1.34190E-07 + -2.24171E-07 -3.39622E-07 -4.63830E-07 -5.65548E-07 -6.05248E-07 -5.49240E-07 + -3.86561E-07 -1.39556E-07 1.39556E-07 3.86561E-07 5.49240E-07 6.05248E-07 + 5.65548E-07 4.63830E-07 3.39622E-07 2.24171E-07 1.34190E-07 7.31398E-08 + 3.63997E-08 1.65742E-08 6.91541E-09 2.64706E-09 9.30394E-10 3.00502E-10 + 8.92411E-11 2.43799E-11 6.12952E-12 1.41872E-12 + -1.05071E-12 -4.53953E-12 -1.80558E-11 -6.60921E-11 -2.22552E-10 -6.89051E-10 + -1.96041E-09 -5.12156E-09 -1.22749E-08 -2.69577E-08 -5.41674E-08 -9.93810E-08 + -1.66021E-07 -2.51525E-07 -3.43513E-07 -4.18845E-07 -4.48248E-07 -4.06768E-07 + -2.86287E-07 -1.03355E-07 1.03355E-07 2.86287E-07 4.06768E-07 4.48248E-07 + 4.18845E-07 3.43513E-07 2.51525E-07 1.66021E-07 9.93810E-08 5.41674E-08 + 2.69577E-08 1.22749E-08 5.12156E-09 1.96041E-09 6.89051E-10 2.22552E-10 + 6.60921E-11 1.80558E-11 4.53953E-12 1.05071E-12 + -3.89003E-13 -1.68067E-12 -6.68479E-12 -2.44693E-11 -8.23955E-11 -2.55107E-10 + -7.25804E-10 -1.89616E-09 -4.54452E-09 -9.98053E-09 -2.00544E-08 -3.67938E-08 + -6.14659E-08 -9.31219E-08 -1.27179E-07 -1.55069E-07 -1.65955E-07 -1.50598E-07 + -1.05992E-07 -3.82652E-08 3.82652E-08 1.05992E-07 1.50598E-07 1.65955E-07 + 1.55069E-07 1.27179E-07 9.31219E-08 6.14659E-08 3.67938E-08 2.00544E-08 + 9.98053E-09 4.54452E-09 1.89616E-09 7.25804E-10 2.55107E-10 8.23955E-11 + 2.44693E-11 6.68479E-12 1.68067E-12 3.89003E-13 + 3.89003E-13 1.68067E-12 6.68479E-12 2.44693E-11 8.23955E-11 2.55107E-10 + 7.25804E-10 1.89616E-09 4.54452E-09 9.98053E-09 2.00544E-08 3.67938E-08 + 6.14659E-08 9.31219E-08 1.27179E-07 1.55069E-07 1.65955E-07 1.50598E-07 + 1.05992E-07 3.82652E-08 -3.82652E-08 -1.05992E-07 -1.50598E-07 -1.65955E-07 + -1.55069E-07 -1.27179E-07 -9.31219E-08 -6.14659E-08 -3.67938E-08 -2.00544E-08 + -9.98053E-09 -4.54452E-09 -1.89616E-09 -7.25804E-10 -2.55107E-10 -8.23955E-11 + -2.44693E-11 -6.68479E-12 -1.68067E-12 -3.89003E-13 + 1.05071E-12 4.53953E-12 1.80558E-11 6.60921E-11 2.22552E-10 6.89051E-10 + 1.96041E-09 5.12156E-09 1.22749E-08 2.69577E-08 5.41674E-08 9.93810E-08 + 1.66021E-07 2.51525E-07 3.43513E-07 4.18845E-07 4.48248E-07 4.06768E-07 + 2.86287E-07 1.03355E-07 -1.03355E-07 -2.86287E-07 -4.06768E-07 -4.48248E-07 + -4.18845E-07 -3.43513E-07 -2.51525E-07 -1.66021E-07 -9.93810E-08 -5.41674E-08 + -2.69577E-08 -1.22749E-08 -5.12156E-09 -1.96041E-09 -6.89051E-10 -2.22552E-10 + -6.60921E-11 -1.80558E-11 -4.53953E-12 -1.05071E-12 + 1.41872E-12 6.12952E-12 2.43799E-11 8.92411E-11 3.00502E-10 9.30394E-10 + 2.64706E-09 6.91541E-09 1.65742E-08 3.63997E-08 7.31398E-08 1.34190E-07 + 2.24171E-07 3.39622E-07 4.63830E-07 5.65548E-07 6.05248E-07 5.49240E-07 + 3.86561E-07 1.39556E-07 -1.39556E-07 -3.86561E-07 -5.49240E-07 -6.05248E-07 + -5.65548E-07 -4.63830E-07 -3.39622E-07 -2.24171E-07 -1.34190E-07 -7.31398E-08 + -3.63997E-08 -1.65742E-08 -6.91541E-09 -2.64706E-09 -9.30394E-10 -3.00502E-10 + -8.92411E-11 -2.43799E-11 -6.12952E-12 -1.41872E-12 + 1.44639E-12 6.24907E-12 2.48554E-11 9.09817E-11 3.06363E-10 9.48540E-10 + 2.69868E-09 7.05029E-09 1.68974E-08 3.71096E-08 7.45663E-08 1.36807E-07 + 2.28543E-07 3.46246E-07 4.72876E-07 5.76578E-07 6.17053E-07 5.59952E-07 + 3.94100E-07 1.42278E-07 -1.42278E-07 -3.94100E-07 -5.59952E-07 -6.17053E-07 + -5.76578E-07 -4.72876E-07 -3.46246E-07 -2.28543E-07 -1.36807E-07 -7.45663E-08 + -3.71096E-08 -1.68974E-08 -7.05029E-09 -2.69868E-09 -9.48540E-10 -3.06363E-10 + -9.09817E-11 -2.48554E-11 -6.24907E-12 -1.44639E-12 + 1.21551E-12 5.25153E-12 2.08877E-11 7.64583E-11 2.57458E-10 7.97125E-10 + 2.26789E-09 5.92485E-09 1.42001E-08 3.11858E-08 6.26633E-08 1.14968E-07 + 1.92060E-07 2.90975E-07 3.97391E-07 4.84539E-07 5.18553E-07 4.70567E-07 + 3.31190E-07 1.19566E-07 -1.19566E-07 -3.31190E-07 -4.70567E-07 -5.18553E-07 + -4.84539E-07 -3.97391E-07 -2.90975E-07 -1.92060E-07 -1.14968E-07 -6.26633E-08 + -3.11858E-08 -1.42001E-08 -5.92485E-09 -2.26789E-09 -7.97125E-10 -2.57458E-10 + -7.64583E-11 -2.08877E-11 -5.25153E-12 -1.21551E-12 + 8.70101E-13 3.75923E-12 1.49522E-11 5.47315E-11 1.84298E-10 5.70610E-10 + 1.62344E-09 4.24122E-09 1.01649E-08 2.23239E-08 4.48566E-08 8.22984E-08 + 1.37484E-07 2.08290E-07 2.84466E-07 3.46850E-07 3.71198E-07 3.36848E-07 + 2.37077E-07 8.55896E-08 -8.55896E-08 -2.37077E-07 -3.36848E-07 -3.71198E-07 + -3.46850E-07 -2.84466E-07 -2.08290E-07 -1.37484E-07 -8.22984E-08 -4.48566E-08 + -2.23239E-08 -1.01649E-08 -4.24122E-09 -1.62344E-09 -5.70610E-10 -1.84298E-10 + -5.47315E-11 -1.49522E-11 -3.75923E-12 -8.70101E-13 + 5.38711E-13 2.32747E-12 9.25742E-12 3.38862E-11 1.14105E-10 3.53285E-10 + 1.00513E-09 2.62589E-09 6.29347E-09 1.38215E-08 2.77723E-08 5.09539E-08 + 8.51210E-08 1.28960E-07 1.76123E-07 2.14747E-07 2.29822E-07 2.08555E-07 + 1.46783E-07 5.29916E-08 -5.29916E-08 -1.46783E-07 -2.08555E-07 -2.29822E-07 + -2.14747E-07 -1.76123E-07 -1.28960E-07 -8.51210E-08 -5.09539E-08 -2.77723E-08 + -1.38215E-08 -6.29347E-09 -2.62589E-09 -1.00513E-09 -3.53285E-10 -1.14105E-10 + -3.38862E-11 -9.25742E-12 -2.32747E-12 -5.38711E-13 + 2.90779E-13 1.25630E-12 4.99687E-12 1.82907E-11 6.15905E-11 1.90692E-10 + 5.42537E-10 1.41737E-09 3.39702E-09 7.46043E-09 1.49906E-08 2.75033E-08 + 4.59457E-08 6.96085E-08 9.50658E-08 1.15914E-07 1.24051E-07 1.12571E-07 + 7.92289E-08 2.86032E-08 -2.86032E-08 -7.92289E-08 -1.12571E-07 -1.24051E-07 + -1.15914E-07 -9.50658E-08 -6.96085E-08 -4.59457E-08 -2.75033E-08 -1.49906E-08 + -7.46043E-09 -3.39702E-09 -1.41737E-09 -5.42537E-10 -1.90692E-10 -6.15905E-11 + -1.82907E-11 -4.99687E-12 -1.25630E-12 -2.90779E-13 + 1.37440E-13 5.93804E-13 2.36183E-12 8.64534E-12 2.91115E-11 9.01331E-11 + 2.56437E-10 6.69939E-10 1.60564E-09 3.52626E-09 7.08551E-09 1.29998E-08 + 2.17168E-08 3.29013E-08 4.49341E-08 5.47881E-08 5.86342E-08 5.32083E-08 + 3.74485E-08 1.35197E-08 -1.35197E-08 -3.74485E-08 -5.32083E-08 -5.86342E-08 + -5.47881E-08 -4.49341E-08 -3.29013E-08 -2.17168E-08 -1.29998E-08 -7.08551E-09 + -3.52626E-09 -1.60564E-09 -6.69939E-10 -2.56437E-10 -9.01331E-11 -2.91115E-11 + -8.64534E-12 -2.36183E-12 -5.93804E-13 -1.37440E-13 + 5.70344E-14 2.46414E-13 9.80103E-13 3.58761E-12 1.20806E-11 3.74030E-11 + 1.06415E-10 2.78008E-10 6.66303E-10 1.46331E-09 2.94031E-09 5.39459E-09 + 9.01194E-09 1.36532E-08 1.86465E-08 2.27357E-08 2.43317E-08 2.20801E-08 + 1.55402E-08 5.61033E-09 -5.61033E-09 -1.55402E-08 -2.20801E-08 -2.43317E-08 + -2.27357E-08 -1.86465E-08 -1.36532E-08 -9.01194E-09 -5.39459E-09 -2.94031E-09 + -1.46331E-09 -6.66303E-10 -2.78008E-10 -1.06415E-10 -3.74030E-11 -1.20806E-11 + -3.58761E-12 -9.80103E-13 -2.46414E-13 -5.70344E-14 + 2.08129E-14 8.99209E-14 3.57657E-13 1.30918E-12 4.40841E-12 1.36490E-11 + 3.88327E-11 1.01450E-10 2.43146E-10 5.33989E-10 1.07297E-09 1.96858E-09 + 3.28862E-09 4.98231E-09 6.80445E-09 8.29667E-09 8.87908E-09 8.05743E-09 + 5.67090E-09 2.04731E-09 -2.04731E-09 -5.67090E-09 -8.05743E-09 -8.87908E-09 + -8.29667E-09 -6.80445E-09 -4.98231E-09 -3.28862E-09 -1.96858E-09 -1.07297E-09 + -5.33989E-10 -2.43146E-10 -1.01450E-10 -3.88327E-11 -1.36490E-11 -4.40841E-12 + -1.30918E-12 -3.57657E-13 -8.99209E-14 -2.08129E-14 + 6.68605E-15 2.88867E-14 1.14896E-13 4.20569E-13 1.41619E-12 4.38469E-12 + 1.24749E-11 3.25904E-11 7.81096E-11 1.71542E-10 3.44688E-10 6.32399E-10 + 1.05645E-09 1.60055E-09 2.18590E-09 2.66527E-09 2.85237E-09 2.58842E-09 + 1.82176E-09 6.57690E-10 -6.57690E-10 -1.82176E-09 -2.58842E-09 -2.85237E-09 + -2.66527E-09 -2.18590E-09 -1.60055E-09 -1.05645E-09 -6.32399E-10 -3.44688E-10 + -1.71542E-10 -7.81096E-11 -3.25904E-11 -1.24749E-11 -4.38469E-12 -1.41619E-12 + -4.20569E-13 -1.14896E-13 -2.88867E-14 -6.68605E-15 + 1.89237E-15 8.17587E-15 3.25192E-14 1.19034E-13 4.00826E-13 1.24101E-12 + 3.53078E-12 9.22414E-12 2.21075E-11 4.85518E-11 9.75577E-11 1.78989E-10 + 2.99010E-10 4.53006E-10 6.18680E-10 7.54357E-10 8.07312E-10 7.32605E-10 + 5.15615E-10 1.86147E-10 -1.86147E-10 -5.15615E-10 -7.32605E-10 -8.07312E-10 + -7.54357E-10 -6.18680E-10 -4.53006E-10 -2.99010E-10 -1.78989E-10 -9.75577E-11 + -4.85518E-11 -2.21075E-11 -9.22414E-12 -3.53078E-12 -1.24101E-12 -4.00826E-13 + -1.19034E-13 -3.25192E-14 -8.17587E-15 -1.89237E-15 + 4.72220E-16 2.04020E-15 8.11482E-15 2.97038E-14 1.00022E-13 3.09680E-13 + 8.81070E-13 2.30179E-12 5.51670E-12 1.21156E-11 2.43445E-11 4.46648E-11 + 7.46149E-11 1.13043E-10 1.54385E-10 1.88242E-10 2.01456E-10 1.82814E-10 + 1.28666E-10 4.64511E-11 -4.64511E-11 -1.28666E-10 -1.82814E-10 -2.01456E-10 + -1.88242E-10 -1.54385E-10 -1.13043E-10 -7.46149E-11 -4.46648E-11 -2.43445E-11 + -1.21156E-11 -5.51670E-12 -2.30179E-12 -8.81070E-13 -3.09680E-13 -1.00022E-13 + -2.97038E-14 -8.11482E-15 -2.04020E-15 -4.72220E-16 + 1.03965E-16 4.49177E-16 1.78658E-15 6.53968E-15 2.20211E-14 6.81802E-14 + 1.93979E-13 5.06768E-13 1.21457E-12 2.66741E-12 5.35976E-12 9.83355E-12 + 1.64275E-11 2.48879E-11 3.39899E-11 4.14439E-11 4.43532E-11 4.02489E-11 + 2.83276E-11 1.02268E-11 -1.02268E-11 -2.83276E-11 -4.02489E-11 -4.43532E-11 + -4.14439E-11 -3.39899E-11 -2.48879E-11 -1.64275E-11 -9.83355E-12 -5.35976E-12 + -2.66741E-12 -1.21457E-12 -5.06768E-13 -1.93979E-13 -6.81802E-14 -2.20211E-14 + -6.53968E-15 -1.78658E-15 -4.49177E-16 -1.03965E-16 + 2.02100E-17 8.73162E-17 3.47297E-16 1.27126E-15 4.28072E-15 1.32537E-14 + 3.77079E-14 9.85115E-14 2.36103E-13 5.18521E-13 1.04189E-12 1.91156E-12 + 3.19336E-12 4.83799E-12 6.60735E-12 8.05635E-12 8.62189E-12 7.82404E-12 + 5.50664E-12 1.98801E-12 -1.98801E-12 -5.50664E-12 -7.82404E-12 -8.62189E-12 + -8.05635E-12 -6.60735E-12 -4.83799E-12 -3.19336E-12 -1.91156E-12 -1.04189E-12 + -5.18521E-13 -2.36103E-13 -9.85115E-14 -3.77079E-14 -1.32537E-14 -4.28072E-15 + -1.27126E-15 -3.47297E-16 -8.73162E-17 -2.02100E-17 + 3.47177E-18 1.49996E-17 5.96603E-17 2.18383E-16 7.35362E-16 2.27678E-15 + 6.47764E-15 1.69228E-14 4.05588E-14 8.90740E-14 1.78981E-13 3.28377E-13 + 5.48570E-13 8.31093E-13 1.13504E-12 1.38396E-12 1.48111E-12 1.34405E-12 + 9.45956E-13 3.41509E-13 -3.41509E-13 -9.45956E-13 -1.34405E-12 -1.48111E-12 + -1.38396E-12 -1.13504E-12 -8.31093E-13 -5.48570E-13 -3.28377E-13 -1.78981E-13 + -8.90740E-14 -4.05588E-14 -1.69228E-14 -6.47764E-15 -2.27678E-15 -7.35362E-16 + -2.18383E-16 -5.96603E-17 -1.49996E-17 -3.47177E-18 + 5.27570E-19 2.27934E-18 9.06598E-18 3.31855E-17 1.11746E-16 3.45979E-16 + 9.84342E-16 2.57158E-15 6.16332E-15 1.35357E-14 2.71980E-14 4.99001E-14 + 8.33607E-14 1.26293E-13 1.72481E-13 2.10306E-13 2.25069E-13 2.04242E-13 + 1.43748E-13 5.18957E-14 -5.18957E-14 -1.43748E-13 -2.04242E-13 -2.25069E-13 + -2.10306E-13 -1.72481E-13 -1.26293E-13 -8.33607E-14 -4.99001E-14 -2.71980E-14 + -1.35357E-14 -6.16332E-15 -2.57158E-15 -9.84342E-16 -3.45979E-16 -1.11746E-16 + -3.31855E-17 -9.06598E-18 -2.27934E-18 -5.27570E-19 + 7.10012E-20 3.06757E-19 1.22011E-18 4.46615E-18 1.50389E-17 4.65623E-17 + 1.32474E-16 3.46088E-16 8.29469E-16 1.82165E-15 3.66034E-15 6.71563E-15 + 1.12188E-14 1.69967E-14 2.32127E-14 2.83033E-14 3.02902E-14 2.74872E-14 + 1.93458E-14 6.98420E-15 -6.98420E-15 -1.93458E-14 -2.74872E-14 -3.02902E-14 + -2.83033E-14 -2.32127E-14 -1.69967E-14 -1.12188E-14 -6.71563E-15 -3.66034E-15 + -1.82165E-15 -8.29469E-16 -3.46088E-16 -1.32474E-16 -4.65623E-17 -1.50389E-17 + -4.46615E-18 -1.22011E-18 -3.06757E-19 -7.10012E-20 + 8.47410E-21 3.66119E-20 1.45622E-19 5.33042E-19 1.79492E-18 5.55729E-18 + 1.58110E-17 4.13061E-17 9.89984E-17 2.17417E-16 4.36868E-16 8.01521E-16 + 1.33898E-15 2.02858E-15 2.77048E-15 3.37805E-15 3.61518E-15 3.28064E-15 + 2.30895E-15 8.33575E-16 -8.33575E-16 -2.30895E-15 -3.28064E-15 -3.61518E-15 + -3.37805E-15 -2.77048E-15 -2.02858E-15 -1.33898E-15 -8.01521E-16 -4.36868E-16 + -2.17417E-16 -9.89984E-17 -4.13061E-17 -1.58110E-17 -5.55729E-18 -1.79492E-18 + -5.33042E-19 -1.45622E-19 -3.66119E-20 -8.47410E-21 + -5.15818E-20 -2.22857E-19 -8.86403E-19 -3.24462E-18 -1.09256E-17 -3.38272E-17 + -9.62416E-17 -2.51430E-16 -6.02603E-16 -1.32342E-15 -2.65921E-15 -4.87886E-15 + -8.15038E-15 -1.23480E-14 -1.68639E-14 -2.05622E-14 -2.20056E-14 -1.99692E-14 + -1.40546E-14 -5.07397E-15 5.07397E-15 1.40546E-14 1.99692E-14 2.20056E-14 + 2.05622E-14 1.68639E-14 1.23480E-14 8.15038E-15 4.87886E-15 2.65921E-15 + 1.32342E-15 6.02603E-16 2.51430E-16 9.62416E-17 3.38272E-17 1.09256E-17 + 3.24462E-18 8.86403E-19 2.22857E-19 5.15818E-20 + -4.24243E-19 -1.83292E-18 -7.29036E-18 -2.66859E-17 -8.98596E-17 -2.78217E-16 + -7.91553E-16 -2.06793E-15 -4.95620E-15 -1.08846E-14 -2.18711E-14 -4.01269E-14 + -6.70341E-14 -1.01558E-13 -1.38700E-13 -1.69117E-13 -1.80988E-13 -1.64240E-13 + -1.15594E-13 -4.17316E-14 4.17316E-14 1.15594E-13 1.64240E-13 1.80988E-13 + 1.69117E-13 1.38700E-13 1.01558E-13 6.70341E-14 4.01269E-14 2.18711E-14 + 1.08846E-14 4.95620E-15 2.06793E-15 7.91553E-16 2.78217E-16 8.98596E-17 + 2.66859E-17 7.29036E-18 1.83292E-18 4.24243E-19 + -3.10372E-18 -1.34095E-17 -5.33356E-17 -1.95232E-16 -6.57404E-16 -2.03541E-15 + -5.79093E-15 -1.51287E-14 -3.62591E-14 -7.96311E-14 -1.60007E-13 -2.93565E-13 + -4.90415E-13 -7.42987E-13 -1.01471E-12 -1.23724E-12 -1.32409E-12 -1.20156E-12 + -8.45673E-13 -3.05305E-13 3.05305E-13 8.45673E-13 1.20156E-12 1.32409E-12 + 1.23724E-12 1.01471E-12 7.42987E-13 4.90415E-13 2.93565E-13 1.60007E-13 + 7.96311E-14 3.62591E-14 1.51287E-14 5.79093E-15 2.03541E-15 6.57404E-16 + 1.95232E-16 5.33356E-17 1.34095E-17 3.10372E-18 + -2.01648E-17 -8.71207E-17 -3.46519E-16 -1.26841E-15 -4.27113E-15 -1.32240E-14 + -3.76235E-14 -9.82909E-14 -2.35574E-13 -5.17360E-13 -1.03956E-12 -1.90728E-12 + -3.18621E-12 -4.82716E-12 -6.59256E-12 -8.03831E-12 -8.60258E-12 -7.80652E-12 + -5.49431E-12 -1.98355E-12 1.98355E-12 5.49431E-12 7.80652E-12 8.60258E-12 + 8.03831E-12 6.59256E-12 4.82716E-12 3.18621E-12 1.90728E-12 1.03956E-12 + 5.17360E-13 2.35574E-13 9.82909E-14 3.76235E-14 1.32240E-14 4.27113E-15 + 1.26841E-15 3.46519E-16 8.71207E-17 2.01648E-17 + -1.16168E-16 -5.01899E-16 -1.99628E-15 -7.30727E-15 -2.46058E-14 -7.61828E-14 + -2.16747E-13 -5.66250E-13 -1.35713E-12 -2.98049E-12 -5.98885E-12 -1.09878E-11 + -1.83556E-11 -2.78090E-11 -3.79794E-11 -4.63083E-11 -4.95591E-11 -4.49730E-11 + -3.16525E-11 -1.14272E-11 1.14272E-11 3.16525E-11 4.49730E-11 4.95591E-11 + 4.63083E-11 3.79794E-11 2.78090E-11 1.83556E-11 1.09878E-11 5.98885E-12 + 2.98049E-12 1.35713E-12 5.66250E-13 2.16747E-13 7.61828E-14 2.46058E-14 + 7.30727E-15 1.99628E-15 5.01899E-16 1.16168E-16 + -5.92618E-16 -2.56037E-15 -1.01838E-14 -3.72771E-14 -1.25523E-13 -3.88637E-13 + -1.10571E-12 -2.88865E-12 -6.92324E-12 -1.52046E-11 -3.05514E-11 -5.60526E-11 + -9.36388E-11 -1.41864E-10 -1.93747E-10 -2.36236E-10 -2.52820E-10 -2.29424E-10 + -1.61471E-10 -5.82943E-11 5.82943E-11 1.61471E-10 2.29424E-10 2.52820E-10 + 2.36236E-10 1.93747E-10 1.41864E-10 9.36388E-11 5.60526E-11 3.05514E-11 + 1.52046E-11 6.92324E-12 2.88865E-12 1.10571E-12 3.88637E-13 1.25523E-13 + 3.72771E-14 1.01838E-14 2.56037E-15 5.92618E-16 + -2.67382E-15 -1.15521E-14 -4.59481E-14 -1.68190E-13 -5.66348E-13 -1.75349E-12 + -4.98883E-12 -1.30333E-11 -3.12369E-11 -6.86014E-11 -1.37844E-10 -2.52903E-10 + -4.22488E-10 -6.40076E-10 -8.74166E-10 -1.06587E-09 -1.14069E-09 -1.03514E-09 + -7.28539E-10 -2.63017E-10 2.63017E-10 7.28539E-10 1.03514E-09 1.14069E-09 + 1.06587E-09 8.74166E-10 6.40076E-10 4.22488E-10 2.52903E-10 1.37844E-10 + 6.86014E-11 3.12369E-11 1.30333E-11 4.98883E-12 1.75349E-12 5.66348E-13 + 1.68190E-13 4.59481E-14 1.15521E-14 2.67382E-15 + -1.06586E-14 -4.60500E-14 -1.83162E-13 -6.70454E-13 -2.25762E-12 -6.98990E-12 + -1.98869E-11 -5.19543E-11 -1.24519E-10 -2.73465E-10 -5.49487E-10 -1.00814E-09 + -1.68416E-09 -2.55153E-09 -3.48468E-09 -4.24887E-09 -4.54713E-09 -4.12635E-09 + -2.90417E-09 -1.04846E-09 1.04846E-09 2.90417E-09 4.12635E-09 4.54713E-09 + 4.24887E-09 3.48468E-09 2.55153E-09 1.68416E-09 1.00814E-09 5.49487E-10 + 2.73465E-10 1.24519E-10 5.19543E-11 1.98869E-11 6.98990E-12 2.25762E-12 + 6.70454E-13 1.83162E-13 4.60500E-14 1.06586E-14 + -3.75027E-14 -1.62029E-13 -6.44462E-13 -2.35901E-12 -7.94352E-12 -2.45942E-11 + -6.99727E-11 -1.82803E-10 -4.38124E-10 -9.62195E-10 -1.93339E-09 -3.54719E-09 + -5.92576E-09 -8.97763E-09 -1.22609E-08 -1.49498E-08 -1.59992E-08 -1.45187E-08 + -1.02184E-08 -3.68905E-09 3.68905E-09 1.02184E-08 1.45187E-08 1.59992E-08 + 1.49498E-08 1.22609E-08 8.97763E-09 5.92576E-09 3.54719E-09 1.93339E-09 + 9.62195E-10 4.38124E-10 1.82803E-10 6.99727E-11 2.45942E-11 7.94352E-12 + 2.35901E-12 6.44462E-13 1.62029E-13 3.75027E-14 + -1.16363E-13 -5.02739E-13 -1.99963E-12 -7.31950E-12 -2.46470E-11 -7.63104E-11 + -2.17110E-10 -5.67198E-10 -1.35940E-09 -2.98548E-09 -5.99888E-09 -1.10062E-08 + -1.83863E-08 -2.78556E-08 -3.80430E-08 -4.63859E-08 -4.96421E-08 -4.50483E-08 + -3.17055E-08 -1.14463E-08 1.14463E-08 3.17055E-08 4.50483E-08 4.96421E-08 + 4.63859E-08 3.80430E-08 2.78556E-08 1.83863E-08 1.10062E-08 5.99888E-09 + 2.98548E-09 1.35940E-09 5.67198E-10 2.17110E-10 7.63104E-11 2.46470E-11 + 7.31950E-12 1.99963E-12 5.02739E-13 1.16363E-13 + -3.18068E-13 -1.37420E-12 -5.46581E-12 -2.00073E-11 -6.73706E-11 -2.08588E-10 + -5.93453E-10 -1.55039E-09 -3.71582E-09 -8.16057E-09 -1.63975E-08 -3.00844E-08 + -5.02576E-08 -7.61410E-08 -1.03988E-07 -1.26792E-07 -1.35693E-07 -1.23136E-07 + -8.66643E-08 -3.12875E-08 3.12875E-08 8.66643E-08 1.23136E-07 1.35693E-07 + 1.26792E-07 1.03988E-07 7.61410E-08 5.02576E-08 3.00844E-08 1.63975E-08 + 8.16057E-09 3.71582E-09 1.55039E-09 5.93453E-10 2.08588E-10 6.73706E-11 + 2.00073E-11 5.46581E-12 1.37420E-12 3.18068E-13 + -7.64971E-13 -3.30502E-12 -1.31456E-11 -4.81185E-11 -1.62030E-10 -5.01666E-10 + -1.42728E-09 -3.72877E-09 -8.93675E-09 -1.96266E-08 -3.94368E-08 -7.23546E-08 + -1.20872E-07 -1.83123E-07 -2.50095E-07 -3.04942E-07 -3.26348E-07 -2.96148E-07 + -2.08432E-07 -7.52482E-08 7.52482E-08 2.08432E-07 2.96148E-07 3.26348E-07 + 3.04942E-07 2.50095E-07 1.83123E-07 1.20872E-07 7.23546E-08 3.94368E-08 + 1.96266E-08 8.93675E-09 3.72877E-09 1.42728E-09 5.01666E-10 1.62030E-10 + 4.81185E-11 1.31456E-11 3.30502E-12 7.64971E-13 + -1.61598E-12 -6.98174E-12 -2.77696E-11 -1.01649E-10 -3.42283E-10 -1.05975E-09 + -3.01509E-09 -7.87691E-09 -1.88786E-08 -4.14606E-08 -8.33089E-08 -1.52847E-07 + -2.55339E-07 -3.86842E-07 -5.28319E-07 -6.44180E-07 -6.89400E-07 -6.25604E-07 + -4.40307E-07 -1.58959E-07 1.58959E-07 4.40307E-07 6.25604E-07 6.89400E-07 + 6.44180E-07 5.28319E-07 3.86842E-07 2.55339E-07 1.52847E-07 8.33089E-08 + 4.14606E-08 1.88786E-08 7.87691E-09 3.01509E-09 1.05975E-09 3.42283E-10 + 1.01649E-10 2.77696E-11 6.98174E-12 1.61598E-12 + -2.99035E-12 -1.29197E-11 -5.13874E-11 -1.88100E-10 -6.33392E-10 -1.96106E-09 + -5.57940E-09 -1.45761E-08 -3.49347E-08 -7.67224E-08 -1.54162E-07 -2.82842E-07 + -4.72502E-07 -7.15848E-07 -9.77649E-07 -1.19205E-06 -1.27573E-06 -1.15768E-06 + -8.14784E-07 -2.94153E-07 2.94153E-07 8.14784E-07 1.15768E-06 1.27573E-06 + 1.19205E-06 9.77649E-07 7.15848E-07 4.72502E-07 2.82842E-07 1.54162E-07 + 7.67224E-08 3.49347E-08 1.45761E-08 5.57940E-09 1.96106E-09 6.33392E-10 + 1.88100E-10 5.13874E-11 1.29197E-11 2.99035E-12 + -4.82561E-12 -2.08488E-11 -8.29252E-11 -3.03543E-10 -1.02212E-09 -3.16462E-09 + -9.00363E-09 -2.35219E-08 -5.63750E-08 -1.23809E-07 -2.48776E-07 -4.56429E-07 + -7.62488E-07 -1.15518E-06 -1.57766E-06 -1.92364E-06 -2.05868E-06 -1.86817E-06 + -1.31484E-06 -4.74683E-07 4.74683E-07 1.31484E-06 1.86817E-06 2.05868E-06 + 1.92364E-06 1.57766E-06 1.15518E-06 7.62488E-07 4.56429E-07 2.48776E-07 + 1.23809E-07 5.63750E-08 2.35219E-08 9.00363E-09 3.16462E-09 1.02212E-09 + 3.03543E-10 8.29252E-11 2.08488E-11 4.82561E-12 + -6.73676E-12 -2.91058E-11 -1.15767E-10 -4.23759E-10 -1.42693E-09 -4.41795E-09 + -1.25695E-08 -3.28376E-08 -7.87020E-08 -1.72843E-07 -3.47302E-07 -6.37195E-07 + -1.06447E-06 -1.61269E-06 -2.20248E-06 -2.68549E-06 -2.87400E-06 -2.60805E-06 + -1.83557E-06 -6.62678E-07 6.62678E-07 1.83557E-06 2.60805E-06 2.87400E-06 + 2.68549E-06 2.20248E-06 1.61269E-06 1.06447E-06 6.37195E-07 3.47302E-07 + 1.72843E-07 7.87020E-08 3.28376E-08 1.25695E-08 4.41795E-09 1.42693E-09 + 4.23759E-10 1.15767E-10 2.91058E-11 6.73676E-12 + -8.01254E-12 -3.46177E-11 -1.37691E-10 -5.04008E-10 -1.69715E-09 -5.25460E-09 + -1.49498E-08 -3.90562E-08 -9.36062E-08 -2.05575E-07 -4.13073E-07 -7.57864E-07 + -1.26605E-06 -1.91809E-06 -2.61958E-06 -3.19405E-06 -3.41827E-06 -3.10195E-06 + -2.18318E-06 -7.88172E-07 7.88172E-07 2.18318E-06 3.10195E-06 3.41827E-06 + 3.19405E-06 2.61958E-06 1.91809E-06 1.26605E-06 7.57864E-07 4.13073E-07 + 2.05575E-07 9.36062E-08 3.90562E-08 1.49498E-08 5.25460E-09 1.69715E-09 + 5.04008E-10 1.37691E-10 3.46177E-11 8.01254E-12 + -7.85659E-12 -3.39440E-11 -1.35011E-10 -4.94199E-10 -1.66412E-09 -5.15233E-09 + -1.46589E-08 -3.82961E-08 -9.17844E-08 -2.01574E-07 -4.05033E-07 -7.43114E-07 + -1.24141E-06 -1.88076E-06 -2.56859E-06 -3.13189E-06 -3.35174E-06 -3.04158E-06 + -2.14069E-06 -7.72833E-07 7.72833E-07 2.14069E-06 3.04158E-06 3.35174E-06 + 3.13189E-06 2.56859E-06 1.88076E-06 1.24141E-06 7.43114E-07 4.05033E-07 + 2.01574E-07 9.17844E-08 3.82961E-08 1.46589E-08 5.15233E-09 1.66412E-09 + 4.94199E-10 1.35011E-10 3.39440E-11 7.85659E-12 + -5.81736E-12 -2.51336E-11 -9.99679E-11 -3.65926E-10 -1.23219E-09 -3.81501E-09 + -1.08540E-08 -2.83561E-08 -6.79611E-08 -1.49254E-07 -2.99904E-07 -5.50234E-07 + -9.19194E-07 -1.39259E-06 -1.90190E-06 -2.31898E-06 -2.48177E-06 -2.25212E-06 + -1.58506E-06 -5.72239E-07 5.72239E-07 1.58506E-06 2.25212E-06 2.48177E-06 + 2.31898E-06 1.90190E-06 1.39259E-06 9.19194E-07 5.50234E-07 2.99904E-07 + 1.49254E-07 6.79611E-08 2.83561E-08 1.08540E-08 3.81501E-09 1.23219E-09 + 3.65926E-10 9.99679E-11 2.51336E-11 5.81736E-12 + -2.15354E-12 -9.30425E-12 -3.70073E-11 -1.35463E-10 -4.56145E-10 -1.41228E-09 + -4.01808E-09 -1.04972E-08 -2.51586E-08 -5.52526E-08 -1.11022E-07 -2.03692E-07 + -3.40278E-07 -5.15527E-07 -7.04066E-07 -8.58468E-07 -9.18731E-07 -8.33714E-07 + -5.86777E-07 -2.11838E-07 2.11838E-07 5.86777E-07 8.33714E-07 9.18731E-07 + 8.58468E-07 7.04066E-07 5.15527E-07 3.40278E-07 2.03692E-07 1.11022E-07 + 5.52526E-08 2.51586E-08 1.04972E-08 4.01808E-09 1.41228E-09 4.56145E-10 + 1.35463E-10 3.70073E-11 9.30425E-12 2.15354E-12 + 2.15354E-12 9.30425E-12 3.70073E-11 1.35463E-10 4.56145E-10 1.41228E-09 + 4.01808E-09 1.04972E-08 2.51586E-08 5.52526E-08 1.11022E-07 2.03692E-07 + 3.40278E-07 5.15527E-07 7.04066E-07 8.58468E-07 9.18731E-07 8.33714E-07 + 5.86777E-07 2.11838E-07 -2.11838E-07 -5.86777E-07 -8.33714E-07 -9.18731E-07 + -8.58468E-07 -7.04066E-07 -5.15527E-07 -3.40278E-07 -2.03692E-07 -1.11022E-07 + -5.52526E-08 -2.51586E-08 -1.04972E-08 -4.01808E-09 -1.41228E-09 -4.56145E-10 + -1.35463E-10 -3.70073E-11 -9.30425E-12 -2.15354E-12 + 5.81736E-12 2.51336E-11 9.99679E-11 3.65926E-10 1.23219E-09 3.81501E-09 + 1.08540E-08 2.83561E-08 6.79611E-08 1.49254E-07 2.99904E-07 5.50234E-07 + 9.19194E-07 1.39259E-06 1.90190E-06 2.31898E-06 2.48177E-06 2.25212E-06 + 1.58506E-06 5.72239E-07 -5.72239E-07 -1.58506E-06 -2.25212E-06 -2.48177E-06 + -2.31898E-06 -1.90190E-06 -1.39259E-06 -9.19194E-07 -5.50234E-07 -2.99904E-07 + -1.49254E-07 -6.79611E-08 -2.83561E-08 -1.08540E-08 -3.81501E-09 -1.23219E-09 + -3.65926E-10 -9.99679E-11 -2.51336E-11 -5.81736E-12 + 7.85659E-12 3.39440E-11 1.35011E-10 4.94199E-10 1.66412E-09 5.15233E-09 + 1.46589E-08 3.82961E-08 9.17844E-08 2.01574E-07 4.05033E-07 7.43114E-07 + 1.24141E-06 1.88076E-06 2.56859E-06 3.13189E-06 3.35174E-06 3.04158E-06 + 2.14069E-06 7.72833E-07 -7.72833E-07 -2.14069E-06 -3.04158E-06 -3.35174E-06 + -3.13189E-06 -2.56859E-06 -1.88076E-06 -1.24141E-06 -7.43114E-07 -4.05033E-07 + -2.01574E-07 -9.17844E-08 -3.82961E-08 -1.46589E-08 -5.15233E-09 -1.66412E-09 + -4.94199E-10 -1.35011E-10 -3.39440E-11 -7.85659E-12 + 8.01254E-12 3.46177E-11 1.37691E-10 5.04008E-10 1.69715E-09 5.25460E-09 + 1.49498E-08 3.90562E-08 9.36062E-08 2.05575E-07 4.13073E-07 7.57864E-07 + 1.26605E-06 1.91809E-06 2.61958E-06 3.19405E-06 3.41827E-06 3.10195E-06 + 2.18318E-06 7.88172E-07 -7.88172E-07 -2.18318E-06 -3.10195E-06 -3.41827E-06 + -3.19405E-06 -2.61958E-06 -1.91809E-06 -1.26605E-06 -7.57864E-07 -4.13073E-07 + -2.05575E-07 -9.36062E-08 -3.90562E-08 -1.49498E-08 -5.25460E-09 -1.69715E-09 + -5.04008E-10 -1.37691E-10 -3.46177E-11 -8.01254E-12 + 6.73676E-12 2.91058E-11 1.15767E-10 4.23759E-10 1.42693E-09 4.41795E-09 + 1.25695E-08 3.28376E-08 7.87020E-08 1.72843E-07 3.47302E-07 6.37195E-07 + 1.06447E-06 1.61269E-06 2.20248E-06 2.68549E-06 2.87400E-06 2.60805E-06 + 1.83557E-06 6.62678E-07 -6.62678E-07 -1.83557E-06 -2.60805E-06 -2.87400E-06 + -2.68549E-06 -2.20248E-06 -1.61269E-06 -1.06447E-06 -6.37195E-07 -3.47302E-07 + -1.72843E-07 -7.87020E-08 -3.28376E-08 -1.25695E-08 -4.41795E-09 -1.42693E-09 + -4.23759E-10 -1.15767E-10 -2.91058E-11 -6.73676E-12 + 4.82561E-12 2.08488E-11 8.29252E-11 3.03543E-10 1.02212E-09 3.16462E-09 + 9.00363E-09 2.35219E-08 5.63750E-08 1.23809E-07 2.48776E-07 4.56429E-07 + 7.62488E-07 1.15518E-06 1.57766E-06 1.92364E-06 2.05868E-06 1.86817E-06 + 1.31484E-06 4.74683E-07 -4.74683E-07 -1.31484E-06 -1.86817E-06 -2.05868E-06 + -1.92364E-06 -1.57766E-06 -1.15518E-06 -7.62488E-07 -4.56429E-07 -2.48776E-07 + -1.23809E-07 -5.63750E-08 -2.35219E-08 -9.00363E-09 -3.16462E-09 -1.02212E-09 + -3.03543E-10 -8.29252E-11 -2.08488E-11 -4.82561E-12 + 2.99035E-12 1.29197E-11 5.13874E-11 1.88100E-10 6.33392E-10 1.96106E-09 + 5.57940E-09 1.45761E-08 3.49347E-08 7.67224E-08 1.54162E-07 2.82842E-07 + 4.72502E-07 7.15848E-07 9.77649E-07 1.19205E-06 1.27573E-06 1.15768E-06 + 8.14784E-07 2.94153E-07 -2.94153E-07 -8.14784E-07 -1.15768E-06 -1.27573E-06 + -1.19205E-06 -9.77649E-07 -7.15848E-07 -4.72502E-07 -2.82842E-07 -1.54162E-07 + -7.67224E-08 -3.49347E-08 -1.45761E-08 -5.57940E-09 -1.96106E-09 -6.33392E-10 + -1.88100E-10 -5.13874E-11 -1.29197E-11 -2.99035E-12 + 1.61598E-12 6.98174E-12 2.77696E-11 1.01649E-10 3.42283E-10 1.05975E-09 + 3.01509E-09 7.87691E-09 1.88786E-08 4.14606E-08 8.33089E-08 1.52847E-07 + 2.55339E-07 3.86842E-07 5.28319E-07 6.44180E-07 6.89400E-07 6.25604E-07 + 4.40307E-07 1.58959E-07 -1.58959E-07 -4.40307E-07 -6.25604E-07 -6.89400E-07 + -6.44180E-07 -5.28319E-07 -3.86842E-07 -2.55339E-07 -1.52847E-07 -8.33089E-08 + -4.14606E-08 -1.88786E-08 -7.87691E-09 -3.01509E-09 -1.05975E-09 -3.42283E-10 + -1.01649E-10 -2.77696E-11 -6.98174E-12 -1.61598E-12 + 7.64971E-13 3.30502E-12 1.31456E-11 4.81185E-11 1.62030E-10 5.01666E-10 + 1.42728E-09 3.72877E-09 8.93675E-09 1.96266E-08 3.94368E-08 7.23546E-08 + 1.20872E-07 1.83123E-07 2.50095E-07 3.04942E-07 3.26348E-07 2.96148E-07 + 2.08432E-07 7.52482E-08 -7.52482E-08 -2.08432E-07 -2.96148E-07 -3.26348E-07 + -3.04942E-07 -2.50095E-07 -1.83123E-07 -1.20872E-07 -7.23546E-08 -3.94368E-08 + -1.96266E-08 -8.93675E-09 -3.72877E-09 -1.42728E-09 -5.01666E-10 -1.62030E-10 + -4.81185E-11 -1.31456E-11 -3.30502E-12 -7.64971E-13 + 3.18068E-13 1.37420E-12 5.46581E-12 2.00073E-11 6.73706E-11 2.08588E-10 + 5.93453E-10 1.55039E-09 3.71582E-09 8.16057E-09 1.63975E-08 3.00844E-08 + 5.02576E-08 7.61410E-08 1.03988E-07 1.26792E-07 1.35693E-07 1.23136E-07 + 8.66643E-08 3.12875E-08 -3.12875E-08 -8.66643E-08 -1.23136E-07 -1.35693E-07 + -1.26792E-07 -1.03988E-07 -7.61410E-08 -5.02576E-08 -3.00844E-08 -1.63975E-08 + -8.16057E-09 -3.71582E-09 -1.55039E-09 -5.93453E-10 -2.08588E-10 -6.73706E-11 + -2.00073E-11 -5.46581E-12 -1.37420E-12 -3.18068E-13 + 1.16363E-13 5.02739E-13 1.99963E-12 7.31950E-12 2.46470E-11 7.63104E-11 + 2.17110E-10 5.67198E-10 1.35940E-09 2.98548E-09 5.99888E-09 1.10062E-08 + 1.83863E-08 2.78556E-08 3.80430E-08 4.63859E-08 4.96421E-08 4.50483E-08 + 3.17055E-08 1.14463E-08 -1.14463E-08 -3.17055E-08 -4.50483E-08 -4.96421E-08 + -4.63859E-08 -3.80430E-08 -2.78556E-08 -1.83863E-08 -1.10062E-08 -5.99888E-09 + -2.98548E-09 -1.35940E-09 -5.67198E-10 -2.17110E-10 -7.63104E-11 -2.46470E-11 + -7.31950E-12 -1.99963E-12 -5.02739E-13 -1.16363E-13 + 3.75027E-14 1.62029E-13 6.44462E-13 2.35901E-12 7.94352E-12 2.45942E-11 + 6.99727E-11 1.82803E-10 4.38124E-10 9.62195E-10 1.93339E-09 3.54719E-09 + 5.92576E-09 8.97763E-09 1.22609E-08 1.49498E-08 1.59992E-08 1.45187E-08 + 1.02184E-08 3.68905E-09 -3.68905E-09 -1.02184E-08 -1.45187E-08 -1.59992E-08 + -1.49498E-08 -1.22609E-08 -8.97763E-09 -5.92576E-09 -3.54719E-09 -1.93339E-09 + -9.62195E-10 -4.38124E-10 -1.82803E-10 -6.99727E-11 -2.45942E-11 -7.94352E-12 + -2.35901E-12 -6.44462E-13 -1.62029E-13 -3.75027E-14 + 1.06586E-14 4.60500E-14 1.83162E-13 6.70454E-13 2.25762E-12 6.98990E-12 + 1.98869E-11 5.19543E-11 1.24519E-10 2.73465E-10 5.49487E-10 1.00814E-09 + 1.68416E-09 2.55153E-09 3.48468E-09 4.24887E-09 4.54713E-09 4.12635E-09 + 2.90417E-09 1.04846E-09 -1.04846E-09 -2.90417E-09 -4.12635E-09 -4.54713E-09 + -4.24887E-09 -3.48468E-09 -2.55153E-09 -1.68416E-09 -1.00814E-09 -5.49487E-10 + -2.73465E-10 -1.24519E-10 -5.19543E-11 -1.98869E-11 -6.98990E-12 -2.25762E-12 + -6.70454E-13 -1.83162E-13 -4.60500E-14 -1.06586E-14 + 2.67382E-15 1.15521E-14 4.59481E-14 1.68190E-13 5.66348E-13 1.75349E-12 + 4.98883E-12 1.30333E-11 3.12369E-11 6.86014E-11 1.37844E-10 2.52903E-10 + 4.22488E-10 6.40076E-10 8.74166E-10 1.06587E-09 1.14069E-09 1.03514E-09 + 7.28539E-10 2.63017E-10 -2.63017E-10 -7.28539E-10 -1.03514E-09 -1.14069E-09 + -1.06587E-09 -8.74166E-10 -6.40076E-10 -4.22488E-10 -2.52903E-10 -1.37844E-10 + -6.86014E-11 -3.12369E-11 -1.30333E-11 -4.98883E-12 -1.75349E-12 -5.66348E-13 + -1.68190E-13 -4.59481E-14 -1.15521E-14 -2.67382E-15 + 5.92618E-16 2.56037E-15 1.01838E-14 3.72771E-14 1.25523E-13 3.88637E-13 + 1.10571E-12 2.88865E-12 6.92324E-12 1.52046E-11 3.05514E-11 5.60526E-11 + 9.36388E-11 1.41864E-10 1.93747E-10 2.36236E-10 2.52820E-10 2.29424E-10 + 1.61471E-10 5.82943E-11 -5.82943E-11 -1.61471E-10 -2.29424E-10 -2.52820E-10 + -2.36236E-10 -1.93747E-10 -1.41864E-10 -9.36388E-11 -5.60526E-11 -3.05514E-11 + -1.52046E-11 -6.92324E-12 -2.88865E-12 -1.10571E-12 -3.88637E-13 -1.25523E-13 + -3.72771E-14 -1.01838E-14 -2.56037E-15 -5.92618E-16 + 1.16168E-16 5.01899E-16 1.99628E-15 7.30727E-15 2.46058E-14 7.61828E-14 + 2.16747E-13 5.66250E-13 1.35713E-12 2.98049E-12 5.98885E-12 1.09878E-11 + 1.83556E-11 2.78090E-11 3.79794E-11 4.63083E-11 4.95591E-11 4.49730E-11 + 3.16525E-11 1.14272E-11 -1.14272E-11 -3.16525E-11 -4.49730E-11 -4.95591E-11 + -4.63083E-11 -3.79794E-11 -2.78090E-11 -1.83556E-11 -1.09878E-11 -5.98885E-12 + -2.98049E-12 -1.35713E-12 -5.66250E-13 -2.16747E-13 -7.61828E-14 -2.46058E-14 + -7.30727E-15 -1.99628E-15 -5.01899E-16 -1.16168E-16 + 2.01648E-17 8.71207E-17 3.46519E-16 1.26841E-15 4.27113E-15 1.32240E-14 + 3.76235E-14 9.82909E-14 2.35574E-13 5.17360E-13 1.03956E-12 1.90728E-12 + 3.18621E-12 4.82716E-12 6.59256E-12 8.03831E-12 8.60258E-12 7.80652E-12 + 5.49431E-12 1.98355E-12 -1.98355E-12 -5.49431E-12 -7.80652E-12 -8.60258E-12 + -8.03831E-12 -6.59256E-12 -4.82716E-12 -3.18621E-12 -1.90728E-12 -1.03956E-12 + -5.17360E-13 -2.35574E-13 -9.82909E-14 -3.76235E-14 -1.32240E-14 -4.27113E-15 + -1.26841E-15 -3.46519E-16 -8.71207E-17 -2.01648E-17 + 3.10372E-18 1.34095E-17 5.33356E-17 1.95232E-16 6.57404E-16 2.03541E-15 + 5.79093E-15 1.51287E-14 3.62591E-14 7.96311E-14 1.60007E-13 2.93565E-13 + 4.90415E-13 7.42987E-13 1.01471E-12 1.23724E-12 1.32409E-12 1.20156E-12 + 8.45673E-13 3.05305E-13 -3.05305E-13 -8.45673E-13 -1.20156E-12 -1.32409E-12 + -1.23724E-12 -1.01471E-12 -7.42987E-13 -4.90415E-13 -2.93565E-13 -1.60007E-13 + -7.96311E-14 -3.62591E-14 -1.51287E-14 -5.79093E-15 -2.03541E-15 -6.57404E-16 + -1.95232E-16 -5.33356E-17 -1.34095E-17 -3.10372E-18 + 4.24243E-19 1.83292E-18 7.29036E-18 2.66859E-17 8.98596E-17 2.78217E-16 + 7.91553E-16 2.06793E-15 4.95620E-15 1.08846E-14 2.18711E-14 4.01269E-14 + 6.70341E-14 1.01558E-13 1.38700E-13 1.69117E-13 1.80988E-13 1.64240E-13 + 1.15594E-13 4.17316E-14 -4.17316E-14 -1.15594E-13 -1.64240E-13 -1.80988E-13 + -1.69117E-13 -1.38700E-13 -1.01558E-13 -6.70341E-14 -4.01269E-14 -2.18711E-14 + -1.08846E-14 -4.95620E-15 -2.06793E-15 -7.91553E-16 -2.78217E-16 -8.98596E-17 + -2.66859E-17 -7.29036E-18 -1.83292E-18 -4.24243E-19 + 5.15818E-20 2.22857E-19 8.86403E-19 3.24462E-18 1.09256E-17 3.38272E-17 + 9.62416E-17 2.51430E-16 6.02603E-16 1.32342E-15 2.65921E-15 4.87886E-15 + 8.15038E-15 1.23480E-14 1.68639E-14 2.05622E-14 2.20056E-14 1.99692E-14 + 1.40546E-14 5.07397E-15 -5.07397E-15 -1.40546E-14 -1.99692E-14 -2.20056E-14 + -2.05622E-14 -1.68639E-14 -1.23480E-14 -8.15038E-15 -4.87886E-15 -2.65921E-15 + -1.32342E-15 -6.02603E-16 -2.51430E-16 -9.62416E-17 -3.38272E-17 -1.09256E-17 + -3.24462E-18 -8.86403E-19 -2.22857E-19 -5.15818E-20 + -2.80386E-19 -1.21139E-18 -4.81827E-18 -1.76370E-17 -5.93892E-17 -1.83877E-16 + -5.23146E-16 -1.36671E-15 -3.27560E-15 -7.19378E-15 -1.44548E-14 -2.65203E-14 + -4.43035E-14 -6.71205E-14 -9.16680E-14 -1.11771E-13 -1.19617E-13 -1.08548E-13 + -7.63971E-14 -2.75809E-14 2.75809E-14 7.63971E-14 1.08548E-13 1.19617E-13 + 1.11771E-13 9.16680E-14 6.71205E-14 4.43035E-14 2.65203E-14 1.44548E-14 + 7.19378E-15 3.27560E-15 1.36671E-15 5.23146E-16 1.83877E-16 5.93892E-17 + 1.76370E-17 4.81827E-18 1.21139E-18 2.80386E-19 + -2.24996E-18 -9.72082E-18 -3.86642E-17 -1.41528E-16 -4.76567E-16 -1.47551E-15 + -4.19798E-15 -1.09672E-14 -2.62850E-14 -5.77264E-14 -1.15993E-13 -2.12812E-13 + -3.55513E-13 -5.38608E-13 -7.35589E-13 -8.96904E-13 -9.59865E-13 -8.71041E-13 + -6.13048E-13 -2.21322E-13 2.21322E-13 6.13048E-13 8.71041E-13 9.59865E-13 + 8.96904E-13 7.35589E-13 5.38608E-13 3.55513E-13 2.12812E-13 1.15993E-13 + 5.77264E-14 2.62850E-14 1.09672E-14 4.19798E-15 1.47551E-15 4.76567E-16 + 1.41528E-16 3.86642E-17 9.72082E-18 2.24996E-18 + -1.61106E-17 -6.96051E-17 -2.76851E-16 -1.01340E-15 -3.41242E-15 -1.05653E-14 + -3.00592E-14 -7.85295E-14 -1.88212E-13 -4.13345E-13 -8.30555E-13 -1.52382E-12 + -2.54562E-12 -3.85666E-12 -5.26712E-12 -6.42220E-12 -6.87303E-12 -6.23702E-12 + -4.38968E-12 -1.58476E-12 1.58476E-12 4.38968E-12 6.23702E-12 6.87303E-12 + 6.42220E-12 5.26712E-12 3.85666E-12 2.54562E-12 1.52382E-12 8.30555E-13 + 4.13345E-13 1.88212E-13 7.85295E-14 3.00592E-14 1.05653E-14 3.41242E-15 + 1.01340E-15 2.76851E-16 6.96051E-17 1.61106E-17 + -1.02770E-16 -4.44013E-16 -1.76604E-15 -6.46450E-15 -2.17679E-14 -6.73964E-14 + -1.91749E-13 -5.00942E-13 -1.20061E-12 -2.63674E-12 -5.29814E-12 -9.72050E-12 + -1.62386E-11 -2.46017E-11 -3.35991E-11 -4.09674E-11 -4.38433E-11 -3.97861E-11 + -2.80019E-11 -1.01092E-11 1.01092E-11 2.80019E-11 3.97861E-11 4.38433E-11 + 4.09674E-11 3.35991E-11 2.46017E-11 1.62386E-11 9.72050E-12 5.29814E-12 + 2.63674E-12 1.20061E-12 5.00942E-13 1.91749E-13 6.73964E-14 2.17679E-14 + 6.46450E-15 1.76604E-15 4.44013E-16 1.02770E-16 + -5.83051E-16 -2.51904E-15 -1.00194E-14 -3.66753E-14 -1.23497E-13 -3.82363E-13 + -1.08786E-12 -2.84202E-12 -6.81148E-12 -1.49591E-11 -3.00582E-11 -5.51478E-11 + -9.21272E-11 -1.39574E-10 -1.90620E-10 -2.32423E-10 -2.48738E-10 -2.25721E-10 + -1.58865E-10 -5.73532E-11 5.73532E-11 1.58865E-10 2.25721E-10 2.48738E-10 + 2.32423E-10 1.90620E-10 1.39574E-10 9.21272E-11 5.51478E-11 3.00582E-11 + 1.49591E-11 6.81148E-12 2.84202E-12 1.08786E-12 3.82363E-13 1.23497E-13 + 3.66753E-14 1.00194E-14 2.51904E-15 5.83051E-16 + -2.93708E-15 -1.26895E-14 -5.04720E-14 -1.84749E-13 -6.22108E-13 -1.92613E-12 + -5.48001E-12 -1.43165E-11 -3.43123E-11 -7.53557E-11 -1.51416E-10 -2.77803E-10 + -4.64084E-10 -7.03096E-10 -9.60233E-10 -1.17081E-09 -1.25300E-09 -1.13705E-09 + -8.00269E-10 -2.88913E-10 2.88913E-10 8.00269E-10 1.13705E-09 1.25300E-09 + 1.17081E-09 9.60233E-10 7.03096E-10 4.64084E-10 2.77803E-10 1.51416E-10 + 7.53557E-11 3.43123E-11 1.43165E-11 5.48001E-12 1.92613E-12 6.22108E-13 + 1.84749E-13 5.04720E-14 1.26895E-14 2.93708E-15 + -1.31167E-14 -5.66700E-14 -2.25403E-13 -8.25072E-13 -2.77827E-12 -8.60189E-12 + -2.44732E-11 -6.39359E-11 -1.53235E-10 -3.36531E-10 -6.76209E-10 -1.24064E-09 + -2.07255E-09 -3.13995E-09 -4.28830E-09 -5.22873E-09 -5.59578E-09 -5.07796E-09 + -3.57392E-09 -1.29026E-09 1.29026E-09 3.57392E-09 5.07796E-09 5.59578E-09 + 5.22873E-09 4.28830E-09 3.13995E-09 2.07255E-09 1.24064E-09 6.76209E-10 + 3.36531E-10 1.53235E-10 6.39359E-11 2.44732E-11 8.60189E-12 2.77827E-12 + 8.25072E-13 2.25403E-13 5.66700E-14 1.31167E-14 + -5.18583E-14 -2.24051E-13 -8.91155E-13 -3.26202E-12 -1.09842E-11 -3.40085E-11 + -9.67574E-11 -2.52778E-10 -6.05833E-10 -1.33051E-09 -2.67347E-09 -4.90501E-09 + -8.19407E-09 -1.24142E-08 -1.69543E-08 -2.06724E-08 -2.21235E-08 -2.00763E-08 + -1.41299E-08 -5.10117E-09 5.10117E-09 1.41299E-08 2.00763E-08 2.21235E-08 + 2.06724E-08 1.69543E-08 1.24142E-08 8.19407E-09 4.90501E-09 2.67347E-09 + 1.33051E-09 6.05833E-10 2.52778E-10 9.67574E-11 3.40085E-11 1.09842E-11 + 3.26202E-12 8.91155E-13 2.24051E-13 5.18583E-14 + -1.81274E-13 -7.83184E-13 -3.11508E-12 -1.14026E-11 -3.83959E-11 -1.18879E-10 + -3.38221E-10 -8.83599E-10 -2.11772E-09 -4.65088E-09 -9.34526E-09 -1.71457E-08 + -2.86428E-08 -4.33944E-08 -5.92647E-08 -7.22614E-08 -7.73341E-08 -7.01778E-08 + -4.93918E-08 -1.78314E-08 1.78314E-08 4.93918E-08 7.01778E-08 7.73341E-08 + 7.22614E-08 5.92647E-08 4.33944E-08 2.86428E-08 1.71457E-08 9.34526E-09 + 4.65088E-09 2.11772E-09 8.83599E-10 3.38221E-10 1.18879E-10 3.83959E-11 + 1.14026E-11 3.11508E-12 7.83184E-13 1.81274E-13 + -5.59549E-13 -2.41750E-12 -9.61551E-12 -3.51970E-11 -1.18519E-10 -3.66950E-10 + -1.04401E-09 -2.72746E-09 -6.53691E-09 -1.43562E-08 -2.88466E-08 -5.29248E-08 + -8.84136E-08 -1.33948E-07 -1.82936E-07 -2.23054E-07 -2.38712E-07 -2.16622E-07 + -1.52461E-07 -5.50414E-08 5.50414E-08 1.52461E-07 2.16622E-07 2.38712E-07 + 2.23054E-07 1.82936E-07 1.33948E-07 8.84136E-08 5.29248E-08 2.88466E-08 + 1.43562E-08 6.53691E-09 2.72746E-09 1.04401E-09 3.66950E-10 1.18519E-10 + 3.51970E-11 9.61551E-12 2.41750E-12 5.59549E-13 + -1.52328E-12 -6.58124E-12 -2.61766E-11 -9.58179E-11 -3.22648E-10 -9.98961E-10 + -2.84214E-09 -7.42506E-09 -1.77956E-08 -3.90822E-08 -7.85300E-08 -1.44079E-07 + -2.40691E-07 -3.64651E-07 -4.98012E-07 -6.07227E-07 -6.49853E-07 -5.89717E-07 + -4.15049E-07 -1.49841E-07 1.49841E-07 4.15049E-07 5.89717E-07 6.49853E-07 + 6.07227E-07 4.98012E-07 3.64651E-07 2.40691E-07 1.44079E-07 7.85300E-08 + 3.90822E-08 1.77956E-08 7.42506E-09 2.84214E-09 9.98961E-10 3.22648E-10 + 9.58179E-11 2.61766E-11 6.58124E-12 1.52328E-12 + -3.65197E-12 -1.57781E-11 -6.27568E-11 -2.29718E-10 -7.73530E-10 -2.39495E-09 + -6.81385E-09 -1.78011E-08 -4.26640E-08 -9.36972E-08 -1.88271E-07 -3.45420E-07 + -5.77042E-07 -8.74229E-07 -1.19395E-06 -1.45579E-06 -1.55798E-06 -1.41381E-06 + -9.95054E-07 -3.59234E-07 3.59234E-07 9.95054E-07 1.41381E-06 1.55798E-06 + 1.45579E-06 1.19395E-06 8.74229E-07 5.77042E-07 3.45420E-07 1.88271E-07 + 9.36972E-08 4.26640E-08 1.78011E-08 6.81385E-09 2.39495E-09 7.73530E-10 + 2.29718E-10 6.27568E-11 1.57781E-11 3.65197E-12 + -7.69571E-12 -3.32489E-11 -1.32246E-10 -4.84079E-10 -1.63004E-09 -5.04682E-09 + -1.43587E-08 -3.75119E-08 -8.99049E-08 -1.97446E-07 -3.96739E-07 -7.27897E-07 + -1.21599E-06 -1.84224E-06 -2.51600E-06 -3.06775E-06 -3.28311E-06 -2.97929E-06 + -2.09686E-06 -7.57007E-07 7.57007E-07 2.09686E-06 2.97929E-06 3.28311E-06 + 3.06775E-06 2.51600E-06 1.84224E-06 1.21599E-06 7.27897E-07 3.96739E-07 + 1.97446E-07 8.99049E-08 3.75119E-08 1.43587E-08 5.04682E-09 1.63004E-09 + 4.84079E-10 1.32246E-10 3.32489E-11 7.69571E-12 + -1.42139E-11 -6.14104E-11 -2.44257E-10 -8.94089E-10 -3.01067E-09 -9.32143E-09 + -2.65203E-08 -6.92841E-08 -1.66053E-07 -3.64681E-07 -7.32773E-07 -1.34442E-06 + -2.24592E-06 -3.40261E-06 -4.64702E-06 -5.66611E-06 -6.06386E-06 -5.50273E-06 + -3.87288E-06 -1.39819E-06 1.39819E-06 3.87288E-06 5.50273E-06 6.06386E-06 + 5.66611E-06 4.64702E-06 3.40261E-06 2.24592E-06 1.34442E-06 7.32773E-07 + 3.64681E-07 1.66053E-07 6.92841E-08 2.65203E-08 9.32143E-09 3.01067E-09 + 8.94089E-10 2.44257E-10 6.14104E-11 1.42139E-11 + -2.29042E-11 -9.89565E-11 -3.93596E-10 -1.44073E-09 -4.85139E-09 -1.50205E-08 + -4.27348E-08 -1.11644E-07 -2.67578E-07 -5.87646E-07 -1.18079E-06 -2.16639E-06 + -3.61907E-06 -5.48295E-06 -7.48819E-06 -9.13035E-06 -9.77129E-06 -8.86709E-06 + -6.24076E-06 -2.25304E-06 2.25304E-06 6.24076E-06 8.86709E-06 9.77129E-06 + 9.13035E-06 7.48819E-06 5.48295E-06 3.61907E-06 2.16639E-06 1.18079E-06 + 5.87646E-07 2.67578E-07 1.11644E-07 4.27348E-08 1.50205E-08 4.85139E-09 + 1.44073E-09 3.93596E-10 9.89565E-11 2.29042E-11 + -3.19406E-11 -1.37998E-10 -5.48881E-10 -2.00914E-09 -6.76541E-09 -2.09466E-08 + -5.95949E-08 -1.55691E-07 -3.73146E-07 -8.19490E-07 -1.64664E-06 -3.02110E-06 + -5.04690E-06 -7.64614E-06 -1.04425E-05 -1.27326E-05 -1.36264E-05 -1.23654E-05 + -8.70294E-06 -3.14194E-06 3.14194E-06 8.70294E-06 1.23654E-05 1.36264E-05 + 1.27326E-05 1.04425E-05 7.64614E-06 5.04690E-06 3.02110E-06 1.64664E-06 + 8.19490E-07 3.73146E-07 1.55691E-07 5.95949E-08 2.09466E-08 6.76541E-09 + 2.00914E-09 5.48881E-10 1.37998E-10 3.19406E-11 + -3.79593E-11 -1.64001E-10 -6.52307E-10 -2.38773E-09 -8.04022E-09 -2.48936E-08 + -7.08245E-08 -1.85028E-07 -4.43458E-07 -9.73908E-07 -1.95692E-06 -3.59037E-06 + -5.99790E-06 -9.08691E-06 -1.24102E-05 -1.51318E-05 -1.61940E-05 -1.46955E-05 + -1.03429E-05 -3.73398E-06 3.73398E-06 1.03429E-05 1.46955E-05 1.61940E-05 + 1.51318E-05 1.24102E-05 9.08691E-06 5.99790E-06 3.59037E-06 1.95692E-06 + 9.73908E-07 4.43458E-07 1.85028E-07 7.08245E-08 2.48936E-08 8.04022E-09 + 2.38773E-09 6.52307E-10 1.64001E-10 3.79593E-11 + -3.71999E-11 -1.60720E-10 -6.39257E-10 -2.33996E-09 -7.87937E-09 -2.43956E-08 + -6.94076E-08 -1.81327E-07 -4.34586E-07 -9.54424E-07 -1.91777E-06 -3.51854E-06 + -5.87790E-06 -8.90512E-06 -1.21619E-05 -1.48290E-05 -1.58700E-05 -1.44015E-05 + -1.01359E-05 -3.65927E-06 3.65927E-06 1.01359E-05 1.44015E-05 1.58700E-05 + 1.48290E-05 1.21619E-05 8.90512E-06 5.87790E-06 3.51854E-06 1.91777E-06 + 9.54424E-07 4.34586E-07 1.81327E-07 6.94076E-08 2.43956E-08 7.87937E-09 + 2.33996E-09 6.39257E-10 1.60720E-10 3.71999E-11 + -2.75347E-11 -1.18962E-10 -4.73168E-10 -1.73200E-09 -5.83218E-09 -1.80572E-08 + -5.13744E-08 -1.34215E-07 -3.21674E-07 -7.06449E-07 -1.41951E-06 -2.60437E-06 + -4.35073E-06 -6.59143E-06 -9.00206E-06 -1.09762E-05 -1.17467E-05 -1.06597E-05 + -7.50243E-06 -2.70853E-06 2.70853E-06 7.50243E-06 1.06597E-05 1.17467E-05 + 1.09762E-05 9.00206E-06 6.59143E-06 4.35073E-06 2.60437E-06 1.41951E-06 + 7.06449E-07 3.21674E-07 1.34215E-07 5.13744E-08 1.80572E-08 5.83218E-09 + 1.73200E-09 4.73168E-10 1.18962E-10 2.75347E-11 + -1.01914E-11 -4.40314E-11 -1.75133E-10 -6.41064E-10 -2.15866E-09 -6.68349E-09 + -1.90151E-08 -4.96769E-08 -1.19061E-07 -2.61477E-07 -5.25400E-07 -9.63951E-07 + -1.61033E-06 -2.43968E-06 -3.33192E-06 -4.06261E-06 -4.34780E-06 -3.94547E-06 + -2.77686E-06 -1.00250E-06 1.00250E-06 2.77686E-06 3.94547E-06 4.34780E-06 + 4.06261E-06 3.33192E-06 2.43968E-06 1.61033E-06 9.63951E-07 5.25400E-07 + 2.61477E-07 1.19061E-07 4.96769E-08 1.90151E-08 6.68349E-09 2.15866E-09 + 6.41064E-10 1.75133E-10 4.40314E-11 1.01914E-11 + 1.01914E-11 4.40314E-11 1.75133E-10 6.41064E-10 2.15866E-09 6.68349E-09 + 1.90151E-08 4.96769E-08 1.19061E-07 2.61477E-07 5.25400E-07 9.63951E-07 + 1.61033E-06 2.43968E-06 3.33192E-06 4.06261E-06 4.34780E-06 3.94547E-06 + 2.77686E-06 1.00250E-06 -1.00250E-06 -2.77686E-06 -3.94547E-06 -4.34780E-06 + -4.06261E-06 -3.33192E-06 -2.43968E-06 -1.61033E-06 -9.63951E-07 -5.25400E-07 + -2.61477E-07 -1.19061E-07 -4.96769E-08 -1.90151E-08 -6.68349E-09 -2.15866E-09 + -6.41064E-10 -1.75133E-10 -4.40314E-11 -1.01914E-11 + 2.75347E-11 1.18962E-10 4.73168E-10 1.73200E-09 5.83218E-09 1.80572E-08 + 5.13744E-08 1.34215E-07 3.21674E-07 7.06449E-07 1.41951E-06 2.60437E-06 + 4.35073E-06 6.59143E-06 9.00206E-06 1.09762E-05 1.17467E-05 1.06597E-05 + 7.50243E-06 2.70853E-06 -2.70853E-06 -7.50243E-06 -1.06597E-05 -1.17467E-05 + -1.09762E-05 -9.00206E-06 -6.59143E-06 -4.35073E-06 -2.60437E-06 -1.41951E-06 + -7.06449E-07 -3.21674E-07 -1.34215E-07 -5.13744E-08 -1.80572E-08 -5.83218E-09 + -1.73200E-09 -4.73168E-10 -1.18962E-10 -2.75347E-11 + 3.71999E-11 1.60720E-10 6.39257E-10 2.33996E-09 7.87937E-09 2.43956E-08 + 6.94076E-08 1.81327E-07 4.34586E-07 9.54424E-07 1.91777E-06 3.51854E-06 + 5.87790E-06 8.90512E-06 1.21619E-05 1.48290E-05 1.58700E-05 1.44015E-05 + 1.01359E-05 3.65927E-06 -3.65927E-06 -1.01359E-05 -1.44015E-05 -1.58700E-05 + -1.48290E-05 -1.21619E-05 -8.90512E-06 -5.87790E-06 -3.51854E-06 -1.91777E-06 + -9.54424E-07 -4.34586E-07 -1.81327E-07 -6.94076E-08 -2.43956E-08 -7.87937E-09 + -2.33996E-09 -6.39257E-10 -1.60720E-10 -3.71999E-11 + 3.79593E-11 1.64001E-10 6.52307E-10 2.38773E-09 8.04022E-09 2.48936E-08 + 7.08245E-08 1.85028E-07 4.43458E-07 9.73908E-07 1.95692E-06 3.59037E-06 + 5.99790E-06 9.08691E-06 1.24102E-05 1.51318E-05 1.61940E-05 1.46955E-05 + 1.03429E-05 3.73398E-06 -3.73398E-06 -1.03429E-05 -1.46955E-05 -1.61940E-05 + -1.51318E-05 -1.24102E-05 -9.08691E-06 -5.99790E-06 -3.59037E-06 -1.95692E-06 + -9.73908E-07 -4.43458E-07 -1.85028E-07 -7.08245E-08 -2.48936E-08 -8.04022E-09 + -2.38773E-09 -6.52307E-10 -1.64001E-10 -3.79593E-11 + 3.19406E-11 1.37998E-10 5.48881E-10 2.00914E-09 6.76541E-09 2.09466E-08 + 5.95949E-08 1.55691E-07 3.73146E-07 8.19490E-07 1.64664E-06 3.02110E-06 + 5.04690E-06 7.64614E-06 1.04425E-05 1.27326E-05 1.36264E-05 1.23654E-05 + 8.70294E-06 3.14194E-06 -3.14194E-06 -8.70294E-06 -1.23654E-05 -1.36264E-05 + -1.27326E-05 -1.04425E-05 -7.64614E-06 -5.04690E-06 -3.02110E-06 -1.64664E-06 + -8.19490E-07 -3.73146E-07 -1.55691E-07 -5.95949E-08 -2.09466E-08 -6.76541E-09 + -2.00914E-09 -5.48881E-10 -1.37998E-10 -3.19406E-11 + 2.29042E-11 9.89565E-11 3.93596E-10 1.44073E-09 4.85139E-09 1.50205E-08 + 4.27348E-08 1.11644E-07 2.67578E-07 5.87646E-07 1.18079E-06 2.16639E-06 + 3.61907E-06 5.48295E-06 7.48819E-06 9.13035E-06 9.77129E-06 8.86709E-06 + 6.24076E-06 2.25304E-06 -2.25304E-06 -6.24076E-06 -8.86709E-06 -9.77129E-06 + -9.13035E-06 -7.48819E-06 -5.48295E-06 -3.61907E-06 -2.16639E-06 -1.18079E-06 + -5.87646E-07 -2.67578E-07 -1.11644E-07 -4.27348E-08 -1.50205E-08 -4.85139E-09 + -1.44073E-09 -3.93596E-10 -9.89565E-11 -2.29042E-11 + 1.42139E-11 6.14104E-11 2.44257E-10 8.94089E-10 3.01067E-09 9.32143E-09 + 2.65203E-08 6.92841E-08 1.66053E-07 3.64681E-07 7.32773E-07 1.34442E-06 + 2.24592E-06 3.40261E-06 4.64702E-06 5.66611E-06 6.06386E-06 5.50273E-06 + 3.87288E-06 1.39819E-06 -1.39819E-06 -3.87288E-06 -5.50273E-06 -6.06386E-06 + -5.66611E-06 -4.64702E-06 -3.40261E-06 -2.24592E-06 -1.34442E-06 -7.32773E-07 + -3.64681E-07 -1.66053E-07 -6.92841E-08 -2.65203E-08 -9.32143E-09 -3.01067E-09 + -8.94089E-10 -2.44257E-10 -6.14104E-11 -1.42139E-11 + 7.69571E-12 3.32489E-11 1.32246E-10 4.84079E-10 1.63004E-09 5.04682E-09 + 1.43587E-08 3.75119E-08 8.99049E-08 1.97446E-07 3.96739E-07 7.27897E-07 + 1.21599E-06 1.84224E-06 2.51600E-06 3.06775E-06 3.28311E-06 2.97929E-06 + 2.09686E-06 7.57007E-07 -7.57007E-07 -2.09686E-06 -2.97929E-06 -3.28311E-06 + -3.06775E-06 -2.51600E-06 -1.84224E-06 -1.21599E-06 -7.27897E-07 -3.96739E-07 + -1.97446E-07 -8.99049E-08 -3.75119E-08 -1.43587E-08 -5.04682E-09 -1.63004E-09 + -4.84079E-10 -1.32246E-10 -3.32489E-11 -7.69571E-12 + 3.65197E-12 1.57781E-11 6.27568E-11 2.29718E-10 7.73530E-10 2.39495E-09 + 6.81385E-09 1.78011E-08 4.26640E-08 9.36972E-08 1.88271E-07 3.45420E-07 + 5.77042E-07 8.74229E-07 1.19395E-06 1.45579E-06 1.55798E-06 1.41381E-06 + 9.95054E-07 3.59234E-07 -3.59234E-07 -9.95054E-07 -1.41381E-06 -1.55798E-06 + -1.45579E-06 -1.19395E-06 -8.74229E-07 -5.77042E-07 -3.45420E-07 -1.88271E-07 + -9.36972E-08 -4.26640E-08 -1.78011E-08 -6.81385E-09 -2.39495E-09 -7.73530E-10 + -2.29718E-10 -6.27568E-11 -1.57781E-11 -3.65197E-12 + 1.52328E-12 6.58124E-12 2.61766E-11 9.58179E-11 3.22648E-10 9.98961E-10 + 2.84214E-09 7.42506E-09 1.77956E-08 3.90822E-08 7.85300E-08 1.44079E-07 + 2.40691E-07 3.64651E-07 4.98012E-07 6.07227E-07 6.49853E-07 5.89717E-07 + 4.15049E-07 1.49841E-07 -1.49841E-07 -4.15049E-07 -5.89717E-07 -6.49853E-07 + -6.07227E-07 -4.98012E-07 -3.64651E-07 -2.40691E-07 -1.44079E-07 -7.85300E-08 + -3.90822E-08 -1.77956E-08 -7.42506E-09 -2.84214E-09 -9.98961E-10 -3.22648E-10 + -9.58179E-11 -2.61766E-11 -6.58124E-12 -1.52328E-12 + 5.59549E-13 2.41750E-12 9.61551E-12 3.51970E-11 1.18519E-10 3.66950E-10 + 1.04401E-09 2.72746E-09 6.53691E-09 1.43562E-08 2.88466E-08 5.29248E-08 + 8.84136E-08 1.33948E-07 1.82936E-07 2.23054E-07 2.38712E-07 2.16622E-07 + 1.52461E-07 5.50414E-08 -5.50414E-08 -1.52461E-07 -2.16622E-07 -2.38712E-07 + -2.23054E-07 -1.82936E-07 -1.33948E-07 -8.84136E-08 -5.29248E-08 -2.88466E-08 + -1.43562E-08 -6.53691E-09 -2.72746E-09 -1.04401E-09 -3.66950E-10 -1.18519E-10 + -3.51970E-11 -9.61551E-12 -2.41750E-12 -5.59549E-13 + 1.81274E-13 7.83184E-13 3.11508E-12 1.14026E-11 3.83959E-11 1.18879E-10 + 3.38221E-10 8.83599E-10 2.11772E-09 4.65088E-09 9.34526E-09 1.71457E-08 + 2.86428E-08 4.33944E-08 5.92647E-08 7.22614E-08 7.73341E-08 7.01778E-08 + 4.93918E-08 1.78314E-08 -1.78314E-08 -4.93918E-08 -7.01778E-08 -7.73341E-08 + -7.22614E-08 -5.92647E-08 -4.33944E-08 -2.86428E-08 -1.71457E-08 -9.34526E-09 + -4.65088E-09 -2.11772E-09 -8.83599E-10 -3.38221E-10 -1.18879E-10 -3.83959E-11 + -1.14026E-11 -3.11508E-12 -7.83184E-13 -1.81274E-13 + 5.18583E-14 2.24051E-13 8.91155E-13 3.26202E-12 1.09842E-11 3.40085E-11 + 9.67574E-11 2.52778E-10 6.05833E-10 1.33051E-09 2.67347E-09 4.90501E-09 + 8.19407E-09 1.24142E-08 1.69543E-08 2.06724E-08 2.21235E-08 2.00763E-08 + 1.41299E-08 5.10117E-09 -5.10117E-09 -1.41299E-08 -2.00763E-08 -2.21235E-08 + -2.06724E-08 -1.69543E-08 -1.24142E-08 -8.19407E-09 -4.90501E-09 -2.67347E-09 + -1.33051E-09 -6.05833E-10 -2.52778E-10 -9.67574E-11 -3.40085E-11 -1.09842E-11 + -3.26202E-12 -8.91155E-13 -2.24051E-13 -5.18583E-14 + 1.31167E-14 5.66700E-14 2.25403E-13 8.25072E-13 2.77827E-12 8.60189E-12 + 2.44732E-11 6.39359E-11 1.53235E-10 3.36531E-10 6.76209E-10 1.24064E-09 + 2.07255E-09 3.13995E-09 4.28830E-09 5.22873E-09 5.59578E-09 5.07796E-09 + 3.57392E-09 1.29026E-09 -1.29026E-09 -3.57392E-09 -5.07796E-09 -5.59578E-09 + -5.22873E-09 -4.28830E-09 -3.13995E-09 -2.07255E-09 -1.24064E-09 -6.76209E-10 + -3.36531E-10 -1.53235E-10 -6.39359E-11 -2.44732E-11 -8.60189E-12 -2.77827E-12 + -8.25072E-13 -2.25403E-13 -5.66700E-14 -1.31167E-14 + 2.93708E-15 1.26895E-14 5.04720E-14 1.84749E-13 6.22108E-13 1.92613E-12 + 5.48001E-12 1.43165E-11 3.43123E-11 7.53557E-11 1.51416E-10 2.77803E-10 + 4.64084E-10 7.03096E-10 9.60233E-10 1.17081E-09 1.25300E-09 1.13705E-09 + 8.00269E-10 2.88913E-10 -2.88913E-10 -8.00269E-10 -1.13705E-09 -1.25300E-09 + -1.17081E-09 -9.60233E-10 -7.03096E-10 -4.64084E-10 -2.77803E-10 -1.51416E-10 + -7.53557E-11 -3.43123E-11 -1.43165E-11 -5.48001E-12 -1.92613E-12 -6.22108E-13 + -1.84749E-13 -5.04720E-14 -1.26895E-14 -2.93708E-15 + 5.83051E-16 2.51904E-15 1.00194E-14 3.66753E-14 1.23497E-13 3.82363E-13 + 1.08786E-12 2.84202E-12 6.81148E-12 1.49591E-11 3.00582E-11 5.51478E-11 + 9.21272E-11 1.39574E-10 1.90620E-10 2.32423E-10 2.48738E-10 2.25721E-10 + 1.58865E-10 5.73532E-11 -5.73532E-11 -1.58865E-10 -2.25721E-10 -2.48738E-10 + -2.32423E-10 -1.90620E-10 -1.39574E-10 -9.21272E-11 -5.51478E-11 -3.00582E-11 + -1.49591E-11 -6.81148E-12 -2.84202E-12 -1.08786E-12 -3.82363E-13 -1.23497E-13 + -3.66753E-14 -1.00194E-14 -2.51904E-15 -5.83051E-16 + 1.02770E-16 4.44013E-16 1.76604E-15 6.46450E-15 2.17679E-14 6.73964E-14 + 1.91749E-13 5.00942E-13 1.20061E-12 2.63674E-12 5.29814E-12 9.72050E-12 + 1.62386E-11 2.46017E-11 3.35991E-11 4.09674E-11 4.38433E-11 3.97861E-11 + 2.80019E-11 1.01092E-11 -1.01092E-11 -2.80019E-11 -3.97861E-11 -4.38433E-11 + -4.09674E-11 -3.35991E-11 -2.46017E-11 -1.62386E-11 -9.72050E-12 -5.29814E-12 + -2.63674E-12 -1.20061E-12 -5.00942E-13 -1.91749E-13 -6.73964E-14 -2.17679E-14 + -6.46450E-15 -1.76604E-15 -4.44013E-16 -1.02770E-16 + 1.61106E-17 6.96051E-17 2.76851E-16 1.01340E-15 3.41242E-15 1.05653E-14 + 3.00592E-14 7.85295E-14 1.88212E-13 4.13345E-13 8.30555E-13 1.52382E-12 + 2.54562E-12 3.85666E-12 5.26712E-12 6.42220E-12 6.87303E-12 6.23702E-12 + 4.38968E-12 1.58476E-12 -1.58476E-12 -4.38968E-12 -6.23702E-12 -6.87303E-12 + -6.42220E-12 -5.26712E-12 -3.85666E-12 -2.54562E-12 -1.52382E-12 -8.30555E-13 + -4.13345E-13 -1.88212E-13 -7.85295E-14 -3.00592E-14 -1.05653E-14 -3.41242E-15 + -1.01340E-15 -2.76851E-16 -6.96051E-17 -1.61106E-17 + 2.24996E-18 9.72082E-18 3.86642E-17 1.41528E-16 4.76567E-16 1.47551E-15 + 4.19798E-15 1.09672E-14 2.62850E-14 5.77264E-14 1.15993E-13 2.12812E-13 + 3.55513E-13 5.38608E-13 7.35589E-13 8.96904E-13 9.59865E-13 8.71041E-13 + 6.13048E-13 2.21322E-13 -2.21322E-13 -6.13048E-13 -8.71041E-13 -9.59865E-13 + -8.96904E-13 -7.35589E-13 -5.38608E-13 -3.55513E-13 -2.12812E-13 -1.15993E-13 + -5.77264E-14 -2.62850E-14 -1.09672E-14 -4.19798E-15 -1.47551E-15 -4.76567E-16 + -1.41528E-16 -3.86642E-17 -9.72082E-18 -2.24996E-18 + 2.80386E-19 1.21139E-18 4.81827E-18 1.76370E-17 5.93892E-17 1.83877E-16 + 5.23146E-16 1.36671E-15 3.27560E-15 7.19378E-15 1.44548E-14 2.65203E-14 + 4.43035E-14 6.71205E-14 9.16680E-14 1.11771E-13 1.19617E-13 1.08548E-13 + 7.63971E-14 2.75809E-14 -2.75809E-14 -7.63971E-14 -1.08548E-13 -1.19617E-13 + -1.11771E-13 -9.16680E-14 -6.71205E-14 -4.43035E-14 -2.65203E-14 -1.44548E-14 + -7.19378E-15 -3.27560E-15 -1.36671E-15 -5.23146E-16 -1.83877E-16 -5.93892E-17 + -1.76370E-17 -4.81827E-18 -1.21139E-18 -2.80386E-19 + -1.37552E-18 -5.94288E-18 -2.36376E-17 -8.65239E-17 -2.91352E-16 -9.02065E-16 + -2.56646E-15 -6.70485E-15 -1.60695E-14 -3.52914E-14 -7.09128E-14 -1.30104E-13 + -2.17345E-13 -3.29281E-13 -4.49707E-13 -5.48328E-13 -5.86819E-13 -5.32516E-13 + -3.74791E-13 -1.35307E-13 1.35307E-13 3.74791E-13 5.32516E-13 5.86819E-13 + 5.48328E-13 4.49707E-13 3.29281E-13 2.17345E-13 1.30104E-13 7.09128E-14 + 3.52914E-14 1.60695E-14 6.70485E-15 2.56646E-15 9.02065E-16 2.91352E-16 + 8.65239E-17 2.36376E-17 5.94288E-18 1.37552E-18 + -1.07140E-17 -4.62891E-17 -1.84113E-16 -6.73934E-16 -2.26934E-15 -7.02618E-15 + -1.99901E-14 -5.22240E-14 -1.25165E-13 -2.74884E-13 -5.52339E-13 -1.01338E-12 + -1.69290E-12 -2.56477E-12 -3.50276E-12 -4.27092E-12 -4.57073E-12 -4.14777E-12 + -2.91924E-12 -1.05390E-12 1.05390E-12 2.91924E-12 4.14777E-12 4.57073E-12 + 4.27092E-12 3.50276E-12 2.56477E-12 1.69290E-12 1.01338E-12 5.52339E-13 + 2.74884E-13 1.25165E-13 5.22240E-14 1.99901E-14 7.02618E-15 2.26934E-15 + 6.73934E-16 1.84113E-16 4.62891E-17 1.07140E-17 + -7.46467E-17 -3.22507E-16 -1.28276E-15 -4.69546E-15 -1.58111E-14 -4.89531E-14 + -1.39276E-13 -3.63857E-13 -8.72058E-13 -1.91519E-12 -3.84828E-12 -7.06045E-12 + -1.17948E-11 -1.78694E-11 -2.44046E-11 -2.97565E-11 -3.18454E-11 -2.88985E-11 + -2.03391E-11 -7.34280E-12 7.34280E-12 2.03391E-11 2.88985E-11 3.18454E-11 + 2.97565E-11 2.44046E-11 1.78694E-11 1.17948E-11 7.06045E-12 3.84828E-12 + 1.91519E-12 8.72058E-13 3.63857E-13 1.39276E-13 4.89531E-14 1.58111E-14 + 4.69546E-15 1.28276E-15 3.22507E-16 7.46467E-17 + -4.64690E-16 -2.00767E-15 -7.98543E-15 -2.92302E-14 -9.84269E-14 -3.04743E-13 + -8.67021E-13 -2.26508E-12 -5.42873E-12 -1.19224E-11 -2.39563E-11 -4.39526E-11 + -7.34252E-11 -1.11240E-10 -1.51923E-10 -1.85240E-10 -1.98244E-10 -1.79899E-10 + -1.26615E-10 -4.57104E-11 4.57104E-11 1.26615E-10 1.79899E-10 1.98244E-10 + 1.85240E-10 1.51923E-10 1.11240E-10 7.34252E-11 4.39526E-11 2.39563E-11 + 1.19224E-11 5.42873E-12 2.26508E-12 8.67021E-13 3.04743E-13 9.84269E-14 + 2.92302E-14 7.98543E-15 2.00767E-15 4.64690E-16 + -2.58093E-15 -1.11508E-14 -4.43517E-14 -1.62347E-13 -5.46671E-13 -1.69256E-12 + -4.81550E-12 -1.25805E-11 -3.01516E-11 -6.62180E-11 -1.33055E-10 -2.44116E-10 + -4.07809E-10 -6.17838E-10 -8.43795E-10 -1.02884E-09 -1.10106E-09 -9.99172E-10 + -7.03228E-10 -2.53879E-10 2.53879E-10 7.03228E-10 9.99172E-10 1.10106E-09 + 1.02884E-09 8.43795E-10 6.17838E-10 4.07809E-10 2.44116E-10 1.33055E-10 + 6.62180E-11 3.01516E-11 1.25805E-11 4.81550E-12 1.69256E-12 5.46671E-13 + 1.62347E-13 4.43517E-14 1.11508E-14 2.58093E-15 + -1.27682E-14 -5.51643E-14 -2.19414E-13 -8.03150E-13 -2.70445E-12 -8.37334E-12 + -2.38229E-11 -6.22372E-11 -1.49164E-10 -3.27589E-10 -6.58242E-10 -1.20768E-09 + -2.01749E-09 -3.05652E-09 -4.17436E-09 -5.08980E-09 -5.44710E-09 -4.94304E-09 + -3.47896E-09 -1.25597E-09 1.25597E-09 3.47896E-09 4.94304E-09 5.44710E-09 + 5.08980E-09 4.17436E-09 3.05652E-09 2.01749E-09 1.20768E-09 6.58242E-10 + 3.27589E-10 1.49164E-10 6.22372E-11 2.38229E-11 8.37334E-12 2.70445E-12 + 8.03150E-13 2.19414E-13 5.51643E-14 1.27682E-14 + -5.61664E-14 -2.42664E-13 -9.65185E-13 -3.53300E-12 -1.18967E-11 -3.68337E-11 + -1.04795E-10 -2.73777E-10 -6.56162E-10 -1.44104E-09 -2.89556E-09 -5.31248E-09 + -8.87478E-09 -1.34454E-08 -1.83627E-08 -2.23897E-08 -2.39614E-08 -2.17441E-08 + -1.53037E-08 -5.52494E-09 5.52494E-09 1.53037E-08 2.17441E-08 2.39614E-08 + 2.23897E-08 1.83627E-08 1.34454E-08 8.87478E-09 5.31248E-09 2.89556E-09 + 1.44104E-09 6.56162E-10 2.73777E-10 1.04795E-10 3.68337E-11 1.18967E-11 + 3.53300E-12 9.65185E-13 2.42664E-13 5.61664E-14 + -2.19319E-13 -9.47557E-13 -3.76887E-12 -1.37957E-11 -4.64544E-11 -1.43829E-10 + -4.09206E-10 -1.06905E-09 -2.56219E-09 -5.62700E-09 -1.13066E-08 -2.07443E-08 + -3.46544E-08 -5.25019E-08 -7.17031E-08 -8.74276E-08 -9.35649E-08 -8.49066E-08 + -5.97581E-08 -2.15739E-08 2.15739E-08 5.97581E-08 8.49066E-08 9.35649E-08 + 8.74276E-08 7.17031E-08 5.25019E-08 3.46544E-08 2.07443E-08 1.13066E-08 + 5.62700E-09 2.56219E-09 1.06905E-09 4.09206E-10 1.43829E-10 4.64544E-11 + 1.37957E-11 3.76887E-12 9.47557E-13 2.19319E-13 + -7.58959E-13 -3.27904E-12 -1.30423E-11 -4.77404E-11 -1.60757E-10 -4.97723E-10 + -1.41607E-09 -3.69946E-09 -8.86651E-09 -1.94724E-08 -3.91268E-08 -7.17860E-08 + -1.19922E-07 -1.81684E-07 -2.48130E-07 -3.02545E-07 -3.23783E-07 -2.93821E-07 + -2.06794E-07 -7.46568E-08 7.46568E-08 2.06794E-07 2.93821E-07 3.23783E-07 + 3.02545E-07 2.48130E-07 1.81684E-07 1.19922E-07 7.17860E-08 3.91268E-08 + 1.94724E-08 8.86651E-09 3.69946E-09 1.41607E-09 4.97723E-10 1.60757E-10 + 4.77404E-11 1.30423E-11 3.27904E-12 7.58959E-13 + -2.32388E-12 -1.00402E-11 -3.99344E-11 -1.46178E-10 -4.92225E-10 -1.52399E-09 + -4.33590E-09 -1.13275E-08 -2.71486E-08 -5.96229E-08 -1.19803E-07 -2.19803E-07 + -3.67193E-07 -5.56303E-07 -7.59756E-07 -9.26371E-07 -9.91401E-07 -8.99658E-07 + -6.33189E-07 -2.28594E-07 2.28594E-07 6.33189E-07 8.99658E-07 9.91401E-07 + 9.26371E-07 7.59756E-07 5.56303E-07 3.67193E-07 2.19803E-07 1.19803E-07 + 5.96229E-08 2.71486E-08 1.13275E-08 4.33590E-09 1.52399E-09 4.92225E-10 + 1.46178E-10 3.99344E-11 1.00402E-11 2.32388E-12 + -6.28590E-12 -2.71579E-11 -1.08019E-10 -3.95398E-10 -1.33143E-09 -4.12227E-09 + -1.17282E-08 -3.06399E-08 -7.34348E-08 -1.61275E-07 -3.24059E-07 -5.94550E-07 + -9.93227E-07 -1.50476E-06 -2.05508E-06 -2.50576E-06 -2.68166E-06 -2.43350E-06 + -1.71272E-06 -6.18327E-07 6.18327E-07 1.71272E-06 2.43350E-06 2.68166E-06 + 2.50576E-06 2.05508E-06 1.50476E-06 9.93227E-07 5.94550E-07 3.24059E-07 + 1.61275E-07 7.34348E-08 3.06399E-08 1.17282E-08 4.12227E-09 1.33143E-09 + 3.95398E-10 1.08019E-10 2.71579E-11 6.28590E-12 + -1.49941E-11 -6.47811E-11 -2.57664E-10 -9.43163E-10 -3.17592E-09 -9.83306E-09 + -2.79760E-08 -7.30869E-08 -1.75168E-07 -3.84698E-07 -7.72993E-07 -1.41821E-06 + -2.36919E-06 -3.58937E-06 -4.90208E-06 -5.97711E-06 -6.39669E-06 -5.80476E-06 + -4.08545E-06 -1.47493E-06 1.47493E-06 4.08545E-06 5.80476E-06 6.39669E-06 + 5.97711E-06 4.90208E-06 3.58937E-06 2.36919E-06 1.41821E-06 7.72993E-07 + 3.84698E-07 1.75168E-07 7.30869E-08 2.79760E-08 9.83306E-09 3.17592E-09 + 9.43163E-10 2.57664E-10 6.47811E-11 1.49941E-11 + -3.14721E-11 -1.35974E-10 -5.40830E-10 -1.97967E-09 -6.66617E-09 -2.06393E-08 + -5.87208E-08 -1.53408E-07 -3.67672E-07 -8.07470E-07 -1.62249E-06 -2.97679E-06 + -4.97287E-06 -7.53398E-06 -1.02893E-05 -1.25458E-05 -1.34265E-05 -1.21841E-05 + -8.57531E-06 -3.09586E-06 3.09586E-06 8.57531E-06 1.21841E-05 1.34265E-05 + 1.25458E-05 1.02893E-05 7.53398E-06 4.97287E-06 2.97679E-06 1.62249E-06 + 8.07470E-07 3.67672E-07 1.53408E-07 5.87208E-08 2.06393E-08 6.66617E-09 + 1.97967E-09 5.40830E-10 1.35974E-10 3.14721E-11 + -5.79512E-11 -2.50375E-10 -9.95856E-10 -3.64527E-09 -1.22747E-08 -3.80042E-08 + -1.08125E-07 -2.82477E-07 -6.77012E-07 -1.48683E-06 -2.98757E-06 -5.48130E-06 + -9.15679E-06 -1.38727E-05 -1.89463E-05 -2.31012E-05 -2.47230E-05 -2.24354E-05 + -1.57905E-05 -5.70076E-06 5.70076E-06 1.57905E-05 2.24354E-05 2.47230E-05 + 2.31012E-05 1.89463E-05 1.38727E-05 9.15679E-06 5.48130E-06 2.98757E-06 + 1.48683E-06 6.77012E-07 2.82477E-07 1.08125E-07 3.80042E-08 1.22747E-08 + 3.64527E-09 9.95856E-10 2.50375E-10 5.79512E-11 + -9.31638E-11 -4.02509E-10 -1.60096E-09 -5.86023E-09 -1.97332E-08 -6.10966E-08 + -1.73825E-07 -4.54117E-07 -1.08838E-06 -2.39027E-06 -4.80290E-06 -8.81188E-06 + -1.47207E-05 -2.23021E-05 -3.04585E-05 -3.71383E-05 -3.97459E-05 -3.60689E-05 + -2.53867E-05 -9.16540E-06 9.16540E-06 2.53867E-05 3.60689E-05 3.97459E-05 + 3.71383E-05 3.04585E-05 2.23021E-05 1.47207E-05 8.81188E-06 4.80290E-06 + 2.39027E-06 1.08838E-06 4.54117E-07 1.73825E-07 6.10966E-08 1.97332E-08 + 5.86023E-09 1.60096E-09 4.02509E-10 9.31638E-11 + -1.29691E-10 -5.60322E-10 -2.22866E-09 -8.15786E-09 -2.74700E-08 -8.50507E-08 + -2.41977E-07 -6.32163E-07 -1.51511E-06 -3.32743E-06 -6.68598E-06 -1.22668E-05 + -2.04923E-05 -3.10461E-05 -4.24005E-05 -5.16993E-05 -5.53298E-05 -5.02121E-05 + -3.53422E-05 -1.27599E-05 1.27599E-05 3.53422E-05 5.02121E-05 5.53298E-05 + 5.16993E-05 4.24005E-05 3.10461E-05 2.04923E-05 1.22668E-05 6.68598E-06 + 3.32743E-06 1.51511E-06 6.32163E-07 2.41977E-07 8.50507E-08 2.74700E-08 + 8.15786E-09 2.22866E-09 5.60322E-10 1.29691E-10 + -1.53929E-10 -6.65042E-10 -2.64518E-09 -9.68251E-09 -3.26040E-08 -1.00946E-07 + -2.87201E-07 -7.50310E-07 -1.79827E-06 -3.94930E-06 -7.93554E-06 -1.45593E-05 + -2.43221E-05 -3.68484E-05 -5.03248E-05 -6.13616E-05 -6.56707E-05 -5.95967E-05 + -4.19478E-05 -1.51448E-05 1.51448E-05 4.19478E-05 5.95967E-05 6.56707E-05 + 6.13616E-05 5.03248E-05 3.68484E-05 2.43221E-05 1.45593E-05 7.93554E-06 + 3.94930E-06 1.79827E-06 7.50310E-07 2.87201E-07 1.00946E-07 3.26040E-08 + 9.68251E-09 2.64518E-09 6.65042E-10 1.53929E-10 + -1.50713E-10 -6.51147E-10 -2.58991E-09 -9.48021E-09 -3.19228E-08 -9.88370E-08 + -2.81201E-07 -7.34634E-07 -1.76070E-06 -3.86679E-06 -7.76974E-06 -1.42551E-05 + -2.38140E-05 -3.60785E-05 -4.92734E-05 -6.00794E-05 -6.42979E-05 -5.83501E-05 + -4.10694E-05 -1.48275E-05 1.48275E-05 4.10694E-05 5.83501E-05 6.42979E-05 + 6.00794E-05 4.92734E-05 3.60785E-05 2.38140E-05 1.42551E-05 7.76974E-06 + 3.86679E-06 1.76070E-06 7.34634E-07 2.81201E-07 9.88370E-08 3.19228E-08 + 9.48021E-09 2.58991E-09 6.51147E-10 1.50713E-10 + -1.11491E-10 -4.81692E-10 -1.91591E-09 -7.01307E-09 -2.36152E-08 -7.31156E-08 + -2.08021E-07 -5.43452E-07 -1.30249E-06 -2.86049E-06 -5.74774E-06 -1.05454E-05 + -1.76166E-05 -2.66894E-05 -3.64504E-05 -4.44441E-05 -4.75644E-05 -4.31637E-05 + -3.03798E-05 -1.09679E-05 1.09679E-05 3.03798E-05 4.31637E-05 4.75644E-05 + 4.44441E-05 3.64504E-05 2.66894E-05 1.76166E-05 1.05454E-05 5.74774E-06 + 2.86049E-06 1.30249E-06 5.43452E-07 2.08021E-07 7.31156E-08 2.36152E-08 + 7.01307E-09 1.91591E-09 4.81692E-10 1.11491E-10 + -4.12546E-11 -1.78238E-10 -7.08936E-10 -2.59502E-09 -8.73822E-09 -2.70547E-08 + -7.69730E-08 -2.01091E-07 -4.81956E-07 -1.05846E-06 -2.12681E-06 -3.90206E-06 + -6.51859E-06 -9.87578E-06 -1.34876E-05 -1.64454E-05 -1.75999E-05 -1.59714E-05 + -1.12410E-05 -4.05826E-06 4.05826E-06 1.12410E-05 1.59714E-05 1.75999E-05 + 1.64454E-05 1.34876E-05 9.87578E-06 6.51859E-06 3.90206E-06 2.12681E-06 + 1.05846E-06 4.81956E-07 2.01091E-07 7.69730E-08 2.70547E-08 8.73822E-09 + 2.59502E-09 7.08936E-10 1.78238E-10 4.12546E-11 + 4.12546E-11 1.78238E-10 7.08936E-10 2.59502E-09 8.73822E-09 2.70547E-08 + 7.69730E-08 2.01091E-07 4.81956E-07 1.05846E-06 2.12681E-06 3.90206E-06 + 6.51859E-06 9.87578E-06 1.34876E-05 1.64454E-05 1.75999E-05 1.59714E-05 + 1.12410E-05 4.05826E-06 -4.05826E-06 -1.12410E-05 -1.59714E-05 -1.75999E-05 + -1.64454E-05 -1.34876E-05 -9.87578E-06 -6.51859E-06 -3.90206E-06 -2.12681E-06 + -1.05846E-06 -4.81956E-07 -2.01091E-07 -7.69730E-08 -2.70547E-08 -8.73822E-09 + -2.59502E-09 -7.08936E-10 -1.78238E-10 -4.12546E-11 + 1.11491E-10 4.81692E-10 1.91591E-09 7.01307E-09 2.36152E-08 7.31156E-08 + 2.08021E-07 5.43452E-07 1.30249E-06 2.86049E-06 5.74774E-06 1.05454E-05 + 1.76166E-05 2.66894E-05 3.64504E-05 4.44441E-05 4.75644E-05 4.31637E-05 + 3.03798E-05 1.09679E-05 -1.09679E-05 -3.03798E-05 -4.31637E-05 -4.75644E-05 + -4.44441E-05 -3.64504E-05 -2.66894E-05 -1.76166E-05 -1.05454E-05 -5.74774E-06 + -2.86049E-06 -1.30249E-06 -5.43452E-07 -2.08021E-07 -7.31156E-08 -2.36152E-08 + -7.01307E-09 -1.91591E-09 -4.81692E-10 -1.11491E-10 + 1.50713E-10 6.51147E-10 2.58991E-09 9.48021E-09 3.19228E-08 9.88370E-08 + 2.81201E-07 7.34634E-07 1.76070E-06 3.86679E-06 7.76974E-06 1.42551E-05 + 2.38140E-05 3.60785E-05 4.92734E-05 6.00794E-05 6.42979E-05 5.83501E-05 + 4.10694E-05 1.48275E-05 -1.48275E-05 -4.10694E-05 -5.83501E-05 -6.42979E-05 + -6.00794E-05 -4.92734E-05 -3.60785E-05 -2.38140E-05 -1.42551E-05 -7.76974E-06 + -3.86679E-06 -1.76070E-06 -7.34634E-07 -2.81201E-07 -9.88370E-08 -3.19228E-08 + -9.48021E-09 -2.58991E-09 -6.51147E-10 -1.50713E-10 + 1.53929E-10 6.65042E-10 2.64518E-09 9.68251E-09 3.26040E-08 1.00946E-07 + 2.87201E-07 7.50310E-07 1.79827E-06 3.94930E-06 7.93554E-06 1.45593E-05 + 2.43221E-05 3.68484E-05 5.03248E-05 6.13616E-05 6.56707E-05 5.95967E-05 + 4.19478E-05 1.51448E-05 -1.51448E-05 -4.19478E-05 -5.95967E-05 -6.56707E-05 + -6.13616E-05 -5.03248E-05 -3.68484E-05 -2.43221E-05 -1.45593E-05 -7.93554E-06 + -3.94930E-06 -1.79827E-06 -7.50310E-07 -2.87201E-07 -1.00946E-07 -3.26040E-08 + -9.68251E-09 -2.64518E-09 -6.65042E-10 -1.53929E-10 + 1.29691E-10 5.60322E-10 2.22866E-09 8.15786E-09 2.74700E-08 8.50507E-08 + 2.41977E-07 6.32163E-07 1.51511E-06 3.32743E-06 6.68598E-06 1.22668E-05 + 2.04923E-05 3.10461E-05 4.24005E-05 5.16993E-05 5.53298E-05 5.02121E-05 + 3.53422E-05 1.27599E-05 -1.27599E-05 -3.53422E-05 -5.02121E-05 -5.53298E-05 + -5.16993E-05 -4.24005E-05 -3.10461E-05 -2.04923E-05 -1.22668E-05 -6.68598E-06 + -3.32743E-06 -1.51511E-06 -6.32163E-07 -2.41977E-07 -8.50507E-08 -2.74700E-08 + -8.15786E-09 -2.22866E-09 -5.60322E-10 -1.29691E-10 + 9.31638E-11 4.02509E-10 1.60096E-09 5.86023E-09 1.97332E-08 6.10966E-08 + 1.73825E-07 4.54117E-07 1.08838E-06 2.39027E-06 4.80290E-06 8.81188E-06 + 1.47207E-05 2.23021E-05 3.04585E-05 3.71383E-05 3.97459E-05 3.60689E-05 + 2.53867E-05 9.16540E-06 -9.16540E-06 -2.53867E-05 -3.60689E-05 -3.97459E-05 + -3.71383E-05 -3.04585E-05 -2.23021E-05 -1.47207E-05 -8.81188E-06 -4.80290E-06 + -2.39027E-06 -1.08838E-06 -4.54117E-07 -1.73825E-07 -6.10966E-08 -1.97332E-08 + -5.86023E-09 -1.60096E-09 -4.02509E-10 -9.31638E-11 + 5.79512E-11 2.50375E-10 9.95856E-10 3.64527E-09 1.22747E-08 3.80042E-08 + 1.08125E-07 2.82477E-07 6.77012E-07 1.48683E-06 2.98757E-06 5.48130E-06 + 9.15679E-06 1.38727E-05 1.89463E-05 2.31012E-05 2.47230E-05 2.24354E-05 + 1.57905E-05 5.70076E-06 -5.70076E-06 -1.57905E-05 -2.24354E-05 -2.47230E-05 + -2.31012E-05 -1.89463E-05 -1.38727E-05 -9.15679E-06 -5.48130E-06 -2.98757E-06 + -1.48683E-06 -6.77012E-07 -2.82477E-07 -1.08125E-07 -3.80042E-08 -1.22747E-08 + -3.64527E-09 -9.95856E-10 -2.50375E-10 -5.79512E-11 + 3.14721E-11 1.35974E-10 5.40830E-10 1.97967E-09 6.66617E-09 2.06393E-08 + 5.87208E-08 1.53408E-07 3.67672E-07 8.07470E-07 1.62249E-06 2.97679E-06 + 4.97287E-06 7.53398E-06 1.02893E-05 1.25458E-05 1.34265E-05 1.21841E-05 + 8.57531E-06 3.09586E-06 -3.09586E-06 -8.57531E-06 -1.21841E-05 -1.34265E-05 + -1.25458E-05 -1.02893E-05 -7.53398E-06 -4.97287E-06 -2.97679E-06 -1.62249E-06 + -8.07470E-07 -3.67672E-07 -1.53408E-07 -5.87208E-08 -2.06393E-08 -6.66617E-09 + -1.97967E-09 -5.40830E-10 -1.35974E-10 -3.14721E-11 + 1.49941E-11 6.47811E-11 2.57664E-10 9.43163E-10 3.17592E-09 9.83306E-09 + 2.79760E-08 7.30869E-08 1.75168E-07 3.84698E-07 7.72993E-07 1.41821E-06 + 2.36919E-06 3.58937E-06 4.90208E-06 5.97711E-06 6.39669E-06 5.80476E-06 + 4.08545E-06 1.47493E-06 -1.47493E-06 -4.08545E-06 -5.80476E-06 -6.39669E-06 + -5.97711E-06 -4.90208E-06 -3.58937E-06 -2.36919E-06 -1.41821E-06 -7.72993E-07 + -3.84698E-07 -1.75168E-07 -7.30869E-08 -2.79760E-08 -9.83306E-09 -3.17592E-09 + -9.43163E-10 -2.57664E-10 -6.47811E-11 -1.49941E-11 + 6.28590E-12 2.71579E-11 1.08019E-10 3.95398E-10 1.33143E-09 4.12227E-09 + 1.17282E-08 3.06399E-08 7.34348E-08 1.61275E-07 3.24059E-07 5.94550E-07 + 9.93227E-07 1.50476E-06 2.05508E-06 2.50576E-06 2.68166E-06 2.43350E-06 + 1.71272E-06 6.18327E-07 -6.18327E-07 -1.71272E-06 -2.43350E-06 -2.68166E-06 + -2.50576E-06 -2.05508E-06 -1.50476E-06 -9.93227E-07 -5.94550E-07 -3.24059E-07 + -1.61275E-07 -7.34348E-08 -3.06399E-08 -1.17282E-08 -4.12227E-09 -1.33143E-09 + -3.95398E-10 -1.08019E-10 -2.71579E-11 -6.28590E-12 + 2.32388E-12 1.00402E-11 3.99344E-11 1.46178E-10 4.92225E-10 1.52399E-09 + 4.33590E-09 1.13275E-08 2.71486E-08 5.96229E-08 1.19803E-07 2.19803E-07 + 3.67193E-07 5.56303E-07 7.59756E-07 9.26371E-07 9.91401E-07 8.99658E-07 + 6.33189E-07 2.28594E-07 -2.28594E-07 -6.33189E-07 -8.99658E-07 -9.91401E-07 + -9.26371E-07 -7.59756E-07 -5.56303E-07 -3.67193E-07 -2.19803E-07 -1.19803E-07 + -5.96229E-08 -2.71486E-08 -1.13275E-08 -4.33590E-09 -1.52399E-09 -4.92225E-10 + -1.46178E-10 -3.99344E-11 -1.00402E-11 -2.32388E-12 + 7.58959E-13 3.27904E-12 1.30423E-11 4.77404E-11 1.60757E-10 4.97723E-10 + 1.41607E-09 3.69946E-09 8.86651E-09 1.94724E-08 3.91268E-08 7.17860E-08 + 1.19922E-07 1.81684E-07 2.48130E-07 3.02545E-07 3.23783E-07 2.93821E-07 + 2.06794E-07 7.46568E-08 -7.46568E-08 -2.06794E-07 -2.93821E-07 -3.23783E-07 + -3.02545E-07 -2.48130E-07 -1.81684E-07 -1.19922E-07 -7.17860E-08 -3.91268E-08 + -1.94724E-08 -8.86651E-09 -3.69946E-09 -1.41607E-09 -4.97723E-10 -1.60757E-10 + -4.77404E-11 -1.30423E-11 -3.27904E-12 -7.58959E-13 + 2.19319E-13 9.47557E-13 3.76887E-12 1.37957E-11 4.64544E-11 1.43829E-10 + 4.09206E-10 1.06905E-09 2.56219E-09 5.62700E-09 1.13066E-08 2.07443E-08 + 3.46544E-08 5.25019E-08 7.17031E-08 8.74276E-08 9.35649E-08 8.49066E-08 + 5.97581E-08 2.15739E-08 -2.15739E-08 -5.97581E-08 -8.49066E-08 -9.35649E-08 + -8.74276E-08 -7.17031E-08 -5.25019E-08 -3.46544E-08 -2.07443E-08 -1.13066E-08 + -5.62700E-09 -2.56219E-09 -1.06905E-09 -4.09206E-10 -1.43829E-10 -4.64544E-11 + -1.37957E-11 -3.76887E-12 -9.47557E-13 -2.19319E-13 + 5.61664E-14 2.42664E-13 9.65185E-13 3.53300E-12 1.18967E-11 3.68337E-11 + 1.04795E-10 2.73777E-10 6.56162E-10 1.44104E-09 2.89556E-09 5.31248E-09 + 8.87478E-09 1.34454E-08 1.83627E-08 2.23897E-08 2.39614E-08 2.17441E-08 + 1.53037E-08 5.52494E-09 -5.52494E-09 -1.53037E-08 -2.17441E-08 -2.39614E-08 + -2.23897E-08 -1.83627E-08 -1.34454E-08 -8.87478E-09 -5.31248E-09 -2.89556E-09 + -1.44104E-09 -6.56162E-10 -2.73777E-10 -1.04795E-10 -3.68337E-11 -1.18967E-11 + -3.53300E-12 -9.65185E-13 -2.42664E-13 -5.61664E-14 + 1.27682E-14 5.51643E-14 2.19414E-13 8.03150E-13 2.70445E-12 8.37334E-12 + 2.38229E-11 6.22372E-11 1.49164E-10 3.27589E-10 6.58242E-10 1.20768E-09 + 2.01749E-09 3.05652E-09 4.17436E-09 5.08980E-09 5.44710E-09 4.94304E-09 + 3.47896E-09 1.25597E-09 -1.25597E-09 -3.47896E-09 -4.94304E-09 -5.44710E-09 + -5.08980E-09 -4.17436E-09 -3.05652E-09 -2.01749E-09 -1.20768E-09 -6.58242E-10 + -3.27589E-10 -1.49164E-10 -6.22372E-11 -2.38229E-11 -8.37334E-12 -2.70445E-12 + -8.03150E-13 -2.19414E-13 -5.51643E-14 -1.27682E-14 + 2.58093E-15 1.11508E-14 4.43517E-14 1.62347E-13 5.46671E-13 1.69256E-12 + 4.81550E-12 1.25805E-11 3.01516E-11 6.62180E-11 1.33055E-10 2.44116E-10 + 4.07809E-10 6.17838E-10 8.43795E-10 1.02884E-09 1.10106E-09 9.99172E-10 + 7.03228E-10 2.53879E-10 -2.53879E-10 -7.03228E-10 -9.99172E-10 -1.10106E-09 + -1.02884E-09 -8.43795E-10 -6.17838E-10 -4.07809E-10 -2.44116E-10 -1.33055E-10 + -6.62180E-11 -3.01516E-11 -1.25805E-11 -4.81550E-12 -1.69256E-12 -5.46671E-13 + -1.62347E-13 -4.43517E-14 -1.11508E-14 -2.58093E-15 + 4.64690E-16 2.00767E-15 7.98543E-15 2.92302E-14 9.84269E-14 3.04743E-13 + 8.67021E-13 2.26508E-12 5.42873E-12 1.19224E-11 2.39563E-11 4.39526E-11 + 7.34252E-11 1.11240E-10 1.51923E-10 1.85240E-10 1.98244E-10 1.79899E-10 + 1.26615E-10 4.57104E-11 -4.57104E-11 -1.26615E-10 -1.79899E-10 -1.98244E-10 + -1.85240E-10 -1.51923E-10 -1.11240E-10 -7.34252E-11 -4.39526E-11 -2.39563E-11 + -1.19224E-11 -5.42873E-12 -2.26508E-12 -8.67021E-13 -3.04743E-13 -9.84269E-14 + -2.92302E-14 -7.98543E-15 -2.00767E-15 -4.64690E-16 + 7.46467E-17 3.22507E-16 1.28276E-15 4.69546E-15 1.58111E-14 4.89531E-14 + 1.39276E-13 3.63857E-13 8.72058E-13 1.91519E-12 3.84828E-12 7.06045E-12 + 1.17948E-11 1.78694E-11 2.44046E-11 2.97565E-11 3.18454E-11 2.88985E-11 + 2.03391E-11 7.34280E-12 -7.34280E-12 -2.03391E-11 -2.88985E-11 -3.18454E-11 + -2.97565E-11 -2.44046E-11 -1.78694E-11 -1.17948E-11 -7.06045E-12 -3.84828E-12 + -1.91519E-12 -8.72058E-13 -3.63857E-13 -1.39276E-13 -4.89531E-14 -1.58111E-14 + -4.69546E-15 -1.28276E-15 -3.22507E-16 -7.46467E-17 + 1.07140E-17 4.62891E-17 1.84113E-16 6.73934E-16 2.26934E-15 7.02618E-15 + 1.99901E-14 5.22240E-14 1.25165E-13 2.74884E-13 5.52339E-13 1.01338E-12 + 1.69290E-12 2.56477E-12 3.50276E-12 4.27092E-12 4.57073E-12 4.14777E-12 + 2.91924E-12 1.05390E-12 -1.05390E-12 -2.91924E-12 -4.14777E-12 -4.57073E-12 + -4.27092E-12 -3.50276E-12 -2.56477E-12 -1.69290E-12 -1.01338E-12 -5.52339E-13 + -2.74884E-13 -1.25165E-13 -5.22240E-14 -1.99901E-14 -7.02618E-15 -2.26934E-15 + -6.73934E-16 -1.84113E-16 -4.62891E-17 -1.07140E-17 + 1.37552E-18 5.94288E-18 2.36376E-17 8.65239E-17 2.91352E-16 9.02065E-16 + 2.56646E-15 6.70485E-15 1.60695E-14 3.52914E-14 7.09128E-14 1.30104E-13 + 2.17345E-13 3.29281E-13 4.49707E-13 5.48328E-13 5.86819E-13 5.32516E-13 + 3.74791E-13 1.35307E-13 -1.35307E-13 -3.74791E-13 -5.32516E-13 -5.86819E-13 + -5.48328E-13 -4.49707E-13 -3.29281E-13 -2.17345E-13 -1.30104E-13 -7.09128E-14 + -3.52914E-14 -1.60695E-14 -6.70485E-15 -2.56646E-15 -9.02065E-16 -2.91352E-16 + -8.65239E-17 -2.36376E-17 -5.94288E-18 -1.37552E-18 + -6.12729E-18 -2.64726E-17 -1.05294E-16 -3.85421E-16 -1.29783E-15 -4.01826E-15 + -1.14323E-14 -2.98668E-14 -7.15818E-14 -1.57206E-13 -3.15882E-13 -5.79548E-13 + -9.68165E-13 -1.46679E-12 -2.00322E-12 -2.44253E-12 -2.61399E-12 -2.37210E-12 + -1.66951E-12 -6.02725E-13 6.02725E-13 1.66951E-12 2.37210E-12 2.61399E-12 + 2.44253E-12 2.00322E-12 1.46679E-12 9.68165E-13 5.79548E-13 3.15882E-13 + 1.57206E-13 7.15818E-14 2.98668E-14 1.14323E-14 4.01826E-15 1.29783E-15 + 3.85421E-16 1.05294E-16 2.64726E-17 6.12729E-18 + -4.62146E-17 -1.99668E-16 -7.94170E-16 -2.90701E-15 -9.78880E-15 -3.03074E-14 + -8.62274E-14 -2.25268E-13 -5.39901E-13 -1.18571E-12 -2.38251E-12 -4.37120E-12 + -7.30231E-12 -1.10631E-11 -1.51092E-11 -1.84226E-11 -1.97158E-11 -1.78914E-11 + -1.25921E-11 -4.54601E-12 4.54601E-12 1.25921E-11 1.78914E-11 1.97158E-11 + 1.84226E-11 1.51092E-11 1.10631E-11 7.30231E-12 4.37120E-12 2.38251E-12 + 1.18571E-12 5.39901E-13 2.25268E-13 8.62274E-14 3.03074E-14 9.78880E-15 + 2.90701E-15 7.94170E-16 1.99668E-16 4.62146E-17 + -3.12044E-16 -1.34817E-15 -5.36229E-15 -1.96283E-14 -6.60947E-14 -2.04638E-13 + -5.82213E-13 -1.52103E-12 -3.64545E-12 -8.00601E-12 -1.60869E-11 -2.95146E-11 + -4.93057E-11 -7.46990E-11 -1.02018E-10 -1.24391E-10 -1.33123E-10 -1.20804E-10 + -8.50230E-11 -3.06950E-11 3.06950E-11 8.50230E-11 1.20804E-10 1.33123E-10 + 1.24391E-10 1.02018E-10 7.46990E-11 4.93057E-11 2.95146E-11 1.60869E-11 + 8.00601E-12 3.64545E-12 1.52103E-12 5.82213E-13 2.04638E-13 6.60947E-14 + 1.96283E-14 5.36229E-15 1.34817E-15 3.12044E-16 + -1.88583E-15 -8.14763E-15 -3.24068E-14 -1.18623E-13 -3.99441E-13 -1.23672E-12 + -3.51859E-12 -9.19227E-12 -2.20311E-11 -4.83841E-11 -9.72207E-11 -1.78371E-10 + -2.97978E-10 -4.51441E-10 -6.16543E-10 -7.51751E-10 -8.04523E-10 -7.30074E-10 + -5.13834E-10 -1.85504E-10 1.85504E-10 5.13834E-10 7.30074E-10 8.04523E-10 + 7.51751E-10 6.16543E-10 4.51441E-10 2.97978E-10 1.78371E-10 9.72207E-11 + 4.83841E-11 2.20311E-11 9.19227E-12 3.51859E-12 1.23672E-12 3.99441E-13 + 1.18623E-13 3.24068E-14 8.14763E-15 1.88583E-15 + -1.01936E-14 -4.40408E-14 -1.75171E-13 -6.41201E-13 -2.15912E-12 -6.68492E-12 + -1.90192E-11 -4.96875E-11 -1.19086E-10 -2.61533E-10 -5.25513E-10 -9.64158E-10 + -1.61068E-09 -2.44020E-09 -3.33264E-09 -4.06349E-09 -4.34874E-09 -3.94631E-09 + -2.77746E-09 -1.00272E-09 1.00272E-09 2.77746E-09 3.94631E-09 4.34874E-09 + 4.06349E-09 3.33264E-09 2.44020E-09 1.61068E-09 9.64158E-10 5.25513E-10 + 2.61533E-10 1.19086E-10 4.96875E-11 1.90192E-11 6.68492E-12 2.15912E-12 + 6.41201E-13 1.75171E-13 4.40408E-14 1.01936E-14 + -4.92244E-14 -2.12671E-13 -8.45892E-13 -3.09633E-12 -1.04263E-11 -3.22812E-11 + -9.18430E-11 -2.39939E-10 -5.75062E-10 -1.26293E-09 -2.53768E-09 -4.65588E-09 + -7.77789E-09 -1.17836E-08 -1.60932E-08 -1.96224E-08 -2.09999E-08 -1.90566E-08 + -1.34122E-08 -4.84208E-09 4.84208E-09 1.34122E-08 1.90566E-08 2.09999E-08 + 1.96224E-08 1.60932E-08 1.17836E-08 7.77789E-09 4.65588E-09 2.53768E-09 + 1.26293E-09 5.75062E-10 2.39939E-10 9.18430E-11 3.22812E-11 1.04263E-11 + 3.09633E-12 8.45892E-13 2.12671E-13 4.92244E-14 + -2.12034E-13 -9.16083E-13 -3.64368E-12 -1.33375E-11 -4.49114E-11 -1.39051E-10 + -3.95614E-10 -1.03354E-09 -2.47708E-09 -5.44009E-09 -1.09311E-08 -2.00552E-08 + -3.35033E-08 -5.07580E-08 -6.93214E-08 -8.45236E-08 -9.04570E-08 -8.20863E-08 + -5.77732E-08 -2.08573E-08 2.08573E-08 5.77732E-08 8.20863E-08 9.04570E-08 + 8.45236E-08 6.93214E-08 5.07580E-08 3.35033E-08 2.00552E-08 1.09311E-08 + 5.44009E-09 2.47708E-09 1.03354E-09 3.95614E-10 1.39051E-10 4.49114E-11 + 1.33375E-11 3.64368E-12 9.16083E-13 2.12034E-13 + -8.13309E-13 -3.51386E-12 -1.39762E-11 -5.11591E-11 -1.72269E-10 -5.33366E-10 + -1.51748E-09 -3.96439E-09 -9.50146E-09 -2.08668E-08 -4.19288E-08 -7.69267E-08 + -1.28510E-07 -1.94695E-07 -2.65899E-07 -3.24211E-07 -3.46970E-07 -3.14862E-07 + -2.21603E-07 -8.00031E-08 8.00031E-08 2.21603E-07 3.14862E-07 3.46970E-07 + 3.24211E-07 2.65899E-07 1.94695E-07 1.28510E-07 7.69267E-08 4.19288E-08 + 2.08668E-08 9.50146E-09 3.96439E-09 1.51748E-09 5.33366E-10 1.72269E-10 + 5.11591E-11 1.39762E-11 3.51386E-12 8.13309E-13 + -2.77291E-12 -1.19802E-11 -4.76507E-11 -1.74423E-10 -5.87335E-10 -1.81846E-09 + -5.17370E-09 -1.35162E-08 -3.23944E-08 -7.11435E-08 -1.42952E-07 -2.62275E-07 + -4.38144E-07 -6.63795E-07 -9.06559E-07 -1.10537E-06 -1.18296E-06 -1.07349E-06 + -7.55537E-07 -2.72764E-07 2.72764E-07 7.55537E-07 1.07349E-06 1.18296E-06 + 1.10537E-06 9.06559E-07 6.63795E-07 4.38144E-07 2.62275E-07 1.42952E-07 + 7.11435E-08 3.23944E-08 1.35162E-08 5.17370E-09 1.81846E-09 5.87335E-10 + 1.74423E-10 4.76507E-11 1.19802E-11 2.77291E-12 + -8.38743E-12 -3.62374E-11 -1.44133E-10 -5.27590E-10 -1.77656E-09 -5.50045E-09 + -1.56493E-08 -4.08836E-08 -9.79858E-08 -2.15193E-07 -4.32399E-07 -7.93323E-07 + -1.32529E-06 -2.00783E-06 -2.74214E-06 -3.34349E-06 -3.57820E-06 -3.24708E-06 + -2.28533E-06 -8.25049E-07 8.25049E-07 2.28533E-06 3.24708E-06 3.57820E-06 + 3.34349E-06 2.74214E-06 2.00783E-06 1.32529E-06 7.93323E-07 4.32399E-07 + 2.15193E-07 9.79858E-08 4.08836E-08 1.56493E-08 5.50045E-09 1.77656E-09 + 5.27590E-10 1.44133E-10 3.62374E-11 8.38743E-12 + -2.24644E-11 -9.70561E-11 -3.86037E-10 -1.41306E-09 -4.75822E-09 -1.47321E-08 + -4.19141E-08 -1.09500E-07 -2.62439E-07 -5.76360E-07 -1.15811E-06 -2.12479E-06 + -3.54957E-06 -5.37765E-06 -7.34438E-06 -8.95500E-06 -9.58363E-06 -8.69679E-06 + -6.12090E-06 -2.20977E-06 2.20977E-06 6.12090E-06 8.69679E-06 9.58363E-06 + 8.95500E-06 7.34438E-06 5.37765E-06 3.54957E-06 2.12479E-06 1.15811E-06 + 5.76360E-07 2.62439E-07 1.09500E-07 4.19141E-08 1.47321E-08 4.75822E-09 + 1.41306E-09 3.86037E-10 9.70561E-11 2.24644E-11 + -5.31640E-11 -2.29692E-10 -9.13592E-10 -3.34415E-09 -1.12608E-08 -3.48648E-08 + -9.91936E-08 -2.59142E-07 -6.21087E-07 -1.36401E-06 -2.74078E-06 -5.02851E-06 + -8.40038E-06 -1.27267E-05 -1.73812E-05 -2.11929E-05 -2.26807E-05 -2.05820E-05 + -1.44859E-05 -5.22974E-06 5.22974E-06 1.44859E-05 2.05820E-05 2.26807E-05 + 2.11929E-05 1.73812E-05 1.27267E-05 8.40038E-06 5.02851E-06 2.74078E-06 + 1.36401E-06 6.21087E-07 2.59142E-07 9.91936E-08 3.48648E-08 1.12608E-08 + 3.34415E-09 9.13592E-10 2.29692E-10 5.31640E-11 + -1.10896E-10 -4.79119E-10 -1.90568E-09 -6.97561E-09 -2.34890E-08 -7.27251E-08 + -2.06910E-07 -5.40550E-07 -1.29554E-06 -2.84522E-06 -5.71704E-06 -1.04891E-05 + -1.75225E-05 -2.65469E-05 -3.62557E-05 -4.42069E-05 -4.73111E-05 -4.29349E-05 + -3.02198E-05 -1.09104E-05 1.09104E-05 3.02198E-05 4.29349E-05 4.73111E-05 + 4.42069E-05 3.62557E-05 2.65469E-05 1.75225E-05 1.04891E-05 5.71704E-06 + 2.84522E-06 1.29554E-06 5.40550E-07 2.06910E-07 7.27251E-08 2.34890E-08 + 6.97561E-09 1.90568E-09 4.79119E-10 1.10896E-10 + -2.03204E-10 -8.77934E-10 -3.49195E-09 -1.27821E-08 -4.30411E-08 -1.33261E-07 + -3.79139E-07 -9.90498E-07 -2.37393E-06 -5.21355E-06 -1.04759E-05 -1.92201E-05 + -3.21081E-05 -4.86443E-05 -6.64351E-05 -8.10067E-05 -8.67007E-05 -7.86919E-05 + -5.53982E-05 -2.00038E-05 2.00038E-05 5.53982E-05 7.86919E-05 8.67007E-05 + 8.10067E-05 6.64351E-05 4.86443E-05 3.21081E-05 1.92201E-05 1.04759E-05 + 5.21355E-06 2.37393E-06 9.90498E-07 3.79139E-07 1.33261E-07 4.30411E-08 + 1.27821E-08 3.49195E-09 8.77934E-10 2.03204E-10 + -3.25451E-10 -1.40609E-09 -5.59268E-09 -2.04716E-08 -6.89343E-08 -2.13430E-07 + -6.07227E-07 -1.58637E-06 -3.80207E-06 -8.34998E-06 -1.67781E-05 -3.07827E-05 + -5.14241E-05 -7.79086E-05 -1.06403E-04 -1.29748E-04 -1.38888E-04 -1.26096E-04 + -8.88079E-05 -3.20782E-05 3.20782E-05 8.88079E-05 1.26096E-04 1.38888E-04 + 1.29748E-04 1.06403E-04 7.79086E-05 5.14241E-05 3.07827E-05 1.67781E-05 + 8.34998E-06 3.80207E-06 1.58637E-06 6.07227E-07 2.13430E-07 6.89343E-08 + 2.04716E-08 5.59268E-09 1.40609E-09 3.25451E-10 + -4.51762E-10 -1.95181E-09 -7.76325E-09 -2.84169E-08 -9.56884E-08 -2.96264E-07 + -8.42898E-07 -2.20206E-06 -5.27769E-06 -1.15907E-05 -2.32898E-05 -4.27298E-05 + -7.13823E-05 -1.08146E-04 -1.47702E-04 -1.80116E-04 -1.92834E-04 -1.75131E-04 + -1.23398E-04 -4.45883E-05 4.45883E-05 1.23398E-04 1.75131E-04 1.92834E-04 + 1.80116E-04 1.47702E-04 1.08146E-04 7.13823E-05 4.27298E-05 2.32898E-05 + 1.15907E-05 5.27769E-06 2.20206E-06 8.42898E-07 2.96264E-07 9.56884E-08 + 2.84169E-08 7.76325E-09 1.95181E-09 4.51762E-10 + -5.35068E-10 -2.31173E-09 -9.19483E-09 -3.36571E-08 -1.13334E-07 -3.50896E-07 + -9.98332E-07 -2.60813E-06 -6.25092E-06 -1.37281E-05 -2.75845E-05 -5.06093E-05 + -8.45456E-05 -1.28089E-04 -1.74939E-04 -2.13333E-04 -2.28402E-04 -2.07445E-04 + -1.46177E-04 -5.28220E-05 5.28220E-05 1.46177E-04 2.07445E-04 2.28402E-04 + 2.13333E-04 1.74939E-04 1.28089E-04 8.45456E-05 5.06093E-05 2.75845E-05 + 1.37281E-05 6.25092E-06 2.60813E-06 9.98332E-07 3.50896E-07 1.13334E-07 + 3.36571E-08 9.19483E-09 2.31173E-09 5.35068E-10 + -5.23118E-10 -2.26011E-09 -8.98948E-09 -3.29054E-08 -1.10803E-07 -3.43059E-07 + -9.76036E-07 -2.54988E-06 -6.11131E-06 -1.34215E-05 -2.69685E-05 -4.94790E-05 + -8.26573E-05 -1.25228E-04 -1.71030E-04 -2.08557E-04 -2.23261E-04 -2.02723E-04 + -1.42799E-04 -5.15868E-05 5.15868E-05 1.42799E-04 2.02723E-04 2.23261E-04 + 2.08557E-04 1.71030E-04 1.25228E-04 8.26573E-05 4.94790E-05 2.69685E-05 + 1.34215E-05 6.11131E-06 2.54988E-06 9.76036E-07 3.43059E-07 1.10803E-07 + 3.29054E-08 8.98948E-09 2.26011E-09 5.23118E-10 + -3.86620E-10 -1.67037E-09 -6.64384E-09 -2.43194E-08 -8.18908E-08 -2.53544E-07 + -7.21357E-07 -1.88454E-06 -4.51668E-06 -9.91939E-06 -1.99315E-05 -3.65684E-05 + -6.10894E-05 -9.25517E-05 -1.26401E-04 -1.54128E-04 -1.64971E-04 -1.49750E-04 + -1.05440E-04 -3.80783E-05 3.80783E-05 1.05440E-04 1.49750E-04 1.64971E-04 + 1.54128E-04 1.26401E-04 9.25517E-05 6.10894E-05 3.65684E-05 1.99315E-05 + 9.91939E-06 4.51668E-06 1.88454E-06 7.21357E-07 2.53544E-07 8.18908E-08 + 2.43194E-08 6.64384E-09 1.67037E-09 3.86620E-10 + -1.42995E-10 -6.17801E-10 -2.45728E-09 -8.99472E-09 -3.02880E-08 -9.37755E-08 + -2.66800E-07 -6.97012E-07 -1.67053E-06 -3.66877E-06 -7.37185E-06 -1.35251E-05 + -2.25944E-05 -3.42310E-05 -4.67502E-05 -5.70038E-05 -6.10095E-05 -5.53717E-05 + -3.89790E-05 -1.40744E-05 1.40744E-05 3.89790E-05 5.53717E-05 6.10095E-05 + 5.70038E-05 4.67502E-05 3.42310E-05 2.25944E-05 1.35251E-05 7.37185E-06 + 3.66877E-06 1.67053E-06 6.97012E-07 2.66800E-07 9.37755E-08 3.02880E-08 + 8.99472E-09 2.45728E-09 6.17801E-10 1.42995E-10 + 1.42995E-10 6.17801E-10 2.45728E-09 8.99472E-09 3.02880E-08 9.37755E-08 + 2.66800E-07 6.97012E-07 1.67053E-06 3.66877E-06 7.37185E-06 1.35251E-05 + 2.25944E-05 3.42310E-05 4.67502E-05 5.70038E-05 6.10095E-05 5.53717E-05 + 3.89790E-05 1.40744E-05 -1.40744E-05 -3.89790E-05 -5.53717E-05 -6.10095E-05 + -5.70038E-05 -4.67502E-05 -3.42310E-05 -2.25944E-05 -1.35251E-05 -7.37185E-06 + -3.66877E-06 -1.67053E-06 -6.97012E-07 -2.66800E-07 -9.37755E-08 -3.02880E-08 + -8.99472E-09 -2.45728E-09 -6.17801E-10 -1.42995E-10 + 3.86620E-10 1.67037E-09 6.64384E-09 2.43194E-08 8.18908E-08 2.53544E-07 + 7.21357E-07 1.88454E-06 4.51668E-06 9.91939E-06 1.99315E-05 3.65684E-05 + 6.10894E-05 9.25517E-05 1.26401E-04 1.54128E-04 1.64971E-04 1.49750E-04 + 1.05440E-04 3.80783E-05 -3.80783E-05 -1.05440E-04 -1.49750E-04 -1.64971E-04 + -1.54128E-04 -1.26401E-04 -9.25517E-05 -6.10894E-05 -3.65684E-05 -1.99315E-05 + -9.91939E-06 -4.51668E-06 -1.88454E-06 -7.21357E-07 -2.53544E-07 -8.18908E-08 + -2.43194E-08 -6.64384E-09 -1.67037E-09 -3.86620E-10 + 5.23118E-10 2.26011E-09 8.98948E-09 3.29054E-08 1.10803E-07 3.43059E-07 + 9.76036E-07 2.54988E-06 6.11131E-06 1.34215E-05 2.69685E-05 4.94790E-05 + 8.26573E-05 1.25228E-04 1.71030E-04 2.08557E-04 2.23261E-04 2.02723E-04 + 1.42799E-04 5.15868E-05 -5.15868E-05 -1.42799E-04 -2.02723E-04 -2.23261E-04 + -2.08557E-04 -1.71030E-04 -1.25228E-04 -8.26573E-05 -4.94790E-05 -2.69685E-05 + -1.34215E-05 -6.11131E-06 -2.54988E-06 -9.76036E-07 -3.43059E-07 -1.10803E-07 + -3.29054E-08 -8.98948E-09 -2.26011E-09 -5.23118E-10 + 5.35068E-10 2.31173E-09 9.19483E-09 3.36571E-08 1.13334E-07 3.50896E-07 + 9.98332E-07 2.60813E-06 6.25092E-06 1.37281E-05 2.75845E-05 5.06093E-05 + 8.45456E-05 1.28089E-04 1.74939E-04 2.13333E-04 2.28402E-04 2.07445E-04 + 1.46177E-04 5.28220E-05 -5.28220E-05 -1.46177E-04 -2.07445E-04 -2.28402E-04 + -2.13333E-04 -1.74939E-04 -1.28089E-04 -8.45456E-05 -5.06093E-05 -2.75845E-05 + -1.37281E-05 -6.25092E-06 -2.60813E-06 -9.98332E-07 -3.50896E-07 -1.13334E-07 + -3.36571E-08 -9.19483E-09 -2.31173E-09 -5.35068E-10 + 4.51762E-10 1.95181E-09 7.76325E-09 2.84169E-08 9.56884E-08 2.96264E-07 + 8.42898E-07 2.20206E-06 5.27769E-06 1.15907E-05 2.32898E-05 4.27298E-05 + 7.13823E-05 1.08146E-04 1.47702E-04 1.80116E-04 1.92834E-04 1.75131E-04 + 1.23398E-04 4.45883E-05 -4.45883E-05 -1.23398E-04 -1.75131E-04 -1.92834E-04 + -1.80116E-04 -1.47702E-04 -1.08146E-04 -7.13823E-05 -4.27298E-05 -2.32898E-05 + -1.15907E-05 -5.27769E-06 -2.20206E-06 -8.42898E-07 -2.96264E-07 -9.56884E-08 + -2.84169E-08 -7.76325E-09 -1.95181E-09 -4.51762E-10 + 3.25451E-10 1.40609E-09 5.59268E-09 2.04716E-08 6.89343E-08 2.13430E-07 + 6.07227E-07 1.58637E-06 3.80207E-06 8.34998E-06 1.67781E-05 3.07827E-05 + 5.14241E-05 7.79086E-05 1.06403E-04 1.29748E-04 1.38888E-04 1.26096E-04 + 8.88079E-05 3.20782E-05 -3.20782E-05 -8.88079E-05 -1.26096E-04 -1.38888E-04 + -1.29748E-04 -1.06403E-04 -7.79086E-05 -5.14241E-05 -3.07827E-05 -1.67781E-05 + -8.34998E-06 -3.80207E-06 -1.58637E-06 -6.07227E-07 -2.13430E-07 -6.89343E-08 + -2.04716E-08 -5.59268E-09 -1.40609E-09 -3.25451E-10 + 2.03204E-10 8.77934E-10 3.49195E-09 1.27821E-08 4.30411E-08 1.33261E-07 + 3.79139E-07 9.90498E-07 2.37393E-06 5.21355E-06 1.04759E-05 1.92201E-05 + 3.21081E-05 4.86443E-05 6.64351E-05 8.10067E-05 8.67007E-05 7.86919E-05 + 5.53982E-05 2.00038E-05 -2.00038E-05 -5.53982E-05 -7.86919E-05 -8.67007E-05 + -8.10067E-05 -6.64351E-05 -4.86443E-05 -3.21081E-05 -1.92201E-05 -1.04759E-05 + -5.21355E-06 -2.37393E-06 -9.90498E-07 -3.79139E-07 -1.33261E-07 -4.30411E-08 + -1.27821E-08 -3.49195E-09 -8.77934E-10 -2.03204E-10 + 1.10896E-10 4.79119E-10 1.90568E-09 6.97561E-09 2.34890E-08 7.27251E-08 + 2.06910E-07 5.40550E-07 1.29554E-06 2.84522E-06 5.71704E-06 1.04891E-05 + 1.75225E-05 2.65469E-05 3.62557E-05 4.42069E-05 4.73111E-05 4.29349E-05 + 3.02198E-05 1.09104E-05 -1.09104E-05 -3.02198E-05 -4.29349E-05 -4.73111E-05 + -4.42069E-05 -3.62557E-05 -2.65469E-05 -1.75225E-05 -1.04891E-05 -5.71704E-06 + -2.84522E-06 -1.29554E-06 -5.40550E-07 -2.06910E-07 -7.27251E-08 -2.34890E-08 + -6.97561E-09 -1.90568E-09 -4.79119E-10 -1.10896E-10 + 5.31640E-11 2.29692E-10 9.13592E-10 3.34415E-09 1.12608E-08 3.48648E-08 + 9.91936E-08 2.59142E-07 6.21087E-07 1.36401E-06 2.74078E-06 5.02851E-06 + 8.40038E-06 1.27267E-05 1.73812E-05 2.11929E-05 2.26807E-05 2.05820E-05 + 1.44859E-05 5.22974E-06 -5.22974E-06 -1.44859E-05 -2.05820E-05 -2.26807E-05 + -2.11929E-05 -1.73812E-05 -1.27267E-05 -8.40038E-06 -5.02851E-06 -2.74078E-06 + -1.36401E-06 -6.21087E-07 -2.59142E-07 -9.91936E-08 -3.48648E-08 -1.12608E-08 + -3.34415E-09 -9.13592E-10 -2.29692E-10 -5.31640E-11 + 2.24644E-11 9.70561E-11 3.86037E-10 1.41306E-09 4.75822E-09 1.47321E-08 + 4.19141E-08 1.09500E-07 2.62439E-07 5.76360E-07 1.15811E-06 2.12479E-06 + 3.54957E-06 5.37765E-06 7.34438E-06 8.95500E-06 9.58363E-06 8.69679E-06 + 6.12090E-06 2.20977E-06 -2.20977E-06 -6.12090E-06 -8.69679E-06 -9.58363E-06 + -8.95500E-06 -7.34438E-06 -5.37765E-06 -3.54957E-06 -2.12479E-06 -1.15811E-06 + -5.76360E-07 -2.62439E-07 -1.09500E-07 -4.19141E-08 -1.47321E-08 -4.75822E-09 + -1.41306E-09 -3.86037E-10 -9.70561E-11 -2.24644E-11 + 8.38743E-12 3.62374E-11 1.44133E-10 5.27590E-10 1.77656E-09 5.50045E-09 + 1.56493E-08 4.08836E-08 9.79858E-08 2.15193E-07 4.32399E-07 7.93323E-07 + 1.32529E-06 2.00783E-06 2.74214E-06 3.34349E-06 3.57820E-06 3.24708E-06 + 2.28533E-06 8.25049E-07 -8.25049E-07 -2.28533E-06 -3.24708E-06 -3.57820E-06 + -3.34349E-06 -2.74214E-06 -2.00783E-06 -1.32529E-06 -7.93323E-07 -4.32399E-07 + -2.15193E-07 -9.79858E-08 -4.08836E-08 -1.56493E-08 -5.50045E-09 -1.77656E-09 + -5.27590E-10 -1.44133E-10 -3.62374E-11 -8.38743E-12 + 2.77291E-12 1.19802E-11 4.76507E-11 1.74423E-10 5.87335E-10 1.81846E-09 + 5.17370E-09 1.35162E-08 3.23944E-08 7.11435E-08 1.42952E-07 2.62275E-07 + 4.38144E-07 6.63795E-07 9.06559E-07 1.10537E-06 1.18296E-06 1.07349E-06 + 7.55537E-07 2.72764E-07 -2.72764E-07 -7.55537E-07 -1.07349E-06 -1.18296E-06 + -1.10537E-06 -9.06559E-07 -6.63795E-07 -4.38144E-07 -2.62275E-07 -1.42952E-07 + -7.11435E-08 -3.23944E-08 -1.35162E-08 -5.17370E-09 -1.81846E-09 -5.87335E-10 + -1.74423E-10 -4.76507E-11 -1.19802E-11 -2.77291E-12 + 8.13309E-13 3.51386E-12 1.39762E-11 5.11591E-11 1.72269E-10 5.33366E-10 + 1.51748E-09 3.96439E-09 9.50146E-09 2.08668E-08 4.19288E-08 7.69267E-08 + 1.28510E-07 1.94695E-07 2.65899E-07 3.24211E-07 3.46970E-07 3.14862E-07 + 2.21603E-07 8.00031E-08 -8.00031E-08 -2.21603E-07 -3.14862E-07 -3.46970E-07 + -3.24211E-07 -2.65899E-07 -1.94695E-07 -1.28510E-07 -7.69267E-08 -4.19288E-08 + -2.08668E-08 -9.50146E-09 -3.96439E-09 -1.51748E-09 -5.33366E-10 -1.72269E-10 + -5.11591E-11 -1.39762E-11 -3.51386E-12 -8.13309E-13 + 2.12034E-13 9.16083E-13 3.64368E-12 1.33375E-11 4.49114E-11 1.39051E-10 + 3.95614E-10 1.03354E-09 2.47708E-09 5.44009E-09 1.09311E-08 2.00552E-08 + 3.35033E-08 5.07580E-08 6.93214E-08 8.45236E-08 9.04570E-08 8.20863E-08 + 5.77732E-08 2.08573E-08 -2.08573E-08 -5.77732E-08 -8.20863E-08 -9.04570E-08 + -8.45236E-08 -6.93214E-08 -5.07580E-08 -3.35033E-08 -2.00552E-08 -1.09311E-08 + -5.44009E-09 -2.47708E-09 -1.03354E-09 -3.95614E-10 -1.39051E-10 -4.49114E-11 + -1.33375E-11 -3.64368E-12 -9.16083E-13 -2.12034E-13 + 4.92244E-14 2.12671E-13 8.45892E-13 3.09633E-12 1.04263E-11 3.22812E-11 + 9.18430E-11 2.39939E-10 5.75062E-10 1.26293E-09 2.53768E-09 4.65588E-09 + 7.77789E-09 1.17836E-08 1.60932E-08 1.96224E-08 2.09999E-08 1.90566E-08 + 1.34122E-08 4.84208E-09 -4.84208E-09 -1.34122E-08 -1.90566E-08 -2.09999E-08 + -1.96224E-08 -1.60932E-08 -1.17836E-08 -7.77789E-09 -4.65588E-09 -2.53768E-09 + -1.26293E-09 -5.75062E-10 -2.39939E-10 -9.18430E-11 -3.22812E-11 -1.04263E-11 + -3.09633E-12 -8.45892E-13 -2.12671E-13 -4.92244E-14 + 1.01936E-14 4.40408E-14 1.75171E-13 6.41201E-13 2.15912E-12 6.68492E-12 + 1.90192E-11 4.96875E-11 1.19086E-10 2.61533E-10 5.25513E-10 9.64158E-10 + 1.61068E-09 2.44020E-09 3.33264E-09 4.06349E-09 4.34874E-09 3.94631E-09 + 2.77746E-09 1.00272E-09 -1.00272E-09 -2.77746E-09 -3.94631E-09 -4.34874E-09 + -4.06349E-09 -3.33264E-09 -2.44020E-09 -1.61068E-09 -9.64158E-10 -5.25513E-10 + -2.61533E-10 -1.19086E-10 -4.96875E-11 -1.90192E-11 -6.68492E-12 -2.15912E-12 + -6.41201E-13 -1.75171E-13 -4.40408E-14 -1.01936E-14 + 1.88583E-15 8.14763E-15 3.24068E-14 1.18623E-13 3.99441E-13 1.23672E-12 + 3.51859E-12 9.19227E-12 2.20311E-11 4.83841E-11 9.72207E-11 1.78371E-10 + 2.97978E-10 4.51441E-10 6.16543E-10 7.51751E-10 8.04523E-10 7.30074E-10 + 5.13834E-10 1.85504E-10 -1.85504E-10 -5.13834E-10 -7.30074E-10 -8.04523E-10 + -7.51751E-10 -6.16543E-10 -4.51441E-10 -2.97978E-10 -1.78371E-10 -9.72207E-11 + -4.83841E-11 -2.20311E-11 -9.19227E-12 -3.51859E-12 -1.23672E-12 -3.99441E-13 + -1.18623E-13 -3.24068E-14 -8.14763E-15 -1.88583E-15 + 3.12044E-16 1.34817E-15 5.36229E-15 1.96283E-14 6.60947E-14 2.04638E-13 + 5.82213E-13 1.52103E-12 3.64545E-12 8.00601E-12 1.60869E-11 2.95146E-11 + 4.93057E-11 7.46990E-11 1.02018E-10 1.24391E-10 1.33123E-10 1.20804E-10 + 8.50230E-11 3.06950E-11 -3.06950E-11 -8.50230E-11 -1.20804E-10 -1.33123E-10 + -1.24391E-10 -1.02018E-10 -7.46990E-11 -4.93057E-11 -2.95146E-11 -1.60869E-11 + -8.00601E-12 -3.64545E-12 -1.52103E-12 -5.82213E-13 -2.04638E-13 -6.60947E-14 + -1.96283E-14 -5.36229E-15 -1.34817E-15 -3.12044E-16 + 4.62146E-17 1.99668E-16 7.94170E-16 2.90701E-15 9.78880E-15 3.03074E-14 + 8.62274E-14 2.25268E-13 5.39901E-13 1.18571E-12 2.38251E-12 4.37120E-12 + 7.30231E-12 1.10631E-11 1.51092E-11 1.84226E-11 1.97158E-11 1.78914E-11 + 1.25921E-11 4.54601E-12 -4.54601E-12 -1.25921E-11 -1.78914E-11 -1.97158E-11 + -1.84226E-11 -1.51092E-11 -1.10631E-11 -7.30231E-12 -4.37120E-12 -2.38251E-12 + -1.18571E-12 -5.39901E-13 -2.25268E-13 -8.62274E-14 -3.03074E-14 -9.78880E-15 + -2.90701E-15 -7.94170E-16 -1.99668E-16 -4.62146E-17 + 6.12729E-18 2.64726E-17 1.05294E-16 3.85421E-16 1.29783E-15 4.01826E-15 + 1.14323E-14 2.98668E-14 7.15818E-14 1.57206E-13 3.15882E-13 5.79548E-13 + 9.68165E-13 1.46679E-12 2.00322E-12 2.44253E-12 2.61399E-12 2.37210E-12 + 1.66951E-12 6.02725E-13 -6.02725E-13 -1.66951E-12 -2.37210E-12 -2.61399E-12 + -2.44253E-12 -2.00322E-12 -1.46679E-12 -9.68165E-13 -5.79548E-13 -3.15882E-13 + -1.57206E-13 -7.15818E-14 -2.98668E-14 -1.14323E-14 -4.01826E-15 -1.29783E-15 + -3.85421E-16 -1.05294E-16 -2.64726E-17 -6.12729E-18 + -2.47607E-17 -1.06977E-16 -4.25498E-16 -1.55751E-15 -5.24462E-15 -1.62380E-14 + -4.61987E-14 -1.20694E-13 -2.89266E-13 -6.35278E-13 -1.27650E-12 -2.34199E-12 + -3.91241E-12 -5.92737E-12 -8.09514E-12 -9.87041E-12 -1.05633E-11 -9.58579E-12 + -6.74658E-12 -2.43565E-12 2.43565E-12 6.74658E-12 9.58579E-12 1.05633E-11 + 9.87041E-12 8.09514E-12 5.92737E-12 3.91241E-12 2.34199E-12 1.27650E-12 + 6.35278E-13 2.89266E-13 1.20694E-13 4.61987E-14 1.62380E-14 5.24462E-15 + 1.55751E-15 4.25498E-16 1.06977E-16 2.47607E-17 + -1.81097E-16 -7.82419E-16 -3.11204E-15 -1.13914E-14 -3.83584E-14 -1.18763E-13 + -3.37891E-13 -8.82736E-13 -2.11566E-12 -4.64634E-12 -9.33613E-12 -1.71290E-11 + -2.86149E-11 -4.33520E-11 -5.92068E-11 -7.21909E-11 -7.72586E-11 -7.01092E-11 + -4.93436E-11 -1.78140E-11 1.78140E-11 4.93436E-11 7.01092E-11 7.72586E-11 + 7.21909E-11 5.92068E-11 4.33520E-11 2.86149E-11 1.71290E-11 9.33613E-12 + 4.64634E-12 2.11566E-12 8.82736E-13 3.37891E-13 1.18763E-13 3.83584E-14 + 1.13914E-14 3.11204E-15 7.82419E-16 1.81097E-16 + -1.18431E-15 -5.11674E-15 -2.03516E-14 -7.44959E-14 -2.50851E-13 -7.76666E-13 + -2.20969E-12 -5.77279E-12 -1.38357E-11 -3.03854E-11 -6.10550E-11 -1.12018E-10 + -1.87131E-10 -2.83507E-10 -3.87192E-10 -4.72103E-10 -5.05244E-10 -4.58490E-10 + -3.22690E-10 -1.16497E-10 1.16497E-10 3.22690E-10 4.58490E-10 5.05244E-10 + 4.72103E-10 3.87192E-10 2.83507E-10 1.87131E-10 1.12018E-10 6.10550E-11 + 3.03854E-11 1.38357E-11 5.77279E-12 2.20969E-12 7.76666E-13 2.50851E-13 + 7.44959E-14 2.03516E-14 5.11674E-15 1.18431E-15 + -6.93097E-15 -2.99449E-14 -1.19105E-13 -4.35975E-13 -1.46806E-12 -4.54531E-12 + -1.29318E-11 -3.37843E-11 -8.09709E-11 -1.77826E-10 -3.57314E-10 -6.55565E-10 + -1.09515E-09 -1.65918E-09 -2.26598E-09 -2.76291E-09 -2.95686E-09 -2.68324E-09 + -1.88849E-09 -6.81782E-10 6.81782E-10 1.88849E-09 2.68324E-09 2.95686E-09 + 2.76291E-09 2.26598E-09 1.65918E-09 1.09515E-09 6.55565E-10 3.57314E-10 + 1.77826E-10 8.09709E-11 3.37843E-11 1.29318E-11 4.54531E-12 1.46806E-12 + 4.35975E-13 1.19105E-13 2.99449E-14 6.93097E-15 + -3.63113E-14 -1.56881E-13 -6.23987E-13 -2.28407E-12 -7.69115E-12 -2.38128E-11 + -6.77497E-11 -1.76995E-10 -4.24205E-10 -9.31626E-10 -1.87196E-09 -3.43449E-09 + -5.73750E-09 -8.69240E-09 -1.18714E-08 -1.44748E-08 -1.54909E-08 -1.40574E-08 + -9.89376E-09 -3.57184E-09 3.57184E-09 9.89376E-09 1.40574E-08 1.54909E-08 + 1.44748E-08 1.18714E-08 8.69240E-09 5.73750E-09 3.43449E-09 1.87196E-09 + 9.31626E-10 4.24205E-10 1.76995E-10 6.77497E-11 2.38128E-11 7.69115E-12 + 2.28407E-12 6.23987E-13 1.56881E-13 3.63113E-14 + -1.70256E-13 -7.35583E-13 -2.92575E-12 -1.07095E-11 -3.60623E-11 -1.11654E-10 + -3.17665E-10 -8.29896E-10 -1.98901E-09 -4.36821E-09 -8.77727E-09 -1.61037E-08 + -2.69020E-08 -4.07569E-08 -5.56627E-08 -6.78695E-08 -7.26339E-08 -6.59125E-08 + -4.63899E-08 -1.67477E-08 1.67477E-08 4.63899E-08 6.59125E-08 7.26339E-08 + 6.78695E-08 5.56627E-08 4.07569E-08 2.69020E-08 1.61037E-08 8.77727E-09 + 4.36821E-09 1.98901E-09 8.29896E-10 3.17665E-10 1.11654E-10 3.60623E-11 + 1.07095E-11 2.92575E-12 7.35583E-13 1.70256E-13 + -7.13901E-13 -3.08437E-12 -1.22680E-11 -4.49061E-11 -1.51213E-10 -4.68174E-10 + -1.33200E-09 -3.47983E-09 -8.34012E-09 -1.83163E-08 -3.68039E-08 -6.75242E-08 + -1.12803E-07 -1.70898E-07 -2.33399E-07 -2.84584E-07 -3.04561E-07 -2.76377E-07 + -1.94517E-07 -7.02246E-08 7.02246E-08 1.94517E-07 2.76377E-07 3.04561E-07 + 2.84584E-07 2.33399E-07 1.70898E-07 1.12803E-07 6.75242E-08 3.68039E-08 + 1.83163E-08 8.34012E-09 3.47983E-09 1.33200E-09 4.68174E-10 1.51213E-10 + 4.49061E-11 1.22680E-11 3.08437E-12 7.13901E-13 + -2.67361E-12 -1.15512E-11 -4.59444E-11 -1.68177E-10 -5.66302E-10 -1.75334E-09 + -4.98843E-09 -1.30322E-08 -3.12343E-08 -6.85959E-08 -1.37833E-07 -2.52883E-07 + -4.22454E-07 -6.40024E-07 -8.74095E-07 -1.06579E-06 -1.14060E-06 -1.03505E-06 + -7.28481E-07 -2.62996E-07 2.62996E-07 7.28481E-07 1.03505E-06 1.14060E-06 + 1.06579E-06 8.74095E-07 6.40024E-07 4.22454E-07 2.52883E-07 1.37833E-07 + 6.85959E-08 3.12343E-08 1.30322E-08 4.98843E-09 1.75334E-09 5.66302E-10 + 1.68177E-10 4.59444E-11 1.15512E-11 2.67361E-12 + -8.92839E-12 -3.85746E-11 -1.53429E-10 -5.61617E-10 -1.89114E-09 -5.85521E-09 + -1.66586E-08 -4.35205E-08 -1.04306E-07 -2.29073E-07 -4.60288E-07 -8.44490E-07 + -1.41076E-06 -2.13733E-06 -2.91900E-06 -3.55914E-06 -3.80898E-06 -3.45651E-06 + -2.43273E-06 -8.78262E-07 8.78262E-07 2.43273E-06 3.45651E-06 3.80898E-06 + 3.55914E-06 2.91900E-06 2.13733E-06 1.41076E-06 8.44490E-07 4.60288E-07 + 2.29073E-07 1.04306E-07 4.35205E-08 1.66586E-08 5.85521E-09 1.89114E-09 + 5.61617E-10 1.53429E-10 3.85746E-11 8.92839E-12 + -2.65359E-11 -1.14647E-10 -4.56004E-10 -1.66918E-09 -5.62063E-09 -1.74022E-08 + -4.95108E-08 -1.29347E-07 -3.10005E-07 -6.80823E-07 -1.36801E-06 -2.50990E-06 + -4.19291E-06 -6.35233E-06 -8.67552E-06 -1.05781E-05 -1.13206E-05 -1.02730E-05 + -7.23028E-06 -2.61027E-06 2.61027E-06 7.23028E-06 1.02730E-05 1.13206E-05 + 1.05781E-05 8.67552E-06 6.35233E-06 4.19291E-06 2.50990E-06 1.36801E-06 + 6.80823E-07 3.10005E-07 1.29347E-07 4.95108E-08 1.74022E-08 5.62063E-09 + 1.66918E-09 4.56004E-10 1.14647E-10 2.65359E-11 + -7.00414E-11 -3.02610E-10 -1.20362E-09 -4.40578E-09 -1.48356E-08 -4.59330E-08 + -1.30684E-07 -3.41409E-07 -8.18257E-07 -1.79703E-06 -3.61087E-06 -6.62485E-06 + -1.10672E-05 -1.67669E-05 -2.28990E-05 -2.79208E-05 -2.98808E-05 -2.71158E-05 + -1.90845E-05 -6.88993E-06 6.88993E-06 1.90845E-05 2.71158E-05 2.98808E-05 + 2.79208E-05 2.28990E-05 1.67669E-05 1.10672E-05 6.62485E-06 3.61087E-06 + 1.79703E-06 8.18257E-07 3.41409E-07 1.30684E-07 4.59330E-08 1.48356E-08 + 4.40578E-09 1.20362E-09 3.02610E-10 7.00414E-11 + -1.63793E-10 -7.07657E-10 -2.81468E-09 -1.03029E-08 -3.46932E-08 -1.07415E-07 + -3.05605E-07 -7.98389E-07 -1.91350E-06 -4.20237E-06 -8.44404E-06 -1.54923E-05 + -2.58807E-05 -3.92096E-05 -5.35496E-05 -6.52936E-05 -6.98789E-05 -6.34158E-05 + -4.46361E-05 -1.61154E-05 1.61154E-05 4.46361E-05 6.34158E-05 6.98789E-05 + 6.52936E-05 5.35496E-05 3.92096E-05 2.58807E-05 1.54923E-05 8.44404E-06 + 4.20237E-06 1.91350E-06 7.98389E-07 3.05605E-07 1.07415E-07 3.46932E-08 + 1.03029E-08 2.81468E-09 7.07657E-10 1.63793E-10 + -3.38391E-10 -1.46200E-09 -5.81505E-09 -2.12856E-08 -7.16753E-08 -2.21916E-07 + -6.31371E-07 -1.64945E-06 -3.95324E-06 -8.68199E-06 -1.74452E-05 -3.20067E-05 + -5.34688E-05 -8.10063E-05 -1.10634E-04 -1.34904E-04 -1.44400E-04 -1.31087E-04 + -9.23085E-05 -3.33388E-05 3.33388E-05 9.23085E-05 1.31087E-04 1.44400E-04 + 1.34904E-04 1.10634E-04 8.10063E-05 5.34688E-05 3.20067E-05 1.74452E-05 + 8.68199E-06 3.95324E-06 1.64945E-06 6.31371E-07 2.21916E-07 7.16753E-08 + 2.12856E-08 5.81505E-09 1.46200E-09 3.38391E-10 + -6.15362E-10 -2.65864E-09 -1.05746E-08 -3.87077E-08 -1.30341E-07 -4.03552E-07 + -1.14814E-06 -2.99951E-06 -7.18894E-06 -1.57881E-05 -3.17239E-05 -5.82038E-05 + -9.72327E-05 -1.47311E-04 -2.01198E-04 -2.45384E-04 -2.62813E-04 -2.38882E-04 + -1.68508E-04 -6.09419E-05 6.09419E-05 1.68508E-04 2.38882E-04 2.62813E-04 + 2.45384E-04 2.01198E-04 1.47311E-04 9.72327E-05 5.82038E-05 3.17239E-05 + 1.57881E-05 7.18894E-06 2.99951E-06 1.14814E-06 4.03552E-07 1.30341E-07 + 3.87077E-08 1.05746E-08 2.65864E-09 6.15362E-10 + -9.79723E-10 -4.23284E-09 -1.68360E-08 -6.16270E-08 -2.07517E-07 -6.42499E-07 + -1.82797E-06 -4.77556E-06 -1.14456E-05 -2.51364E-05 -5.05079E-05 -9.26669E-05 + -1.54805E-04 -2.34540E-04 -3.20369E-04 -3.90897E-04 -4.19209E-04 -3.82079E-04 + -2.70541E-04 -9.81282E-05 9.81282E-05 2.70541E-04 3.82079E-04 4.19209E-04 + 3.90897E-04 3.20369E-04 2.34540E-04 1.54805E-04 9.26669E-05 5.05079E-05 + 2.51364E-05 1.14456E-05 4.77556E-06 1.82797E-06 6.42499E-07 2.07517E-07 + 6.16270E-08 1.68360E-08 4.23284E-09 9.79723E-10 + -1.35381E-09 -5.84905E-09 -2.32644E-08 -8.51578E-08 -2.86752E-07 -8.87823E-07 + -2.52594E-06 -6.59899E-06 -1.58158E-05 -3.47342E-05 -6.97932E-05 -1.28050E-04 + -2.13915E-04 -3.24100E-04 -4.42755E-04 -5.40481E-04 -5.80449E-04 -5.30601E-04 + -3.77229E-04 -1.37250E-04 1.37250E-04 3.77229E-04 5.30601E-04 5.80449E-04 + 5.40481E-04 4.42755E-04 3.24100E-04 2.13915E-04 1.28050E-04 6.97932E-05 + 3.47342E-05 1.58158E-05 6.59899E-06 2.52594E-06 8.87823E-07 2.86752E-07 + 8.51578E-08 2.32644E-08 5.84905E-09 1.35381E-09 + -1.59807E-09 -6.90438E-09 -2.74619E-08 -1.00522E-07 -3.38490E-07 -1.04801E-06 + -2.98168E-06 -7.78962E-06 -1.86694E-05 -4.10011E-05 -8.23857E-05 -1.51153E-04 + -2.52511E-04 -3.82579E-04 -5.22653E-04 -6.38069E-04 -6.85423E-04 -6.26877E-04 + -4.45983E-04 -1.62350E-04 1.62350E-04 4.45983E-04 6.26877E-04 6.85423E-04 + 6.38069E-04 5.22653E-04 3.82579E-04 2.52511E-04 1.51153E-04 8.23857E-05 + 4.10011E-05 1.86694E-05 7.78962E-06 2.98168E-06 1.04801E-06 3.38490E-07 + 1.00522E-07 2.74619E-08 6.90438E-09 1.59807E-09 + -1.55868E-09 -6.73419E-09 -2.67850E-08 -9.80447E-08 -3.30147E-07 -1.02218E-06 + -2.90819E-06 -7.59762E-06 -1.82092E-05 -3.99905E-05 -8.03550E-05 -1.47427E-04 + -2.46286E-04 -3.73142E-04 -5.09717E-04 -6.22048E-04 -6.67474E-04 -6.09055E-04 + -4.31935E-04 -1.56856E-04 1.56856E-04 4.31935E-04 6.09055E-04 6.67474E-04 + 6.22048E-04 5.09717E-04 3.73142E-04 2.46286E-04 1.47427E-04 8.03550E-05 + 3.99905E-05 1.82092E-05 7.59762E-06 2.90819E-06 1.02218E-06 3.30147E-07 + 9.80447E-08 2.67850E-08 6.73419E-09 1.55868E-09 + -1.15023E-09 -4.96952E-09 -1.97661E-08 -7.23525E-08 -2.43633E-07 -7.54320E-07 + -2.14611E-06 -5.60669E-06 -1.34376E-05 -2.95112E-05 -5.92983E-05 -1.08795E-04 + -1.81748E-04 -2.75356E-04 -3.76100E-04 -4.58783E-04 -4.91639E-04 -4.47383E-04 + -3.16085E-04 -1.14453E-04 1.14453E-04 3.16085E-04 4.47383E-04 4.91639E-04 + 4.58783E-04 3.76100E-04 2.75356E-04 1.81748E-04 1.08795E-04 5.92983E-05 + 2.95112E-05 1.34376E-05 5.60669E-06 2.14611E-06 7.54320E-07 2.43633E-07 + 7.23525E-08 1.97661E-08 4.96952E-09 1.15023E-09 + -4.25112E-10 -1.83667E-09 -7.30529E-09 -2.67406E-08 -9.00437E-08 -2.78787E-07 + -7.93175E-07 -2.07216E-06 -4.96635E-06 -1.09069E-05 -2.19159E-05 -4.02091E-05 + -6.71715E-05 -1.01767E-04 -1.38992E-04 -1.69509E-04 -1.81523E-04 -1.64944E-04 + -1.16304E-04 -4.20485E-05 4.20485E-05 1.16304E-04 1.64944E-04 1.81523E-04 + 1.69509E-04 1.38992E-04 1.01767E-04 6.71715E-05 4.02091E-05 2.19159E-05 + 1.09069E-05 4.96635E-06 2.07216E-06 7.93175E-07 2.78787E-07 9.00437E-08 + 2.67406E-08 7.30529E-09 1.83667E-09 4.25112E-10 + 4.25112E-10 1.83667E-09 7.30529E-09 2.67406E-08 9.00437E-08 2.78787E-07 + 7.93175E-07 2.07216E-06 4.96635E-06 1.09069E-05 2.19159E-05 4.02091E-05 + 6.71715E-05 1.01767E-04 1.38992E-04 1.69509E-04 1.81523E-04 1.64944E-04 + 1.16304E-04 4.20485E-05 -4.20485E-05 -1.16304E-04 -1.64944E-04 -1.81523E-04 + -1.69509E-04 -1.38992E-04 -1.01767E-04 -6.71715E-05 -4.02091E-05 -2.19159E-05 + -1.09069E-05 -4.96635E-06 -2.07216E-06 -7.93175E-07 -2.78787E-07 -9.00437E-08 + -2.67406E-08 -7.30529E-09 -1.83667E-09 -4.25112E-10 + 1.15023E-09 4.96952E-09 1.97661E-08 7.23525E-08 2.43633E-07 7.54320E-07 + 2.14611E-06 5.60669E-06 1.34376E-05 2.95112E-05 5.92983E-05 1.08795E-04 + 1.81748E-04 2.75356E-04 3.76100E-04 4.58783E-04 4.91639E-04 4.47383E-04 + 3.16085E-04 1.14453E-04 -1.14453E-04 -3.16085E-04 -4.47383E-04 -4.91639E-04 + -4.58783E-04 -3.76100E-04 -2.75356E-04 -1.81748E-04 -1.08795E-04 -5.92983E-05 + -2.95112E-05 -1.34376E-05 -5.60669E-06 -2.14611E-06 -7.54320E-07 -2.43633E-07 + -7.23525E-08 -1.97661E-08 -4.96952E-09 -1.15023E-09 + 1.55868E-09 6.73419E-09 2.67850E-08 9.80447E-08 3.30147E-07 1.02218E-06 + 2.90819E-06 7.59762E-06 1.82092E-05 3.99905E-05 8.03550E-05 1.47427E-04 + 2.46286E-04 3.73142E-04 5.09717E-04 6.22048E-04 6.67474E-04 6.09055E-04 + 4.31935E-04 1.56856E-04 -1.56856E-04 -4.31935E-04 -6.09055E-04 -6.67474E-04 + -6.22048E-04 -5.09717E-04 -3.73142E-04 -2.46286E-04 -1.47427E-04 -8.03550E-05 + -3.99905E-05 -1.82092E-05 -7.59762E-06 -2.90819E-06 -1.02218E-06 -3.30147E-07 + -9.80447E-08 -2.67850E-08 -6.73419E-09 -1.55868E-09 + 1.59807E-09 6.90438E-09 2.74619E-08 1.00522E-07 3.38490E-07 1.04801E-06 + 2.98168E-06 7.78962E-06 1.86694E-05 4.10011E-05 8.23857E-05 1.51153E-04 + 2.52511E-04 3.82579E-04 5.22653E-04 6.38069E-04 6.85423E-04 6.26877E-04 + 4.45983E-04 1.62350E-04 -1.62350E-04 -4.45983E-04 -6.26877E-04 -6.85423E-04 + -6.38069E-04 -5.22653E-04 -3.82579E-04 -2.52511E-04 -1.51153E-04 -8.23857E-05 + -4.10011E-05 -1.86694E-05 -7.78962E-06 -2.98168E-06 -1.04801E-06 -3.38490E-07 + -1.00522E-07 -2.74619E-08 -6.90438E-09 -1.59807E-09 + 1.35381E-09 5.84905E-09 2.32644E-08 8.51578E-08 2.86752E-07 8.87823E-07 + 2.52594E-06 6.59899E-06 1.58158E-05 3.47342E-05 6.97932E-05 1.28050E-04 + 2.13915E-04 3.24100E-04 4.42755E-04 5.40481E-04 5.80449E-04 5.30601E-04 + 3.77229E-04 1.37250E-04 -1.37250E-04 -3.77229E-04 -5.30601E-04 -5.80449E-04 + -5.40481E-04 -4.42755E-04 -3.24100E-04 -2.13915E-04 -1.28050E-04 -6.97932E-05 + -3.47342E-05 -1.58158E-05 -6.59899E-06 -2.52594E-06 -8.87823E-07 -2.86752E-07 + -8.51578E-08 -2.32644E-08 -5.84905E-09 -1.35381E-09 + 9.79723E-10 4.23284E-09 1.68360E-08 6.16270E-08 2.07517E-07 6.42499E-07 + 1.82797E-06 4.77556E-06 1.14456E-05 2.51364E-05 5.05079E-05 9.26669E-05 + 1.54805E-04 2.34540E-04 3.20369E-04 3.90897E-04 4.19209E-04 3.82079E-04 + 2.70541E-04 9.81282E-05 -9.81282E-05 -2.70541E-04 -3.82079E-04 -4.19209E-04 + -3.90897E-04 -3.20369E-04 -2.34540E-04 -1.54805E-04 -9.26669E-05 -5.05079E-05 + -2.51364E-05 -1.14456E-05 -4.77556E-06 -1.82797E-06 -6.42499E-07 -2.07517E-07 + -6.16270E-08 -1.68360E-08 -4.23284E-09 -9.79723E-10 + 6.15362E-10 2.65864E-09 1.05746E-08 3.87077E-08 1.30341E-07 4.03552E-07 + 1.14814E-06 2.99951E-06 7.18894E-06 1.57881E-05 3.17239E-05 5.82038E-05 + 9.72327E-05 1.47311E-04 2.01198E-04 2.45384E-04 2.62813E-04 2.38882E-04 + 1.68508E-04 6.09419E-05 -6.09419E-05 -1.68508E-04 -2.38882E-04 -2.62813E-04 + -2.45384E-04 -2.01198E-04 -1.47311E-04 -9.72327E-05 -5.82038E-05 -3.17239E-05 + -1.57881E-05 -7.18894E-06 -2.99951E-06 -1.14814E-06 -4.03552E-07 -1.30341E-07 + -3.87077E-08 -1.05746E-08 -2.65864E-09 -6.15362E-10 + 3.38391E-10 1.46200E-09 5.81505E-09 2.12856E-08 7.16753E-08 2.21916E-07 + 6.31371E-07 1.64945E-06 3.95324E-06 8.68199E-06 1.74452E-05 3.20067E-05 + 5.34688E-05 8.10063E-05 1.10634E-04 1.34904E-04 1.44400E-04 1.31087E-04 + 9.23085E-05 3.33388E-05 -3.33388E-05 -9.23085E-05 -1.31087E-04 -1.44400E-04 + -1.34904E-04 -1.10634E-04 -8.10063E-05 -5.34688E-05 -3.20067E-05 -1.74452E-05 + -8.68199E-06 -3.95324E-06 -1.64945E-06 -6.31371E-07 -2.21916E-07 -7.16753E-08 + -2.12856E-08 -5.81505E-09 -1.46200E-09 -3.38391E-10 + 1.63793E-10 7.07657E-10 2.81468E-09 1.03029E-08 3.46932E-08 1.07415E-07 + 3.05605E-07 7.98389E-07 1.91350E-06 4.20237E-06 8.44404E-06 1.54923E-05 + 2.58807E-05 3.92096E-05 5.35496E-05 6.52936E-05 6.98789E-05 6.34158E-05 + 4.46361E-05 1.61154E-05 -1.61154E-05 -4.46361E-05 -6.34158E-05 -6.98789E-05 + -6.52936E-05 -5.35496E-05 -3.92096E-05 -2.58807E-05 -1.54923E-05 -8.44404E-06 + -4.20237E-06 -1.91350E-06 -7.98389E-07 -3.05605E-07 -1.07415E-07 -3.46932E-08 + -1.03029E-08 -2.81468E-09 -7.07657E-10 -1.63793E-10 + 7.00414E-11 3.02610E-10 1.20362E-09 4.40578E-09 1.48356E-08 4.59330E-08 + 1.30684E-07 3.41409E-07 8.18257E-07 1.79703E-06 3.61087E-06 6.62485E-06 + 1.10672E-05 1.67669E-05 2.28990E-05 2.79208E-05 2.98808E-05 2.71158E-05 + 1.90845E-05 6.88993E-06 -6.88993E-06 -1.90845E-05 -2.71158E-05 -2.98808E-05 + -2.79208E-05 -2.28990E-05 -1.67669E-05 -1.10672E-05 -6.62485E-06 -3.61087E-06 + -1.79703E-06 -8.18257E-07 -3.41409E-07 -1.30684E-07 -4.59330E-08 -1.48356E-08 + -4.40578E-09 -1.20362E-09 -3.02610E-10 -7.00414E-11 + 2.65359E-11 1.14647E-10 4.56004E-10 1.66918E-09 5.62063E-09 1.74022E-08 + 4.95108E-08 1.29347E-07 3.10005E-07 6.80823E-07 1.36801E-06 2.50990E-06 + 4.19291E-06 6.35233E-06 8.67552E-06 1.05781E-05 1.13206E-05 1.02730E-05 + 7.23028E-06 2.61027E-06 -2.61027E-06 -7.23028E-06 -1.02730E-05 -1.13206E-05 + -1.05781E-05 -8.67552E-06 -6.35233E-06 -4.19291E-06 -2.50990E-06 -1.36801E-06 + -6.80823E-07 -3.10005E-07 -1.29347E-07 -4.95108E-08 -1.74022E-08 -5.62063E-09 + -1.66918E-09 -4.56004E-10 -1.14647E-10 -2.65359E-11 + 8.92839E-12 3.85746E-11 1.53429E-10 5.61617E-10 1.89114E-09 5.85521E-09 + 1.66586E-08 4.35205E-08 1.04306E-07 2.29073E-07 4.60288E-07 8.44490E-07 + 1.41076E-06 2.13733E-06 2.91900E-06 3.55914E-06 3.80898E-06 3.45651E-06 + 2.43273E-06 8.78262E-07 -8.78262E-07 -2.43273E-06 -3.45651E-06 -3.80898E-06 + -3.55914E-06 -2.91900E-06 -2.13733E-06 -1.41076E-06 -8.44490E-07 -4.60288E-07 + -2.29073E-07 -1.04306E-07 -4.35205E-08 -1.66586E-08 -5.85521E-09 -1.89114E-09 + -5.61617E-10 -1.53429E-10 -3.85746E-11 -8.92839E-12 + 2.67361E-12 1.15512E-11 4.59444E-11 1.68177E-10 5.66302E-10 1.75334E-09 + 4.98843E-09 1.30322E-08 3.12343E-08 6.85959E-08 1.37833E-07 2.52883E-07 + 4.22454E-07 6.40024E-07 8.74095E-07 1.06579E-06 1.14060E-06 1.03505E-06 + 7.28481E-07 2.62996E-07 -2.62996E-07 -7.28481E-07 -1.03505E-06 -1.14060E-06 + -1.06579E-06 -8.74095E-07 -6.40024E-07 -4.22454E-07 -2.52883E-07 -1.37833E-07 + -6.85959E-08 -3.12343E-08 -1.30322E-08 -4.98843E-09 -1.75334E-09 -5.66302E-10 + -1.68177E-10 -4.59444E-11 -1.15512E-11 -2.67361E-12 + 7.13901E-13 3.08437E-12 1.22680E-11 4.49061E-11 1.51213E-10 4.68174E-10 + 1.33200E-09 3.47983E-09 8.34012E-09 1.83163E-08 3.68039E-08 6.75242E-08 + 1.12803E-07 1.70898E-07 2.33399E-07 2.84584E-07 3.04561E-07 2.76377E-07 + 1.94517E-07 7.02246E-08 -7.02246E-08 -1.94517E-07 -2.76377E-07 -3.04561E-07 + -2.84584E-07 -2.33399E-07 -1.70898E-07 -1.12803E-07 -6.75242E-08 -3.68039E-08 + -1.83163E-08 -8.34012E-09 -3.47983E-09 -1.33200E-09 -4.68174E-10 -1.51213E-10 + -4.49061E-11 -1.22680E-11 -3.08437E-12 -7.13901E-13 + 1.70256E-13 7.35583E-13 2.92575E-12 1.07095E-11 3.60623E-11 1.11654E-10 + 3.17665E-10 8.29896E-10 1.98901E-09 4.36821E-09 8.77727E-09 1.61037E-08 + 2.69020E-08 4.07569E-08 5.56627E-08 6.78695E-08 7.26339E-08 6.59125E-08 + 4.63899E-08 1.67477E-08 -1.67477E-08 -4.63899E-08 -6.59125E-08 -7.26339E-08 + -6.78695E-08 -5.56627E-08 -4.07569E-08 -2.69020E-08 -1.61037E-08 -8.77727E-09 + -4.36821E-09 -1.98901E-09 -8.29896E-10 -3.17665E-10 -1.11654E-10 -3.60623E-11 + -1.07095E-11 -2.92575E-12 -7.35583E-13 -1.70256E-13 + 3.63113E-14 1.56881E-13 6.23987E-13 2.28407E-12 7.69115E-12 2.38128E-11 + 6.77497E-11 1.76995E-10 4.24205E-10 9.31626E-10 1.87196E-09 3.43449E-09 + 5.73750E-09 8.69240E-09 1.18714E-08 1.44748E-08 1.54909E-08 1.40574E-08 + 9.89376E-09 3.57184E-09 -3.57184E-09 -9.89376E-09 -1.40574E-08 -1.54909E-08 + -1.44748E-08 -1.18714E-08 -8.69240E-09 -5.73750E-09 -3.43449E-09 -1.87196E-09 + -9.31626E-10 -4.24205E-10 -1.76995E-10 -6.77497E-11 -2.38128E-11 -7.69115E-12 + -2.28407E-12 -6.23987E-13 -1.56881E-13 -3.63113E-14 + 6.93097E-15 2.99449E-14 1.19105E-13 4.35975E-13 1.46806E-12 4.54531E-12 + 1.29318E-11 3.37843E-11 8.09709E-11 1.77826E-10 3.57314E-10 6.55565E-10 + 1.09515E-09 1.65918E-09 2.26598E-09 2.76291E-09 2.95686E-09 2.68324E-09 + 1.88849E-09 6.81782E-10 -6.81782E-10 -1.88849E-09 -2.68324E-09 -2.95686E-09 + -2.76291E-09 -2.26598E-09 -1.65918E-09 -1.09515E-09 -6.55565E-10 -3.57314E-10 + -1.77826E-10 -8.09709E-11 -3.37843E-11 -1.29318E-11 -4.54531E-12 -1.46806E-12 + -4.35975E-13 -1.19105E-13 -2.99449E-14 -6.93097E-15 + 1.18431E-15 5.11674E-15 2.03516E-14 7.44959E-14 2.50851E-13 7.76666E-13 + 2.20969E-12 5.77279E-12 1.38357E-11 3.03854E-11 6.10550E-11 1.12018E-10 + 1.87131E-10 2.83507E-10 3.87192E-10 4.72103E-10 5.05244E-10 4.58490E-10 + 3.22690E-10 1.16497E-10 -1.16497E-10 -3.22690E-10 -4.58490E-10 -5.05244E-10 + -4.72103E-10 -3.87192E-10 -2.83507E-10 -1.87131E-10 -1.12018E-10 -6.10550E-11 + -3.03854E-11 -1.38357E-11 -5.77279E-12 -2.20969E-12 -7.76666E-13 -2.50851E-13 + -7.44959E-14 -2.03516E-14 -5.11674E-15 -1.18431E-15 + 1.81097E-16 7.82419E-16 3.11204E-15 1.13914E-14 3.83584E-14 1.18763E-13 + 3.37891E-13 8.82736E-13 2.11566E-12 4.64634E-12 9.33613E-12 1.71290E-11 + 2.86149E-11 4.33520E-11 5.92068E-11 7.21909E-11 7.72586E-11 7.01092E-11 + 4.93436E-11 1.78140E-11 -1.78140E-11 -4.93436E-11 -7.01092E-11 -7.72586E-11 + -7.21909E-11 -5.92068E-11 -4.33520E-11 -2.86149E-11 -1.71290E-11 -9.33613E-12 + -4.64634E-12 -2.11566E-12 -8.82736E-13 -3.37891E-13 -1.18763E-13 -3.83584E-14 + -1.13914E-14 -3.11204E-15 -7.82419E-16 -1.81097E-16 + 2.47607E-17 1.06977E-16 4.25498E-16 1.55751E-15 5.24462E-15 1.62380E-14 + 4.61987E-14 1.20694E-13 2.89266E-13 6.35278E-13 1.27650E-12 2.34199E-12 + 3.91241E-12 5.92737E-12 8.09514E-12 9.87041E-12 1.05633E-11 9.58579E-12 + 6.74658E-12 2.43565E-12 -2.43565E-12 -6.74658E-12 -9.58579E-12 -1.05633E-11 + -9.87041E-12 -8.09514E-12 -5.92737E-12 -3.91241E-12 -2.34199E-12 -1.27650E-12 + -6.35278E-13 -2.89266E-13 -1.20694E-13 -4.61987E-14 -1.62380E-14 -5.24462E-15 + -1.55751E-15 -4.25498E-16 -1.06977E-16 -2.47607E-17 + -9.00950E-17 -3.89251E-16 -1.54823E-15 -5.66719E-15 -1.90832E-14 -5.90840E-14 + -1.68099E-13 -4.39158E-13 -1.05253E-12 -2.31154E-12 -4.64469E-12 -8.52161E-12 + -1.42358E-11 -2.15675E-11 -2.94552E-11 -3.59147E-11 -3.84359E-11 -3.48791E-11 + -2.45483E-11 -8.86241E-12 8.86241E-12 2.45483E-11 3.48791E-11 3.84359E-11 + 3.59147E-11 2.94552E-11 2.15675E-11 1.42358E-11 8.52161E-12 4.64469E-12 + 2.31154E-12 1.05253E-12 4.39158E-13 1.68099E-13 5.90840E-14 1.90832E-14 + 5.66719E-15 1.54823E-15 3.89251E-16 9.00950E-17 + -6.41901E-16 -2.77330E-15 -1.10307E-14 -4.03771E-14 -1.35962E-13 -4.20957E-13 + -1.19766E-12 -3.12888E-12 -7.49899E-12 -1.64690E-11 -3.30921E-11 -6.07141E-11 + -1.01426E-10 -1.53662E-10 -2.09860E-10 -2.55882E-10 -2.73845E-10 -2.48504E-10 + -1.74899E-10 -6.31421E-11 6.31421E-11 1.74899E-10 2.48504E-10 2.73845E-10 + 2.55882E-10 2.09860E-10 1.53662E-10 1.01426E-10 6.07141E-11 3.30921E-11 + 1.64690E-11 7.49899E-12 3.12888E-12 1.19766E-12 4.20957E-13 1.35962E-13 + 4.03771E-14 1.10307E-14 2.77330E-15 6.41901E-16 + -4.07835E-15 -1.76203E-14 -7.00840E-14 -2.56538E-13 -8.63843E-13 -2.67457E-12 + -7.60940E-12 -1.98795E-11 -4.76452E-11 -1.04637E-10 -2.10252E-10 -3.85750E-10 + -6.44415E-10 -9.76300E-10 -1.33335E-09 -1.62576E-09 -1.73989E-09 -1.57888E-09 + -1.11123E-09 -4.01177E-10 4.01177E-10 1.11123E-09 1.57888E-09 1.73989E-09 + 1.62576E-09 1.33335E-09 9.76300E-10 6.44415E-10 3.85750E-10 2.10252E-10 + 1.04637E-10 4.76452E-11 1.98795E-11 7.60940E-12 2.67457E-12 8.63843E-13 + 2.56538E-13 7.00840E-14 1.76203E-14 4.07835E-15 + -2.31421E-14 -9.99844E-14 -3.97684E-13 -1.45570E-12 -4.90178E-12 -1.51765E-11 + -4.31787E-11 -1.12804E-10 -2.70357E-10 -5.93750E-10 -1.19305E-09 -2.18889E-09 + -3.65666E-09 -5.53990E-09 -7.56597E-09 -9.22519E-09 -9.87278E-09 -8.95917E-09 + -6.30556E-09 -2.27643E-09 2.27643E-09 6.30556E-09 8.95917E-09 9.87278E-09 + 9.22519E-09 7.56597E-09 5.53990E-09 3.65666E-09 2.18889E-09 1.19305E-09 + 5.93750E-10 2.70357E-10 1.12804E-10 4.31787E-11 1.51765E-11 4.90178E-12 + 1.45570E-12 3.97684E-13 9.99844E-14 2.31421E-14 + -1.17423E-13 -5.07321E-13 -2.01785E-12 -7.38621E-12 -2.48716E-11 -7.70058E-11 + -2.19089E-10 -5.72367E-10 -1.37179E-09 -3.01269E-09 -6.05355E-09 -1.11064E-08 + -1.85539E-08 -2.81095E-08 -3.83897E-08 -4.68086E-08 -5.00945E-08 -4.54589E-08 + -3.19944E-08 -1.15506E-08 1.15506E-08 3.19944E-08 4.54589E-08 5.00945E-08 + 4.68086E-08 3.83897E-08 2.81095E-08 1.85539E-08 1.11064E-08 6.05355E-09 + 3.01269E-09 1.37179E-09 5.72367E-10 2.19089E-10 7.70058E-11 2.48716E-11 + 7.38621E-12 2.01785E-12 5.07321E-13 1.17423E-13 + -5.33189E-13 -2.30361E-12 -9.16253E-12 -3.35389E-11 -1.12936E-10 -3.49663E-10 + -9.94825E-10 -2.59897E-09 -6.22896E-09 -1.36798E-08 -2.74876E-08 -5.04315E-08 + -8.42485E-08 -1.27638E-07 -1.74318E-07 -2.12546E-07 -2.27466E-07 -2.06417E-07 + -1.45278E-07 -5.24484E-08 5.24484E-08 1.45278E-07 2.06417E-07 2.27466E-07 + 2.12546E-07 1.74318E-07 1.27638E-07 8.42485E-08 5.04315E-08 2.74876E-08 + 1.36798E-08 6.22896E-09 2.59897E-09 9.94825E-10 3.49663E-10 1.12936E-10 + 3.35389E-11 9.16253E-12 2.30361E-12 5.33189E-13 + -2.16718E-12 -9.36320E-12 -3.72417E-11 -1.36321E-10 -4.59035E-10 -1.42123E-09 + -4.04354E-09 -1.05637E-08 -2.53180E-08 -5.56027E-08 -1.11725E-07 -2.04983E-07 + -3.42434E-07 -5.18793E-07 -7.08527E-07 -8.63908E-07 -9.24553E-07 -8.38996E-07 + -5.90494E-07 -2.13180E-07 2.13180E-07 5.90494E-07 8.38996E-07 9.24553E-07 + 8.63908E-07 7.08527E-07 5.18793E-07 3.42434E-07 2.04983E-07 1.11725E-07 + 5.56027E-08 2.53180E-08 1.05637E-08 4.04354E-09 1.42123E-09 4.59035E-10 + 1.36321E-10 3.72417E-11 9.36320E-12 2.16718E-12 + -7.88229E-12 -3.40550E-11 -1.35452E-10 -4.95816E-10 -1.66956E-09 -5.16918E-09 + -1.47068E-08 -3.84214E-08 -9.20846E-08 -2.02233E-07 -4.06358E-07 -7.45545E-07 + -1.24547E-06 -1.88691E-06 -2.57700E-06 -3.14213E-06 -3.36270E-06 -3.05153E-06 + -2.14770E-06 -7.75361E-07 7.75361E-07 2.14770E-06 3.05153E-06 3.36270E-06 + 3.14213E-06 2.57700E-06 1.88691E-06 1.24547E-06 7.45545E-07 4.06358E-07 + 2.02233E-07 9.20846E-08 3.84214E-08 1.47068E-08 5.16918E-09 1.66956E-09 + 4.95816E-10 1.35452E-10 3.40550E-11 7.88229E-12 + -2.56302E-11 -1.10734E-10 -4.40439E-10 -1.61220E-09 -5.42877E-09 -1.68082E-08 + -4.78208E-08 -1.24931E-07 -2.99423E-07 -6.57584E-07 -1.32132E-06 -2.42422E-06 + -4.04979E-06 -6.13550E-06 -8.37939E-06 -1.02170E-05 -1.09342E-05 -9.92238E-06 + -6.98347E-06 -2.52117E-06 2.52117E-06 6.98347E-06 9.92238E-06 1.09342E-05 + 1.02170E-05 8.37939E-06 6.13550E-06 4.04979E-06 2.42422E-06 1.32132E-06 + 6.57584E-07 2.99423E-07 1.24931E-07 4.78208E-08 1.68082E-08 5.42877E-09 + 1.61220E-09 4.40439E-10 1.10734E-10 2.56302E-11 + -7.43971E-11 -3.21429E-10 -1.27847E-09 -4.67976E-09 -1.57582E-08 -4.87894E-08 + -1.38810E-07 -3.62641E-07 -8.69141E-07 -1.90878E-06 -3.83541E-06 -7.03683E-06 + -1.17554E-05 -1.78096E-05 -2.43230E-05 -2.96570E-05 -3.17389E-05 -2.88019E-05 + -2.02711E-05 -7.31828E-06 7.31828E-06 2.02711E-05 2.88019E-05 3.17389E-05 + 2.96570E-05 2.43230E-05 1.78096E-05 1.17554E-05 7.03683E-06 3.83541E-06 + 1.90878E-06 8.69141E-07 3.62641E-07 1.38810E-07 4.87894E-08 1.57582E-08 + 4.67976E-09 1.27847E-09 3.21429E-10 7.43971E-11 + -1.92406E-10 -8.31281E-10 -3.30638E-09 -1.21028E-08 -4.07539E-08 -1.26179E-07 + -3.58992E-07 -9.37863E-07 -2.24778E-06 -4.93650E-06 -9.91917E-06 -1.81987E-05 + -3.04019E-05 -4.60593E-05 -6.29043E-05 -7.66995E-05 -8.20846E-05 -7.44903E-05 + -5.24286E-05 -1.89282E-05 1.89282E-05 5.24286E-05 7.44903E-05 8.20846E-05 + 7.66995E-05 6.29043E-05 4.60593E-05 3.04019E-05 1.81987E-05 9.91917E-06 + 4.93650E-06 2.24778E-06 9.37863E-07 3.58992E-07 1.26179E-07 4.07539E-08 + 1.21028E-08 3.30638E-09 8.31281E-10 1.92406E-10 + -4.42266E-10 -1.91079E-09 -7.60007E-09 -2.78196E-08 -9.36771E-08 -2.90037E-07 + -8.25181E-07 -2.15578E-06 -5.16676E-06 -1.13471E-05 -2.28003E-05 -4.18316E-05 + -6.98819E-05 -1.05872E-04 -1.44594E-04 -1.76310E-04 -1.88710E-04 -1.71291E-04 + -1.20599E-04 -4.35506E-05 4.35506E-05 1.20599E-04 1.71291E-04 1.88710E-04 + 1.76310E-04 1.44594E-04 1.05872E-04 6.98819E-05 4.18316E-05 2.28003E-05 + 1.13471E-05 5.16676E-06 2.15578E-06 8.25181E-07 2.90037E-07 9.36771E-08 + 2.78196E-08 7.60007E-09 1.91079E-09 4.42266E-10 + -9.00809E-10 -3.89190E-09 -1.54799E-08 -5.66631E-08 -1.90802E-07 -5.90748E-07 + -1.68073E-06 -4.39090E-06 -1.05237E-05 -2.31117E-05 -4.64396E-05 -8.52028E-05 + -1.42336E-04 -2.15644E-04 -2.94530E-04 -3.59224E-04 -3.84774E-04 -3.49801E-04 + -2.46813E-04 -8.92784E-05 8.92784E-05 2.46813E-04 3.49801E-04 3.84774E-04 + 3.59224E-04 2.94530E-04 2.15644E-04 1.42336E-04 8.52028E-05 4.64396E-05 + 2.31117E-05 1.05237E-05 4.39090E-06 1.68073E-06 5.90748E-07 1.90802E-07 + 5.66631E-08 1.54799E-08 3.89190E-09 9.00809E-10 + -1.61936E-09 -6.99634E-09 -2.78277E-08 -1.01861E-07 -3.42999E-07 -1.06197E-06 + -3.02140E-06 -7.89337E-06 -1.89181E-05 -4.15472E-05 -8.34831E-05 -1.53167E-04 + -2.55874E-04 -3.87675E-04 -5.29617E-04 -6.46580E-04 -6.94589E-04 -6.35301E-04 + -4.52013E-04 -1.64556E-04 1.64556E-04 4.52013E-04 6.35301E-04 6.94589E-04 + 6.46580E-04 5.29617E-04 3.87675E-04 2.55874E-04 1.53167E-04 8.34831E-05 + 4.15472E-05 1.89181E-05 7.89337E-06 3.02140E-06 1.06197E-06 3.42999E-07 + 1.01861E-07 2.78277E-08 6.99634E-09 1.61936E-09 + -2.55474E-09 -1.10376E-08 -4.39017E-08 -1.60700E-07 -5.41125E-07 -1.67539E-06 + -4.76665E-06 -1.24528E-05 -2.98457E-05 -6.55462E-05 -1.31705E-04 -2.41640E-04 + -4.03681E-04 -6.11673E-04 -8.36070E-04 -1.02293E-03 -1.10598E-03 -1.02500E-03 + -7.42317E-04 -2.73857E-04 2.73857E-04 7.42317E-04 1.02500E-03 1.10598E-03 + 1.02293E-03 8.36070E-04 6.11673E-04 4.03681E-04 2.41640E-04 1.31705E-04 + 6.55462E-05 2.98457E-05 1.24528E-05 4.76665E-06 1.67539E-06 5.41125E-07 + 1.60700E-07 4.39017E-08 1.10376E-08 2.55474E-09 + -3.50533E-09 -1.51446E-08 -6.02369E-08 -2.20494E-07 -7.42469E-07 -2.29878E-06 + -6.54025E-06 -1.70863E-05 -4.09508E-05 -8.99349E-05 -1.80711E-04 -3.31552E-04 + -5.53894E-04 -8.39375E-04 -1.14799E-03 -1.40798E-03 -1.53307E-03 -1.44104E-03 + -1.06293E-03 -3.97397E-04 3.97397E-04 1.06293E-03 1.44104E-03 1.53307E-03 + 1.40798E-03 1.14799E-03 8.39375E-04 5.53894E-04 3.31552E-04 1.80711E-04 + 8.99349E-05 4.09508E-05 1.70863E-05 6.54025E-06 2.29878E-06 7.42469E-07 + 2.20494E-07 6.02369E-08 1.51446E-08 3.50533E-09 + -4.11591E-09 -1.77826E-08 -7.07294E-08 -2.58901E-07 -8.71798E-07 -2.69920E-06 + -7.67948E-06 -2.00626E-05 -4.80840E-05 -1.05600E-04 -2.12189E-04 -3.89305E-04 + -6.50381E-04 -9.85624E-04 -1.34822E-03 -1.65444E-03 -1.80406E-03 -1.70047E-03 + -1.25860E-03 -4.71695E-04 4.71695E-04 1.25860E-03 1.70047E-03 1.80406E-03 + 1.65444E-03 1.34822E-03 9.85624E-04 6.50381E-04 3.89305E-04 2.12189E-04 + 1.05600E-04 4.80840E-05 2.00626E-05 7.67948E-06 2.69920E-06 8.71798E-07 + 2.58901E-07 7.07294E-08 1.77826E-08 4.11591E-09 + -3.99938E-09 -1.72791E-08 -6.87270E-08 -2.51571E-07 -8.47117E-07 -2.62278E-06 + -7.46206E-06 -1.94946E-05 -4.67227E-05 -1.02611E-04 -2.06181E-04 -3.78283E-04 + -6.31963E-04 -9.57649E-04 -1.30941E-03 -1.60403E-03 -1.74000E-03 -1.62296E-03 + -1.18501E-03 -4.39775E-04 4.39775E-04 1.18501E-03 1.62296E-03 1.74000E-03 + 1.60403E-03 1.30941E-03 9.57649E-04 6.31963E-04 3.78283E-04 2.06181E-04 + 1.02611E-04 4.67227E-05 1.94946E-05 7.46206E-06 2.62278E-06 8.47117E-07 + 2.51571E-07 6.87270E-08 1.72791E-08 3.99938E-09 + -2.94427E-09 -1.27206E-08 -5.05955E-08 -1.85202E-07 -6.23631E-07 -1.93084E-06 + -5.49342E-06 -1.43515E-05 -3.43963E-05 -7.55401E-05 -1.51787E-04 -2.78484E-04 + -4.65232E-04 -7.04925E-04 -9.63346E-04 -1.17750E-03 -1.26909E-03 -1.16829E-03 + -8.38355E-04 -3.07157E-04 3.07157E-04 8.38355E-04 1.16829E-03 1.26909E-03 + 1.17750E-03 9.63346E-04 7.04925E-04 4.65232E-04 2.78484E-04 1.51787E-04 + 7.55401E-05 3.43963E-05 1.43515E-05 5.49342E-06 1.93084E-06 6.23631E-07 + 1.85202E-07 5.05955E-08 1.27206E-08 2.94427E-09 + -1.08689E-09 -4.69584E-09 -1.86775E-08 -6.83679E-08 -2.30216E-07 -7.12778E-07 + -2.02792E-06 -5.29792E-06 -1.26975E-05 -2.78859E-05 -5.60327E-05 -1.02803E-04 + -1.71741E-04 -2.60209E-04 -3.55492E-04 -4.33995E-04 -4.66106E-04 -4.26012E-04 + -3.02758E-04 -1.10117E-04 1.10117E-04 3.02758E-04 4.26012E-04 4.66106E-04 + 4.33995E-04 3.55492E-04 2.60209E-04 1.71741E-04 1.02803E-04 5.60327E-05 + 2.78859E-05 1.26975E-05 5.29792E-06 2.02792E-06 7.12778E-07 2.30216E-07 + 6.83679E-08 1.86775E-08 4.69584E-09 1.08689E-09 + 1.08689E-09 4.69584E-09 1.86775E-08 6.83679E-08 2.30216E-07 7.12778E-07 + 2.02792E-06 5.29792E-06 1.26975E-05 2.78859E-05 5.60327E-05 1.02803E-04 + 1.71741E-04 2.60209E-04 3.55492E-04 4.33995E-04 4.66106E-04 4.26012E-04 + 3.02758E-04 1.10117E-04 -1.10117E-04 -3.02758E-04 -4.26012E-04 -4.66106E-04 + -4.33995E-04 -3.55492E-04 -2.60209E-04 -1.71741E-04 -1.02803E-04 -5.60327E-05 + -2.78859E-05 -1.26975E-05 -5.29792E-06 -2.02792E-06 -7.12778E-07 -2.30216E-07 + -6.83679E-08 -1.86775E-08 -4.69584E-09 -1.08689E-09 + 2.94427E-09 1.27206E-08 5.05955E-08 1.85202E-07 6.23631E-07 1.93084E-06 + 5.49342E-06 1.43515E-05 3.43963E-05 7.55401E-05 1.51787E-04 2.78484E-04 + 4.65232E-04 7.04925E-04 9.63346E-04 1.17750E-03 1.26909E-03 1.16829E-03 + 8.38355E-04 3.07157E-04 -3.07157E-04 -8.38355E-04 -1.16829E-03 -1.26909E-03 + -1.17750E-03 -9.63346E-04 -7.04925E-04 -4.65232E-04 -2.78484E-04 -1.51787E-04 + -7.55401E-05 -3.43963E-05 -1.43515E-05 -5.49342E-06 -1.93084E-06 -6.23631E-07 + -1.85202E-07 -5.05955E-08 -1.27206E-08 -2.94427E-09 + 3.99938E-09 1.72791E-08 6.87270E-08 2.51571E-07 8.47117E-07 2.62278E-06 + 7.46206E-06 1.94946E-05 4.67227E-05 1.02611E-04 2.06181E-04 3.78283E-04 + 6.31963E-04 9.57649E-04 1.30941E-03 1.60403E-03 1.74000E-03 1.62296E-03 + 1.18501E-03 4.39775E-04 -4.39775E-04 -1.18501E-03 -1.62296E-03 -1.74000E-03 + -1.60403E-03 -1.30941E-03 -9.57649E-04 -6.31963E-04 -3.78283E-04 -2.06181E-04 + -1.02611E-04 -4.67227E-05 -1.94946E-05 -7.46206E-06 -2.62278E-06 -8.47117E-07 + -2.51571E-07 -6.87270E-08 -1.72791E-08 -3.99938E-09 + 4.11591E-09 1.77826E-08 7.07294E-08 2.58901E-07 8.71798E-07 2.69920E-06 + 7.67948E-06 2.00626E-05 4.80840E-05 1.05600E-04 2.12189E-04 3.89305E-04 + 6.50381E-04 9.85624E-04 1.34822E-03 1.65444E-03 1.80406E-03 1.70047E-03 + 1.25860E-03 4.71695E-04 -4.71695E-04 -1.25860E-03 -1.70047E-03 -1.80406E-03 + -1.65444E-03 -1.34822E-03 -9.85624E-04 -6.50381E-04 -3.89305E-04 -2.12189E-04 + -1.05600E-04 -4.80840E-05 -2.00626E-05 -7.67948E-06 -2.69920E-06 -8.71798E-07 + -2.58901E-07 -7.07294E-08 -1.77826E-08 -4.11591E-09 + 3.50533E-09 1.51446E-08 6.02369E-08 2.20494E-07 7.42469E-07 2.29878E-06 + 6.54025E-06 1.70863E-05 4.09508E-05 8.99349E-05 1.80711E-04 3.31552E-04 + 5.53894E-04 8.39375E-04 1.14799E-03 1.40798E-03 1.53307E-03 1.44104E-03 + 1.06293E-03 3.97397E-04 -3.97397E-04 -1.06293E-03 -1.44104E-03 -1.53307E-03 + -1.40798E-03 -1.14799E-03 -8.39375E-04 -5.53894E-04 -3.31552E-04 -1.80711E-04 + -8.99349E-05 -4.09508E-05 -1.70863E-05 -6.54025E-06 -2.29878E-06 -7.42469E-07 + -2.20494E-07 -6.02369E-08 -1.51446E-08 -3.50533E-09 + 2.55474E-09 1.10376E-08 4.39017E-08 1.60700E-07 5.41125E-07 1.67539E-06 + 4.76665E-06 1.24528E-05 2.98457E-05 6.55462E-05 1.31705E-04 2.41640E-04 + 4.03681E-04 6.11673E-04 8.36070E-04 1.02293E-03 1.10598E-03 1.02500E-03 + 7.42317E-04 2.73857E-04 -2.73857E-04 -7.42317E-04 -1.02500E-03 -1.10598E-03 + -1.02293E-03 -8.36070E-04 -6.11673E-04 -4.03681E-04 -2.41640E-04 -1.31705E-04 + -6.55462E-05 -2.98457E-05 -1.24528E-05 -4.76665E-06 -1.67539E-06 -5.41125E-07 + -1.60700E-07 -4.39017E-08 -1.10376E-08 -2.55474E-09 + 1.61936E-09 6.99634E-09 2.78277E-08 1.01861E-07 3.42999E-07 1.06197E-06 + 3.02140E-06 7.89337E-06 1.89181E-05 4.15472E-05 8.34831E-05 1.53167E-04 + 2.55874E-04 3.87675E-04 5.29617E-04 6.46580E-04 6.94589E-04 6.35301E-04 + 4.52013E-04 1.64556E-04 -1.64556E-04 -4.52013E-04 -6.35301E-04 -6.94589E-04 + -6.46580E-04 -5.29617E-04 -3.87675E-04 -2.55874E-04 -1.53167E-04 -8.34831E-05 + -4.15472E-05 -1.89181E-05 -7.89337E-06 -3.02140E-06 -1.06197E-06 -3.42999E-07 + -1.01861E-07 -2.78277E-08 -6.99634E-09 -1.61936E-09 + 9.00809E-10 3.89190E-09 1.54799E-08 5.66631E-08 1.90802E-07 5.90748E-07 + 1.68073E-06 4.39090E-06 1.05237E-05 2.31117E-05 4.64396E-05 8.52028E-05 + 1.42336E-04 2.15644E-04 2.94530E-04 3.59224E-04 3.84774E-04 3.49801E-04 + 2.46813E-04 8.92784E-05 -8.92784E-05 -2.46813E-04 -3.49801E-04 -3.84774E-04 + -3.59224E-04 -2.94530E-04 -2.15644E-04 -1.42336E-04 -8.52028E-05 -4.64396E-05 + -2.31117E-05 -1.05237E-05 -4.39090E-06 -1.68073E-06 -5.90748E-07 -1.90802E-07 + -5.66631E-08 -1.54799E-08 -3.89190E-09 -9.00809E-10 + 4.42266E-10 1.91079E-09 7.60007E-09 2.78196E-08 9.36771E-08 2.90037E-07 + 8.25181E-07 2.15578E-06 5.16676E-06 1.13471E-05 2.28003E-05 4.18316E-05 + 6.98819E-05 1.05872E-04 1.44594E-04 1.76310E-04 1.88710E-04 1.71291E-04 + 1.20599E-04 4.35506E-05 -4.35506E-05 -1.20599E-04 -1.71291E-04 -1.88710E-04 + -1.76310E-04 -1.44594E-04 -1.05872E-04 -6.98819E-05 -4.18316E-05 -2.28003E-05 + -1.13471E-05 -5.16676E-06 -2.15578E-06 -8.25181E-07 -2.90037E-07 -9.36771E-08 + -2.78196E-08 -7.60007E-09 -1.91079E-09 -4.42266E-10 + 1.92406E-10 8.31281E-10 3.30638E-09 1.21028E-08 4.07539E-08 1.26179E-07 + 3.58992E-07 9.37863E-07 2.24778E-06 4.93650E-06 9.91917E-06 1.81987E-05 + 3.04019E-05 4.60593E-05 6.29043E-05 7.66995E-05 8.20846E-05 7.44903E-05 + 5.24286E-05 1.89282E-05 -1.89282E-05 -5.24286E-05 -7.44903E-05 -8.20846E-05 + -7.66995E-05 -6.29043E-05 -4.60593E-05 -3.04019E-05 -1.81987E-05 -9.91917E-06 + -4.93650E-06 -2.24778E-06 -9.37863E-07 -3.58992E-07 -1.26179E-07 -4.07539E-08 + -1.21028E-08 -3.30638E-09 -8.31281E-10 -1.92406E-10 + 7.43971E-11 3.21429E-10 1.27847E-09 4.67976E-09 1.57582E-08 4.87894E-08 + 1.38810E-07 3.62641E-07 8.69141E-07 1.90878E-06 3.83541E-06 7.03683E-06 + 1.17554E-05 1.78096E-05 2.43230E-05 2.96570E-05 3.17389E-05 2.88019E-05 + 2.02711E-05 7.31828E-06 -7.31828E-06 -2.02711E-05 -2.88019E-05 -3.17389E-05 + -2.96570E-05 -2.43230E-05 -1.78096E-05 -1.17554E-05 -7.03683E-06 -3.83541E-06 + -1.90878E-06 -8.69141E-07 -3.62641E-07 -1.38810E-07 -4.87894E-08 -1.57582E-08 + -4.67976E-09 -1.27847E-09 -3.21429E-10 -7.43971E-11 + 2.56302E-11 1.10734E-10 4.40439E-10 1.61220E-09 5.42877E-09 1.68082E-08 + 4.78208E-08 1.24931E-07 2.99423E-07 6.57584E-07 1.32132E-06 2.42422E-06 + 4.04979E-06 6.13550E-06 8.37939E-06 1.02170E-05 1.09342E-05 9.92238E-06 + 6.98347E-06 2.52117E-06 -2.52117E-06 -6.98347E-06 -9.92238E-06 -1.09342E-05 + -1.02170E-05 -8.37939E-06 -6.13550E-06 -4.04979E-06 -2.42422E-06 -1.32132E-06 + -6.57584E-07 -2.99423E-07 -1.24931E-07 -4.78208E-08 -1.68082E-08 -5.42877E-09 + -1.61220E-09 -4.40439E-10 -1.10734E-10 -2.56302E-11 + 7.88229E-12 3.40550E-11 1.35452E-10 4.95816E-10 1.66956E-09 5.16918E-09 + 1.47068E-08 3.84214E-08 9.20846E-08 2.02233E-07 4.06358E-07 7.45545E-07 + 1.24547E-06 1.88691E-06 2.57700E-06 3.14213E-06 3.36270E-06 3.05153E-06 + 2.14770E-06 7.75361E-07 -7.75361E-07 -2.14770E-06 -3.05153E-06 -3.36270E-06 + -3.14213E-06 -2.57700E-06 -1.88691E-06 -1.24547E-06 -7.45545E-07 -4.06358E-07 + -2.02233E-07 -9.20846E-08 -3.84214E-08 -1.47068E-08 -5.16918E-09 -1.66956E-09 + -4.95816E-10 -1.35452E-10 -3.40550E-11 -7.88229E-12 + 2.16718E-12 9.36320E-12 3.72417E-11 1.36321E-10 4.59035E-10 1.42123E-09 + 4.04354E-09 1.05637E-08 2.53180E-08 5.56027E-08 1.11725E-07 2.04983E-07 + 3.42434E-07 5.18793E-07 7.08527E-07 8.63908E-07 9.24553E-07 8.38996E-07 + 5.90494E-07 2.13180E-07 -2.13180E-07 -5.90494E-07 -8.38996E-07 -9.24553E-07 + -8.63908E-07 -7.08527E-07 -5.18793E-07 -3.42434E-07 -2.04983E-07 -1.11725E-07 + -5.56027E-08 -2.53180E-08 -1.05637E-08 -4.04354E-09 -1.42123E-09 -4.59035E-10 + -1.36321E-10 -3.72417E-11 -9.36320E-12 -2.16718E-12 + 5.33189E-13 2.30361E-12 9.16253E-12 3.35389E-11 1.12936E-10 3.49663E-10 + 9.94825E-10 2.59897E-09 6.22896E-09 1.36798E-08 2.74876E-08 5.04315E-08 + 8.42485E-08 1.27638E-07 1.74318E-07 2.12546E-07 2.27466E-07 2.06417E-07 + 1.45278E-07 5.24484E-08 -5.24484E-08 -1.45278E-07 -2.06417E-07 -2.27466E-07 + -2.12546E-07 -1.74318E-07 -1.27638E-07 -8.42485E-08 -5.04315E-08 -2.74876E-08 + -1.36798E-08 -6.22896E-09 -2.59897E-09 -9.94825E-10 -3.49663E-10 -1.12936E-10 + -3.35389E-11 -9.16253E-12 -2.30361E-12 -5.33189E-13 + 1.17423E-13 5.07321E-13 2.01785E-12 7.38621E-12 2.48716E-11 7.70058E-11 + 2.19089E-10 5.72367E-10 1.37179E-09 3.01269E-09 6.05355E-09 1.11064E-08 + 1.85539E-08 2.81095E-08 3.83897E-08 4.68086E-08 5.00945E-08 4.54589E-08 + 3.19944E-08 1.15506E-08 -1.15506E-08 -3.19944E-08 -4.54589E-08 -5.00945E-08 + -4.68086E-08 -3.83897E-08 -2.81095E-08 -1.85539E-08 -1.11064E-08 -6.05355E-09 + -3.01269E-09 -1.37179E-09 -5.72367E-10 -2.19089E-10 -7.70058E-11 -2.48716E-11 + -7.38621E-12 -2.01785E-12 -5.07321E-13 -1.17423E-13 + 2.31421E-14 9.99844E-14 3.97684E-13 1.45570E-12 4.90178E-12 1.51765E-11 + 4.31787E-11 1.12804E-10 2.70357E-10 5.93750E-10 1.19305E-09 2.18889E-09 + 3.65666E-09 5.53990E-09 7.56597E-09 9.22519E-09 9.87278E-09 8.95917E-09 + 6.30556E-09 2.27643E-09 -2.27643E-09 -6.30556E-09 -8.95917E-09 -9.87278E-09 + -9.22519E-09 -7.56597E-09 -5.53990E-09 -3.65666E-09 -2.18889E-09 -1.19305E-09 + -5.93750E-10 -2.70357E-10 -1.12804E-10 -4.31787E-11 -1.51765E-11 -4.90178E-12 + -1.45570E-12 -3.97684E-13 -9.99844E-14 -2.31421E-14 + 4.07835E-15 1.76203E-14 7.00840E-14 2.56538E-13 8.63843E-13 2.67457E-12 + 7.60940E-12 1.98795E-11 4.76452E-11 1.04637E-10 2.10252E-10 3.85750E-10 + 6.44415E-10 9.76300E-10 1.33335E-09 1.62576E-09 1.73989E-09 1.57888E-09 + 1.11123E-09 4.01177E-10 -4.01177E-10 -1.11123E-09 -1.57888E-09 -1.73989E-09 + -1.62576E-09 -1.33335E-09 -9.76300E-10 -6.44415E-10 -3.85750E-10 -2.10252E-10 + -1.04637E-10 -4.76452E-11 -1.98795E-11 -7.60940E-12 -2.67457E-12 -8.63843E-13 + -2.56538E-13 -7.00840E-14 -1.76203E-14 -4.07835E-15 + 6.41901E-16 2.77330E-15 1.10307E-14 4.03771E-14 1.35962E-13 4.20957E-13 + 1.19766E-12 3.12888E-12 7.49899E-12 1.64690E-11 3.30921E-11 6.07141E-11 + 1.01426E-10 1.53662E-10 2.09860E-10 2.55882E-10 2.73845E-10 2.48504E-10 + 1.74899E-10 6.31421E-11 -6.31421E-11 -1.74899E-10 -2.48504E-10 -2.73845E-10 + -2.55882E-10 -2.09860E-10 -1.53662E-10 -1.01426E-10 -6.07141E-11 -3.30921E-11 + -1.64690E-11 -7.49899E-12 -3.12888E-12 -1.19766E-12 -4.20957E-13 -1.35962E-13 + -4.03771E-14 -1.10307E-14 -2.77330E-15 -6.41901E-16 + 9.00950E-17 3.89251E-16 1.54823E-15 5.66719E-15 1.90832E-14 5.90840E-14 + 1.68099E-13 4.39158E-13 1.05253E-12 2.31154E-12 4.64469E-12 8.52161E-12 + 1.42358E-11 2.15675E-11 2.94552E-11 3.59147E-11 3.84359E-11 3.48791E-11 + 2.45483E-11 8.86241E-12 -8.86241E-12 -2.45483E-11 -3.48791E-11 -3.84359E-11 + -3.59147E-11 -2.94552E-11 -2.15675E-11 -1.42358E-11 -8.52161E-12 -4.64469E-12 + -2.31154E-12 -1.05253E-12 -4.39158E-13 -1.68099E-13 -5.90840E-14 -1.90832E-14 + -5.66719E-15 -1.54823E-15 -3.89251E-16 -9.00950E-17 + -2.91905E-16 -1.26116E-15 -5.01621E-15 -1.83615E-14 -6.18289E-14 -1.91430E-13 + -5.44637E-13 -1.42286E-12 -3.41017E-12 -7.48931E-12 -1.50487E-11 -2.76098E-11 + -4.61235E-11 -6.98779E-11 -9.54339E-11 -1.16363E-10 -1.24531E-10 -1.13007E-10 + -7.95356E-11 -2.87139E-11 2.87139E-11 7.95356E-11 1.13007E-10 1.24531E-10 + 1.16363E-10 9.54339E-11 6.98779E-11 4.61235E-11 2.76098E-11 1.50487E-11 + 7.48931E-12 3.41017E-12 1.42286E-12 5.44637E-13 1.91430E-13 6.18289E-14 + 1.83615E-14 5.01621E-15 1.26116E-15 2.91905E-16 + -2.03818E-15 -8.80586E-15 -3.50249E-14 -1.28207E-13 -4.31711E-13 -1.33663E-12 + -3.80285E-12 -9.93490E-12 -2.38110E-11 -5.22929E-11 -1.05075E-10 -1.92781E-10 + -3.22051E-10 -4.87912E-10 -6.66352E-10 -8.12484E-10 -8.69519E-10 -7.89055E-10 + -5.55345E-10 -2.00491E-10 2.00491E-10 5.55345E-10 7.89055E-10 8.69519E-10 + 8.12484E-10 6.66352E-10 4.87912E-10 3.22051E-10 1.92781E-10 1.05075E-10 + 5.22929E-11 2.38110E-11 9.93490E-12 3.80285E-12 1.33663E-12 4.31711E-13 + 1.28207E-13 3.50249E-14 8.80586E-15 2.03818E-15 + -1.26506E-14 -5.46564E-14 -2.17394E-13 -7.95756E-13 -2.67956E-12 -8.29625E-12 + -2.36036E-11 -6.16642E-11 -1.47791E-10 -3.24573E-10 -6.52182E-10 -1.19656E-09 + -1.99891E-09 -3.02838E-09 -4.13593E-09 -5.04295E-09 -5.39695E-09 -4.89753E-09 + -3.44693E-09 -1.24441E-09 1.24441E-09 3.44693E-09 4.89753E-09 5.39695E-09 + 5.04295E-09 4.13593E-09 3.02838E-09 1.99891E-09 1.19656E-09 6.52182E-10 + 3.24573E-10 1.47791E-10 6.16642E-11 2.36036E-11 8.29625E-12 2.67956E-12 + 7.95756E-13 2.17394E-13 5.46564E-14 1.26506E-14 + -6.99145E-14 -3.02062E-13 -1.20144E-12 -4.39780E-12 -1.48087E-11 -4.58497E-11 + -1.30447E-10 -3.40791E-10 -8.16774E-10 -1.79377E-09 -3.60432E-09 -6.61285E-09 + -1.10471E-08 -1.67366E-08 -2.28575E-08 -2.78702E-08 -2.98266E-08 -2.70665E-08 + -1.90497E-08 -6.87731E-09 6.87731E-09 1.90497E-08 2.70665E-08 2.98266E-08 + 2.78702E-08 2.28575E-08 1.67366E-08 1.10471E-08 6.61285E-09 3.60432E-09 + 1.79377E-09 8.16774E-10 3.40791E-10 1.30447E-10 4.58497E-11 1.48087E-11 + 4.39780E-12 1.20144E-12 3.02062E-13 6.99145E-14 + -3.44600E-13 -1.48883E-12 -5.92175E-12 -2.16762E-11 -7.29904E-11 -2.25988E-10 + -6.42956E-10 -1.67972E-09 -4.02578E-09 -8.84129E-09 -1.77653E-08 -3.25939E-08 + -5.44498E-08 -8.24924E-08 -1.12662E-07 -1.37368E-07 -1.47012E-07 -1.33407E-07 + -9.38935E-08 -3.38974E-08 3.38974E-08 9.38935E-08 1.33407E-07 1.47012E-07 + 1.37368E-07 1.12662E-07 8.24924E-08 5.44498E-08 3.25939E-08 1.77653E-08 + 8.84129E-09 4.02578E-09 1.67972E-09 6.42956E-10 2.25988E-10 7.29904E-11 + 2.16762E-11 5.92175E-12 1.48883E-12 3.44600E-13 + -1.51704E-12 -6.55427E-12 -2.60693E-11 -9.54252E-11 -3.21326E-10 -9.94867E-10 + -2.83049E-09 -7.39463E-09 -1.77227E-08 -3.89221E-08 -7.82082E-08 -1.43488E-07 + -2.39705E-07 -3.63157E-07 -4.95972E-07 -6.04738E-07 -6.47190E-07 -5.87301E-07 + -4.13348E-07 -1.49227E-07 1.49227E-07 4.13348E-07 5.87301E-07 6.47190E-07 + 6.04738E-07 4.95972E-07 3.63157E-07 2.39705E-07 1.43488E-07 7.82082E-08 + 3.89221E-08 1.77227E-08 7.39463E-09 2.83049E-09 9.94867E-10 3.21326E-10 + 9.54252E-11 2.60693E-11 6.55427E-12 1.51704E-12 + -5.97193E-12 -2.58014E-11 -1.02624E-10 -3.75649E-10 -1.26493E-09 -3.91637E-09 + -1.11424E-08 -2.91095E-08 -6.97669E-08 -1.53220E-07 -3.07873E-07 -5.64854E-07 + -9.43617E-07 -1.42960E-06 -1.95243E-06 -2.38060E-06 -2.54771E-06 -2.31195E-06 + -1.62718E-06 -5.87443E-07 5.87443E-07 1.62718E-06 2.31195E-06 2.54771E-06 + 2.38060E-06 1.95243E-06 1.42960E-06 9.43617E-07 5.64854E-07 3.07873E-07 + 1.53220E-07 6.97669E-08 2.91095E-08 1.11424E-08 3.91637E-09 1.26493E-09 + 3.75649E-10 1.02624E-10 2.58014E-11 5.97193E-12 + -2.10367E-11 -9.08881E-11 -3.61504E-10 -1.32326E-09 -4.45583E-09 -1.37958E-08 + -3.92504E-08 -1.02541E-07 -2.45761E-07 -5.39732E-07 -1.08451E-06 -1.98976E-06 + -3.32399E-06 -5.03590E-06 -6.87764E-06 -8.38591E-06 -8.97459E-06 -8.14410E-06 + -5.73190E-06 -2.06933E-06 2.06933E-06 5.73190E-06 8.14410E-06 8.97459E-06 + 8.38591E-06 6.87764E-06 5.03590E-06 3.32399E-06 1.98976E-06 1.08451E-06 + 5.39732E-07 2.45761E-07 1.02541E-07 3.92504E-08 1.37958E-08 4.45583E-09 + 1.32326E-09 3.61504E-10 9.08881E-11 2.10367E-11 + -6.63194E-11 -2.86529E-10 -1.13966E-09 -4.17165E-09 -1.40472E-08 -4.34921E-08 + -1.23739E-07 -3.23267E-07 -7.74774E-07 -1.70153E-06 -3.41898E-06 -6.27281E-06 + -1.04790E-05 -1.58759E-05 -2.16821E-05 -2.64370E-05 -2.82929E-05 -2.56747E-05 + -1.80701E-05 -6.52367E-06 6.52367E-06 1.80701E-05 2.56747E-05 2.82929E-05 + 2.64370E-05 2.16821E-05 1.58759E-05 1.04790E-05 6.27281E-06 3.41898E-06 + 1.70153E-06 7.74774E-07 3.23267E-07 1.23739E-07 4.34921E-08 1.40472E-08 + 4.17165E-09 1.13966E-09 2.86529E-10 6.63194E-11 + -1.87011E-10 -8.07970E-10 -3.21367E-09 -1.17634E-08 -3.96111E-08 -1.22641E-07 + -3.48925E-07 -9.11563E-07 -2.18475E-06 -4.79807E-06 -9.64101E-06 -1.76884E-05 + -2.95493E-05 -4.47677E-05 -6.11403E-05 -7.45484E-05 -7.97817E-05 -7.23991E-05 + -5.09554E-05 -1.83960E-05 1.83960E-05 5.09554E-05 7.23991E-05 7.97817E-05 + 7.45484E-05 6.11403E-05 4.47677E-05 2.95493E-05 1.76884E-05 9.64101E-06 + 4.79807E-06 2.18475E-06 9.11563E-07 3.48925E-07 1.22641E-07 3.96111E-08 + 1.17634E-08 3.21367E-09 8.07970E-10 1.87011E-10 + -4.71101E-10 -2.03537E-09 -8.09558E-09 -2.96334E-08 -9.97847E-08 -3.08946E-07 + -8.78981E-07 -2.29633E-06 -5.50362E-06 -1.20869E-05 -2.42868E-05 -4.45590E-05 + -7.44380E-05 -1.12775E-04 -1.54020E-04 -1.87798E-04 -2.00986E-04 -1.82398E-04 + -1.28383E-04 -4.63516E-05 4.63516E-05 1.28383E-04 1.82398E-04 2.00986E-04 + 1.87798E-04 1.54020E-04 1.12775E-04 7.44380E-05 4.45590E-05 2.42868E-05 + 1.20869E-05 5.50362E-06 2.29633E-06 8.78981E-07 3.08946E-07 9.97847E-08 + 2.96334E-08 8.09558E-09 2.03537E-09 4.71101E-10 + -1.05807E-09 -4.57136E-09 -1.81824E-08 -6.65555E-08 -2.24113E-07 -6.93882E-07 + -1.97416E-06 -5.15747E-06 -1.23609E-05 -2.71467E-05 -5.45472E-05 -1.00078E-04 + -1.67185E-04 -2.53290E-04 -3.45932E-04 -4.21840E-04 -4.51594E-04 -4.10072E-04 + -2.88873E-04 -1.04362E-04 1.04362E-04 2.88873E-04 4.10072E-04 4.51594E-04 + 4.21840E-04 3.45932E-04 2.53290E-04 1.67185E-04 1.00078E-04 5.45472E-05 + 2.71467E-05 1.23609E-05 5.15747E-06 1.97416E-06 6.93882E-07 2.24113E-07 + 6.65555E-08 1.81824E-08 4.57136E-09 1.05807E-09 + -2.11269E-09 -9.12778E-09 -3.63054E-08 -1.32894E-07 -4.47494E-07 -1.38550E-06 + -3.94187E-06 -1.02981E-05 -2.46815E-05 -5.42047E-05 -1.08916E-04 -1.99829E-04 + -3.33826E-04 -5.05770E-04 -6.90872E-04 -8.43027E-04 -9.04253E-04 -8.24441E-04 + -5.84019E-04 -2.11898E-04 2.11898E-04 5.84019E-04 8.24441E-04 9.04253E-04 + 8.43027E-04 6.90872E-04 5.05770E-04 3.33826E-04 1.99829E-04 1.08916E-04 + 5.42047E-05 2.46815E-05 1.02981E-05 3.94187E-06 1.38550E-06 4.47494E-07 + 1.32894E-07 3.63054E-08 9.12778E-09 2.11269E-09 + -3.73540E-09 -1.61386E-08 -6.41906E-08 -2.34966E-07 -7.91202E-07 -2.44966E-06 + -6.96952E-06 -1.82078E-05 -4.36387E-05 -9.58379E-05 -1.92572E-04 -3.53313E-04 + -5.90241E-04 -8.94367E-04 -1.22249E-03 -1.49571E-03 -1.61688E-03 -1.49778E-03 + -1.08389E-03 -3.99633E-04 3.99633E-04 1.08389E-03 1.49778E-03 1.61688E-03 + 1.49571E-03 1.22249E-03 8.94367E-04 5.90241E-04 3.53313E-04 1.92572E-04 + 9.58379E-05 4.36387E-05 1.82078E-05 6.96952E-06 2.44966E-06 7.91202E-07 + 2.34966E-07 6.41906E-08 1.61386E-08 3.73540E-09 + -5.81401E-09 -2.51191E-08 -9.99104E-08 -3.65716E-07 -1.23148E-06 -3.81281E-06 + -1.08478E-05 -2.83398E-05 -6.79220E-05 -1.49168E-04 -2.99732E-04 -5.49923E-04 + -9.18737E-04 -1.39253E-03 -1.90637E-03 -2.34668E-03 -2.58130E-03 -2.47397E-03 + -1.86914E-03 -7.10591E-04 7.10591E-04 1.86914E-03 2.47397E-03 2.58130E-03 + 2.34668E-03 1.90637E-03 1.39253E-03 9.18737E-04 5.49923E-04 2.99732E-04 + 1.49168E-04 6.79220E-05 2.83398E-05 1.08478E-05 3.81281E-06 1.23148E-06 + 3.65716E-07 9.99104E-08 2.51191E-08 5.81401E-09 + -7.89264E-09 -3.40997E-08 -1.35630E-07 -4.96466E-07 -1.67175E-06 -5.17597E-06 + -1.47261E-05 -3.84718E-05 -9.22055E-05 -2.02499E-04 -4.06892E-04 -7.46539E-04 + -1.24730E-03 -1.89127E-03 -2.59408E-03 -3.21634E-03 -3.60799E-03 -3.58444E-03 + -2.82362E-03 -1.10341E-03 1.10341E-03 2.82362E-03 3.58444E-03 3.60799E-03 + 3.21634E-03 2.59408E-03 1.89127E-03 1.24730E-03 7.46539E-04 4.06892E-04 + 2.02499E-04 9.22055E-05 3.84718E-05 1.47261E-05 5.17597E-06 1.67175E-06 + 4.96466E-07 1.35630E-07 3.40997E-08 7.89264E-09 + -9.19249E-09 -3.97157E-08 -1.57967E-07 -5.78230E-07 -1.94708E-06 -6.02841E-06 + -1.71514E-05 -4.48078E-05 -1.07391E-04 -2.35849E-04 -4.73905E-04 -8.69498E-04 + -1.45281E-03 -2.20336E-03 -3.02461E-03 -3.75949E-03 -4.24152E-03 -4.25259E-03 + -3.38183E-03 -1.32916E-03 1.32916E-03 3.38183E-03 4.25259E-03 4.24152E-03 + 3.75949E-03 3.02461E-03 2.20336E-03 1.45281E-03 8.69498E-04 4.73905E-04 + 2.35849E-04 1.07391E-04 4.48078E-05 1.71514E-05 6.02841E-06 1.94708E-06 + 5.78230E-07 1.57967E-07 3.97157E-08 9.19249E-09 + -8.88031E-09 -3.83669E-08 -1.52603E-07 -5.58593E-07 -1.88095E-06 -5.82368E-06 + -1.65689E-05 -4.32861E-05 -1.03744E-04 -2.27839E-04 -4.57811E-04 -8.39973E-04 + -1.40348E-03 -2.12834E-03 -2.91922E-03 -3.61426E-03 -4.02956E-03 -3.94964E-03 + -3.05881E-03 -1.18152E-03 1.18152E-03 3.05881E-03 3.94964E-03 4.02956E-03 + 3.61426E-03 2.91922E-03 2.12834E-03 1.40348E-03 8.39973E-04 4.57811E-04 + 2.27839E-04 1.03744E-04 4.32861E-05 1.65689E-05 5.82368E-06 1.88095E-06 + 5.58593E-07 1.52603E-07 3.83669E-08 8.88031E-09 + -6.51298E-09 -2.81390E-08 -1.11922E-07 -4.09682E-07 -1.37953E-06 -4.27119E-06 + -1.21519E-05 -3.17468E-05 -7.60877E-05 -1.67101E-04 -3.35767E-04 -6.16049E-04 + -1.02930E-03 -1.56050E-03 -2.13729E-03 -2.63066E-03 -2.88421E-03 -2.73807E-03 + -2.03984E-03 -7.67308E-04 7.67308E-04 2.03984E-03 2.73807E-03 2.88421E-03 + 2.63066E-03 2.13729E-03 1.56050E-03 1.02930E-03 6.16049E-04 3.35767E-04 + 1.67101E-04 7.60877E-05 3.17468E-05 1.21519E-05 4.27119E-06 1.37953E-06 + 4.09682E-07 1.11922E-07 2.81390E-08 6.51298E-09 + -2.39987E-09 -1.03685E-08 -4.12403E-08 -1.50958E-07 -5.08321E-07 -1.57383E-06 + -4.47769E-06 -1.16979E-05 -2.80364E-05 -6.15727E-05 -1.23722E-04 -2.26997E-04 + -3.79256E-04 -5.74876E-04 -7.86620E-04 -9.64763E-04 -1.04733E-03 -9.75399E-04 + -7.09255E-04 -2.62207E-04 2.62207E-04 7.09255E-04 9.75399E-04 1.04733E-03 + 9.64763E-04 7.86620E-04 5.74876E-04 3.79256E-04 2.26997E-04 1.23722E-04 + 6.15727E-05 2.80364E-05 1.16979E-05 4.47769E-06 1.57383E-06 5.08321E-07 + 1.50958E-07 4.12403E-08 1.03685E-08 2.39987E-09 + 2.39987E-09 1.03685E-08 4.12403E-08 1.50958E-07 5.08321E-07 1.57383E-06 + 4.47769E-06 1.16979E-05 2.80364E-05 6.15727E-05 1.23722E-04 2.26997E-04 + 3.79256E-04 5.74876E-04 7.86620E-04 9.64763E-04 1.04733E-03 9.75399E-04 + 7.09255E-04 2.62207E-04 -2.62207E-04 -7.09255E-04 -9.75399E-04 -1.04733E-03 + -9.64763E-04 -7.86620E-04 -5.74876E-04 -3.79256E-04 -2.26997E-04 -1.23722E-04 + -6.15727E-05 -2.80364E-05 -1.16979E-05 -4.47769E-06 -1.57383E-06 -5.08321E-07 + -1.50958E-07 -4.12403E-08 -1.03685E-08 -2.39987E-09 + 6.51298E-09 2.81390E-08 1.11922E-07 4.09682E-07 1.37953E-06 4.27119E-06 + 1.21519E-05 3.17468E-05 7.60877E-05 1.67101E-04 3.35767E-04 6.16049E-04 + 1.02930E-03 1.56050E-03 2.13729E-03 2.63066E-03 2.88421E-03 2.73807E-03 + 2.03984E-03 7.67308E-04 -7.67308E-04 -2.03984E-03 -2.73807E-03 -2.88421E-03 + -2.63066E-03 -2.13729E-03 -1.56050E-03 -1.02930E-03 -6.16049E-04 -3.35767E-04 + -1.67101E-04 -7.60877E-05 -3.17468E-05 -1.21519E-05 -4.27119E-06 -1.37953E-06 + -4.09682E-07 -1.11922E-07 -2.81390E-08 -6.51298E-09 + 8.88031E-09 3.83669E-08 1.52603E-07 5.58593E-07 1.88095E-06 5.82368E-06 + 1.65689E-05 4.32861E-05 1.03744E-04 2.27839E-04 4.57811E-04 8.39973E-04 + 1.40348E-03 2.12834E-03 2.91922E-03 3.61426E-03 4.02956E-03 3.94964E-03 + 3.05881E-03 1.18152E-03 -1.18152E-03 -3.05881E-03 -3.94964E-03 -4.02956E-03 + -3.61426E-03 -2.91922E-03 -2.12834E-03 -1.40348E-03 -8.39973E-04 -4.57811E-04 + -2.27839E-04 -1.03744E-04 -4.32861E-05 -1.65689E-05 -5.82368E-06 -1.88095E-06 + -5.58593E-07 -1.52603E-07 -3.83669E-08 -8.88031E-09 + 9.19249E-09 3.97157E-08 1.57967E-07 5.78230E-07 1.94708E-06 6.02841E-06 + 1.71514E-05 4.48078E-05 1.07391E-04 2.35849E-04 4.73905E-04 8.69498E-04 + 1.45281E-03 2.20336E-03 3.02461E-03 3.75949E-03 4.24152E-03 4.25259E-03 + 3.38183E-03 1.32916E-03 -1.32916E-03 -3.38183E-03 -4.25259E-03 -4.24152E-03 + -3.75949E-03 -3.02461E-03 -2.20336E-03 -1.45281E-03 -8.69498E-04 -4.73905E-04 + -2.35849E-04 -1.07391E-04 -4.48078E-05 -1.71514E-05 -6.02841E-06 -1.94708E-06 + -5.78230E-07 -1.57967E-07 -3.97157E-08 -9.19249E-09 + 7.89264E-09 3.40997E-08 1.35630E-07 4.96466E-07 1.67175E-06 5.17597E-06 + 1.47261E-05 3.84718E-05 9.22055E-05 2.02499E-04 4.06892E-04 7.46539E-04 + 1.24730E-03 1.89127E-03 2.59408E-03 3.21634E-03 3.60799E-03 3.58444E-03 + 2.82362E-03 1.10341E-03 -1.10341E-03 -2.82362E-03 -3.58444E-03 -3.60799E-03 + -3.21634E-03 -2.59408E-03 -1.89127E-03 -1.24730E-03 -7.46539E-04 -4.06892E-04 + -2.02499E-04 -9.22055E-05 -3.84718E-05 -1.47261E-05 -5.17597E-06 -1.67175E-06 + -4.96466E-07 -1.35630E-07 -3.40997E-08 -7.89264E-09 + 5.81401E-09 2.51191E-08 9.99104E-08 3.65716E-07 1.23148E-06 3.81281E-06 + 1.08478E-05 2.83398E-05 6.79220E-05 1.49168E-04 2.99732E-04 5.49923E-04 + 9.18737E-04 1.39253E-03 1.90637E-03 2.34668E-03 2.58130E-03 2.47397E-03 + 1.86914E-03 7.10591E-04 -7.10591E-04 -1.86914E-03 -2.47397E-03 -2.58130E-03 + -2.34668E-03 -1.90637E-03 -1.39253E-03 -9.18737E-04 -5.49923E-04 -2.99732E-04 + -1.49168E-04 -6.79220E-05 -2.83398E-05 -1.08478E-05 -3.81281E-06 -1.23148E-06 + -3.65716E-07 -9.99104E-08 -2.51191E-08 -5.81401E-09 + 3.73540E-09 1.61386E-08 6.41906E-08 2.34966E-07 7.91202E-07 2.44966E-06 + 6.96952E-06 1.82078E-05 4.36387E-05 9.58379E-05 1.92572E-04 3.53313E-04 + 5.90241E-04 8.94367E-04 1.22249E-03 1.49571E-03 1.61688E-03 1.49778E-03 + 1.08389E-03 3.99633E-04 -3.99633E-04 -1.08389E-03 -1.49778E-03 -1.61688E-03 + -1.49571E-03 -1.22249E-03 -8.94367E-04 -5.90241E-04 -3.53313E-04 -1.92572E-04 + -9.58379E-05 -4.36387E-05 -1.82078E-05 -6.96952E-06 -2.44966E-06 -7.91202E-07 + -2.34966E-07 -6.41906E-08 -1.61386E-08 -3.73540E-09 + 2.11269E-09 9.12778E-09 3.63054E-08 1.32894E-07 4.47494E-07 1.38550E-06 + 3.94187E-06 1.02981E-05 2.46815E-05 5.42047E-05 1.08916E-04 1.99829E-04 + 3.33826E-04 5.05770E-04 6.90872E-04 8.43027E-04 9.04253E-04 8.24441E-04 + 5.84019E-04 2.11898E-04 -2.11898E-04 -5.84019E-04 -8.24441E-04 -9.04253E-04 + -8.43027E-04 -6.90872E-04 -5.05770E-04 -3.33826E-04 -1.99829E-04 -1.08916E-04 + -5.42047E-05 -2.46815E-05 -1.02981E-05 -3.94187E-06 -1.38550E-06 -4.47494E-07 + -1.32894E-07 -3.63054E-08 -9.12778E-09 -2.11269E-09 + 1.05807E-09 4.57136E-09 1.81824E-08 6.65555E-08 2.24113E-07 6.93882E-07 + 1.97416E-06 5.15747E-06 1.23609E-05 2.71467E-05 5.45472E-05 1.00078E-04 + 1.67185E-04 2.53290E-04 3.45932E-04 4.21840E-04 4.51594E-04 4.10072E-04 + 2.88873E-04 1.04362E-04 -1.04362E-04 -2.88873E-04 -4.10072E-04 -4.51594E-04 + -4.21840E-04 -3.45932E-04 -2.53290E-04 -1.67185E-04 -1.00078E-04 -5.45472E-05 + -2.71467E-05 -1.23609E-05 -5.15747E-06 -1.97416E-06 -6.93882E-07 -2.24113E-07 + -6.65555E-08 -1.81824E-08 -4.57136E-09 -1.05807E-09 + 4.71101E-10 2.03537E-09 8.09558E-09 2.96334E-08 9.97847E-08 3.08946E-07 + 8.78981E-07 2.29633E-06 5.50362E-06 1.20869E-05 2.42868E-05 4.45590E-05 + 7.44380E-05 1.12775E-04 1.54020E-04 1.87798E-04 2.00986E-04 1.82398E-04 + 1.28383E-04 4.63516E-05 -4.63516E-05 -1.28383E-04 -1.82398E-04 -2.00986E-04 + -1.87798E-04 -1.54020E-04 -1.12775E-04 -7.44380E-05 -4.45590E-05 -2.42868E-05 + -1.20869E-05 -5.50362E-06 -2.29633E-06 -8.78981E-07 -3.08946E-07 -9.97847E-08 + -2.96334E-08 -8.09558E-09 -2.03537E-09 -4.71101E-10 + 1.87011E-10 8.07970E-10 3.21367E-09 1.17634E-08 3.96111E-08 1.22641E-07 + 3.48925E-07 9.11563E-07 2.18475E-06 4.79807E-06 9.64101E-06 1.76884E-05 + 2.95493E-05 4.47677E-05 6.11403E-05 7.45484E-05 7.97817E-05 7.23991E-05 + 5.09554E-05 1.83960E-05 -1.83960E-05 -5.09554E-05 -7.23991E-05 -7.97817E-05 + -7.45484E-05 -6.11403E-05 -4.47677E-05 -2.95493E-05 -1.76884E-05 -9.64101E-06 + -4.79807E-06 -2.18475E-06 -9.11563E-07 -3.48925E-07 -1.22641E-07 -3.96111E-08 + -1.17634E-08 -3.21367E-09 -8.07970E-10 -1.87011E-10 + 6.63194E-11 2.86529E-10 1.13966E-09 4.17165E-09 1.40472E-08 4.34921E-08 + 1.23739E-07 3.23267E-07 7.74774E-07 1.70153E-06 3.41898E-06 6.27281E-06 + 1.04790E-05 1.58759E-05 2.16821E-05 2.64370E-05 2.82929E-05 2.56747E-05 + 1.80701E-05 6.52367E-06 -6.52367E-06 -1.80701E-05 -2.56747E-05 -2.82929E-05 + -2.64370E-05 -2.16821E-05 -1.58759E-05 -1.04790E-05 -6.27281E-06 -3.41898E-06 + -1.70153E-06 -7.74774E-07 -3.23267E-07 -1.23739E-07 -4.34921E-08 -1.40472E-08 + -4.17165E-09 -1.13966E-09 -2.86529E-10 -6.63194E-11 + 2.10367E-11 9.08881E-11 3.61504E-10 1.32326E-09 4.45583E-09 1.37958E-08 + 3.92504E-08 1.02541E-07 2.45761E-07 5.39732E-07 1.08451E-06 1.98976E-06 + 3.32399E-06 5.03590E-06 6.87764E-06 8.38591E-06 8.97459E-06 8.14410E-06 + 5.73190E-06 2.06933E-06 -2.06933E-06 -5.73190E-06 -8.14410E-06 -8.97459E-06 + -8.38591E-06 -6.87764E-06 -5.03590E-06 -3.32399E-06 -1.98976E-06 -1.08451E-06 + -5.39732E-07 -2.45761E-07 -1.02541E-07 -3.92504E-08 -1.37958E-08 -4.45583E-09 + -1.32326E-09 -3.61504E-10 -9.08881E-11 -2.10367E-11 + 5.97193E-12 2.58014E-11 1.02624E-10 3.75649E-10 1.26493E-09 3.91637E-09 + 1.11424E-08 2.91095E-08 6.97669E-08 1.53220E-07 3.07873E-07 5.64854E-07 + 9.43617E-07 1.42960E-06 1.95243E-06 2.38060E-06 2.54771E-06 2.31195E-06 + 1.62718E-06 5.87443E-07 -5.87443E-07 -1.62718E-06 -2.31195E-06 -2.54771E-06 + -2.38060E-06 -1.95243E-06 -1.42960E-06 -9.43617E-07 -5.64854E-07 -3.07873E-07 + -1.53220E-07 -6.97669E-08 -2.91095E-08 -1.11424E-08 -3.91637E-09 -1.26493E-09 + -3.75649E-10 -1.02624E-10 -2.58014E-11 -5.97193E-12 + 1.51704E-12 6.55427E-12 2.60693E-11 9.54252E-11 3.21326E-10 9.94867E-10 + 2.83049E-09 7.39463E-09 1.77227E-08 3.89221E-08 7.82082E-08 1.43488E-07 + 2.39705E-07 3.63157E-07 4.95972E-07 6.04738E-07 6.47190E-07 5.87301E-07 + 4.13348E-07 1.49227E-07 -1.49227E-07 -4.13348E-07 -5.87301E-07 -6.47190E-07 + -6.04738E-07 -4.95972E-07 -3.63157E-07 -2.39705E-07 -1.43488E-07 -7.82082E-08 + -3.89221E-08 -1.77227E-08 -7.39463E-09 -2.83049E-09 -9.94867E-10 -3.21326E-10 + -9.54252E-11 -2.60693E-11 -6.55427E-12 -1.51704E-12 + 3.44600E-13 1.48883E-12 5.92175E-12 2.16762E-11 7.29904E-11 2.25988E-10 + 6.42956E-10 1.67972E-09 4.02578E-09 8.84129E-09 1.77653E-08 3.25939E-08 + 5.44498E-08 8.24924E-08 1.12662E-07 1.37368E-07 1.47012E-07 1.33407E-07 + 9.38935E-08 3.38974E-08 -3.38974E-08 -9.38935E-08 -1.33407E-07 -1.47012E-07 + -1.37368E-07 -1.12662E-07 -8.24924E-08 -5.44498E-08 -3.25939E-08 -1.77653E-08 + -8.84129E-09 -4.02578E-09 -1.67972E-09 -6.42956E-10 -2.25988E-10 -7.29904E-11 + -2.16762E-11 -5.92175E-12 -1.48883E-12 -3.44600E-13 + 6.99145E-14 3.02062E-13 1.20144E-12 4.39780E-12 1.48087E-11 4.58497E-11 + 1.30447E-10 3.40791E-10 8.16774E-10 1.79377E-09 3.60432E-09 6.61285E-09 + 1.10471E-08 1.67366E-08 2.28575E-08 2.78702E-08 2.98266E-08 2.70665E-08 + 1.90497E-08 6.87731E-09 -6.87731E-09 -1.90497E-08 -2.70665E-08 -2.98266E-08 + -2.78702E-08 -2.28575E-08 -1.67366E-08 -1.10471E-08 -6.61285E-09 -3.60432E-09 + -1.79377E-09 -8.16774E-10 -3.40791E-10 -1.30447E-10 -4.58497E-11 -1.48087E-11 + -4.39780E-12 -1.20144E-12 -3.02062E-13 -6.99145E-14 + 1.26506E-14 5.46564E-14 2.17394E-13 7.95756E-13 2.67956E-12 8.29625E-12 + 2.36036E-11 6.16642E-11 1.47791E-10 3.24573E-10 6.52182E-10 1.19656E-09 + 1.99891E-09 3.02838E-09 4.13593E-09 5.04295E-09 5.39695E-09 4.89753E-09 + 3.44693E-09 1.24441E-09 -1.24441E-09 -3.44693E-09 -4.89753E-09 -5.39695E-09 + -5.04295E-09 -4.13593E-09 -3.02838E-09 -1.99891E-09 -1.19656E-09 -6.52182E-10 + -3.24573E-10 -1.47791E-10 -6.16642E-11 -2.36036E-11 -8.29625E-12 -2.67956E-12 + -7.95756E-13 -2.17394E-13 -5.46564E-14 -1.26506E-14 + 2.03818E-15 8.80586E-15 3.50249E-14 1.28207E-13 4.31711E-13 1.33663E-12 + 3.80285E-12 9.93490E-12 2.38110E-11 5.22929E-11 1.05075E-10 1.92781E-10 + 3.22051E-10 4.87912E-10 6.66352E-10 8.12484E-10 8.69519E-10 7.89055E-10 + 5.55345E-10 2.00491E-10 -2.00491E-10 -5.55345E-10 -7.89055E-10 -8.69519E-10 + -8.12484E-10 -6.66352E-10 -4.87912E-10 -3.22051E-10 -1.92781E-10 -1.05075E-10 + -5.22929E-11 -2.38110E-11 -9.93490E-12 -3.80285E-12 -1.33663E-12 -4.31711E-13 + -1.28207E-13 -3.50249E-14 -8.80586E-15 -2.03818E-15 + 2.91905E-16 1.26116E-15 5.01621E-15 1.83615E-14 6.18289E-14 1.91430E-13 + 5.44637E-13 1.42286E-12 3.41017E-12 7.48931E-12 1.50487E-11 2.76098E-11 + 4.61235E-11 6.98779E-11 9.54339E-11 1.16363E-10 1.24531E-10 1.13007E-10 + 7.95356E-11 2.87139E-11 -2.87139E-11 -7.95356E-11 -1.13007E-10 -1.24531E-10 + -1.16363E-10 -9.54339E-11 -6.98779E-11 -4.61235E-11 -2.76098E-11 -1.50487E-11 + -7.48931E-12 -3.41017E-12 -1.42286E-12 -5.44637E-13 -1.91430E-13 -6.18289E-14 + -1.83615E-14 -5.01621E-15 -1.26116E-15 -2.91905E-16 + -8.32573E-16 -3.59709E-15 -1.43073E-14 -5.23709E-14 -1.76349E-13 -5.45999E-13 + -1.55342E-12 -4.05829E-12 -9.72651E-12 -2.13610E-11 -4.29219E-11 -7.87488E-11 + -1.31554E-10 -1.99306E-10 -2.72197E-10 -3.31890E-10 -3.55188E-10 -3.22320E-10 + -2.26852E-10 -8.18981E-11 8.18981E-11 2.26852E-10 3.22320E-10 3.55188E-10 + 3.31890E-10 2.72197E-10 1.99306E-10 1.31554E-10 7.87488E-11 4.29219E-11 + 2.13610E-11 9.72651E-12 4.05829E-12 1.55342E-12 5.45999E-13 1.76349E-13 + 5.23709E-14 1.43073E-14 3.59709E-15 8.32573E-16 + -5.73034E-15 -2.47576E-14 -9.84724E-14 -3.60452E-13 -1.21375E-12 -3.75794E-12 + -1.06917E-11 -2.79319E-11 -6.69445E-11 -1.47021E-10 -2.95418E-10 -5.42003E-10 + -9.05444E-10 -1.37176E-09 -1.87345E-09 -2.28429E-09 -2.44465E-09 -2.21843E-09 + -1.56135E-09 -5.63679E-10 5.63679E-10 1.56135E-09 2.21843E-09 2.44465E-09 + 2.28429E-09 1.87345E-09 1.37176E-09 9.05444E-10 5.42003E-10 2.95418E-10 + 1.47021E-10 6.69445E-11 2.79319E-11 1.06917E-11 3.75794E-12 1.21375E-12 + 3.60452E-13 9.84724E-14 2.47576E-14 5.73034E-15 + -3.49580E-14 -1.51034E-13 -6.00732E-13 -2.19894E-12 -7.40451E-12 -2.29253E-11 + -6.52247E-11 -1.70399E-10 -4.08395E-10 -8.96905E-10 -1.80220E-09 -3.30649E-09 + -5.52366E-09 -8.36844E-09 -1.14290E-08 -1.39354E-08 -1.49136E-08 -1.35335E-08 + -9.52503E-09 -3.43872E-09 3.43872E-09 9.52503E-09 1.35335E-08 1.49136E-08 + 1.39354E-08 1.14290E-08 8.36844E-09 5.52366E-09 3.30649E-09 1.80220E-09 + 8.96905E-10 4.08395E-10 1.70399E-10 6.52247E-11 2.29253E-11 7.40451E-12 + 2.19894E-12 6.00732E-13 1.51034E-13 3.49580E-14 + -1.89297E-13 -8.17850E-13 -3.25296E-12 -1.19073E-11 -4.00954E-11 -1.24141E-10 + -3.53192E-10 -9.22710E-10 -2.21146E-09 -4.85674E-09 -9.75890E-09 -1.79047E-08 + -2.99107E-08 -4.53151E-08 -6.18879E-08 -7.54600E-08 -8.07571E-08 -7.32840E-08 + -5.15781E-08 -1.86207E-08 1.86207E-08 5.15781E-08 7.32840E-08 8.07571E-08 + 7.54600E-08 6.18879E-08 4.53151E-08 2.99107E-08 1.79047E-08 9.75890E-09 + 4.85674E-09 2.21146E-09 9.22710E-10 3.53192E-10 1.24141E-10 4.00954E-11 + 1.19073E-11 3.25296E-12 8.17850E-13 1.89297E-13 + -9.11297E-13 -3.93721E-12 -1.56601E-11 -5.73228E-11 -1.93024E-10 -5.97626E-10 + -1.70030E-09 -4.44202E-09 -1.06462E-08 -2.33808E-08 -4.69804E-08 -8.61949E-08 + -1.43993E-07 -2.18152E-07 -2.97935E-07 -3.63272E-07 -3.88773E-07 -3.52797E-07 + -2.48302E-07 -8.96419E-08 8.96419E-08 2.48302E-07 3.52797E-07 3.88773E-07 + 3.63272E-07 2.97935E-07 2.18152E-07 1.43993E-07 8.61949E-08 4.69804E-08 + 2.33808E-08 1.06462E-08 4.44202E-09 1.70030E-09 5.97626E-10 1.93024E-10 + 5.73228E-11 1.56601E-11 3.93721E-12 9.11297E-13 + -3.90666E-12 -1.68785E-11 -6.71336E-11 -2.45738E-10 -8.27476E-10 -2.56197E-09 + -7.28905E-09 -1.90426E-08 -4.56394E-08 -1.00232E-07 -2.01401E-07 -3.69510E-07 + -6.17286E-07 -9.35199E-07 -1.27722E-06 -1.55732E-06 -1.66664E-06 -1.51241E-06 + -1.06445E-06 -3.84288E-07 3.84288E-07 1.06445E-06 1.51241E-06 1.66664E-06 + 1.55732E-06 1.27722E-06 9.35199E-07 6.17286E-07 3.69510E-07 2.01401E-07 + 1.00232E-07 4.56394E-08 1.90426E-08 7.28905E-09 2.56197E-09 8.27476E-10 + 2.45738E-10 6.71336E-11 1.68785E-11 3.90666E-12 + -1.49374E-11 -6.45362E-11 -2.56690E-10 -9.39599E-10 -3.16392E-09 -9.79590E-09 + -2.78702E-08 -7.28107E-08 -1.74506E-07 -3.83244E-07 -7.70072E-07 -1.41285E-06 + -2.36024E-06 -3.57580E-06 -4.88355E-06 -5.95452E-06 -6.37252E-06 -5.78282E-06 + -4.07001E-06 -1.46935E-06 1.46935E-06 4.07001E-06 5.78282E-06 6.37252E-06 + 5.95452E-06 4.88355E-06 3.57580E-06 2.36024E-06 1.41285E-06 7.70072E-07 + 3.83244E-07 1.74506E-07 7.28107E-08 2.78702E-08 9.79590E-09 3.16392E-09 + 9.39599E-10 2.56690E-10 6.45362E-11 1.49374E-11 + -5.10132E-11 -2.20400E-10 -8.76630E-10 -3.20885E-09 -1.08052E-08 -3.34543E-08 + -9.51805E-08 -2.48658E-07 -5.95959E-07 -1.30883E-06 -2.62990E-06 -4.82507E-06 + -8.06052E-06 -1.22118E-05 -1.66780E-05 -2.03355E-05 -2.17630E-05 -1.97491E-05 + -1.38996E-05 -5.01803E-06 5.01803E-06 1.38996E-05 1.97491E-05 2.17630E-05 + 2.03355E-05 1.66780E-05 1.22118E-05 8.06052E-06 4.82507E-06 2.62990E-06 + 1.30883E-06 5.95959E-07 2.48658E-07 9.51805E-08 3.34543E-08 1.08052E-08 + 3.20885E-09 8.76630E-10 2.20400E-10 5.10132E-11 + -1.55771E-10 -6.72998E-10 -2.67682E-09 -9.79835E-09 -3.29940E-08 -1.02154E-07 + -2.90637E-07 -7.59287E-07 -1.81978E-06 -3.99655E-06 -8.03048E-06 -1.47335E-05 + -2.46131E-05 -3.72893E-05 -5.09268E-05 -6.20951E-05 -6.64540E-05 -6.03045E-05 + -4.24430E-05 -1.53227E-05 1.53227E-05 4.24430E-05 6.03045E-05 6.64540E-05 + 6.20951E-05 5.09268E-05 3.72893E-05 2.46131E-05 1.47335E-05 8.03048E-06 + 3.99655E-06 1.81978E-06 7.59287E-07 2.90637E-07 1.02154E-07 3.29940E-08 + 9.79835E-09 2.67682E-09 6.72998E-10 1.55771E-10 + -4.25510E-10 -1.83839E-09 -7.31213E-09 -2.67656E-08 -9.01280E-08 -2.79048E-07 + -7.93917E-07 -2.07410E-06 -4.97100E-06 -1.09172E-05 -2.19364E-05 -4.02467E-05 + -6.72343E-05 -1.01861E-04 -1.39114E-04 -1.69622E-04 -1.81529E-04 -1.64732E-04 + -1.15940E-04 -4.18570E-05 4.18570E-05 1.15940E-04 1.64732E-04 1.81529E-04 + 1.69622E-04 1.39114E-04 1.01861E-04 6.72343E-05 4.02467E-05 2.19364E-05 + 1.09172E-05 4.97100E-06 2.07410E-06 7.93917E-07 2.79048E-07 9.01280E-08 + 2.67656E-08 7.31213E-09 1.83839E-09 4.25510E-10 + -1.03962E-09 -4.49161E-09 -1.78652E-08 -6.53944E-08 -2.20203E-07 -6.81777E-07 + -1.93972E-06 -5.06750E-06 -1.21453E-05 -2.66731E-05 -5.35956E-05 -9.83319E-05 + -1.64268E-04 -2.48870E-04 -3.39888E-04 -4.14432E-04 -4.43541E-04 -4.02528E-04 + -2.83333E-04 -1.02297E-04 1.02297E-04 2.83333E-04 4.02528E-04 4.43541E-04 + 4.14432E-04 3.39888E-04 2.48870E-04 1.64268E-04 9.83319E-05 5.35956E-05 + 2.66731E-05 1.21453E-05 5.06750E-06 1.93972E-06 6.81777E-07 2.20203E-07 + 6.53944E-08 1.78652E-08 4.49161E-09 1.03962E-09 + -2.26942E-09 -9.80490E-09 -3.89986E-08 -1.42752E-07 -4.80690E-07 -1.48828E-06 + -4.23429E-06 -1.10620E-05 -2.65124E-05 -5.82257E-05 -1.16996E-04 -2.14653E-04 + -3.58589E-04 -5.43273E-04 -7.41992E-04 -9.04858E-04 -9.68820E-04 -8.79981E-04 + -6.20120E-04 -2.24092E-04 2.24092E-04 6.20120E-04 8.79981E-04 9.68820E-04 + 9.04858E-04 7.41992E-04 5.43273E-04 3.58589E-04 2.14653E-04 1.16996E-04 + 5.82257E-05 2.65124E-05 1.10620E-05 4.23429E-06 1.48828E-06 4.80690E-07 + 1.42752E-07 3.89986E-08 9.80490E-09 2.26942E-09 + -4.41679E-09 -1.90825E-08 -7.58998E-08 -2.77827E-07 -9.35528E-07 -2.89651E-06 + -8.24085E-06 -2.15291E-05 -5.15990E-05 -1.13320E-04 -2.27700E-04 -4.17762E-04 + -6.97901E-04 -1.05740E-03 -1.44458E-03 -1.76348E-03 -1.89365E-03 -1.73015E-03 + -1.22896E-03 -4.46810E-04 4.46810E-04 1.22896E-03 1.73015E-03 1.89365E-03 + 1.76348E-03 1.44458E-03 1.05740E-03 6.97901E-04 4.17762E-04 2.27700E-04 + 1.13320E-04 5.15990E-05 2.15291E-05 8.24085E-06 2.89651E-06 9.35528E-07 + 2.77827E-07 7.58998E-08 1.90825E-08 4.41679E-09 + -7.63675E-09 -3.29942E-08 -1.31233E-07 -4.80370E-07 -1.61755E-06 -5.00816E-06 + -1.42487E-05 -3.72245E-05 -8.92161E-05 -1.95934E-04 -3.93700E-04 -7.22328E-04 + -1.20675E-03 -1.82884E-03 -2.50142E-03 -3.06691E-03 -3.33308E-03 -3.11794E-03 + -2.28387E-03 -8.49354E-04 8.49354E-04 2.28387E-03 3.11794E-03 3.33308E-03 + 3.06691E-03 2.50142E-03 1.82884E-03 1.20675E-03 7.22328E-04 3.93700E-04 + 1.95934E-04 8.92161E-05 3.72245E-05 1.42487E-05 5.00816E-06 1.61755E-06 + 4.80370E-07 1.31233E-07 3.29942E-08 7.63675E-09 + -1.16646E-08 -5.03963E-08 -2.00449E-07 -7.33732E-07 -2.47070E-06 -7.64961E-06 + -2.17638E-05 -5.68578E-05 -1.36271E-04 -2.99275E-04 -6.01351E-04 -1.10333E-03 + -1.84352E-03 -2.79574E-03 -3.83545E-03 -4.75293E-03 -5.31253E-03 -5.23149E-03 + -4.07339E-03 -1.57896E-03 1.57896E-03 4.07339E-03 5.23149E-03 5.31253E-03 + 4.75293E-03 3.83545E-03 2.79574E-03 1.84352E-03 1.10333E-03 6.01351E-04 + 2.99275E-04 1.36271E-04 5.68578E-05 2.17638E-05 7.64961E-06 2.47070E-06 + 7.33732E-07 2.00449E-07 5.03963E-08 1.16646E-08 + -1.55942E-08 -6.73739E-08 -2.67977E-07 -9.80913E-07 -3.30304E-06 -1.02266E-05 + -2.90957E-05 -7.60123E-05 -1.82179E-04 -4.00096E-04 -8.03942E-04 -1.47510E-03 + -2.46526E-03 -3.74282E-03 -5.15797E-03 -6.48586E-03 -7.50710E-03 -7.82268E-03 + -6.45877E-03 -2.59421E-03 2.59421E-03 6.45877E-03 7.82268E-03 7.50710E-03 + 6.48586E-03 5.15797E-03 3.74282E-03 2.46526E-03 1.47510E-03 8.03942E-04 + 4.00096E-04 1.82179E-04 7.60123E-05 2.90957E-05 1.02266E-05 3.30304E-06 + 9.80913E-07 2.67977E-07 6.73739E-08 1.55942E-08 + -1.79471E-08 -7.75396E-08 -3.08411E-07 -1.12892E-06 -3.80141E-06 -1.17697E-05 + -3.34858E-05 -8.74813E-05 -2.09667E-04 -4.60464E-04 -9.25253E-04 -1.69777E-03 + -2.83814E-03 -4.31357E-03 -5.96591E-03 -7.57278E-03 -8.92506E-03 -9.52057E-03 + -8.01701E-03 -3.25324E-03 3.25324E-03 8.01701E-03 9.52057E-03 8.92506E-03 + 7.57278E-03 5.96591E-03 4.31357E-03 2.83814E-03 1.69777E-03 9.25253E-04 + 4.60464E-04 2.09667E-04 8.74813E-05 3.34858E-05 1.17697E-05 3.80141E-06 + 1.12892E-06 3.08411E-07 7.75396E-08 1.79471E-08 + -1.71872E-08 -7.42564E-08 -2.95352E-07 -1.08112E-06 -3.64046E-06 -1.12713E-05 + -3.20680E-05 -8.37772E-05 -2.00789E-04 -4.40968E-04 -8.86082E-04 -1.62595E-03 + -2.71848E-03 -4.13349E-03 -5.72040E-03 -7.25298E-03 -8.47984E-03 -8.88254E-03 + -7.31908E-03 -2.92873E-03 2.92873E-03 7.31908E-03 8.88254E-03 8.47984E-03 + 7.25298E-03 5.72040E-03 4.13349E-03 2.71848E-03 1.62595E-03 8.86082E-04 + 4.40968E-04 2.00789E-04 8.37772E-05 3.20680E-05 1.12713E-05 3.64046E-06 + 1.08112E-06 2.95352E-07 7.42564E-08 1.71872E-08 + -1.25339E-08 -5.41522E-08 -2.15388E-07 -7.88415E-07 -2.65484E-06 -8.21972E-06 + -2.33859E-05 -6.10953E-05 -1.46427E-04 -3.21580E-04 -6.46185E-04 -1.18574E-03 + -1.98244E-03 -3.01354E-03 -4.16318E-03 -5.23921E-03 -5.99925E-03 -6.05717E-03 + -4.79262E-03 -1.86907E-03 1.86907E-03 4.79262E-03 6.05717E-03 5.99925E-03 + 5.23921E-03 4.16318E-03 3.01354E-03 1.98244E-03 1.18574E-03 6.46185E-04 + 3.21580E-04 1.46427E-04 6.10953E-05 2.33859E-05 8.21972E-06 2.65484E-06 + 7.88415E-07 2.15388E-07 5.41522E-08 1.25339E-08 + -4.60552E-09 -1.98979E-08 -7.91431E-08 -2.89698E-07 -9.75503E-07 -3.02028E-06 + -8.59299E-06 -2.24491E-05 -5.38038E-05 -1.18163E-04 -2.37436E-04 -4.35688E-04 + -7.28369E-04 -1.10674E-03 -1.52617E-03 -1.90875E-03 -2.15216E-03 -2.11626E-03 + -1.62551E-03 -6.21734E-04 6.21734E-04 1.62551E-03 2.11626E-03 2.15216E-03 + 1.90875E-03 1.52617E-03 1.10674E-03 7.28369E-04 4.35688E-04 2.37436E-04 + 1.18163E-04 5.38038E-05 2.24491E-05 8.59299E-06 3.02028E-06 9.75503E-07 + 2.89698E-07 7.91431E-08 1.98979E-08 4.60552E-09 + 4.60552E-09 1.98979E-08 7.91431E-08 2.89698E-07 9.75503E-07 3.02028E-06 + 8.59299E-06 2.24491E-05 5.38038E-05 1.18163E-04 2.37436E-04 4.35688E-04 + 7.28369E-04 1.10674E-03 1.52617E-03 1.90875E-03 2.15216E-03 2.11626E-03 + 1.62551E-03 6.21734E-04 -6.21734E-04 -1.62551E-03 -2.11626E-03 -2.15216E-03 + -1.90875E-03 -1.52617E-03 -1.10674E-03 -7.28369E-04 -4.35688E-04 -2.37436E-04 + -1.18163E-04 -5.38038E-05 -2.24491E-05 -8.59299E-06 -3.02028E-06 -9.75503E-07 + -2.89698E-07 -7.91431E-08 -1.98979E-08 -4.60552E-09 + 1.25339E-08 5.41522E-08 2.15388E-07 7.88415E-07 2.65484E-06 8.21972E-06 + 2.33859E-05 6.10953E-05 1.46427E-04 3.21580E-04 6.46185E-04 1.18574E-03 + 1.98244E-03 3.01354E-03 4.16318E-03 5.23921E-03 5.99925E-03 6.05717E-03 + 4.79262E-03 1.86907E-03 -1.86907E-03 -4.79262E-03 -6.05717E-03 -5.99925E-03 + -5.23921E-03 -4.16318E-03 -3.01354E-03 -1.98244E-03 -1.18574E-03 -6.46185E-04 + -3.21580E-04 -1.46427E-04 -6.10953E-05 -2.33859E-05 -8.21972E-06 -2.65484E-06 + -7.88415E-07 -2.15388E-07 -5.41522E-08 -1.25339E-08 + 1.71872E-08 7.42564E-08 2.95352E-07 1.08112E-06 3.64046E-06 1.12713E-05 + 3.20680E-05 8.37772E-05 2.00789E-04 4.40968E-04 8.86082E-04 1.62595E-03 + 2.71848E-03 4.13349E-03 5.72040E-03 7.25298E-03 8.47984E-03 8.88254E-03 + 7.31908E-03 2.92873E-03 -2.92873E-03 -7.31908E-03 -8.88254E-03 -8.47984E-03 + -7.25298E-03 -5.72040E-03 -4.13349E-03 -2.71848E-03 -1.62595E-03 -8.86082E-04 + -4.40968E-04 -2.00789E-04 -8.37772E-05 -3.20680E-05 -1.12713E-05 -3.64046E-06 + -1.08112E-06 -2.95352E-07 -7.42564E-08 -1.71872E-08 + 1.79471E-08 7.75396E-08 3.08411E-07 1.12892E-06 3.80141E-06 1.17697E-05 + 3.34858E-05 8.74813E-05 2.09667E-04 4.60464E-04 9.25253E-04 1.69777E-03 + 2.83814E-03 4.31357E-03 5.96591E-03 7.57278E-03 8.92506E-03 9.52057E-03 + 8.01701E-03 3.25324E-03 -3.25324E-03 -8.01701E-03 -9.52057E-03 -8.92506E-03 + -7.57278E-03 -5.96591E-03 -4.31357E-03 -2.83814E-03 -1.69777E-03 -9.25253E-04 + -4.60464E-04 -2.09667E-04 -8.74813E-05 -3.34858E-05 -1.17697E-05 -3.80141E-06 + -1.12892E-06 -3.08411E-07 -7.75396E-08 -1.79471E-08 + 1.55942E-08 6.73739E-08 2.67977E-07 9.80913E-07 3.30304E-06 1.02266E-05 + 2.90957E-05 7.60123E-05 1.82179E-04 4.00096E-04 8.03942E-04 1.47510E-03 + 2.46526E-03 3.74282E-03 5.15797E-03 6.48586E-03 7.50710E-03 7.82268E-03 + 6.45877E-03 2.59421E-03 -2.59421E-03 -6.45877E-03 -7.82268E-03 -7.50710E-03 + -6.48586E-03 -5.15797E-03 -3.74282E-03 -2.46526E-03 -1.47510E-03 -8.03942E-04 + -4.00096E-04 -1.82179E-04 -7.60123E-05 -2.90957E-05 -1.02266E-05 -3.30304E-06 + -9.80913E-07 -2.67977E-07 -6.73739E-08 -1.55942E-08 + 1.16646E-08 5.03963E-08 2.00449E-07 7.33732E-07 2.47070E-06 7.64961E-06 + 2.17638E-05 5.68578E-05 1.36271E-04 2.99275E-04 6.01351E-04 1.10333E-03 + 1.84352E-03 2.79574E-03 3.83545E-03 4.75293E-03 5.31253E-03 5.23149E-03 + 4.07339E-03 1.57896E-03 -1.57896E-03 -4.07339E-03 -5.23149E-03 -5.31253E-03 + -4.75293E-03 -3.83545E-03 -2.79574E-03 -1.84352E-03 -1.10333E-03 -6.01351E-04 + -2.99275E-04 -1.36271E-04 -5.68578E-05 -2.17638E-05 -7.64961E-06 -2.47070E-06 + -7.33732E-07 -2.00449E-07 -5.03963E-08 -1.16646E-08 + 7.63675E-09 3.29942E-08 1.31233E-07 4.80370E-07 1.61755E-06 5.00816E-06 + 1.42487E-05 3.72245E-05 8.92161E-05 1.95934E-04 3.93700E-04 7.22328E-04 + 1.20675E-03 1.82884E-03 2.50142E-03 3.06691E-03 3.33308E-03 3.11794E-03 + 2.28387E-03 8.49354E-04 -8.49354E-04 -2.28387E-03 -3.11794E-03 -3.33308E-03 + -3.06691E-03 -2.50142E-03 -1.82884E-03 -1.20675E-03 -7.22328E-04 -3.93700E-04 + -1.95934E-04 -8.92161E-05 -3.72245E-05 -1.42487E-05 -5.00816E-06 -1.61755E-06 + -4.80370E-07 -1.31233E-07 -3.29942E-08 -7.63675E-09 + 4.41679E-09 1.90825E-08 7.58998E-08 2.77827E-07 9.35528E-07 2.89651E-06 + 8.24085E-06 2.15291E-05 5.15990E-05 1.13320E-04 2.27700E-04 4.17762E-04 + 6.97901E-04 1.05740E-03 1.44458E-03 1.76348E-03 1.89365E-03 1.73015E-03 + 1.22896E-03 4.46810E-04 -4.46810E-04 -1.22896E-03 -1.73015E-03 -1.89365E-03 + -1.76348E-03 -1.44458E-03 -1.05740E-03 -6.97901E-04 -4.17762E-04 -2.27700E-04 + -1.13320E-04 -5.15990E-05 -2.15291E-05 -8.24085E-06 -2.89651E-06 -9.35528E-07 + -2.77827E-07 -7.58998E-08 -1.90825E-08 -4.41679E-09 + 2.26942E-09 9.80490E-09 3.89986E-08 1.42752E-07 4.80690E-07 1.48828E-06 + 4.23429E-06 1.10620E-05 2.65124E-05 5.82257E-05 1.16996E-04 2.14653E-04 + 3.58589E-04 5.43273E-04 7.41992E-04 9.04858E-04 9.68820E-04 8.79981E-04 + 6.20120E-04 2.24092E-04 -2.24092E-04 -6.20120E-04 -8.79981E-04 -9.68820E-04 + -9.04858E-04 -7.41992E-04 -5.43273E-04 -3.58589E-04 -2.14653E-04 -1.16996E-04 + -5.82257E-05 -2.65124E-05 -1.10620E-05 -4.23429E-06 -1.48828E-06 -4.80690E-07 + -1.42752E-07 -3.89986E-08 -9.80490E-09 -2.26942E-09 + 1.03962E-09 4.49161E-09 1.78652E-08 6.53944E-08 2.20203E-07 6.81777E-07 + 1.93972E-06 5.06750E-06 1.21453E-05 2.66731E-05 5.35956E-05 9.83319E-05 + 1.64268E-04 2.48870E-04 3.39888E-04 4.14432E-04 4.43541E-04 4.02528E-04 + 2.83333E-04 1.02297E-04 -1.02297E-04 -2.83333E-04 -4.02528E-04 -4.43541E-04 + -4.14432E-04 -3.39888E-04 -2.48870E-04 -1.64268E-04 -9.83319E-05 -5.35956E-05 + -2.66731E-05 -1.21453E-05 -5.06750E-06 -1.93972E-06 -6.81777E-07 -2.20203E-07 + -6.53944E-08 -1.78652E-08 -4.49161E-09 -1.03962E-09 + 4.25510E-10 1.83839E-09 7.31213E-09 2.67656E-08 9.01280E-08 2.79048E-07 + 7.93917E-07 2.07410E-06 4.97100E-06 1.09172E-05 2.19364E-05 4.02467E-05 + 6.72343E-05 1.01861E-04 1.39114E-04 1.69622E-04 1.81529E-04 1.64732E-04 + 1.15940E-04 4.18570E-05 -4.18570E-05 -1.15940E-04 -1.64732E-04 -1.81529E-04 + -1.69622E-04 -1.39114E-04 -1.01861E-04 -6.72343E-05 -4.02467E-05 -2.19364E-05 + -1.09172E-05 -4.97100E-06 -2.07410E-06 -7.93917E-07 -2.79048E-07 -9.01280E-08 + -2.67656E-08 -7.31213E-09 -1.83839E-09 -4.25510E-10 + 1.55771E-10 6.72998E-10 2.67682E-09 9.79835E-09 3.29940E-08 1.02154E-07 + 2.90637E-07 7.59287E-07 1.81978E-06 3.99655E-06 8.03048E-06 1.47335E-05 + 2.46131E-05 3.72893E-05 5.09268E-05 6.20951E-05 6.64540E-05 6.03045E-05 + 4.24430E-05 1.53227E-05 -1.53227E-05 -4.24430E-05 -6.03045E-05 -6.64540E-05 + -6.20951E-05 -5.09268E-05 -3.72893E-05 -2.46131E-05 -1.47335E-05 -8.03048E-06 + -3.99655E-06 -1.81978E-06 -7.59287E-07 -2.90637E-07 -1.02154E-07 -3.29940E-08 + -9.79835E-09 -2.67682E-09 -6.72998E-10 -1.55771E-10 + 5.10132E-11 2.20400E-10 8.76630E-10 3.20885E-09 1.08052E-08 3.34543E-08 + 9.51805E-08 2.48658E-07 5.95959E-07 1.30883E-06 2.62990E-06 4.82507E-06 + 8.06052E-06 1.22118E-05 1.66780E-05 2.03355E-05 2.17630E-05 1.97491E-05 + 1.38996E-05 5.01803E-06 -5.01803E-06 -1.38996E-05 -1.97491E-05 -2.17630E-05 + -2.03355E-05 -1.66780E-05 -1.22118E-05 -8.06052E-06 -4.82507E-06 -2.62990E-06 + -1.30883E-06 -5.95959E-07 -2.48658E-07 -9.51805E-08 -3.34543E-08 -1.08052E-08 + -3.20885E-09 -8.76630E-10 -2.20400E-10 -5.10132E-11 + 1.49374E-11 6.45362E-11 2.56690E-10 9.39599E-10 3.16392E-09 9.79590E-09 + 2.78702E-08 7.28107E-08 1.74506E-07 3.83244E-07 7.70072E-07 1.41285E-06 + 2.36024E-06 3.57580E-06 4.88355E-06 5.95452E-06 6.37252E-06 5.78282E-06 + 4.07001E-06 1.46935E-06 -1.46935E-06 -4.07001E-06 -5.78282E-06 -6.37252E-06 + -5.95452E-06 -4.88355E-06 -3.57580E-06 -2.36024E-06 -1.41285E-06 -7.70072E-07 + -3.83244E-07 -1.74506E-07 -7.28107E-08 -2.78702E-08 -9.79590E-09 -3.16392E-09 + -9.39599E-10 -2.56690E-10 -6.45362E-11 -1.49374E-11 + 3.90666E-12 1.68785E-11 6.71336E-11 2.45738E-10 8.27476E-10 2.56197E-09 + 7.28905E-09 1.90426E-08 4.56394E-08 1.00232E-07 2.01401E-07 3.69510E-07 + 6.17286E-07 9.35199E-07 1.27722E-06 1.55732E-06 1.66664E-06 1.51241E-06 + 1.06445E-06 3.84288E-07 -3.84288E-07 -1.06445E-06 -1.51241E-06 -1.66664E-06 + -1.55732E-06 -1.27722E-06 -9.35199E-07 -6.17286E-07 -3.69510E-07 -2.01401E-07 + -1.00232E-07 -4.56394E-08 -1.90426E-08 -7.28905E-09 -2.56197E-09 -8.27476E-10 + -2.45738E-10 -6.71336E-11 -1.68785E-11 -3.90666E-12 + 9.11297E-13 3.93721E-12 1.56601E-11 5.73228E-11 1.93024E-10 5.97626E-10 + 1.70030E-09 4.44202E-09 1.06462E-08 2.33808E-08 4.69804E-08 8.61949E-08 + 1.43993E-07 2.18152E-07 2.97935E-07 3.63272E-07 3.88773E-07 3.52797E-07 + 2.48302E-07 8.96419E-08 -8.96419E-08 -2.48302E-07 -3.52797E-07 -3.88773E-07 + -3.63272E-07 -2.97935E-07 -2.18152E-07 -1.43993E-07 -8.61949E-08 -4.69804E-08 + -2.33808E-08 -1.06462E-08 -4.44202E-09 -1.70030E-09 -5.97626E-10 -1.93024E-10 + -5.73228E-11 -1.56601E-11 -3.93721E-12 -9.11297E-13 + 1.89297E-13 8.17850E-13 3.25296E-12 1.19073E-11 4.00954E-11 1.24141E-10 + 3.53192E-10 9.22710E-10 2.21146E-09 4.85674E-09 9.75890E-09 1.79047E-08 + 2.99107E-08 4.53151E-08 6.18879E-08 7.54600E-08 8.07571E-08 7.32840E-08 + 5.15781E-08 1.86207E-08 -1.86207E-08 -5.15781E-08 -7.32840E-08 -8.07571E-08 + -7.54600E-08 -6.18879E-08 -4.53151E-08 -2.99107E-08 -1.79047E-08 -9.75890E-09 + -4.85674E-09 -2.21146E-09 -9.22710E-10 -3.53192E-10 -1.24141E-10 -4.00954E-11 + -1.19073E-11 -3.25296E-12 -8.17850E-13 -1.89297E-13 + 3.49580E-14 1.51034E-13 6.00732E-13 2.19894E-12 7.40451E-12 2.29253E-11 + 6.52247E-11 1.70399E-10 4.08395E-10 8.96905E-10 1.80220E-09 3.30649E-09 + 5.52366E-09 8.36844E-09 1.14290E-08 1.39354E-08 1.49136E-08 1.35335E-08 + 9.52503E-09 3.43872E-09 -3.43872E-09 -9.52503E-09 -1.35335E-08 -1.49136E-08 + -1.39354E-08 -1.14290E-08 -8.36844E-09 -5.52366E-09 -3.30649E-09 -1.80220E-09 + -8.96905E-10 -4.08395E-10 -1.70399E-10 -6.52247E-11 -2.29253E-11 -7.40451E-12 + -2.19894E-12 -6.00732E-13 -1.51034E-13 -3.49580E-14 + 5.73034E-15 2.47576E-14 9.84724E-14 3.60452E-13 1.21375E-12 3.75794E-12 + 1.06917E-11 2.79319E-11 6.69445E-11 1.47021E-10 2.95418E-10 5.42003E-10 + 9.05444E-10 1.37176E-09 1.87345E-09 2.28429E-09 2.44465E-09 2.21843E-09 + 1.56135E-09 5.63679E-10 -5.63679E-10 -1.56135E-09 -2.21843E-09 -2.44465E-09 + -2.28429E-09 -1.87345E-09 -1.37176E-09 -9.05444E-10 -5.42003E-10 -2.95418E-10 + -1.47021E-10 -6.69445E-11 -2.79319E-11 -1.06917E-11 -3.75794E-12 -1.21375E-12 + -3.60452E-13 -9.84724E-14 -2.47576E-14 -5.73034E-15 + 8.32573E-16 3.59709E-15 1.43073E-14 5.23709E-14 1.76349E-13 5.45999E-13 + 1.55342E-12 4.05829E-12 9.72651E-12 2.13610E-11 4.29219E-11 7.87488E-11 + 1.31554E-10 1.99306E-10 2.72197E-10 3.31890E-10 3.55188E-10 3.22320E-10 + 2.26852E-10 8.18981E-11 -8.18981E-11 -2.26852E-10 -3.22320E-10 -3.55188E-10 + -3.31890E-10 -2.72197E-10 -1.99306E-10 -1.31554E-10 -7.87488E-11 -4.29219E-11 + -2.13610E-11 -9.72651E-12 -4.05829E-12 -1.55342E-12 -5.45999E-13 -1.76349E-13 + -5.23709E-14 -1.43073E-14 -3.59709E-15 -8.32573E-16 + -2.07048E-15 -8.94538E-15 -3.55799E-14 -1.30238E-13 -4.38551E-13 -1.35781E-12 + -3.86310E-12 -1.00923E-11 -2.41883E-11 -5.31215E-11 -1.06740E-10 -1.95836E-10 + -3.27153E-10 -4.95643E-10 -6.76910E-10 -8.25357E-10 -8.83296E-10 -8.01558E-10 + -5.64145E-10 -2.03667E-10 2.03667E-10 5.64145E-10 8.01558E-10 8.83296E-10 + 8.25357E-10 6.76910E-10 4.95643E-10 3.27153E-10 1.95836E-10 1.06740E-10 + 5.31215E-11 2.41883E-11 1.00923E-11 3.86310E-12 1.35781E-12 4.38551E-13 + 1.30238E-13 3.55799E-14 8.94538E-15 2.07048E-15 + -1.41133E-14 -6.09759E-14 -2.42529E-13 -8.87762E-13 -2.98937E-12 -9.25547E-12 + -2.63327E-11 -6.87939E-11 -1.64878E-10 -3.62101E-10 -7.27588E-10 -1.33491E-09 + -2.23003E-09 -3.37853E-09 -4.61413E-09 -5.62602E-09 -6.02095E-09 -5.46379E-09 + -3.84547E-09 -1.38829E-09 1.38829E-09 3.84547E-09 5.46379E-09 6.02095E-09 + 5.62602E-09 4.61413E-09 3.37853E-09 2.23003E-09 1.33491E-09 7.27588E-10 + 3.62101E-10 1.64878E-10 6.87939E-11 2.63327E-11 9.25547E-12 2.98937E-12 + 8.87762E-13 2.42529E-13 6.09759E-14 1.41133E-14 + -8.50771E-14 -3.67571E-13 -1.46200E-12 -5.35156E-12 -1.80203E-11 -5.57933E-11 + -1.58737E-10 -4.14699E-10 -9.93910E-10 -2.18279E-09 -4.38600E-09 -8.04700E-09 + -1.34429E-08 -2.03663E-08 -2.78147E-08 -3.39144E-08 -3.62952E-08 -3.29365E-08 + -2.31810E-08 -8.36881E-09 8.36881E-09 2.31810E-08 3.29365E-08 3.62952E-08 + 3.39144E-08 2.78147E-08 2.03663E-08 1.34429E-08 8.04700E-09 4.38600E-09 + 2.18279E-09 9.93910E-10 4.14699E-10 1.58737E-10 5.57933E-11 1.80203E-11 + 5.35156E-12 1.46200E-12 3.67571E-13 8.50771E-14 + -4.54041E-13 -1.96166E-12 -7.80242E-12 -2.85603E-11 -9.61713E-11 -2.97759E-10 + -8.47151E-10 -2.21317E-09 -5.30432E-09 -1.16492E-08 -2.34073E-08 -4.29454E-08 + -7.17424E-08 -1.08691E-07 -1.48442E-07 -1.80995E-07 -1.93701E-07 -1.75776E-07 + -1.23713E-07 -4.46628E-08 4.46628E-08 1.23713E-07 1.75776E-07 1.93701E-07 + 1.80995E-07 1.48442E-07 1.08691E-07 7.17424E-08 4.29454E-08 2.34073E-08 + 1.16492E-08 5.30432E-09 2.21317E-09 8.47151E-10 2.97759E-10 9.61713E-11 + 2.85603E-11 7.80242E-12 1.96166E-12 4.54041E-13 + -2.14798E-12 -9.28024E-12 -3.69118E-11 -1.35113E-10 -4.54968E-10 -1.40864E-09 + -4.00771E-09 -1.04701E-08 -2.50937E-08 -5.51100E-08 -1.10735E-07 -2.03166E-07 + -3.39400E-07 -5.14196E-07 -7.02250E-07 -8.56253E-07 -9.16361E-07 -8.31563E-07 + -5.85262E-07 -2.11291E-07 2.11291E-07 5.85262E-07 8.31563E-07 9.16361E-07 + 8.56253E-07 7.02250E-07 5.14196E-07 3.39400E-07 2.03166E-07 1.10735E-07 + 5.51100E-08 2.50937E-08 1.04701E-08 4.00771E-09 1.40864E-09 4.54968E-10 + 1.35113E-10 3.69118E-11 9.28024E-12 2.14798E-12 + -9.02081E-12 -3.89739E-11 -1.55017E-10 -5.67431E-10 -1.91071E-09 -5.91582E-09 + -1.68311E-08 -4.39710E-08 -1.05385E-07 -2.31444E-07 -4.65052E-07 -8.53232E-07 + -1.42537E-06 -2.15946E-06 -2.94922E-06 -3.59598E-06 -3.84841E-06 -3.49229E-06 + -2.45791E-06 -8.87354E-07 8.87354E-07 2.45791E-06 3.49229E-06 3.84841E-06 + 3.59598E-06 2.94922E-06 2.15946E-06 1.42537E-06 8.53232E-07 4.65052E-07 + 2.31444E-07 1.05385E-07 4.39710E-08 1.68311E-08 5.91582E-09 1.91071E-09 + 5.67431E-10 1.55017E-10 3.89739E-11 9.02081E-12 + -3.36838E-11 -1.45529E-10 -5.78836E-10 -2.11879E-09 -7.13463E-09 -2.20897E-08 + -6.28473E-08 -1.64188E-07 -3.93510E-07 -8.64213E-07 -1.73651E-06 -3.18597E-06 + -5.32233E-06 -8.06342E-06 -1.10124E-05 -1.34274E-05 -1.43700E-05 -1.30402E-05 + -9.17785E-06 -3.31339E-06 3.31339E-06 9.17785E-06 1.30402E-05 1.43700E-05 + 1.34274E-05 1.10124E-05 8.06342E-06 5.32233E-06 3.18597E-06 1.73651E-06 + 8.64213E-07 3.93510E-07 1.64188E-07 6.28473E-08 2.20897E-08 7.13463E-09 + 2.11879E-09 5.78836E-10 1.45529E-10 3.36838E-11 + -1.12010E-10 -4.83931E-10 -1.92482E-09 -7.04568E-09 -2.37250E-08 -7.34555E-08 + -2.08988E-07 -5.45979E-07 -1.30855E-06 -2.87379E-06 -5.77446E-06 -1.05944E-05 + -1.76985E-05 -2.68135E-05 -3.66198E-05 -4.46506E-05 -4.77850E-05 -4.33630E-05 + -3.05194E-05 -1.10181E-05 1.10181E-05 3.05194E-05 4.33630E-05 4.77850E-05 + 4.46506E-05 3.66198E-05 2.68135E-05 1.76985E-05 1.05944E-05 5.77446E-06 + 2.87379E-06 1.30855E-06 5.45979E-07 2.08988E-07 7.34555E-08 2.37250E-08 + 7.04568E-09 1.92482E-09 4.83931E-10 1.12010E-10 + -3.32208E-10 -1.43529E-09 -5.70880E-09 -2.08967E-08 -7.03656E-08 -2.17861E-07 + -6.19835E-07 -1.61931E-06 -3.88101E-06 -8.52335E-06 -1.71264E-05 -3.14218E-05 + -5.24918E-05 -7.95260E-05 -1.08610E-04 -1.32429E-04 -1.41725E-04 -1.28610E-04 + -9.05172E-05 -3.26785E-05 3.26785E-05 9.05172E-05 1.28610E-04 1.41725E-04 + 1.32429E-04 1.08610E-04 7.95260E-05 5.24918E-05 3.14218E-05 1.71264E-05 + 8.52335E-06 3.88101E-06 1.61931E-06 6.19835E-07 2.17861E-07 7.03656E-08 + 2.08967E-08 5.70880E-09 1.43529E-09 3.32208E-10 + -8.79905E-10 -3.80158E-09 -1.51206E-08 -5.53482E-08 -1.86374E-07 -5.77039E-07 + -1.64173E-06 -4.28900E-06 -1.02795E-05 -2.25754E-05 -4.53620E-05 -8.32257E-05 + -1.39033E-04 -2.10637E-04 -2.87672E-04 -3.50759E-04 -3.75382E-04 -3.40647E-04 + -2.39752E-04 -8.65557E-05 8.65557E-05 2.39752E-04 3.40647E-04 3.75382E-04 + 3.50759E-04 2.87672E-04 2.10637E-04 1.39033E-04 8.32257E-05 4.53620E-05 + 2.25754E-05 1.02795E-05 4.28900E-06 1.64173E-06 5.77039E-07 1.86374E-07 + 5.53482E-08 1.51206E-08 3.80158E-09 8.79905E-10 + -2.08292E-09 -8.99915E-09 -3.57938E-08 -1.31021E-07 -4.41188E-07 -1.36597E-06 + -3.88632E-06 -1.01530E-05 -2.43337E-05 -5.34408E-05 -1.07381E-04 -1.97013E-04 + -3.29120E-04 -4.98623E-04 -6.80985E-04 -8.30340E-04 -8.88666E-04 -8.06493E-04 + -5.67674E-04 -2.04957E-04 2.04957E-04 5.67674E-04 8.06493E-04 8.88666E-04 + 8.30340E-04 6.80985E-04 4.98623E-04 3.29120E-04 1.97013E-04 1.07381E-04 + 5.34408E-05 2.43337E-05 1.01530E-05 3.88632E-06 1.36597E-06 4.41188E-07 + 1.31021E-07 3.57938E-08 8.99915E-09 2.08292E-09 + -4.40696E-09 -1.90400E-08 -7.57309E-08 -2.77208E-07 -9.33445E-07 -2.89007E-06 + -8.22251E-06 -2.14812E-05 -5.14841E-05 -1.13068E-04 -2.27193E-04 -4.16831E-04 + -6.96341E-04 -1.05498E-03 -1.44090E-03 -1.75723E-03 -1.88147E-03 -1.70885E-03 + -1.20406E-03 -4.35055E-04 4.35055E-04 1.20406E-03 1.70885E-03 1.88147E-03 + 1.75723E-03 1.44090E-03 1.05498E-03 6.96341E-04 4.16831E-04 2.27193E-04 + 1.13068E-04 5.14841E-05 2.14812E-05 8.22251E-06 2.89007E-06 9.33445E-07 + 2.77208E-07 7.57309E-08 1.90400E-08 4.40696E-09 + -8.32500E-09 -3.59677E-08 -1.43060E-07 -5.23663E-07 -1.76333E-06 -5.45951E-06 + -1.55328E-05 -4.05793E-05 -9.72565E-05 -2.13592E-04 -4.29181E-04 -7.87422E-04 + -1.31546E-03 -1.99317E-03 -2.72332E-03 -3.32517E-03 -3.57095E-03 -3.26146E-03 + -2.31459E-03 -8.40793E-04 8.40793E-04 2.31459E-03 3.26146E-03 3.57095E-03 + 3.32517E-03 2.72332E-03 1.99317E-03 1.31546E-03 7.87422E-04 4.29181E-04 + 2.13592E-04 9.72565E-05 4.05793E-05 1.55328E-05 5.45951E-06 1.76333E-06 + 5.23663E-07 1.43060E-07 3.59677E-08 8.32500E-09 + -1.40054E-08 -6.05095E-08 -2.40674E-07 -8.80973E-07 -2.96651E-06 -9.18468E-06 + -2.61313E-05 -6.82677E-05 -1.63617E-04 -3.59331E-04 -7.22026E-04 -1.32473E-03 + -2.21331E-03 -3.35511E-03 -4.59212E-03 -5.63724E-03 -6.13382E-03 -5.73616E-03 + -4.19175E-03 -1.55503E-03 1.55503E-03 4.19175E-03 5.73616E-03 6.13382E-03 + 5.63724E-03 4.59212E-03 3.35511E-03 2.21331E-03 1.32473E-03 7.22026E-04 + 3.59331E-04 1.63617E-04 6.82677E-05 2.61313E-05 9.18468E-06 2.96651E-06 + 8.80973E-07 2.40674E-07 6.05095E-08 1.40054E-08 + -2.08811E-08 -9.02156E-08 -3.58829E-07 -1.31347E-06 -4.42286E-06 -1.36938E-05 + -3.89600E-05 -1.01783E-04 -2.43943E-04 -5.35740E-04 -1.07650E-03 -1.97523E-03 + -3.30119E-03 -5.01125E-03 -6.89413E-03 -8.59229E-03 -9.67679E-03 -9.57745E-03 + -7.45578E-03 -2.88335E-03 2.88335E-03 7.45578E-03 9.57745E-03 9.67679E-03 + 8.59229E-03 6.89413E-03 5.01125E-03 3.30119E-03 1.97523E-03 1.07650E-03 + 5.35740E-04 2.43943E-04 1.01783E-04 3.89600E-05 1.36938E-05 4.42286E-06 + 1.31347E-06 3.58829E-07 9.02156E-08 2.08811E-08 + -2.73501E-08 -1.18165E-07 -4.69995E-07 -1.72039E-06 -5.79307E-06 -1.79361E-05 + -5.10299E-05 -1.33315E-04 -3.19517E-04 -7.01715E-04 -1.41004E-03 -2.58756E-03 + -4.32749E-03 -6.58792E-03 -9.15200E-03 -1.17103E-02 -1.39035E-02 -1.48166E-02 + -1.23626E-02 -4.97564E-03 4.97564E-03 1.23626E-02 1.48166E-02 1.39035E-02 + 1.17103E-02 9.15200E-03 6.58792E-03 4.32749E-03 2.58756E-03 1.41004E-03 + 7.01715E-04 3.19517E-04 1.33315E-04 5.10299E-05 1.79361E-05 5.79307E-06 + 1.72039E-06 4.69995E-07 1.18165E-07 2.73501E-08 + -3.09632E-08 -1.33775E-07 -5.32083E-07 -1.94766E-06 -6.55837E-06 -2.03055E-05 + -5.77712E-05 -1.50927E-04 -3.61727E-04 -7.94419E-04 -1.59637E-03 -2.93002E-03 + -4.90471E-03 -7.49414E-03 -1.05326E-02 -1.38552E-02 -1.72342E-02 -1.93542E-02 + -1.68103E-02 -6.90727E-03 6.90727E-03 1.68103E-02 1.93542E-02 1.72342E-02 + 1.38552E-02 1.05326E-02 7.49414E-03 4.90471E-03 2.93002E-03 1.59637E-03 + 7.94419E-04 3.61727E-04 1.50927E-04 5.77712E-05 2.03055E-05 6.55837E-06 + 1.94766E-06 5.32083E-07 1.33775E-07 3.09632E-08 + -2.92890E-08 -1.26542E-07 -5.03314E-07 -1.84235E-06 -6.20376E-06 -1.92076E-05 + -5.46475E-05 -1.42766E-04 -3.42168E-04 -7.51468E-04 -1.51010E-03 -2.77208E-03 + -4.64366E-03 -7.11450E-03 -1.00766E-02 -1.34630E-02 -1.70845E-02 -1.94863E-02 + -1.70928E-02 -7.07807E-03 7.07807E-03 1.70928E-02 1.94863E-02 1.70845E-02 + 1.34630E-02 1.00766E-02 7.11450E-03 4.64366E-03 2.77208E-03 1.51010E-03 + 7.51468E-04 3.42168E-04 1.42766E-04 5.46475E-05 1.92076E-05 6.20376E-06 + 1.84235E-06 5.03314E-07 1.26542E-07 2.92890E-08 + -2.11853E-08 -9.15298E-08 -3.64056E-07 -1.33260E-06 -4.48729E-06 -1.38932E-05 + -3.95275E-05 -1.03265E-04 -2.47496E-04 -5.43551E-04 -1.09229E-03 -2.00521E-03 + -3.35967E-03 -5.15032E-03 -7.30195E-03 -9.75380E-03 -1.23101E-02 -1.38715E-02 + -1.20157E-02 -4.94576E-03 4.94576E-03 1.20157E-02 1.38715E-02 1.23101E-02 + 9.75380E-03 7.30195E-03 5.15032E-03 3.35967E-03 2.00521E-03 1.09229E-03 + 5.43551E-04 2.47496E-04 1.03265E-04 3.95275E-05 1.38932E-05 4.48729E-06 + 1.33260E-06 3.64056E-07 9.15298E-08 2.11853E-08 + -7.75273E-09 -3.34952E-08 -1.33226E-07 -4.87665E-07 -1.64212E-06 -5.08421E-06 + -1.44651E-05 -3.77898E-05 -9.05711E-05 -1.98912E-04 -3.99721E-04 -7.33787E-04 + -1.22930E-03 -1.88341E-03 -2.66434E-03 -3.53643E-03 -4.40645E-03 -4.87623E-03 + -4.14002E-03 -1.67739E-03 1.67739E-03 4.14002E-03 4.87623E-03 4.40645E-03 + 3.53643E-03 2.66434E-03 1.88341E-03 1.22930E-03 7.33787E-04 3.99721E-04 + 1.98912E-04 9.05711E-05 3.77898E-05 1.44651E-05 5.08421E-06 1.64212E-06 + 4.87665E-07 1.33226E-07 3.34952E-08 7.75273E-09 + 7.75273E-09 3.34952E-08 1.33226E-07 4.87665E-07 1.64212E-06 5.08421E-06 + 1.44651E-05 3.77898E-05 9.05711E-05 1.98912E-04 3.99721E-04 7.33787E-04 + 1.22930E-03 1.88341E-03 2.66434E-03 3.53643E-03 4.40645E-03 4.87623E-03 + 4.14002E-03 1.67739E-03 -1.67739E-03 -4.14002E-03 -4.87623E-03 -4.40645E-03 + -3.53643E-03 -2.66434E-03 -1.88341E-03 -1.22930E-03 -7.33787E-04 -3.99721E-04 + -1.98912E-04 -9.05711E-05 -3.77898E-05 -1.44651E-05 -5.08421E-06 -1.64212E-06 + -4.87665E-07 -1.33226E-07 -3.34952E-08 -7.75273E-09 + 2.11853E-08 9.15298E-08 3.64056E-07 1.33260E-06 4.48729E-06 1.38932E-05 + 3.95275E-05 1.03265E-04 2.47496E-04 5.43551E-04 1.09229E-03 2.00521E-03 + 3.35967E-03 5.15032E-03 7.30195E-03 9.75380E-03 1.23101E-02 1.38715E-02 + 1.20157E-02 4.94576E-03 -4.94576E-03 -1.20157E-02 -1.38715E-02 -1.23101E-02 + -9.75380E-03 -7.30195E-03 -5.15032E-03 -3.35967E-03 -2.00521E-03 -1.09229E-03 + -5.43551E-04 -2.47496E-04 -1.03265E-04 -3.95275E-05 -1.38932E-05 -4.48729E-06 + -1.33260E-06 -3.64056E-07 -9.15298E-08 -2.11853E-08 + 2.92890E-08 1.26542E-07 5.03314E-07 1.84235E-06 6.20376E-06 1.92076E-05 + 5.46475E-05 1.42766E-04 3.42168E-04 7.51468E-04 1.51010E-03 2.77208E-03 + 4.64366E-03 7.11450E-03 1.00766E-02 1.34630E-02 1.70845E-02 1.94863E-02 + 1.70928E-02 7.07807E-03 -7.07807E-03 -1.70928E-02 -1.94863E-02 -1.70845E-02 + -1.34630E-02 -1.00766E-02 -7.11450E-03 -4.64366E-03 -2.77208E-03 -1.51010E-03 + -7.51468E-04 -3.42168E-04 -1.42766E-04 -5.46475E-05 -1.92076E-05 -6.20376E-06 + -1.84235E-06 -5.03314E-07 -1.26542E-07 -2.92890E-08 + 3.09632E-08 1.33775E-07 5.32083E-07 1.94766E-06 6.55837E-06 2.03055E-05 + 5.77712E-05 1.50927E-04 3.61727E-04 7.94419E-04 1.59637E-03 2.93002E-03 + 4.90471E-03 7.49414E-03 1.05326E-02 1.38552E-02 1.72342E-02 1.93542E-02 + 1.68103E-02 6.90727E-03 -6.90727E-03 -1.68103E-02 -1.93542E-02 -1.72342E-02 + -1.38552E-02 -1.05326E-02 -7.49414E-03 -4.90471E-03 -2.93002E-03 -1.59637E-03 + -7.94419E-04 -3.61727E-04 -1.50927E-04 -5.77712E-05 -2.03055E-05 -6.55837E-06 + -1.94766E-06 -5.32083E-07 -1.33775E-07 -3.09632E-08 + 2.73501E-08 1.18165E-07 4.69995E-07 1.72039E-06 5.79307E-06 1.79361E-05 + 5.10299E-05 1.33315E-04 3.19517E-04 7.01715E-04 1.41004E-03 2.58756E-03 + 4.32749E-03 6.58792E-03 9.15200E-03 1.17103E-02 1.39035E-02 1.48166E-02 + 1.23626E-02 4.97564E-03 -4.97564E-03 -1.23626E-02 -1.48166E-02 -1.39035E-02 + -1.17103E-02 -9.15200E-03 -6.58792E-03 -4.32749E-03 -2.58756E-03 -1.41004E-03 + -7.01715E-04 -3.19517E-04 -1.33315E-04 -5.10299E-05 -1.79361E-05 -5.79307E-06 + -1.72039E-06 -4.69995E-07 -1.18165E-07 -2.73501E-08 + 2.08811E-08 9.02156E-08 3.58829E-07 1.31347E-06 4.42286E-06 1.36938E-05 + 3.89600E-05 1.01783E-04 2.43943E-04 5.35740E-04 1.07650E-03 1.97523E-03 + 3.30119E-03 5.01125E-03 6.89413E-03 8.59229E-03 9.67679E-03 9.57745E-03 + 7.45578E-03 2.88335E-03 -2.88335E-03 -7.45578E-03 -9.57745E-03 -9.67679E-03 + -8.59229E-03 -6.89413E-03 -5.01125E-03 -3.30119E-03 -1.97523E-03 -1.07650E-03 + -5.35740E-04 -2.43943E-04 -1.01783E-04 -3.89600E-05 -1.36938E-05 -4.42286E-06 + -1.31347E-06 -3.58829E-07 -9.02156E-08 -2.08811E-08 + 1.40054E-08 6.05095E-08 2.40674E-07 8.80973E-07 2.96651E-06 9.18468E-06 + 2.61313E-05 6.82677E-05 1.63617E-04 3.59331E-04 7.22026E-04 1.32473E-03 + 2.21331E-03 3.35511E-03 4.59212E-03 5.63724E-03 6.13382E-03 5.73616E-03 + 4.19175E-03 1.55503E-03 -1.55503E-03 -4.19175E-03 -5.73616E-03 -6.13382E-03 + -5.63724E-03 -4.59212E-03 -3.35511E-03 -2.21331E-03 -1.32473E-03 -7.22026E-04 + -3.59331E-04 -1.63617E-04 -6.82677E-05 -2.61313E-05 -9.18468E-06 -2.96651E-06 + -8.80973E-07 -2.40674E-07 -6.05095E-08 -1.40054E-08 + 8.32500E-09 3.59677E-08 1.43060E-07 5.23663E-07 1.76333E-06 5.45951E-06 + 1.55328E-05 4.05793E-05 9.72565E-05 2.13592E-04 4.29181E-04 7.87422E-04 + 1.31546E-03 1.99317E-03 2.72332E-03 3.32517E-03 3.57095E-03 3.26146E-03 + 2.31459E-03 8.40793E-04 -8.40793E-04 -2.31459E-03 -3.26146E-03 -3.57095E-03 + -3.32517E-03 -2.72332E-03 -1.99317E-03 -1.31546E-03 -7.87422E-04 -4.29181E-04 + -2.13592E-04 -9.72565E-05 -4.05793E-05 -1.55328E-05 -5.45951E-06 -1.76333E-06 + -5.23663E-07 -1.43060E-07 -3.59677E-08 -8.32500E-09 + 4.40696E-09 1.90400E-08 7.57309E-08 2.77208E-07 9.33445E-07 2.89007E-06 + 8.22251E-06 2.14812E-05 5.14841E-05 1.13068E-04 2.27193E-04 4.16831E-04 + 6.96341E-04 1.05498E-03 1.44090E-03 1.75723E-03 1.88147E-03 1.70885E-03 + 1.20406E-03 4.35055E-04 -4.35055E-04 -1.20406E-03 -1.70885E-03 -1.88147E-03 + -1.75723E-03 -1.44090E-03 -1.05498E-03 -6.96341E-04 -4.16831E-04 -2.27193E-04 + -1.13068E-04 -5.14841E-05 -2.14812E-05 -8.22251E-06 -2.89007E-06 -9.33445E-07 + -2.77208E-07 -7.57309E-08 -1.90400E-08 -4.40696E-09 + 2.08292E-09 8.99915E-09 3.57938E-08 1.31021E-07 4.41188E-07 1.36597E-06 + 3.88632E-06 1.01530E-05 2.43337E-05 5.34408E-05 1.07381E-04 1.97013E-04 + 3.29120E-04 4.98623E-04 6.80985E-04 8.30340E-04 8.88666E-04 8.06493E-04 + 5.67674E-04 2.04957E-04 -2.04957E-04 -5.67674E-04 -8.06493E-04 -8.88666E-04 + -8.30340E-04 -6.80985E-04 -4.98623E-04 -3.29120E-04 -1.97013E-04 -1.07381E-04 + -5.34408E-05 -2.43337E-05 -1.01530E-05 -3.88632E-06 -1.36597E-06 -4.41188E-07 + -1.31021E-07 -3.57938E-08 -8.99915E-09 -2.08292E-09 + 8.79905E-10 3.80158E-09 1.51206E-08 5.53482E-08 1.86374E-07 5.77039E-07 + 1.64173E-06 4.28900E-06 1.02795E-05 2.25754E-05 4.53620E-05 8.32257E-05 + 1.39033E-04 2.10637E-04 2.87672E-04 3.50759E-04 3.75382E-04 3.40647E-04 + 2.39752E-04 8.65557E-05 -8.65557E-05 -2.39752E-04 -3.40647E-04 -3.75382E-04 + -3.50759E-04 -2.87672E-04 -2.10637E-04 -1.39033E-04 -8.32257E-05 -4.53620E-05 + -2.25754E-05 -1.02795E-05 -4.28900E-06 -1.64173E-06 -5.77039E-07 -1.86374E-07 + -5.53482E-08 -1.51206E-08 -3.80158E-09 -8.79905E-10 + 3.32208E-10 1.43529E-09 5.70880E-09 2.08967E-08 7.03656E-08 2.17861E-07 + 6.19835E-07 1.61931E-06 3.88101E-06 8.52335E-06 1.71264E-05 3.14218E-05 + 5.24918E-05 7.95260E-05 1.08610E-04 1.32429E-04 1.41725E-04 1.28610E-04 + 9.05172E-05 3.26785E-05 -3.26785E-05 -9.05172E-05 -1.28610E-04 -1.41725E-04 + -1.32429E-04 -1.08610E-04 -7.95260E-05 -5.24918E-05 -3.14218E-05 -1.71264E-05 + -8.52335E-06 -3.88101E-06 -1.61931E-06 -6.19835E-07 -2.17861E-07 -7.03656E-08 + -2.08967E-08 -5.70880E-09 -1.43529E-09 -3.32208E-10 + 1.12010E-10 4.83931E-10 1.92482E-09 7.04568E-09 2.37250E-08 7.34555E-08 + 2.08988E-07 5.45979E-07 1.30855E-06 2.87379E-06 5.77446E-06 1.05944E-05 + 1.76985E-05 2.68135E-05 3.66198E-05 4.46506E-05 4.77850E-05 4.33630E-05 + 3.05194E-05 1.10181E-05 -1.10181E-05 -3.05194E-05 -4.33630E-05 -4.77850E-05 + -4.46506E-05 -3.66198E-05 -2.68135E-05 -1.76985E-05 -1.05944E-05 -5.77446E-06 + -2.87379E-06 -1.30855E-06 -5.45979E-07 -2.08988E-07 -7.34555E-08 -2.37250E-08 + -7.04568E-09 -1.92482E-09 -4.83931E-10 -1.12010E-10 + 3.36838E-11 1.45529E-10 5.78836E-10 2.11879E-09 7.13463E-09 2.20897E-08 + 6.28473E-08 1.64188E-07 3.93510E-07 8.64213E-07 1.73651E-06 3.18597E-06 + 5.32233E-06 8.06342E-06 1.10124E-05 1.34274E-05 1.43700E-05 1.30402E-05 + 9.17785E-06 3.31339E-06 -3.31339E-06 -9.17785E-06 -1.30402E-05 -1.43700E-05 + -1.34274E-05 -1.10124E-05 -8.06342E-06 -5.32233E-06 -3.18597E-06 -1.73651E-06 + -8.64213E-07 -3.93510E-07 -1.64188E-07 -6.28473E-08 -2.20897E-08 -7.13463E-09 + -2.11879E-09 -5.78836E-10 -1.45529E-10 -3.36838E-11 + 9.02081E-12 3.89739E-11 1.55017E-10 5.67431E-10 1.91071E-09 5.91582E-09 + 1.68311E-08 4.39710E-08 1.05385E-07 2.31444E-07 4.65052E-07 8.53232E-07 + 1.42537E-06 2.15946E-06 2.94922E-06 3.59598E-06 3.84841E-06 3.49229E-06 + 2.45791E-06 8.87354E-07 -8.87354E-07 -2.45791E-06 -3.49229E-06 -3.84841E-06 + -3.59598E-06 -2.94922E-06 -2.15946E-06 -1.42537E-06 -8.53232E-07 -4.65052E-07 + -2.31444E-07 -1.05385E-07 -4.39710E-08 -1.68311E-08 -5.91582E-09 -1.91071E-09 + -5.67431E-10 -1.55017E-10 -3.89739E-11 -9.02081E-12 + 2.14798E-12 9.28024E-12 3.69118E-11 1.35113E-10 4.54968E-10 1.40864E-09 + 4.00771E-09 1.04701E-08 2.50937E-08 5.51100E-08 1.10735E-07 2.03166E-07 + 3.39400E-07 5.14196E-07 7.02250E-07 8.56253E-07 9.16361E-07 8.31563E-07 + 5.85262E-07 2.11291E-07 -2.11291E-07 -5.85262E-07 -8.31563E-07 -9.16361E-07 + -8.56253E-07 -7.02250E-07 -5.14196E-07 -3.39400E-07 -2.03166E-07 -1.10735E-07 + -5.51100E-08 -2.50937E-08 -1.04701E-08 -4.00771E-09 -1.40864E-09 -4.54968E-10 + -1.35113E-10 -3.69118E-11 -9.28024E-12 -2.14798E-12 + 4.54041E-13 1.96166E-12 7.80242E-12 2.85603E-11 9.61713E-11 2.97759E-10 + 8.47151E-10 2.21317E-09 5.30432E-09 1.16492E-08 2.34073E-08 4.29454E-08 + 7.17424E-08 1.08691E-07 1.48442E-07 1.80995E-07 1.93701E-07 1.75776E-07 + 1.23713E-07 4.46628E-08 -4.46628E-08 -1.23713E-07 -1.75776E-07 -1.93701E-07 + -1.80995E-07 -1.48442E-07 -1.08691E-07 -7.17424E-08 -4.29454E-08 -2.34073E-08 + -1.16492E-08 -5.30432E-09 -2.21317E-09 -8.47151E-10 -2.97759E-10 -9.61713E-11 + -2.85603E-11 -7.80242E-12 -1.96166E-12 -4.54041E-13 + 8.50771E-14 3.67571E-13 1.46200E-12 5.35156E-12 1.80203E-11 5.57933E-11 + 1.58737E-10 4.14699E-10 9.93910E-10 2.18279E-09 4.38600E-09 8.04700E-09 + 1.34429E-08 2.03663E-08 2.78147E-08 3.39144E-08 3.62952E-08 3.29365E-08 + 2.31810E-08 8.36881E-09 -8.36881E-09 -2.31810E-08 -3.29365E-08 -3.62952E-08 + -3.39144E-08 -2.78147E-08 -2.03663E-08 -1.34429E-08 -8.04700E-09 -4.38600E-09 + -2.18279E-09 -9.93910E-10 -4.14699E-10 -1.58737E-10 -5.57933E-11 -1.80203E-11 + -5.35156E-12 -1.46200E-12 -3.67571E-13 -8.50771E-14 + 1.41133E-14 6.09759E-14 2.42529E-13 8.87762E-13 2.98937E-12 9.25547E-12 + 2.63327E-11 6.87939E-11 1.64878E-10 3.62101E-10 7.27588E-10 1.33491E-09 + 2.23003E-09 3.37853E-09 4.61413E-09 5.62602E-09 6.02095E-09 5.46379E-09 + 3.84547E-09 1.38829E-09 -1.38829E-09 -3.84547E-09 -5.46379E-09 -6.02095E-09 + -5.62602E-09 -4.61413E-09 -3.37853E-09 -2.23003E-09 -1.33491E-09 -7.27588E-10 + -3.62101E-10 -1.64878E-10 -6.87939E-11 -2.63327E-11 -9.25547E-12 -2.98937E-12 + -8.87762E-13 -2.42529E-13 -6.09759E-14 -1.41133E-14 + 2.07048E-15 8.94538E-15 3.55799E-14 1.30238E-13 4.38551E-13 1.35781E-12 + 3.86310E-12 1.00923E-11 2.41883E-11 5.31215E-11 1.06740E-10 1.95836E-10 + 3.27153E-10 4.95643E-10 6.76910E-10 8.25357E-10 8.83296E-10 8.01558E-10 + 5.64145E-10 2.03667E-10 -2.03667E-10 -5.64145E-10 -8.01558E-10 -8.83296E-10 + -8.25357E-10 -6.76910E-10 -4.95643E-10 -3.27153E-10 -1.95836E-10 -1.06740E-10 + -5.31215E-11 -2.41883E-11 -1.00923E-11 -3.86310E-12 -1.35781E-12 -4.38551E-13 + -1.30238E-13 -3.55799E-14 -8.94538E-15 -2.07048E-15 + -4.45743E-15 -1.92581E-14 -7.65983E-14 -2.80383E-13 -9.44137E-13 -2.92317E-12 + -8.31669E-12 -2.17273E-11 -5.20738E-11 -1.14363E-10 -2.29795E-10 -4.21605E-10 + -7.04313E-10 -1.06705E-09 -1.45729E-09 -1.77687E-09 -1.90161E-09 -1.72564E-09 + -1.21452E-09 -4.38466E-10 4.38466E-10 1.21452E-09 1.72564E-09 1.90161E-09 + 1.77687E-09 1.45729E-09 1.06705E-09 7.04313E-10 4.21605E-10 2.29795E-10 + 1.14363E-10 5.20738E-11 2.17273E-11 8.31669E-12 2.92317E-12 9.44137E-13 + 2.80383E-13 7.65983E-14 1.92581E-14 4.45743E-15 + -3.01949E-14 -1.30456E-13 -5.18882E-13 -1.89933E-12 -6.39564E-12 -1.98017E-11 + -5.63378E-11 -1.47182E-10 -3.52751E-10 -7.74701E-10 -1.55665E-09 -2.85598E-09 + -4.77106E-09 -7.22824E-09 -9.87177E-09 -1.20367E-08 -1.28816E-08 -1.16896E-08 + -8.22724E-09 -2.97020E-09 2.97020E-09 8.22724E-09 1.16896E-08 1.28816E-08 + 1.20367E-08 9.87177E-09 7.22824E-09 4.77106E-09 2.85598E-09 1.55665E-09 + 7.74701E-10 3.52751E-10 1.47182E-10 5.63378E-11 1.98017E-11 6.39564E-12 + 1.89933E-12 5.18882E-13 1.30456E-13 3.01949E-14 + -1.80598E-13 -7.80263E-13 -3.10346E-12 -1.13600E-11 -3.82527E-11 -1.18435E-10 + -3.36960E-10 -8.80304E-10 -2.10983E-09 -4.63353E-09 -9.31041E-09 -1.70818E-08 + -2.85360E-08 -4.32325E-08 -5.90437E-08 -7.19920E-08 -7.70457E-08 -6.99161E-08 + -4.92076E-08 -1.77649E-08 1.77649E-08 4.92076E-08 6.99161E-08 7.70457E-08 + 7.19920E-08 5.90437E-08 4.32325E-08 2.85360E-08 1.70818E-08 9.31041E-09 + 4.63353E-09 2.10983E-09 8.80304E-10 3.36960E-10 1.18435E-10 3.82527E-11 + 1.13600E-11 3.10346E-12 7.80263E-13 1.80598E-13 + -9.54448E-13 -4.12364E-12 -1.64016E-11 -6.00371E-11 -2.02163E-10 -6.25924E-10 + -1.78081E-09 -4.65236E-09 -1.11503E-08 -2.44880E-08 -4.92049E-08 -9.02763E-08 + -1.50811E-07 -2.28481E-07 -3.12042E-07 -3.80473E-07 -4.07182E-07 -3.69502E-07 + -2.60059E-07 -9.38866E-08 9.38866E-08 2.60059E-07 3.69502E-07 4.07182E-07 + 3.80473E-07 3.12042E-07 2.28481E-07 1.50811E-07 9.02763E-08 4.92049E-08 + 2.44880E-08 1.11503E-08 4.65236E-09 1.78081E-09 6.25924E-10 2.02163E-10 + 6.00371E-11 1.64016E-11 4.12364E-12 9.54448E-13 + -4.46126E-12 -1.92747E-11 -7.66642E-11 -2.80624E-10 -9.44949E-10 -2.92568E-09 + -8.32384E-09 -2.17460E-08 -5.21186E-08 -1.14461E-07 -2.29993E-07 -4.21968E-07 + -7.04919E-07 -1.06796E-06 -1.45854E-06 -1.77840E-06 -1.90324E-06 -1.72712E-06 + -1.21556E-06 -4.38843E-07 4.38843E-07 1.21556E-06 1.72712E-06 1.90324E-06 + 1.77840E-06 1.45854E-06 1.06796E-06 7.04919E-07 4.21968E-07 2.29993E-07 + 1.14461E-07 5.21186E-08 2.17460E-08 8.32384E-09 2.92568E-09 9.44949E-10 + 2.80624E-10 7.66642E-11 1.92747E-11 4.46126E-12 + -1.84633E-11 -7.97697E-11 -3.17281E-10 -1.16139E-09 -3.91074E-09 -1.21082E-08 + -3.44489E-08 -8.99973E-08 -2.15697E-07 -4.73706E-07 -9.51843E-07 -1.74635E-06 + -2.91736E-06 -4.41985E-06 -6.03629E-06 -7.36005E-06 -7.87671E-06 -7.14782E-06 + -5.03071E-06 -1.81619E-06 1.81619E-06 5.03071E-06 7.14782E-06 7.87671E-06 + 7.36005E-06 6.03629E-06 4.41985E-06 2.91736E-06 1.74635E-06 9.51843E-07 + 4.73706E-07 2.15697E-07 8.99973E-08 3.44489E-08 1.21082E-08 3.91074E-09 + 1.16139E-09 3.17281E-10 7.97697E-11 1.84633E-11 + -6.77426E-11 -2.92678E-10 -1.16412E-09 -4.26118E-09 -1.43487E-08 -4.44254E-08 + -1.26394E-07 -3.30204E-07 -7.91401E-07 -1.73805E-06 -3.49236E-06 -6.40742E-06 + -1.07039E-05 -1.62166E-05 -2.21474E-05 -2.70044E-05 -2.89000E-05 -2.62257E-05 + -1.84579E-05 -6.66367E-06 6.66367E-06 1.84579E-05 2.62257E-05 2.89000E-05 + 2.70044E-05 2.21474E-05 1.62166E-05 1.07039E-05 6.40742E-06 3.49236E-06 + 1.73805E-06 7.91401E-07 3.30204E-07 1.26394E-07 4.44254E-08 1.43487E-08 + 4.26118E-09 1.16412E-09 2.92678E-10 6.77426E-11 + -2.20668E-10 -9.53385E-10 -3.79205E-09 -1.38806E-08 -4.67401E-08 -1.44713E-07 + -4.11723E-07 -1.07562E-06 -2.57795E-06 -5.66160E-06 -1.13762E-05 -2.08718E-05 + -3.48675E-05 -5.28248E-05 -7.21440E-05 -8.79653E-05 -9.41403E-05 -8.54288E-05 + -6.01256E-05 -2.17065E-05 2.17065E-05 6.01256E-05 8.54288E-05 9.41403E-05 + 8.79653E-05 7.21440E-05 5.28248E-05 3.48675E-05 2.08718E-05 1.13762E-05 + 5.66160E-06 2.57795E-06 1.07562E-06 4.11723E-07 1.44713E-07 4.67401E-08 + 1.38806E-08 3.79205E-09 9.53385E-10 2.20668E-10 + -6.39151E-10 -2.76142E-09 -1.09834E-08 -4.02042E-08 -1.35380E-07 -4.19153E-07 + -1.19253E-06 -3.11547E-06 -7.46686E-06 -1.63985E-05 -3.29503E-05 -6.04540E-05 + -1.00991E-04 -1.53004E-04 -2.08961E-04 -2.54786E-04 -2.72672E-04 -2.47439E-04 + -1.74151E-04 -6.28719E-05 6.28719E-05 1.74151E-04 2.47439E-04 2.72672E-04 + 2.54786E-04 2.08961E-04 1.53004E-04 1.00991E-04 6.04540E-05 3.29503E-05 + 1.63985E-05 7.46686E-06 3.11547E-06 1.19253E-06 4.19153E-07 1.35380E-07 + 4.02042E-08 1.09834E-08 2.76142E-09 6.39151E-10 + -1.64858E-09 -7.12259E-09 -2.83298E-08 -1.03700E-07 -3.49188E-07 -1.08113E-06 + -3.07592E-06 -8.03582E-06 -1.92595E-05 -4.22970E-05 -8.49896E-05 -1.55930E-04 + -2.60490E-04 -3.94647E-04 -5.38979E-04 -6.57179E-04 -7.03318E-04 -6.38243E-04 + -4.49208E-04 -1.62174E-04 1.62174E-04 4.49208E-04 6.38243E-04 7.03318E-04 + 6.57179E-04 5.38979E-04 3.94647E-04 2.60490E-04 1.55930E-04 8.49896E-05 + 4.22970E-05 1.92595E-05 8.03582E-06 3.07592E-06 1.08113E-06 3.49188E-07 + 1.03700E-07 2.83298E-08 7.12259E-09 1.64858E-09 + -3.79166E-09 -1.63817E-08 -6.51574E-08 -2.38505E-07 -8.03118E-07 -2.48656E-06 + -7.07449E-06 -1.84820E-05 -4.42959E-05 -9.72813E-05 -1.95472E-04 -3.58633E-04 + -5.99116E-04 -9.07675E-04 -1.23965E-03 -1.51156E-03 -1.61780E-03 -1.46827E-03 + -1.03353E-03 -3.73162E-04 3.73162E-04 1.03353E-03 1.46827E-03 1.61780E-03 + 1.51156E-03 1.23965E-03 9.07675E-04 5.99116E-04 3.58633E-04 1.95472E-04 + 9.72813E-05 4.42959E-05 1.84820E-05 7.07449E-06 2.48656E-06 8.03118E-07 + 2.38505E-07 6.51574E-08 1.63817E-08 3.79166E-09 + -7.78281E-09 -3.36252E-08 -1.33743E-07 -4.89558E-07 -1.64849E-06 -5.10394E-06 + -1.45212E-05 -3.79365E-05 -9.09224E-05 -1.99681E-04 -4.01229E-04 -7.36137E-04 + -1.22976E-03 -1.86318E-03 -2.54487E-03 -3.10388E-03 -3.32386E-03 -3.01934E-03 + -2.12755E-03 -7.68722E-04 7.68722E-04 2.12755E-03 3.01934E-03 3.32386E-03 + 3.10388E-03 2.54487E-03 1.86318E-03 1.22976E-03 7.36137E-04 4.01229E-04 + 1.99681E-04 9.09224E-05 3.79365E-05 1.45212E-05 5.10394E-06 1.64849E-06 + 4.89558E-07 1.33743E-07 3.36252E-08 7.78281E-09 + -1.42575E-08 -6.15988E-08 -2.45007E-07 -8.96832E-07 -3.01991E-06 -9.35003E-06 + -2.66017E-05 -6.94967E-05 -1.66563E-04 -3.65800E-04 -7.35023E-04 -1.34856E-03 + -2.25295E-03 -3.41396E-03 -4.66576E-03 -5.69961E-03 -6.12406E-03 -5.59354E-03 + -3.96678E-03 -1.43974E-03 1.43974E-03 3.96678E-03 5.59354E-03 6.12406E-03 + 5.69961E-03 4.66576E-03 3.41396E-03 2.25295E-03 1.34856E-03 7.35023E-04 + 3.65800E-04 1.66563E-04 6.94967E-05 2.66017E-05 9.35003E-06 3.01991E-06 + 8.96832E-07 2.45007E-07 6.15988E-08 1.42575E-08 + -2.32787E-08 -1.00575E-07 -4.00031E-07 -1.46429E-06 -4.93071E-06 -1.52661E-05 + -4.34336E-05 -1.13470E-04 -2.71953E-04 -5.97255E-04 -1.20011E-03 -2.20194E-03 + -3.67932E-03 -5.57973E-03 -7.64556E-03 -9.40526E-03 -1.02555E-02 -9.58906E-03 + -6.98321E-03 -2.58090E-03 2.58090E-03 6.98321E-03 9.58906E-03 1.02555E-02 + 9.40526E-03 7.64556E-03 5.57973E-03 3.67932E-03 2.20194E-03 1.20011E-03 + 5.97255E-04 2.71953E-04 1.13470E-04 4.34336E-05 1.52661E-05 4.93071E-06 + 1.46429E-06 4.00031E-07 1.00575E-07 2.32787E-08 + -3.37516E-08 -1.45822E-07 -5.80002E-07 -2.12306E-06 -7.14900E-06 -2.21342E-05 + -6.29739E-05 -1.64519E-04 -3.94303E-04 -8.65958E-04 -1.74006E-03 -3.19302E-03 + -5.33864E-03 -8.11646E-03 -1.12139E-02 -1.40946E-02 -1.60387E-02 -1.59605E-02 + -1.23897E-02 -4.76670E-03 4.76670E-03 1.23897E-02 1.59605E-02 1.60387E-02 + 1.40946E-02 1.12139E-02 8.11646E-03 5.33864E-03 3.19302E-03 1.74006E-03 + 8.65958E-04 3.94303E-04 1.64519E-04 6.29739E-05 2.21342E-05 7.14900E-06 + 2.12306E-06 5.80002E-07 1.45822E-07 3.37516E-08 + -4.31251E-08 -1.86320E-07 -7.41079E-07 -2.71268E-06 -9.13441E-06 -2.82813E-05 + -8.04630E-05 -2.10209E-04 -5.03808E-04 -1.10646E-03 -2.22342E-03 -4.08109E-03 + -6.83284E-03 -1.04460E-02 -1.46906E-02 -1.92786E-02 -2.36788E-02 -2.59110E-02 + -2.18544E-02 -8.81577E-03 8.81577E-03 2.18544E-02 2.59110E-02 2.36788E-02 + 1.92786E-02 1.46906E-02 1.04460E-02 6.83284E-03 4.08109E-03 2.22342E-03 + 1.10646E-03 5.03808E-04 2.10209E-04 8.04630E-05 2.82813E-05 9.13441E-06 + 2.71268E-06 7.41079E-07 1.86320E-07 4.31251E-08 + -4.78183E-08 -2.06596E-07 -8.21729E-07 -3.00789E-06 -1.01285E-05 -3.13591E-05 + -8.92195E-05 -2.33085E-04 -5.58637E-04 -1.22688E-03 -2.46557E-03 -4.52739E-03 + -7.59540E-03 -1.17053E-02 -1.68699E-02 -2.33767E-02 -3.11889E-02 -3.72950E-02 + -3.42216E-02 -1.47639E-02 1.47639E-02 3.42216E-02 3.72950E-02 3.11889E-02 + 2.33767E-02 1.68699E-02 1.17053E-02 7.59540E-03 4.52739E-03 2.46557E-03 + 1.22688E-03 5.58637E-04 2.33085E-04 8.92195E-05 3.13591E-05 1.01285E-05 + 3.00789E-06 8.21729E-07 2.06596E-07 4.78183E-08 + -4.45113E-08 -1.92309E-07 -7.64901E-07 -2.79987E-06 -9.42803E-06 -2.91904E-05 + -8.30494E-05 -2.16966E-04 -5.20004E-04 -1.14204E-03 -2.29521E-03 -4.21611E-03 + -7.08585E-03 -1.09961E-02 -1.61717E-02 -2.33443E-02 -3.28999E-02 -4.19764E-02 + -4.30875E-02 -2.10541E-02 2.10541E-02 4.30875E-02 4.19764E-02 3.28999E-02 + 2.33443E-02 1.61717E-02 1.09961E-02 7.08585E-03 4.21611E-03 2.29521E-03 + 1.14204E-03 5.20004E-04 2.16966E-04 8.30494E-05 2.91904E-05 9.42803E-06 + 2.79987E-06 7.64901E-07 1.92309E-07 4.45113E-08 + -3.18457E-08 -1.37588E-07 -5.47250E-07 -2.00317E-06 -6.74531E-06 -2.08843E-05 + -5.94179E-05 -1.55229E-04 -3.72038E-04 -8.17081E-04 -1.64216E-03 -3.01698E-03 + -5.07425E-03 -7.89603E-03 -1.16997E-02 -1.71215E-02 -2.45147E-02 -3.18058E-02 + -3.36229E-02 -1.69338E-02 1.69338E-02 3.36229E-02 3.18058E-02 2.45147E-02 + 1.71215E-02 1.16997E-02 7.89603E-03 5.07425E-03 3.01698E-03 1.64216E-03 + 8.17081E-04 3.72038E-04 1.55229E-04 5.94179E-05 2.08843E-05 6.74531E-06 + 2.00317E-06 5.47250E-07 1.37588E-07 3.18457E-08 + -1.15897E-08 -5.00727E-08 -1.99162E-07 -7.29021E-07 -2.45484E-06 -7.60049E-06 + -2.16241E-05 -5.64928E-05 -1.35397E-04 -2.97363E-04 -5.97637E-04 -1.09797E-03 + -1.84658E-03 -2.87263E-03 -4.25162E-03 -6.20347E-03 -8.82747E-03 -1.12048E-02 + -1.10159E-02 -5.08925E-03 5.08925E-03 1.10159E-02 1.12048E-02 8.82747E-03 + 6.20347E-03 4.25162E-03 2.87263E-03 1.84658E-03 1.09797E-03 5.97637E-04 + 2.97363E-04 1.35397E-04 5.64928E-05 2.16241E-05 7.60049E-06 2.45484E-06 + 7.29021E-07 1.99162E-07 5.00727E-08 1.15897E-08 + 1.15897E-08 5.00727E-08 1.99162E-07 7.29021E-07 2.45484E-06 7.60049E-06 + 2.16241E-05 5.64928E-05 1.35397E-04 2.97363E-04 5.97637E-04 1.09797E-03 + 1.84658E-03 2.87263E-03 4.25162E-03 6.20347E-03 8.82747E-03 1.12048E-02 + 1.10159E-02 5.08925E-03 -5.08925E-03 -1.10159E-02 -1.12048E-02 -8.82747E-03 + -6.20347E-03 -4.25162E-03 -2.87263E-03 -1.84658E-03 -1.09797E-03 -5.97637E-04 + -2.97363E-04 -1.35397E-04 -5.64928E-05 -2.16241E-05 -7.60049E-06 -2.45484E-06 + -7.29021E-07 -1.99162E-07 -5.00727E-08 -1.15897E-08 + 3.18457E-08 1.37588E-07 5.47250E-07 2.00317E-06 6.74531E-06 2.08843E-05 + 5.94179E-05 1.55229E-04 3.72038E-04 8.17081E-04 1.64216E-03 3.01698E-03 + 5.07425E-03 7.89603E-03 1.16997E-02 1.71215E-02 2.45147E-02 3.18058E-02 + 3.36229E-02 1.69338E-02 -1.69338E-02 -3.36229E-02 -3.18058E-02 -2.45147E-02 + -1.71215E-02 -1.16997E-02 -7.89603E-03 -5.07425E-03 -3.01698E-03 -1.64216E-03 + -8.17081E-04 -3.72038E-04 -1.55229E-04 -5.94179E-05 -2.08843E-05 -6.74531E-06 + -2.00317E-06 -5.47250E-07 -1.37588E-07 -3.18457E-08 + 4.45113E-08 1.92309E-07 7.64901E-07 2.79987E-06 9.42803E-06 2.91904E-05 + 8.30494E-05 2.16966E-04 5.20004E-04 1.14204E-03 2.29521E-03 4.21611E-03 + 7.08585E-03 1.09961E-02 1.61717E-02 2.33443E-02 3.28999E-02 4.19764E-02 + 4.30875E-02 2.10541E-02 -2.10541E-02 -4.30875E-02 -4.19764E-02 -3.28999E-02 + -2.33443E-02 -1.61717E-02 -1.09961E-02 -7.08585E-03 -4.21611E-03 -2.29521E-03 + -1.14204E-03 -5.20004E-04 -2.16966E-04 -8.30494E-05 -2.91904E-05 -9.42803E-06 + -2.79987E-06 -7.64901E-07 -1.92309E-07 -4.45113E-08 + 4.78183E-08 2.06596E-07 8.21729E-07 3.00789E-06 1.01285E-05 3.13591E-05 + 8.92195E-05 2.33085E-04 5.58637E-04 1.22688E-03 2.46557E-03 4.52739E-03 + 7.59540E-03 1.17053E-02 1.68699E-02 2.33767E-02 3.11889E-02 3.72950E-02 + 3.42216E-02 1.47639E-02 -1.47639E-02 -3.42216E-02 -3.72950E-02 -3.11889E-02 + -2.33767E-02 -1.68699E-02 -1.17053E-02 -7.59540E-03 -4.52739E-03 -2.46557E-03 + -1.22688E-03 -5.58637E-04 -2.33085E-04 -8.92195E-05 -3.13591E-05 -1.01285E-05 + -3.00789E-06 -8.21729E-07 -2.06596E-07 -4.78183E-08 + 4.31251E-08 1.86320E-07 7.41079E-07 2.71268E-06 9.13441E-06 2.82813E-05 + 8.04630E-05 2.10209E-04 5.03808E-04 1.10646E-03 2.22342E-03 4.08109E-03 + 6.83284E-03 1.04460E-02 1.46906E-02 1.92786E-02 2.36788E-02 2.59110E-02 + 2.18544E-02 8.81577E-03 -8.81577E-03 -2.18544E-02 -2.59110E-02 -2.36788E-02 + -1.92786E-02 -1.46906E-02 -1.04460E-02 -6.83284E-03 -4.08109E-03 -2.22342E-03 + -1.10646E-03 -5.03808E-04 -2.10209E-04 -8.04630E-05 -2.82813E-05 -9.13441E-06 + -2.71268E-06 -7.41079E-07 -1.86320E-07 -4.31251E-08 + 3.37516E-08 1.45822E-07 5.80002E-07 2.12306E-06 7.14900E-06 2.21342E-05 + 6.29739E-05 1.64519E-04 3.94303E-04 8.65958E-04 1.74006E-03 3.19302E-03 + 5.33864E-03 8.11646E-03 1.12139E-02 1.40946E-02 1.60387E-02 1.59605E-02 + 1.23897E-02 4.76670E-03 -4.76670E-03 -1.23897E-02 -1.59605E-02 -1.60387E-02 + -1.40946E-02 -1.12139E-02 -8.11646E-03 -5.33864E-03 -3.19302E-03 -1.74006E-03 + -8.65958E-04 -3.94303E-04 -1.64519E-04 -6.29739E-05 -2.21342E-05 -7.14900E-06 + -2.12306E-06 -5.80002E-07 -1.45822E-07 -3.37516E-08 + 2.32787E-08 1.00575E-07 4.00031E-07 1.46429E-06 4.93071E-06 1.52661E-05 + 4.34336E-05 1.13470E-04 2.71953E-04 5.97255E-04 1.20011E-03 2.20194E-03 + 3.67932E-03 5.57973E-03 7.64556E-03 9.40526E-03 1.02555E-02 9.58906E-03 + 6.98321E-03 2.58090E-03 -2.58090E-03 -6.98321E-03 -9.58906E-03 -1.02555E-02 + -9.40526E-03 -7.64556E-03 -5.57973E-03 -3.67932E-03 -2.20194E-03 -1.20011E-03 + -5.97255E-04 -2.71953E-04 -1.13470E-04 -4.34336E-05 -1.52661E-05 -4.93071E-06 + -1.46429E-06 -4.00031E-07 -1.00575E-07 -2.32787E-08 + 1.42575E-08 6.15988E-08 2.45007E-07 8.96832E-07 3.01991E-06 9.35003E-06 + 2.66017E-05 6.94967E-05 1.66563E-04 3.65800E-04 7.35023E-04 1.34856E-03 + 2.25295E-03 3.41396E-03 4.66576E-03 5.69961E-03 6.12406E-03 5.59354E-03 + 3.96678E-03 1.43974E-03 -1.43974E-03 -3.96678E-03 -5.59354E-03 -6.12406E-03 + -5.69961E-03 -4.66576E-03 -3.41396E-03 -2.25295E-03 -1.34856E-03 -7.35023E-04 + -3.65800E-04 -1.66563E-04 -6.94967E-05 -2.66017E-05 -9.35003E-06 -3.01991E-06 + -8.96832E-07 -2.45007E-07 -6.15988E-08 -1.42575E-08 + 7.78281E-09 3.36252E-08 1.33743E-07 4.89558E-07 1.64849E-06 5.10394E-06 + 1.45212E-05 3.79365E-05 9.09224E-05 1.99681E-04 4.01229E-04 7.36137E-04 + 1.22976E-03 1.86318E-03 2.54487E-03 3.10388E-03 3.32386E-03 3.01934E-03 + 2.12755E-03 7.68722E-04 -7.68722E-04 -2.12755E-03 -3.01934E-03 -3.32386E-03 + -3.10388E-03 -2.54487E-03 -1.86318E-03 -1.22976E-03 -7.36137E-04 -4.01229E-04 + -1.99681E-04 -9.09224E-05 -3.79365E-05 -1.45212E-05 -5.10394E-06 -1.64849E-06 + -4.89558E-07 -1.33743E-07 -3.36252E-08 -7.78281E-09 + 3.79166E-09 1.63817E-08 6.51574E-08 2.38505E-07 8.03118E-07 2.48656E-06 + 7.07449E-06 1.84820E-05 4.42959E-05 9.72813E-05 1.95472E-04 3.58633E-04 + 5.99116E-04 9.07675E-04 1.23965E-03 1.51156E-03 1.61780E-03 1.46827E-03 + 1.03353E-03 3.73162E-04 -3.73162E-04 -1.03353E-03 -1.46827E-03 -1.61780E-03 + -1.51156E-03 -1.23965E-03 -9.07675E-04 -5.99116E-04 -3.58633E-04 -1.95472E-04 + -9.72813E-05 -4.42959E-05 -1.84820E-05 -7.07449E-06 -2.48656E-06 -8.03118E-07 + -2.38505E-07 -6.51574E-08 -1.63817E-08 -3.79166E-09 + 1.64858E-09 7.12259E-09 2.83298E-08 1.03700E-07 3.49188E-07 1.08113E-06 + 3.07592E-06 8.03582E-06 1.92595E-05 4.22970E-05 8.49896E-05 1.55930E-04 + 2.60490E-04 3.94647E-04 5.38979E-04 6.57179E-04 7.03318E-04 6.38243E-04 + 4.49208E-04 1.62174E-04 -1.62174E-04 -4.49208E-04 -6.38243E-04 -7.03318E-04 + -6.57179E-04 -5.38979E-04 -3.94647E-04 -2.60490E-04 -1.55930E-04 -8.49896E-05 + -4.22970E-05 -1.92595E-05 -8.03582E-06 -3.07592E-06 -1.08113E-06 -3.49188E-07 + -1.03700E-07 -2.83298E-08 -7.12259E-09 -1.64858E-09 + 6.39151E-10 2.76142E-09 1.09834E-08 4.02042E-08 1.35380E-07 4.19153E-07 + 1.19253E-06 3.11547E-06 7.46686E-06 1.63985E-05 3.29503E-05 6.04540E-05 + 1.00991E-04 1.53004E-04 2.08961E-04 2.54786E-04 2.72672E-04 2.47439E-04 + 1.74151E-04 6.28719E-05 -6.28719E-05 -1.74151E-04 -2.47439E-04 -2.72672E-04 + -2.54786E-04 -2.08961E-04 -1.53004E-04 -1.00991E-04 -6.04540E-05 -3.29503E-05 + -1.63985E-05 -7.46686E-06 -3.11547E-06 -1.19253E-06 -4.19153E-07 -1.35380E-07 + -4.02042E-08 -1.09834E-08 -2.76142E-09 -6.39151E-10 + 2.20668E-10 9.53385E-10 3.79205E-09 1.38806E-08 4.67401E-08 1.44713E-07 + 4.11723E-07 1.07562E-06 2.57795E-06 5.66160E-06 1.13762E-05 2.08718E-05 + 3.48675E-05 5.28248E-05 7.21440E-05 8.79653E-05 9.41403E-05 8.54288E-05 + 6.01256E-05 2.17065E-05 -2.17065E-05 -6.01256E-05 -8.54288E-05 -9.41403E-05 + -8.79653E-05 -7.21440E-05 -5.28248E-05 -3.48675E-05 -2.08718E-05 -1.13762E-05 + -5.66160E-06 -2.57795E-06 -1.07562E-06 -4.11723E-07 -1.44713E-07 -4.67401E-08 + -1.38806E-08 -3.79205E-09 -9.53385E-10 -2.20668E-10 + 6.77426E-11 2.92678E-10 1.16412E-09 4.26118E-09 1.43487E-08 4.44254E-08 + 1.26394E-07 3.30204E-07 7.91401E-07 1.73805E-06 3.49236E-06 6.40742E-06 + 1.07039E-05 1.62166E-05 2.21474E-05 2.70044E-05 2.89000E-05 2.62257E-05 + 1.84579E-05 6.66367E-06 -6.66367E-06 -1.84579E-05 -2.62257E-05 -2.89000E-05 + -2.70044E-05 -2.21474E-05 -1.62166E-05 -1.07039E-05 -6.40742E-06 -3.49236E-06 + -1.73805E-06 -7.91401E-07 -3.30204E-07 -1.26394E-07 -4.44254E-08 -1.43487E-08 + -4.26118E-09 -1.16412E-09 -2.92678E-10 -6.77426E-11 + 1.84633E-11 7.97697E-11 3.17281E-10 1.16139E-09 3.91074E-09 1.21082E-08 + 3.44489E-08 8.99973E-08 2.15697E-07 4.73706E-07 9.51843E-07 1.74635E-06 + 2.91736E-06 4.41985E-06 6.03629E-06 7.36005E-06 7.87671E-06 7.14782E-06 + 5.03071E-06 1.81619E-06 -1.81619E-06 -5.03071E-06 -7.14782E-06 -7.87671E-06 + -7.36005E-06 -6.03629E-06 -4.41985E-06 -2.91736E-06 -1.74635E-06 -9.51843E-07 + -4.73706E-07 -2.15697E-07 -8.99973E-08 -3.44489E-08 -1.21082E-08 -3.91074E-09 + -1.16139E-09 -3.17281E-10 -7.97697E-11 -1.84633E-11 + 4.46126E-12 1.92747E-11 7.66642E-11 2.80624E-10 9.44949E-10 2.92568E-09 + 8.32384E-09 2.17460E-08 5.21186E-08 1.14461E-07 2.29993E-07 4.21968E-07 + 7.04919E-07 1.06796E-06 1.45854E-06 1.77840E-06 1.90324E-06 1.72712E-06 + 1.21556E-06 4.38843E-07 -4.38843E-07 -1.21556E-06 -1.72712E-06 -1.90324E-06 + -1.77840E-06 -1.45854E-06 -1.06796E-06 -7.04919E-07 -4.21968E-07 -2.29993E-07 + -1.14461E-07 -5.21186E-08 -2.17460E-08 -8.32384E-09 -2.92568E-09 -9.44949E-10 + -2.80624E-10 -7.66642E-11 -1.92747E-11 -4.46126E-12 + 9.54448E-13 4.12364E-12 1.64016E-11 6.00371E-11 2.02163E-10 6.25924E-10 + 1.78081E-09 4.65236E-09 1.11503E-08 2.44880E-08 4.92049E-08 9.02763E-08 + 1.50811E-07 2.28481E-07 3.12042E-07 3.80473E-07 4.07182E-07 3.69502E-07 + 2.60059E-07 9.38866E-08 -9.38866E-08 -2.60059E-07 -3.69502E-07 -4.07182E-07 + -3.80473E-07 -3.12042E-07 -2.28481E-07 -1.50811E-07 -9.02763E-08 -4.92049E-08 + -2.44880E-08 -1.11503E-08 -4.65236E-09 -1.78081E-09 -6.25924E-10 -2.02163E-10 + -6.00371E-11 -1.64016E-11 -4.12364E-12 -9.54448E-13 + 1.80598E-13 7.80263E-13 3.10346E-12 1.13600E-11 3.82527E-11 1.18435E-10 + 3.36960E-10 8.80304E-10 2.10983E-09 4.63353E-09 9.31041E-09 1.70818E-08 + 2.85360E-08 4.32325E-08 5.90437E-08 7.19920E-08 7.70457E-08 6.99161E-08 + 4.92076E-08 1.77649E-08 -1.77649E-08 -4.92076E-08 -6.99161E-08 -7.70457E-08 + -7.19920E-08 -5.90437E-08 -4.32325E-08 -2.85360E-08 -1.70818E-08 -9.31041E-09 + -4.63353E-09 -2.10983E-09 -8.80304E-10 -3.36960E-10 -1.18435E-10 -3.82527E-11 + -1.13600E-11 -3.10346E-12 -7.80263E-13 -1.80598E-13 + 3.01949E-14 1.30456E-13 5.18882E-13 1.89933E-12 6.39564E-12 1.98017E-11 + 5.63378E-11 1.47182E-10 3.52751E-10 7.74701E-10 1.55665E-09 2.85598E-09 + 4.77106E-09 7.22824E-09 9.87177E-09 1.20367E-08 1.28816E-08 1.16896E-08 + 8.22724E-09 2.97020E-09 -2.97020E-09 -8.22724E-09 -1.16896E-08 -1.28816E-08 + -1.20367E-08 -9.87177E-09 -7.22824E-09 -4.77106E-09 -2.85598E-09 -1.55665E-09 + -7.74701E-10 -3.52751E-10 -1.47182E-10 -5.63378E-11 -1.98017E-11 -6.39564E-12 + -1.89933E-12 -5.18882E-13 -1.30456E-13 -3.01949E-14 + 4.45743E-15 1.92581E-14 7.65983E-14 2.80383E-13 9.44137E-13 2.92317E-12 + 8.31669E-12 2.17273E-11 5.20738E-11 1.14363E-10 2.29795E-10 4.21605E-10 + 7.04313E-10 1.06705E-09 1.45729E-09 1.77687E-09 1.90161E-09 1.72564E-09 + 1.21452E-09 4.38466E-10 -4.38466E-10 -1.21452E-09 -1.72564E-09 -1.90161E-09 + -1.77687E-09 -1.45729E-09 -1.06705E-09 -7.04313E-10 -4.21605E-10 -2.29795E-10 + -1.14363E-10 -5.20738E-11 -2.17273E-11 -8.31669E-12 -2.92317E-12 -9.44137E-13 + -2.80383E-13 -7.65983E-14 -1.92581E-14 -4.45743E-15 + -8.26686E-15 -3.57166E-14 -1.42061E-13 -5.20006E-13 -1.75102E-12 -5.42138E-12 + -1.54243E-11 -4.02959E-11 -9.65774E-11 -2.12100E-10 -4.26184E-10 -7.81920E-10 + -1.30624E-09 -1.97897E-09 -2.70272E-09 -3.29543E-09 -3.52677E-09 -3.20041E-09 + -2.25248E-09 -8.13190E-10 8.13190E-10 2.25248E-09 3.20041E-09 3.52677E-09 + 3.29543E-09 2.70272E-09 1.97897E-09 1.30624E-09 7.81920E-10 4.26184E-10 + 2.12100E-10 9.65774E-11 4.02959E-11 1.54243E-11 5.42138E-12 1.75102E-12 + 5.20006E-13 1.42061E-13 3.57166E-14 8.26686E-15 + -5.57824E-14 -2.41005E-13 -9.58588E-13 -3.50885E-12 -1.18154E-11 -3.65819E-11 + -1.04079E-10 -2.71905E-10 -6.51676E-10 -1.43119E-09 -2.87577E-09 -5.27617E-09 + -8.81411E-09 -1.33535E-08 -1.82372E-08 -2.22366E-08 -2.37976E-08 -2.15954E-08 + -1.51991E-08 -5.48717E-09 5.48717E-09 1.51991E-08 2.15954E-08 2.37976E-08 + 2.22366E-08 1.82372E-08 1.33535E-08 8.81411E-09 5.27617E-09 2.87577E-09 + 1.43119E-09 6.51676E-10 2.71905E-10 1.04079E-10 3.65819E-11 1.18154E-11 + 3.50885E-12 9.58588E-13 2.41005E-13 5.57824E-14 + -3.31990E-13 -1.43434E-12 -5.70504E-12 -2.08830E-11 -7.03193E-11 -2.17718E-10 + -6.19427E-10 -1.61825E-09 -3.87846E-09 -8.51774E-09 -1.71151E-08 -3.14012E-08 + -5.24573E-08 -7.94736E-08 -1.08539E-07 -1.32342E-07 -1.41632E-07 -1.28525E-07 + -9.04575E-08 -3.26569E-08 3.26569E-08 9.04575E-08 1.28525E-07 1.41632E-07 + 1.32342E-07 1.08539E-07 7.94736E-08 5.24573E-08 3.14012E-08 1.71151E-08 + 8.51774E-09 3.87846E-09 1.61825E-09 6.19427E-10 2.17718E-10 7.03193E-11 + 2.08830E-11 5.70504E-12 1.43434E-12 3.31990E-13 + -1.74359E-12 -7.53310E-12 -2.99626E-11 -1.09676E-10 -3.69314E-10 -1.14344E-09 + -3.25320E-09 -8.49896E-09 -2.03695E-08 -4.47348E-08 -8.98880E-08 -1.64917E-07 + -2.75503E-07 -4.17392E-07 -5.70041E-07 -6.95051E-07 -7.43843E-07 -6.75009E-07 + -4.75079E-07 -1.71513E-07 1.71513E-07 4.75079E-07 6.75009E-07 7.43843E-07 + 6.95051E-07 5.70041E-07 4.17392E-07 2.75503E-07 1.64917E-07 8.98880E-08 + 4.47348E-08 2.03695E-08 8.49896E-09 3.25320E-09 1.14344E-09 3.69314E-10 + 1.09676E-10 2.99626E-11 7.53310E-12 1.74359E-12 + -8.08607E-12 -3.49354E-11 -1.38954E-10 -5.08634E-10 -1.71273E-09 -5.30282E-09 + -1.50870E-08 -3.94147E-08 -9.44652E-08 -2.07462E-07 -4.16863E-07 -7.64819E-07 + -1.27767E-06 -1.93569E-06 -2.64362E-06 -3.22336E-06 -3.44964E-06 -3.13042E-06 + -2.20322E-06 -7.95406E-07 7.95406E-07 2.20322E-06 3.13042E-06 3.44964E-06 + 3.22336E-06 2.64362E-06 1.93569E-06 1.27767E-06 7.64819E-07 4.16863E-07 + 2.07462E-07 9.44652E-08 3.94147E-08 1.50870E-08 5.30282E-09 1.71273E-09 + 5.08634E-10 1.38954E-10 3.49354E-11 8.08607E-12 + -3.31392E-11 -1.43176E-10 -5.69477E-10 -2.08454E-09 -7.01928E-09 -2.17326E-08 + -6.18312E-08 -1.61533E-07 -3.87148E-07 -8.50241E-07 -1.70843E-06 -3.13446E-06 + -5.23628E-06 -7.93306E-06 -1.08344E-05 -1.32103E-05 -1.41377E-05 -1.28294E-05 + -9.02947E-06 -3.25982E-06 3.25982E-06 9.02947E-06 1.28294E-05 1.41377E-05 + 1.32103E-05 1.08344E-05 7.93306E-06 5.23628E-06 3.13446E-06 1.70843E-06 + 8.50241E-07 3.87148E-07 1.61533E-07 6.18312E-08 2.17326E-08 7.01928E-09 + 2.08454E-09 5.69477E-10 1.43176E-10 3.31392E-11 + -1.20135E-10 -5.19037E-10 -2.06445E-09 -7.55679E-09 -2.54460E-08 -7.87842E-08 + -2.24148E-07 -5.85585E-07 -1.40347E-06 -3.08226E-06 -6.19336E-06 -1.13630E-05 + -1.89824E-05 -2.87586E-05 -3.92763E-05 -4.78896E-05 -5.12514E-05 -4.65087E-05 + -3.27333E-05 -1.18174E-05 1.18174E-05 3.27333E-05 4.65087E-05 5.12514E-05 + 4.78896E-05 3.92763E-05 2.87586E-05 1.89824E-05 1.13630E-05 6.19336E-06 + 3.08226E-06 1.40347E-06 5.85585E-07 2.24148E-07 7.87842E-08 2.54460E-08 + 7.55679E-09 2.06445E-09 5.19037E-10 1.20135E-10 + -3.85660E-10 -1.66622E-09 -6.62734E-09 -2.42590E-08 -8.16874E-08 -2.52915E-07 + -7.19566E-07 -1.87986E-06 -4.50546E-06 -9.89475E-06 -1.98820E-05 -3.64776E-05 + -6.09377E-05 -9.23216E-05 -1.26086E-04 -1.53736E-04 -1.64528E-04 -1.49303E-04 + -1.05081E-04 -3.79364E-05 3.79364E-05 1.05081E-04 1.49303E-04 1.64528E-04 + 1.53736E-04 1.26086E-04 9.23216E-05 6.09377E-05 3.64776E-05 1.98820E-05 + 9.89475E-06 4.50546E-06 1.87986E-06 7.19566E-07 2.52915E-07 8.16874E-08 + 2.42590E-08 6.62734E-09 1.66622E-09 3.85660E-10 + -1.09774E-09 -4.74271E-09 -1.88639E-08 -6.90502E-08 -2.32513E-07 -7.19892E-07 + -2.04816E-06 -5.35079E-06 -1.28243E-05 -2.81642E-05 -5.65919E-05 -1.03829E-04 + -1.73452E-04 -2.62782E-04 -3.58888E-04 -4.37593E-04 -4.68313E-04 -4.24979E-04 + -2.99106E-04 -1.07984E-04 1.07984E-04 2.99106E-04 4.24979E-04 4.68313E-04 + 4.37593E-04 3.58888E-04 2.62782E-04 1.73452E-04 1.03829E-04 5.65919E-05 + 2.81642E-05 1.28243E-05 5.35079E-06 2.04816E-06 7.19892E-07 2.32513E-07 + 6.90502E-08 1.88639E-08 4.74271E-09 1.09774E-09 + -2.77426E-09 -1.19861E-08 -4.76741E-08 -1.74508E-07 -5.87622E-07 -1.81935E-06 + -5.17623E-06 -1.35229E-05 -3.24102E-05 -7.11783E-05 -1.43022E-04 -2.62403E-04 + -4.38358E-04 -6.64122E-04 -9.07012E-04 -1.10594E-03 -1.18362E-03 -1.07415E-03 + -7.56040E-04 -2.72956E-04 2.72956E-04 7.56040E-04 1.07415E-03 1.18362E-03 + 1.10594E-03 9.07012E-04 6.64122E-04 4.38358E-04 2.62403E-04 1.43022E-04 + 7.11783E-05 3.24102E-05 1.35229E-05 5.17623E-06 1.81935E-06 5.87622E-07 + 1.74508E-07 4.76741E-08 1.19861E-08 2.77426E-09 + -6.23384E-09 -2.69330E-08 -1.07125E-07 -3.92124E-07 -1.32040E-06 -4.08813E-06 + -1.16311E-05 -3.03862E-05 -7.28266E-05 -1.59940E-04 -3.21375E-04 -5.89627E-04 + -9.85007E-04 -1.49233E-03 -2.03822E-03 -2.48555E-03 -2.66077E-03 -2.41558E-03 + -1.70091E-03 -6.14260E-04 6.14260E-04 1.70091E-03 2.41558E-03 2.66077E-03 + 2.48555E-03 2.03822E-03 1.49233E-03 9.85007E-04 5.89627E-04 3.21375E-04 + 1.59940E-04 7.28266E-05 3.03862E-05 1.16311E-05 4.08813E-06 1.32040E-06 + 3.92124E-07 1.07125E-07 2.69330E-08 6.23384E-09 + -1.24693E-08 -5.38730E-08 -2.14278E-07 -7.84350E-07 -2.64115E-06 -8.17733E-06 + -2.32653E-05 -6.07803E-05 -1.45672E-04 -3.19921E-04 -6.42834E-04 -1.17941E-03 + -1.97032E-03 -2.98537E-03 -4.07851E-03 -4.97706E-03 -5.33529E-03 -4.85388E-03 + -3.42584E-03 -1.23916E-03 1.23916E-03 3.42584E-03 4.85388E-03 5.33529E-03 + 4.97706E-03 4.07851E-03 2.98537E-03 1.97032E-03 1.17941E-03 6.42834E-04 + 3.19921E-04 1.45672E-04 6.07803E-05 2.32653E-05 8.17733E-06 2.64115E-06 + 7.84350E-07 2.14278E-07 5.38730E-08 1.24693E-08 + -2.22180E-08 -9.59918E-08 -3.81803E-07 -1.39757E-06 -4.70604E-06 -1.45705E-05 + -4.14544E-05 -1.08299E-04 -2.59561E-04 -5.70040E-04 -1.14542E-03 -2.10154E-03 + -3.51114E-03 -5.32191E-03 -7.27917E-03 -8.90965E-03 -9.60861E-03 -8.82215E-03 + -6.28977E-03 -2.29057E-03 2.29057E-03 6.28977E-03 8.82215E-03 9.60861E-03 + 8.90965E-03 7.27917E-03 5.32191E-03 3.51114E-03 2.10154E-03 1.14542E-03 + 5.70040E-04 2.59561E-04 1.08299E-04 4.14544E-05 1.45705E-05 4.70604E-06 + 1.39757E-06 3.81803E-07 9.59918E-08 2.22180E-08 + -3.52517E-08 -1.52303E-07 -6.05779E-07 -2.21742E-06 -7.46672E-06 -2.31179E-05 + -6.57727E-05 -1.71831E-04 -4.11827E-04 -9.04442E-04 -1.81737E-03 -3.33461E-03 + -5.57302E-03 -8.45787E-03 -1.16160E-02 -1.43669E-02 -1.58150E-02 -1.49677E-02 + -1.10196E-02 -4.09789E-03 4.09789E-03 1.10196E-02 1.49677E-02 1.58150E-02 + 1.43669E-02 1.16160E-02 8.45787E-03 5.57302E-03 3.33461E-03 1.81737E-03 + 9.04442E-04 4.11827E-04 1.71831E-04 6.57727E-05 2.31179E-05 7.46672E-06 + 2.21742E-06 6.05779E-07 1.52303E-07 3.52517E-08 + -4.96848E-08 -2.14660E-07 -8.53803E-07 -3.12529E-06 -1.05238E-05 -3.25831E-05 + -9.27020E-05 -2.42183E-04 -5.80441E-04 -1.27475E-03 -2.56153E-03 -4.70086E-03 + -7.86325E-03 -1.19758E-02 -1.66341E-02 -2.11567E-02 -2.45328E-02 -2.49145E-02 + -1.96254E-02 -7.60113E-03 7.60113E-03 1.96254E-02 2.49145E-02 2.45328E-02 + 2.11567E-02 1.66341E-02 1.19758E-02 7.86325E-03 4.70086E-03 2.56153E-03 + 1.27475E-03 5.80441E-04 2.42183E-04 9.27020E-05 3.25831E-05 1.05238E-05 + 3.12529E-06 8.53803E-07 2.14660E-07 4.96848E-08 + -6.18208E-08 -2.67094E-07 -1.06235E-06 -3.88868E-06 -1.30944E-05 -4.05419E-05 + -1.15345E-04 -3.01339E-04 -7.22221E-04 -1.58614E-03 -3.18743E-03 -5.85163E-03 + -9.80627E-03 -1.50459E-02 -2.13864E-02 -2.87048E-02 -3.63941E-02 -4.10080E-02 + -3.53013E-02 -1.44185E-02 1.44185E-02 3.53013E-02 4.10080E-02 3.63941E-02 + 2.87048E-02 2.13864E-02 1.50459E-02 9.80627E-03 5.85163E-03 3.18743E-03 + 1.58614E-03 7.22221E-04 3.01339E-04 1.15345E-04 4.05419E-05 1.30944E-05 + 3.88868E-06 1.06235E-06 2.67094E-07 6.18208E-08 + -6.69688E-08 -2.89335E-07 -1.15082E-06 -4.21250E-06 -1.41848E-05 -4.39179E-05 + -1.24951E-04 -3.26432E-04 -7.82363E-04 -1.71824E-03 -3.45320E-03 -6.34301E-03 + -1.06588E-02 -1.65313E-02 -2.42694E-02 -3.48879E-02 -4.88038E-02 -6.13895E-02 + -6.10544E-02 -2.88404E-02 2.88404E-02 6.10544E-02 6.13895E-02 4.88038E-02 + 3.48879E-02 2.42694E-02 1.65313E-02 1.06588E-02 6.34301E-03 3.45320E-03 + 1.71824E-03 7.82363E-04 3.26432E-04 1.24951E-04 4.39179E-05 1.41848E-05 + 4.21250E-06 1.15082E-06 2.89335E-07 6.69688E-08 + -6.11782E-08 -2.64317E-07 -1.05131E-06 -3.84826E-06 -1.29583E-05 -4.01205E-05 + -1.14146E-04 -2.98207E-04 -7.14715E-04 -1.56969E-03 -3.15491E-03 -5.79808E-03 + -9.76800E-03 -1.53003E-02 -2.31062E-02 -3.50778E-02 -5.27142E-02 -7.45300E-02 + -9.59849E-02 -6.52687E-02 6.52687E-02 9.59849E-02 7.45300E-02 5.27142E-02 + 3.50778E-02 2.31062E-02 1.53003E-02 9.76800E-03 5.79808E-03 3.15491E-03 + 1.56969E-03 7.14715E-04 2.98207E-04 1.14146E-04 4.01205E-05 1.29583E-05 + 3.84826E-06 1.05131E-06 2.64317E-07 6.11782E-08 + -4.31985E-08 -1.86637E-07 -7.42340E-07 -2.71729E-06 -9.14995E-06 -2.83294E-05 + -8.05999E-05 -2.10566E-04 -5.04667E-04 -1.10838E-03 -2.22782E-03 -4.09530E-03 + -6.90780E-03 -1.08705E-02 -1.66268E-02 -2.58231E-02 -3.98546E-02 -5.83905E-02 + -7.97714E-02 -5.56363E-02 5.56363E-02 7.97714E-02 5.83905E-02 3.98546E-02 + 2.58231E-02 1.66268E-02 1.08705E-02 6.90780E-03 4.09530E-03 2.22782E-03 + 1.10838E-03 5.04667E-04 2.10566E-04 8.05999E-05 2.83294E-05 9.14995E-06 + 2.71729E-06 7.42340E-07 1.86637E-07 4.31985E-08 + -1.56153E-08 -6.74652E-08 -2.68340E-07 -9.82243E-07 -3.30751E-06 -1.02405E-05 + -2.91351E-05 -7.61153E-05 -1.82427E-04 -4.00656E-04 -8.05313E-04 -1.48041E-03 + -2.49737E-03 -3.93133E-03 -6.01754E-03 -9.35356E-03 -1.43769E-02 -1.99931E-02 + -2.30863E-02 -1.24981E-02 1.24981E-02 2.30863E-02 1.99931E-02 1.43769E-02 + 9.35356E-03 6.01754E-03 3.93133E-03 2.49737E-03 1.48041E-03 8.05313E-04 + 4.00656E-04 1.82427E-04 7.61153E-05 2.91351E-05 1.02405E-05 3.30751E-06 + 9.82243E-07 2.68340E-07 6.74652E-08 1.56153E-08 + 1.56153E-08 6.74652E-08 2.68340E-07 9.82243E-07 3.30751E-06 1.02405E-05 + 2.91351E-05 7.61153E-05 1.82427E-04 4.00656E-04 8.05313E-04 1.48041E-03 + 2.49737E-03 3.93133E-03 6.01754E-03 9.35356E-03 1.43769E-02 1.99931E-02 + 2.30863E-02 1.24981E-02 -1.24981E-02 -2.30863E-02 -1.99931E-02 -1.43769E-02 + -9.35356E-03 -6.01754E-03 -3.93133E-03 -2.49737E-03 -1.48041E-03 -8.05313E-04 + -4.00656E-04 -1.82427E-04 -7.61153E-05 -2.91351E-05 -1.02405E-05 -3.30751E-06 + -9.82243E-07 -2.68340E-07 -6.74652E-08 -1.56153E-08 + 4.31985E-08 1.86637E-07 7.42340E-07 2.71729E-06 9.14995E-06 2.83294E-05 + 8.05999E-05 2.10566E-04 5.04667E-04 1.10838E-03 2.22782E-03 4.09530E-03 + 6.90780E-03 1.08705E-02 1.66268E-02 2.58231E-02 3.98546E-02 5.83905E-02 + 7.97714E-02 5.56363E-02 -5.56363E-02 -7.97714E-02 -5.83905E-02 -3.98546E-02 + -2.58231E-02 -1.66268E-02 -1.08705E-02 -6.90780E-03 -4.09530E-03 -2.22782E-03 + -1.10838E-03 -5.04667E-04 -2.10566E-04 -8.05999E-05 -2.83294E-05 -9.14995E-06 + -2.71729E-06 -7.42340E-07 -1.86637E-07 -4.31985E-08 + 6.11782E-08 2.64317E-07 1.05131E-06 3.84826E-06 1.29583E-05 4.01205E-05 + 1.14146E-04 2.98207E-04 7.14715E-04 1.56969E-03 3.15491E-03 5.79808E-03 + 9.76800E-03 1.53003E-02 2.31062E-02 3.50778E-02 5.27142E-02 7.45300E-02 + 9.59849E-02 6.52687E-02 -6.52687E-02 -9.59849E-02 -7.45300E-02 -5.27142E-02 + -3.50778E-02 -2.31062E-02 -1.53003E-02 -9.76800E-03 -5.79808E-03 -3.15491E-03 + -1.56969E-03 -7.14715E-04 -2.98207E-04 -1.14146E-04 -4.01205E-05 -1.29583E-05 + -3.84826E-06 -1.05131E-06 -2.64317E-07 -6.11782E-08 + 6.69688E-08 2.89335E-07 1.15082E-06 4.21250E-06 1.41848E-05 4.39179E-05 + 1.24951E-04 3.26432E-04 7.82363E-04 1.71824E-03 3.45320E-03 6.34301E-03 + 1.06588E-02 1.65313E-02 2.42694E-02 3.48879E-02 4.88038E-02 6.13895E-02 + 6.10544E-02 2.88404E-02 -2.88404E-02 -6.10544E-02 -6.13895E-02 -4.88038E-02 + -3.48879E-02 -2.42694E-02 -1.65313E-02 -1.06588E-02 -6.34301E-03 -3.45320E-03 + -1.71824E-03 -7.82363E-04 -3.26432E-04 -1.24951E-04 -4.39179E-05 -1.41848E-05 + -4.21250E-06 -1.15082E-06 -2.89335E-07 -6.69688E-08 + 6.18208E-08 2.67094E-07 1.06235E-06 3.88868E-06 1.30944E-05 4.05419E-05 + 1.15345E-04 3.01339E-04 7.22221E-04 1.58614E-03 3.18743E-03 5.85163E-03 + 9.80627E-03 1.50459E-02 2.13864E-02 2.87048E-02 3.63941E-02 4.10080E-02 + 3.53013E-02 1.44185E-02 -1.44185E-02 -3.53013E-02 -4.10080E-02 -3.63941E-02 + -2.87048E-02 -2.13864E-02 -1.50459E-02 -9.80627E-03 -5.85163E-03 -3.18743E-03 + -1.58614E-03 -7.22221E-04 -3.01339E-04 -1.15345E-04 -4.05419E-05 -1.30944E-05 + -3.88868E-06 -1.06235E-06 -2.67094E-07 -6.18208E-08 + 4.96848E-08 2.14660E-07 8.53803E-07 3.12529E-06 1.05238E-05 3.25831E-05 + 9.27020E-05 2.42183E-04 5.80441E-04 1.27475E-03 2.56153E-03 4.70086E-03 + 7.86325E-03 1.19758E-02 1.66341E-02 2.11567E-02 2.45328E-02 2.49145E-02 + 1.96254E-02 7.60113E-03 -7.60113E-03 -1.96254E-02 -2.49145E-02 -2.45328E-02 + -2.11567E-02 -1.66341E-02 -1.19758E-02 -7.86325E-03 -4.70086E-03 -2.56153E-03 + -1.27475E-03 -5.80441E-04 -2.42183E-04 -9.27020E-05 -3.25831E-05 -1.05238E-05 + -3.12529E-06 -8.53803E-07 -2.14660E-07 -4.96848E-08 + 3.52517E-08 1.52303E-07 6.05779E-07 2.21742E-06 7.46672E-06 2.31179E-05 + 6.57727E-05 1.71831E-04 4.11827E-04 9.04442E-04 1.81737E-03 3.33461E-03 + 5.57302E-03 8.45787E-03 1.16160E-02 1.43669E-02 1.58150E-02 1.49677E-02 + 1.10196E-02 4.09789E-03 -4.09789E-03 -1.10196E-02 -1.49677E-02 -1.58150E-02 + -1.43669E-02 -1.16160E-02 -8.45787E-03 -5.57302E-03 -3.33461E-03 -1.81737E-03 + -9.04442E-04 -4.11827E-04 -1.71831E-04 -6.57727E-05 -2.31179E-05 -7.46672E-06 + -2.21742E-06 -6.05779E-07 -1.52303E-07 -3.52517E-08 + 2.22180E-08 9.59918E-08 3.81803E-07 1.39757E-06 4.70604E-06 1.45705E-05 + 4.14544E-05 1.08299E-04 2.59561E-04 5.70040E-04 1.14542E-03 2.10154E-03 + 3.51114E-03 5.32191E-03 7.27917E-03 8.90965E-03 9.60861E-03 8.82215E-03 + 6.28977E-03 2.29057E-03 -2.29057E-03 -6.28977E-03 -8.82215E-03 -9.60861E-03 + -8.90965E-03 -7.27917E-03 -5.32191E-03 -3.51114E-03 -2.10154E-03 -1.14542E-03 + -5.70040E-04 -2.59561E-04 -1.08299E-04 -4.14544E-05 -1.45705E-05 -4.70604E-06 + -1.39757E-06 -3.81803E-07 -9.59918E-08 -2.22180E-08 + 1.24693E-08 5.38730E-08 2.14278E-07 7.84350E-07 2.64115E-06 8.17733E-06 + 2.32653E-05 6.07803E-05 1.45672E-04 3.19921E-04 6.42834E-04 1.17941E-03 + 1.97032E-03 2.98537E-03 4.07851E-03 4.97706E-03 5.33529E-03 4.85388E-03 + 3.42584E-03 1.23916E-03 -1.23916E-03 -3.42584E-03 -4.85388E-03 -5.33529E-03 + -4.97706E-03 -4.07851E-03 -2.98537E-03 -1.97032E-03 -1.17941E-03 -6.42834E-04 + -3.19921E-04 -1.45672E-04 -6.07803E-05 -2.32653E-05 -8.17733E-06 -2.64115E-06 + -7.84350E-07 -2.14278E-07 -5.38730E-08 -1.24693E-08 + 6.23384E-09 2.69330E-08 1.07125E-07 3.92124E-07 1.32040E-06 4.08813E-06 + 1.16311E-05 3.03862E-05 7.28266E-05 1.59940E-04 3.21375E-04 5.89627E-04 + 9.85007E-04 1.49233E-03 2.03822E-03 2.48555E-03 2.66077E-03 2.41558E-03 + 1.70091E-03 6.14260E-04 -6.14260E-04 -1.70091E-03 -2.41558E-03 -2.66077E-03 + -2.48555E-03 -2.03822E-03 -1.49233E-03 -9.85007E-04 -5.89627E-04 -3.21375E-04 + -1.59940E-04 -7.28266E-05 -3.03862E-05 -1.16311E-05 -4.08813E-06 -1.32040E-06 + -3.92124E-07 -1.07125E-07 -2.69330E-08 -6.23384E-09 + 2.77426E-09 1.19861E-08 4.76741E-08 1.74508E-07 5.87622E-07 1.81935E-06 + 5.17623E-06 1.35229E-05 3.24102E-05 7.11783E-05 1.43022E-04 2.62403E-04 + 4.38358E-04 6.64122E-04 9.07012E-04 1.10594E-03 1.18362E-03 1.07415E-03 + 7.56040E-04 2.72956E-04 -2.72956E-04 -7.56040E-04 -1.07415E-03 -1.18362E-03 + -1.10594E-03 -9.07012E-04 -6.64122E-04 -4.38358E-04 -2.62403E-04 -1.43022E-04 + -7.11783E-05 -3.24102E-05 -1.35229E-05 -5.17623E-06 -1.81935E-06 -5.87622E-07 + -1.74508E-07 -4.76741E-08 -1.19861E-08 -2.77426E-09 + 1.09774E-09 4.74271E-09 1.88639E-08 6.90502E-08 2.32513E-07 7.19892E-07 + 2.04816E-06 5.35079E-06 1.28243E-05 2.81642E-05 5.65919E-05 1.03829E-04 + 1.73452E-04 2.62782E-04 3.58888E-04 4.37593E-04 4.68313E-04 4.24979E-04 + 2.99106E-04 1.07984E-04 -1.07984E-04 -2.99106E-04 -4.24979E-04 -4.68313E-04 + -4.37593E-04 -3.58888E-04 -2.62782E-04 -1.73452E-04 -1.03829E-04 -5.65919E-05 + -2.81642E-05 -1.28243E-05 -5.35079E-06 -2.04816E-06 -7.19892E-07 -2.32513E-07 + -6.90502E-08 -1.88639E-08 -4.74271E-09 -1.09774E-09 + 3.85660E-10 1.66622E-09 6.62734E-09 2.42590E-08 8.16874E-08 2.52915E-07 + 7.19566E-07 1.87986E-06 4.50546E-06 9.89475E-06 1.98820E-05 3.64776E-05 + 6.09377E-05 9.23216E-05 1.26086E-04 1.53736E-04 1.64528E-04 1.49303E-04 + 1.05081E-04 3.79364E-05 -3.79364E-05 -1.05081E-04 -1.49303E-04 -1.64528E-04 + -1.53736E-04 -1.26086E-04 -9.23216E-05 -6.09377E-05 -3.64776E-05 -1.98820E-05 + -9.89475E-06 -4.50546E-06 -1.87986E-06 -7.19566E-07 -2.52915E-07 -8.16874E-08 + -2.42590E-08 -6.62734E-09 -1.66622E-09 -3.85660E-10 + 1.20135E-10 5.19037E-10 2.06445E-09 7.55679E-09 2.54460E-08 7.87842E-08 + 2.24148E-07 5.85585E-07 1.40347E-06 3.08226E-06 6.19336E-06 1.13630E-05 + 1.89824E-05 2.87586E-05 3.92763E-05 4.78896E-05 5.12514E-05 4.65087E-05 + 3.27333E-05 1.18174E-05 -1.18174E-05 -3.27333E-05 -4.65087E-05 -5.12514E-05 + -4.78896E-05 -3.92763E-05 -2.87586E-05 -1.89824E-05 -1.13630E-05 -6.19336E-06 + -3.08226E-06 -1.40347E-06 -5.85585E-07 -2.24148E-07 -7.87842E-08 -2.54460E-08 + -7.55679E-09 -2.06445E-09 -5.19037E-10 -1.20135E-10 + 3.31392E-11 1.43176E-10 5.69477E-10 2.08454E-09 7.01928E-09 2.17326E-08 + 6.18312E-08 1.61533E-07 3.87148E-07 8.50241E-07 1.70843E-06 3.13446E-06 + 5.23628E-06 7.93306E-06 1.08344E-05 1.32103E-05 1.41377E-05 1.28294E-05 + 9.02947E-06 3.25982E-06 -3.25982E-06 -9.02947E-06 -1.28294E-05 -1.41377E-05 + -1.32103E-05 -1.08344E-05 -7.93306E-06 -5.23628E-06 -3.13446E-06 -1.70843E-06 + -8.50241E-07 -3.87148E-07 -1.61533E-07 -6.18312E-08 -2.17326E-08 -7.01928E-09 + -2.08454E-09 -5.69477E-10 -1.43176E-10 -3.31392E-11 + 8.08607E-12 3.49354E-11 1.38954E-10 5.08634E-10 1.71273E-09 5.30282E-09 + 1.50870E-08 3.94147E-08 9.44652E-08 2.07462E-07 4.16863E-07 7.64819E-07 + 1.27767E-06 1.93569E-06 2.64362E-06 3.22336E-06 3.44964E-06 3.13042E-06 + 2.20322E-06 7.95406E-07 -7.95406E-07 -2.20322E-06 -3.13042E-06 -3.44964E-06 + -3.22336E-06 -2.64362E-06 -1.93569E-06 -1.27767E-06 -7.64819E-07 -4.16863E-07 + -2.07462E-07 -9.44652E-08 -3.94147E-08 -1.50870E-08 -5.30282E-09 -1.71273E-09 + -5.08634E-10 -1.38954E-10 -3.49354E-11 -8.08607E-12 + 1.74359E-12 7.53310E-12 2.99626E-11 1.09676E-10 3.69314E-10 1.14344E-09 + 3.25320E-09 8.49896E-09 2.03695E-08 4.47348E-08 8.98880E-08 1.64917E-07 + 2.75503E-07 4.17392E-07 5.70041E-07 6.95051E-07 7.43843E-07 6.75009E-07 + 4.75079E-07 1.71513E-07 -1.71513E-07 -4.75079E-07 -6.75009E-07 -7.43843E-07 + -6.95051E-07 -5.70041E-07 -4.17392E-07 -2.75503E-07 -1.64917E-07 -8.98880E-08 + -4.47348E-08 -2.03695E-08 -8.49896E-09 -3.25320E-09 -1.14344E-09 -3.69314E-10 + -1.09676E-10 -2.99626E-11 -7.53310E-12 -1.74359E-12 + 3.31990E-13 1.43434E-12 5.70504E-12 2.08830E-11 7.03193E-11 2.17718E-10 + 6.19427E-10 1.61825E-09 3.87846E-09 8.51774E-09 1.71151E-08 3.14012E-08 + 5.24573E-08 7.94736E-08 1.08539E-07 1.32342E-07 1.41632E-07 1.28525E-07 + 9.04575E-08 3.26569E-08 -3.26569E-08 -9.04575E-08 -1.28525E-07 -1.41632E-07 + -1.32342E-07 -1.08539E-07 -7.94736E-08 -5.24573E-08 -3.14012E-08 -1.71151E-08 + -8.51774E-09 -3.87846E-09 -1.61825E-09 -6.19427E-10 -2.17718E-10 -7.03193E-11 + -2.08830E-11 -5.70504E-12 -1.43434E-12 -3.31990E-13 + 5.57824E-14 2.41005E-13 9.58588E-13 3.50885E-12 1.18154E-11 3.65819E-11 + 1.04079E-10 2.71905E-10 6.51676E-10 1.43119E-09 2.87577E-09 5.27617E-09 + 8.81411E-09 1.33535E-08 1.82372E-08 2.22366E-08 2.37976E-08 2.15954E-08 + 1.51991E-08 5.48717E-09 -5.48717E-09 -1.51991E-08 -2.15954E-08 -2.37976E-08 + -2.22366E-08 -1.82372E-08 -1.33535E-08 -8.81411E-09 -5.27617E-09 -2.87577E-09 + -1.43119E-09 -6.51676E-10 -2.71905E-10 -1.04079E-10 -3.65819E-11 -1.18154E-11 + -3.50885E-12 -9.58588E-13 -2.41005E-13 -5.57824E-14 + 8.26686E-15 3.57166E-14 1.42061E-13 5.20006E-13 1.75102E-12 5.42138E-12 + 1.54243E-11 4.02959E-11 9.65774E-11 2.12100E-10 4.26184E-10 7.81920E-10 + 1.30624E-09 1.97897E-09 2.70272E-09 3.29543E-09 3.52677E-09 3.20041E-09 + 2.25248E-09 8.13190E-10 -8.13190E-10 -2.25248E-09 -3.20041E-09 -3.52677E-09 + -3.29543E-09 -2.70272E-09 -1.97897E-09 -1.30624E-09 -7.81920E-10 -4.26184E-10 + -2.12100E-10 -9.65774E-11 -4.02959E-11 -1.54243E-11 -5.42138E-12 -1.75102E-12 + -5.20006E-13 -1.42061E-13 -3.57166E-14 -8.26686E-15 + -1.31663E-14 -5.68841E-14 -2.26254E-13 -8.28189E-13 -2.78877E-12 -8.63439E-12 + -2.45656E-11 -6.41775E-11 -1.53814E-10 -3.37802E-10 -6.78763E-10 -1.24533E-09 + -2.08038E-09 -3.15181E-09 -4.30450E-09 -5.24848E-09 -5.61692E-09 -5.09714E-09 + -3.58742E-09 -1.29513E-09 1.29513E-09 3.58742E-09 5.09714E-09 5.61692E-09 + 5.24848E-09 4.30450E-09 3.15181E-09 2.08038E-09 1.24533E-09 6.78763E-10 + 3.37802E-10 1.53814E-10 6.41775E-11 2.45656E-11 8.63439E-12 2.78877E-12 + 8.28189E-13 2.26254E-13 5.68841E-14 1.31663E-14 + -8.86339E-14 -3.82938E-13 -1.52312E-12 -5.57529E-12 -1.87737E-11 -5.81258E-11 + -1.65373E-10 -4.32036E-10 -1.03546E-09 -2.27405E-09 -4.56937E-09 -8.38342E-09 + -1.40049E-08 -2.12177E-08 -2.89775E-08 -3.53323E-08 -3.78126E-08 -3.43135E-08 + -2.41502E-08 -8.71869E-09 8.71869E-09 2.41502E-08 3.43135E-08 3.78126E-08 + 3.53323E-08 2.89775E-08 2.12177E-08 1.40049E-08 8.38342E-09 4.56937E-09 + 2.27405E-09 1.03546E-09 4.32036E-10 1.65373E-10 5.81258E-11 1.87737E-11 + 5.57529E-12 1.52312E-12 3.82938E-13 8.86339E-14 + -5.25924E-13 -2.27223E-12 -9.03768E-12 -3.30819E-11 -1.11397E-10 -3.44899E-10 + -9.81270E-10 -2.56356E-09 -6.14409E-09 -1.34934E-08 -2.71131E-08 -4.97444E-08 + -8.31005E-08 -1.25899E-07 -1.71943E-07 -2.09650E-07 -2.24367E-07 -2.03604E-07 + -1.43299E-07 -5.17337E-08 5.17337E-08 1.43299E-07 2.03604E-07 2.24367E-07 + 2.09650E-07 1.71943E-07 1.25899E-07 8.31005E-08 4.97444E-08 2.71131E-08 + 1.34934E-08 6.14409E-09 2.56356E-09 9.81270E-10 3.44899E-10 1.11397E-10 + 3.30819E-11 9.03768E-12 2.27223E-12 5.25924E-13 + -2.75157E-12 -1.18880E-11 -4.72840E-11 -1.73080E-10 -5.82815E-10 -1.80447E-09 + -5.13388E-09 -1.34122E-08 -3.21451E-08 -7.05960E-08 -1.41852E-07 -2.60256E-07 + -4.34772E-07 -6.58686E-07 -8.99583E-07 -1.09686E-06 -1.17386E-06 -1.06523E-06 + -7.49722E-07 -2.70664E-07 2.70664E-07 7.49722E-07 1.06523E-06 1.17386E-06 + 1.09686E-06 8.99583E-07 6.58686E-07 4.34772E-07 2.60256E-07 1.41852E-07 + 7.05960E-08 3.21451E-08 1.34122E-08 5.13388E-09 1.80447E-09 5.82815E-10 + 1.73080E-10 4.72840E-11 1.18880E-11 2.75157E-12 + -1.26987E-11 -5.48642E-11 -2.18220E-10 -7.98782E-10 -2.68974E-09 -8.32780E-09 + -2.36934E-08 -6.18986E-08 -1.48353E-07 -3.25807E-07 -6.54662E-07 -1.20111E-06 + -2.00651E-06 -3.03990E-06 -4.15166E-06 -5.06212E-06 -5.41747E-06 -4.91615E-06 + -3.46004E-06 -1.24914E-06 1.24914E-06 3.46004E-06 4.91615E-06 5.41747E-06 + 5.06212E-06 4.15166E-06 3.03990E-06 2.00651E-06 1.20111E-06 6.54662E-07 + 3.25807E-07 1.48353E-07 6.18986E-08 2.36934E-08 8.32780E-09 2.68974E-09 + 7.98782E-10 2.18220E-10 5.48642E-11 1.26987E-11 + -5.17249E-11 -2.23475E-10 -8.88862E-10 -3.25363E-09 -1.09560E-08 -3.39211E-08 + -9.65086E-08 -2.52128E-07 -6.04275E-07 -1.32709E-06 -2.66659E-06 -4.89239E-06 + -8.17299E-06 -1.23822E-05 -1.69107E-05 -2.06192E-05 -2.20666E-05 -2.00246E-05 + -1.40935E-05 -5.08805E-06 5.08805E-06 1.40935E-05 2.00246E-05 2.20666E-05 + 2.06192E-05 1.69107E-05 1.23822E-05 8.17299E-06 4.89239E-06 2.66659E-06 + 1.32709E-06 6.04275E-07 2.52128E-07 9.65086E-08 3.39211E-08 1.09560E-08 + 3.25363E-09 8.88862E-10 2.23475E-10 5.17249E-11 + -1.86076E-10 -8.03930E-10 -3.19760E-09 -1.17046E-08 -3.94130E-08 -1.22028E-07 + -3.47180E-07 -9.07005E-07 -2.17382E-06 -4.77408E-06 -9.59280E-06 -1.75999E-05 + -2.94016E-05 -4.45439E-05 -6.08346E-05 -7.41756E-05 -7.93826E-05 -7.20367E-05 + -5.07002E-05 -1.83038E-05 1.83038E-05 5.07002E-05 7.20367E-05 7.93826E-05 + 7.41756E-05 6.08346E-05 4.45439E-05 2.94016E-05 1.75999E-05 9.59280E-06 + 4.77408E-06 2.17382E-06 9.07005E-07 3.47180E-07 1.22028E-07 3.94130E-08 + 1.17046E-08 3.19760E-09 8.03930E-10 1.86076E-10 + -5.91673E-10 -2.55629E-09 -1.01676E-08 -3.72177E-08 -1.25323E-07 -3.88018E-07 + -1.10395E-06 -2.88405E-06 -6.91220E-06 -1.51804E-05 -3.05027E-05 -5.59633E-05 + -9.34896E-05 -1.41638E-04 -1.93439E-04 -2.35860E-04 -2.52417E-04 -2.29059E-04 + -1.61214E-04 -5.82016E-05 5.82016E-05 1.61214E-04 2.29059E-04 2.52417E-04 + 2.35860E-04 1.93439E-04 1.41638E-04 9.34896E-05 5.59633E-05 3.05027E-05 + 1.51804E-05 6.91220E-06 2.88405E-06 1.10395E-06 3.88018E-07 1.25323E-07 + 3.72177E-08 1.01676E-08 2.55629E-09 5.91673E-10 + -1.66455E-09 -7.19161E-09 -2.86043E-08 -1.04704E-07 -3.52572E-07 -1.09161E-06 + -3.10573E-06 -8.11368E-06 -1.94461E-05 -4.27068E-05 -8.58131E-05 -1.57441E-04 + -2.63014E-04 -3.98471E-04 -5.44202E-04 -6.63549E-04 -7.10137E-04 -6.44434E-04 + -4.53568E-04 -1.63749E-04 1.63749E-04 4.53568E-04 6.44434E-04 7.10137E-04 + 6.63549E-04 5.44202E-04 3.98471E-04 2.63014E-04 1.57441E-04 8.58131E-05 + 4.27068E-05 1.94461E-05 8.11368E-06 3.10573E-06 1.09161E-06 3.52572E-07 + 1.04704E-07 2.86043E-08 7.19161E-09 1.66455E-09 + -4.14778E-09 -1.79203E-08 -7.12771E-08 -2.60905E-07 -8.78549E-07 -2.72010E-06 + -7.73894E-06 -2.02179E-05 -4.84563E-05 -1.06418E-04 -2.13832E-04 -3.92317E-04 + -6.55387E-04 -9.92930E-04 -1.35610E-03 -1.65360E-03 -1.76989E-03 -1.60641E-03 + -1.13084E-03 -4.08314E-04 4.08314E-04 1.13084E-03 1.60641E-03 1.76989E-03 + 1.65360E-03 1.35610E-03 9.92930E-04 6.55387E-04 3.92317E-04 2.13832E-04 + 1.06418E-04 4.84563E-05 2.02179E-05 7.73894E-06 2.72010E-06 8.78549E-07 + 2.60905E-07 7.12771E-08 1.79203E-08 4.14778E-09 + -9.16551E-09 -3.95991E-08 -1.57504E-07 -5.76533E-07 -1.94136E-06 -6.01071E-06 + -1.71010E-05 -4.46763E-05 -1.07076E-04 -2.35156E-04 -4.72512E-04 -8.66921E-04 + -1.44826E-03 -2.19426E-03 -2.99731E-03 -3.65635E-03 -3.91669E-03 -3.55932E-03 + -2.50904E-03 -9.06778E-04 9.06778E-04 2.50904E-03 3.55932E-03 3.91669E-03 + 3.65635E-03 2.99731E-03 2.19426E-03 1.44826E-03 8.66921E-04 4.72512E-04 + 2.35156E-04 1.07076E-04 4.46763E-05 1.71010E-05 6.01071E-06 1.94136E-06 + 5.76533E-07 1.57504E-07 3.95991E-08 9.16551E-09 + -1.79816E-08 -7.76885E-08 -3.09003E-07 -1.13109E-06 -3.80871E-06 -1.17923E-05 + -3.35501E-05 -8.76493E-05 -2.10069E-04 -4.61348E-04 -9.27013E-04 -1.70082E-03 + -2.84153E-03 -4.30633E-03 -5.88723E-03 -7.19684E-03 -7.74158E-03 -7.07992E-03 + -5.02555E-03 -1.82475E-03 1.82475E-03 5.02555E-03 7.07992E-03 7.74158E-03 + 7.19684E-03 5.88723E-03 4.30633E-03 2.84153E-03 1.70082E-03 9.27013E-04 + 4.61348E-04 2.10069E-04 8.76493E-05 3.35501E-05 1.17923E-05 3.80871E-06 + 1.13109E-06 3.09003E-07 7.76885E-08 1.79816E-08 + -3.13487E-08 -1.35441E-07 -5.38709E-07 -1.97191E-06 -6.64003E-06 -2.05584E-05 + -5.84906E-05 -1.52806E-04 -3.66231E-04 -8.04305E-04 -1.61615E-03 -2.96533E-03 + -4.95530E-03 -7.51684E-03 -1.03075E-02 -1.26971E-02 -1.38642E-02 -1.29636E-02 + -9.42202E-03 -3.47452E-03 3.47452E-03 9.42202E-03 1.29636E-02 1.38642E-02 + 1.26971E-02 1.03075E-02 7.51684E-03 4.95530E-03 2.96533E-03 1.61615E-03 + 8.04305E-04 3.66231E-04 1.52806E-04 5.84906E-05 2.05584E-05 6.64003E-06 + 1.97191E-06 5.38709E-07 1.35441E-07 3.13487E-08 + -4.85736E-08 -2.09860E-07 -8.34708E-07 -3.05540E-06 -1.02885E-05 -3.18544E-05 + -9.06288E-05 -2.36767E-04 -5.67460E-04 -1.24624E-03 -2.50421E-03 -4.59533E-03 + -7.68390E-03 -1.16849E-02 -1.61504E-02 -2.02898E-02 -2.29930E-02 -2.26400E-02 + -1.73202E-02 -6.59276E-03 6.59276E-03 1.73202E-02 2.26400E-02 2.29930E-02 + 2.02898E-02 1.61504E-02 1.16849E-02 7.68390E-03 4.59533E-03 2.50421E-03 + 1.24624E-03 5.67460E-04 2.36767E-04 9.06288E-05 3.18544E-05 1.02885E-05 + 3.05540E-06 8.34708E-07 2.09860E-07 4.85736E-08 + -6.67917E-08 -2.88570E-07 -1.14778E-06 -4.20136E-06 -1.41473E-05 -4.38018E-05 + -1.24620E-04 -3.25569E-04 -7.80293E-04 -1.71367E-03 -3.44360E-03 -6.32068E-03 + -1.05817E-02 -1.61704E-02 -2.26959E-02 -2.95803E-02 -3.57438E-02 -3.81185E-02 + -3.12835E-02 -1.23947E-02 1.23947E-02 3.12835E-02 3.81185E-02 3.57438E-02 + 2.95803E-02 2.26959E-02 1.61704E-02 1.05817E-02 6.32068E-03 3.44360E-03 + 1.71367E-03 7.80293E-04 3.25569E-04 1.24620E-04 4.38018E-05 1.41473E-05 + 4.20136E-06 1.14778E-06 2.88570E-07 6.67917E-08 + -8.11049E-08 -3.50410E-07 -1.39374E-06 -5.10170E-06 -1.71790E-05 -5.31884E-05 + -1.51326E-04 -3.95337E-04 -9.47507E-04 -2.08092E-03 -4.18184E-03 -7.67855E-03 + -1.28790E-02 -1.98281E-02 -2.84741E-02 -3.90713E-02 -5.11538E-02 -5.94533E-02 + -5.22190E-02 -2.14979E-02 2.14979E-02 5.22190E-02 5.94533E-02 5.11538E-02 + 3.90713E-02 2.84741E-02 1.98281E-02 1.28790E-02 7.67855E-03 4.18184E-03 + 2.08092E-03 9.47507E-04 3.95337E-04 1.51326E-04 5.31884E-05 1.71790E-05 + 5.10170E-06 1.39374E-06 3.50410E-07 8.11049E-08 + -8.59056E-08 -3.71151E-07 -1.47624E-06 -5.40367E-06 -1.81958E-05 -5.63366E-05 + -1.60283E-04 -4.18738E-04 -1.00359E-03 -2.20411E-03 -4.42972E-03 -8.13731E-03 + -1.36789E-02 -2.12452E-02 -3.13159E-02 -4.53690E-02 -6.40207E-02 -8.03976E-02 + -7.72116E-02 -3.46685E-02 3.46685E-02 7.72116E-02 8.03976E-02 6.40207E-02 + 4.53690E-02 3.13159E-02 2.12452E-02 1.36789E-02 8.13731E-03 4.42972E-03 + 2.20411E-03 1.00359E-03 4.18738E-04 1.60283E-04 5.63366E-05 1.81958E-05 + 5.40367E-06 1.47624E-06 3.71151E-07 8.59056E-08 + -7.70106E-08 -3.32720E-07 -1.32338E-06 -4.84415E-06 -1.63118E-05 -5.05033E-05 + -1.43687E-04 -3.75380E-04 -8.99677E-04 -1.97591E-03 -3.97132E-03 -7.29794E-03 + -1.22905E-02 -1.92265E-02 -2.89307E-02 -4.36208E-02 -6.48323E-02 -8.79975E-02 + -1.00621E-01 -5.59169E-02 5.59169E-02 1.00621E-01 8.79975E-02 6.48323E-02 + 4.36208E-02 2.89307E-02 1.92265E-02 1.22905E-02 7.29794E-03 3.97132E-03 + 1.97591E-03 8.99677E-04 3.75380E-04 1.43687E-04 5.05033E-05 1.63118E-05 + 4.84415E-06 1.32338E-06 3.32720E-07 7.70106E-08 + -5.36408E-08 -2.31752E-07 -9.21784E-07 -3.37413E-06 -1.13617E-05 -3.51774E-05 + -1.00083E-04 -2.61466E-04 -6.26659E-04 -1.37630E-03 -2.76626E-03 -5.08427E-03 + -8.56929E-03 -1.34460E-02 -2.04042E-02 -3.12453E-02 -4.73167E-02 -6.59220E-02 + -7.93155E-02 -4.59465E-02 4.59465E-02 7.93155E-02 6.59220E-02 4.73167E-02 + 3.12453E-02 2.04042E-02 1.34460E-02 8.56929E-03 5.08427E-03 2.76626E-03 + 1.37630E-03 6.26659E-04 2.61466E-04 1.00083E-04 3.51774E-05 1.13617E-05 + 3.37413E-06 9.21784E-07 2.31752E-07 5.36408E-08 + -1.92515E-08 -8.31751E-08 -3.30825E-07 -1.21097E-06 -4.07770E-06 -1.26251E-05 + -3.59195E-05 -9.38394E-05 -2.24906E-04 -4.93949E-04 -9.92802E-04 -1.82473E-03 + -3.07550E-03 -4.82551E-03 -7.32093E-03 -1.12027E-02 -1.69023E-02 -2.27868E-02 + -2.43873E-02 -1.22277E-02 1.22277E-02 2.43873E-02 2.27868E-02 1.69023E-02 + 1.12027E-02 7.32093E-03 4.82551E-03 3.07550E-03 1.82473E-03 9.92802E-04 + 4.93949E-04 2.24906E-04 9.38394E-05 3.59195E-05 1.26251E-05 4.07770E-06 + 1.21097E-06 3.30825E-07 8.31751E-08 1.92515E-08 + 1.92515E-08 8.31751E-08 3.30825E-07 1.21097E-06 4.07770E-06 1.26251E-05 + 3.59195E-05 9.38394E-05 2.24906E-04 4.93949E-04 9.92802E-04 1.82473E-03 + 3.07550E-03 4.82551E-03 7.32093E-03 1.12027E-02 1.69023E-02 2.27868E-02 + 2.43873E-02 1.22277E-02 -1.22277E-02 -2.43873E-02 -2.27868E-02 -1.69023E-02 + -1.12027E-02 -7.32093E-03 -4.82551E-03 -3.07550E-03 -1.82473E-03 -9.92802E-04 + -4.93949E-04 -2.24906E-04 -9.38394E-05 -3.59195E-05 -1.26251E-05 -4.07770E-06 + -1.21097E-06 -3.30825E-07 -8.31751E-08 -1.92515E-08 + 5.36408E-08 2.31752E-07 9.21784E-07 3.37413E-06 1.13617E-05 3.51774E-05 + 1.00083E-04 2.61466E-04 6.26659E-04 1.37630E-03 2.76626E-03 5.08427E-03 + 8.56929E-03 1.34460E-02 2.04042E-02 3.12453E-02 4.73167E-02 6.59220E-02 + 7.93155E-02 4.59465E-02 -4.59465E-02 -7.93155E-02 -6.59220E-02 -4.73167E-02 + -3.12453E-02 -2.04042E-02 -1.34460E-02 -8.56929E-03 -5.08427E-03 -2.76626E-03 + -1.37630E-03 -6.26659E-04 -2.61466E-04 -1.00083E-04 -3.51774E-05 -1.13617E-05 + -3.37413E-06 -9.21784E-07 -2.31752E-07 -5.36408E-08 + 7.70106E-08 3.32720E-07 1.32338E-06 4.84415E-06 1.63118E-05 5.05033E-05 + 1.43687E-04 3.75380E-04 8.99677E-04 1.97591E-03 3.97132E-03 7.29794E-03 + 1.22905E-02 1.92265E-02 2.89307E-02 4.36208E-02 6.48323E-02 8.79975E-02 + 1.00621E-01 5.59169E-02 -5.59169E-02 -1.00621E-01 -8.79975E-02 -6.48323E-02 + -4.36208E-02 -2.89307E-02 -1.92265E-02 -1.22905E-02 -7.29794E-03 -3.97132E-03 + -1.97591E-03 -8.99677E-04 -3.75380E-04 -1.43687E-04 -5.05033E-05 -1.63118E-05 + -4.84415E-06 -1.32338E-06 -3.32720E-07 -7.70106E-08 + 8.59056E-08 3.71151E-07 1.47624E-06 5.40367E-06 1.81958E-05 5.63366E-05 + 1.60283E-04 4.18738E-04 1.00359E-03 2.20411E-03 4.42972E-03 8.13731E-03 + 1.36789E-02 2.12452E-02 3.13159E-02 4.53690E-02 6.40207E-02 8.03976E-02 + 7.72116E-02 3.46685E-02 -3.46685E-02 -7.72116E-02 -8.03976E-02 -6.40207E-02 + -4.53690E-02 -3.13159E-02 -2.12452E-02 -1.36789E-02 -8.13731E-03 -4.42972E-03 + -2.20411E-03 -1.00359E-03 -4.18738E-04 -1.60283E-04 -5.63366E-05 -1.81958E-05 + -5.40367E-06 -1.47624E-06 -3.71151E-07 -8.59056E-08 + 8.11049E-08 3.50410E-07 1.39374E-06 5.10170E-06 1.71790E-05 5.31884E-05 + 1.51326E-04 3.95337E-04 9.47507E-04 2.08092E-03 4.18184E-03 7.67855E-03 + 1.28790E-02 1.98281E-02 2.84741E-02 3.90713E-02 5.11538E-02 5.94533E-02 + 5.22190E-02 2.14979E-02 -2.14979E-02 -5.22190E-02 -5.94533E-02 -5.11538E-02 + -3.90713E-02 -2.84741E-02 -1.98281E-02 -1.28790E-02 -7.67855E-03 -4.18184E-03 + -2.08092E-03 -9.47507E-04 -3.95337E-04 -1.51326E-04 -5.31884E-05 -1.71790E-05 + -5.10170E-06 -1.39374E-06 -3.50410E-07 -8.11049E-08 + 6.67917E-08 2.88570E-07 1.14778E-06 4.20136E-06 1.41473E-05 4.38018E-05 + 1.24620E-04 3.25569E-04 7.80293E-04 1.71367E-03 3.44360E-03 6.32068E-03 + 1.05817E-02 1.61704E-02 2.26959E-02 2.95803E-02 3.57438E-02 3.81185E-02 + 3.12835E-02 1.23947E-02 -1.23947E-02 -3.12835E-02 -3.81185E-02 -3.57438E-02 + -2.95803E-02 -2.26959E-02 -1.61704E-02 -1.05817E-02 -6.32068E-03 -3.44360E-03 + -1.71367E-03 -7.80293E-04 -3.25569E-04 -1.24620E-04 -4.38018E-05 -1.41473E-05 + -4.20136E-06 -1.14778E-06 -2.88570E-07 -6.67917E-08 + 4.85736E-08 2.09860E-07 8.34708E-07 3.05540E-06 1.02885E-05 3.18544E-05 + 9.06288E-05 2.36767E-04 5.67460E-04 1.24624E-03 2.50421E-03 4.59533E-03 + 7.68390E-03 1.16849E-02 1.61504E-02 2.02898E-02 2.29930E-02 2.26400E-02 + 1.73202E-02 6.59276E-03 -6.59276E-03 -1.73202E-02 -2.26400E-02 -2.29930E-02 + -2.02898E-02 -1.61504E-02 -1.16849E-02 -7.68390E-03 -4.59533E-03 -2.50421E-03 + -1.24624E-03 -5.67460E-04 -2.36767E-04 -9.06288E-05 -3.18544E-05 -1.02885E-05 + -3.05540E-06 -8.34708E-07 -2.09860E-07 -4.85736E-08 + 3.13487E-08 1.35441E-07 5.38709E-07 1.97191E-06 6.64003E-06 2.05584E-05 + 5.84906E-05 1.52806E-04 3.66231E-04 8.04305E-04 1.61615E-03 2.96533E-03 + 4.95530E-03 7.51684E-03 1.03075E-02 1.26971E-02 1.38642E-02 1.29636E-02 + 9.42202E-03 3.47452E-03 -3.47452E-03 -9.42202E-03 -1.29636E-02 -1.38642E-02 + -1.26971E-02 -1.03075E-02 -7.51684E-03 -4.95530E-03 -2.96533E-03 -1.61615E-03 + -8.04305E-04 -3.66231E-04 -1.52806E-04 -5.84906E-05 -2.05584E-05 -6.64003E-06 + -1.97191E-06 -5.38709E-07 -1.35441E-07 -3.13487E-08 + 1.79816E-08 7.76885E-08 3.09003E-07 1.13109E-06 3.80871E-06 1.17923E-05 + 3.35501E-05 8.76493E-05 2.10069E-04 4.61348E-04 9.27013E-04 1.70082E-03 + 2.84153E-03 4.30633E-03 5.88723E-03 7.19684E-03 7.74158E-03 7.07992E-03 + 5.02555E-03 1.82475E-03 -1.82475E-03 -5.02555E-03 -7.07992E-03 -7.74158E-03 + -7.19684E-03 -5.88723E-03 -4.30633E-03 -2.84153E-03 -1.70082E-03 -9.27013E-04 + -4.61348E-04 -2.10069E-04 -8.76493E-05 -3.35501E-05 -1.17923E-05 -3.80871E-06 + -1.13109E-06 -3.09003E-07 -7.76885E-08 -1.79816E-08 + 9.16551E-09 3.95991E-08 1.57504E-07 5.76533E-07 1.94136E-06 6.01071E-06 + 1.71010E-05 4.46763E-05 1.07076E-04 2.35156E-04 4.72512E-04 8.66921E-04 + 1.44826E-03 2.19426E-03 2.99731E-03 3.65635E-03 3.91669E-03 3.55932E-03 + 2.50904E-03 9.06778E-04 -9.06778E-04 -2.50904E-03 -3.55932E-03 -3.91669E-03 + -3.65635E-03 -2.99731E-03 -2.19426E-03 -1.44826E-03 -8.66921E-04 -4.72512E-04 + -2.35156E-04 -1.07076E-04 -4.46763E-05 -1.71010E-05 -6.01071E-06 -1.94136E-06 + -5.76533E-07 -1.57504E-07 -3.95991E-08 -9.16551E-09 + 4.14778E-09 1.79203E-08 7.12771E-08 2.60905E-07 8.78549E-07 2.72010E-06 + 7.73894E-06 2.02179E-05 4.84563E-05 1.06418E-04 2.13832E-04 3.92317E-04 + 6.55387E-04 9.92930E-04 1.35610E-03 1.65360E-03 1.76989E-03 1.60641E-03 + 1.13084E-03 4.08314E-04 -4.08314E-04 -1.13084E-03 -1.60641E-03 -1.76989E-03 + -1.65360E-03 -1.35610E-03 -9.92930E-04 -6.55387E-04 -3.92317E-04 -2.13832E-04 + -1.06418E-04 -4.84563E-05 -2.02179E-05 -7.73894E-06 -2.72010E-06 -8.78549E-07 + -2.60905E-07 -7.12771E-08 -1.79203E-08 -4.14778E-09 + 1.66455E-09 7.19161E-09 2.86043E-08 1.04704E-07 3.52572E-07 1.09161E-06 + 3.10573E-06 8.11368E-06 1.94461E-05 4.27068E-05 8.58131E-05 1.57441E-04 + 2.63014E-04 3.98471E-04 5.44202E-04 6.63549E-04 7.10137E-04 6.44434E-04 + 4.53568E-04 1.63749E-04 -1.63749E-04 -4.53568E-04 -6.44434E-04 -7.10137E-04 + -6.63549E-04 -5.44202E-04 -3.98471E-04 -2.63014E-04 -1.57441E-04 -8.58131E-05 + -4.27068E-05 -1.94461E-05 -8.11368E-06 -3.10573E-06 -1.09161E-06 -3.52572E-07 + -1.04704E-07 -2.86043E-08 -7.19161E-09 -1.66455E-09 + 5.91673E-10 2.55629E-09 1.01676E-08 3.72177E-08 1.25323E-07 3.88018E-07 + 1.10395E-06 2.88405E-06 6.91220E-06 1.51804E-05 3.05027E-05 5.59633E-05 + 9.34896E-05 1.41638E-04 1.93439E-04 2.35860E-04 2.52417E-04 2.29059E-04 + 1.61214E-04 5.82016E-05 -5.82016E-05 -1.61214E-04 -2.29059E-04 -2.52417E-04 + -2.35860E-04 -1.93439E-04 -1.41638E-04 -9.34896E-05 -5.59633E-05 -3.05027E-05 + -1.51804E-05 -6.91220E-06 -2.88405E-06 -1.10395E-06 -3.88018E-07 -1.25323E-07 + -3.72177E-08 -1.01676E-08 -2.55629E-09 -5.91673E-10 + 1.86076E-10 8.03930E-10 3.19760E-09 1.17046E-08 3.94130E-08 1.22028E-07 + 3.47180E-07 9.07005E-07 2.17382E-06 4.77408E-06 9.59280E-06 1.75999E-05 + 2.94016E-05 4.45439E-05 6.08346E-05 7.41756E-05 7.93826E-05 7.20367E-05 + 5.07002E-05 1.83038E-05 -1.83038E-05 -5.07002E-05 -7.20367E-05 -7.93826E-05 + -7.41756E-05 -6.08346E-05 -4.45439E-05 -2.94016E-05 -1.75999E-05 -9.59280E-06 + -4.77408E-06 -2.17382E-06 -9.07005E-07 -3.47180E-07 -1.22028E-07 -3.94130E-08 + -1.17046E-08 -3.19760E-09 -8.03930E-10 -1.86076E-10 + 5.17249E-11 2.23475E-10 8.88862E-10 3.25363E-09 1.09560E-08 3.39211E-08 + 9.65086E-08 2.52128E-07 6.04275E-07 1.32709E-06 2.66659E-06 4.89239E-06 + 8.17299E-06 1.23822E-05 1.69107E-05 2.06192E-05 2.20666E-05 2.00246E-05 + 1.40935E-05 5.08805E-06 -5.08805E-06 -1.40935E-05 -2.00246E-05 -2.20666E-05 + -2.06192E-05 -1.69107E-05 -1.23822E-05 -8.17299E-06 -4.89239E-06 -2.66659E-06 + -1.32709E-06 -6.04275E-07 -2.52128E-07 -9.65086E-08 -3.39211E-08 -1.09560E-08 + -3.25363E-09 -8.88862E-10 -2.23475E-10 -5.17249E-11 + 1.26987E-11 5.48642E-11 2.18220E-10 7.98782E-10 2.68974E-09 8.32780E-09 + 2.36934E-08 6.18986E-08 1.48353E-07 3.25807E-07 6.54662E-07 1.20111E-06 + 2.00651E-06 3.03990E-06 4.15166E-06 5.06212E-06 5.41747E-06 4.91615E-06 + 3.46004E-06 1.24914E-06 -1.24914E-06 -3.46004E-06 -4.91615E-06 -5.41747E-06 + -5.06212E-06 -4.15166E-06 -3.03990E-06 -2.00651E-06 -1.20111E-06 -6.54662E-07 + -3.25807E-07 -1.48353E-07 -6.18986E-08 -2.36934E-08 -8.32780E-09 -2.68974E-09 + -7.98782E-10 -2.18220E-10 -5.48642E-11 -1.26987E-11 + 2.75157E-12 1.18880E-11 4.72840E-11 1.73080E-10 5.82815E-10 1.80447E-09 + 5.13388E-09 1.34122E-08 3.21451E-08 7.05960E-08 1.41852E-07 2.60256E-07 + 4.34772E-07 6.58686E-07 8.99583E-07 1.09686E-06 1.17386E-06 1.06523E-06 + 7.49722E-07 2.70664E-07 -2.70664E-07 -7.49722E-07 -1.06523E-06 -1.17386E-06 + -1.09686E-06 -8.99583E-07 -6.58686E-07 -4.34772E-07 -2.60256E-07 -1.41852E-07 + -7.05960E-08 -3.21451E-08 -1.34122E-08 -5.13388E-09 -1.80447E-09 -5.82815E-10 + -1.73080E-10 -4.72840E-11 -1.18880E-11 -2.75157E-12 + 5.25924E-13 2.27223E-12 9.03768E-12 3.30819E-11 1.11397E-10 3.44899E-10 + 9.81270E-10 2.56356E-09 6.14409E-09 1.34934E-08 2.71131E-08 4.97444E-08 + 8.31005E-08 1.25899E-07 1.71943E-07 2.09650E-07 2.24367E-07 2.03604E-07 + 1.43299E-07 5.17337E-08 -5.17337E-08 -1.43299E-07 -2.03604E-07 -2.24367E-07 + -2.09650E-07 -1.71943E-07 -1.25899E-07 -8.31005E-08 -4.97444E-08 -2.71131E-08 + -1.34934E-08 -6.14409E-09 -2.56356E-09 -9.81270E-10 -3.44899E-10 -1.11397E-10 + -3.30819E-11 -9.03768E-12 -2.27223E-12 -5.25924E-13 + 8.86339E-14 3.82938E-13 1.52312E-12 5.57529E-12 1.87737E-11 5.81258E-11 + 1.65373E-10 4.32036E-10 1.03546E-09 2.27405E-09 4.56937E-09 8.38342E-09 + 1.40049E-08 2.12177E-08 2.89775E-08 3.53323E-08 3.78126E-08 3.43135E-08 + 2.41502E-08 8.71869E-09 -8.71869E-09 -2.41502E-08 -3.43135E-08 -3.78126E-08 + -3.53323E-08 -2.89775E-08 -2.12177E-08 -1.40049E-08 -8.38342E-09 -4.56937E-09 + -2.27405E-09 -1.03546E-09 -4.32036E-10 -1.65373E-10 -5.81258E-11 -1.87737E-11 + -5.57529E-12 -1.52312E-12 -3.82938E-13 -8.86339E-14 + 1.31663E-14 5.68841E-14 2.26254E-13 8.28189E-13 2.78877E-12 8.63439E-12 + 2.45656E-11 6.41775E-11 1.53814E-10 3.37802E-10 6.78763E-10 1.24533E-09 + 2.08038E-09 3.15181E-09 4.30450E-09 5.24848E-09 5.61692E-09 5.09714E-09 + 3.58742E-09 1.29513E-09 -1.29513E-09 -3.58742E-09 -5.09714E-09 -5.61692E-09 + -5.24848E-09 -4.30450E-09 -3.15181E-09 -2.08038E-09 -1.24533E-09 -6.78763E-10 + -3.37802E-10 -1.53814E-10 -6.41775E-11 -2.45656E-11 -8.63439E-12 -2.78877E-12 + -8.28189E-13 -2.26254E-13 -5.68841E-14 -1.31663E-14 + -1.79722E-14 -7.76480E-14 -3.08842E-13 -1.13050E-12 -3.80673E-12 -1.17861E-11 + -3.35326E-11 -8.76036E-11 -2.09960E-10 -4.61107E-10 -9.26527E-10 -1.69990E-09 + -2.83977E-09 -4.30230E-09 -5.87574E-09 -7.16430E-09 -7.66722E-09 -6.95771E-09 + -4.89691E-09 -1.76788E-09 1.76788E-09 4.89691E-09 6.95771E-09 7.66722E-09 + 7.16430E-09 5.87574E-09 4.30230E-09 2.83977E-09 1.69990E-09 9.26527E-10 + 4.61107E-10 2.09960E-10 8.76036E-11 3.35326E-11 1.17861E-11 3.80673E-12 + 1.13050E-12 3.08842E-13 7.76480E-14 1.79722E-14 + -1.20828E-13 -5.22033E-13 -2.07636E-12 -7.60040E-12 -2.55929E-11 -7.92389E-11 + -2.25442E-10 -5.88965E-10 -1.41157E-09 -3.10005E-09 -6.22910E-09 -1.14285E-08 + -1.90919E-08 -2.89246E-08 -3.95030E-08 -4.81660E-08 -5.15472E-08 -4.67771E-08 + -3.29222E-08 -1.18856E-08 1.18856E-08 3.29222E-08 4.67771E-08 5.15472E-08 + 4.81660E-08 3.95030E-08 2.89246E-08 1.90919E-08 1.14285E-08 6.22910E-09 + 3.10005E-09 1.41157E-09 5.88965E-10 2.25442E-10 7.92389E-11 2.55929E-11 + 7.60040E-12 2.07636E-12 5.22033E-13 1.20828E-13 + -7.15745E-13 -3.09234E-12 -1.22997E-11 -4.50221E-11 -1.51603E-10 -4.69384E-10 + -1.33544E-09 -3.48882E-09 -8.36167E-09 -1.83636E-08 -3.68990E-08 -6.76986E-08 + -1.13094E-07 -1.71339E-07 -2.34002E-07 -2.85319E-07 -3.05348E-07 -2.77091E-07 + -1.95020E-07 -7.04060E-08 7.04060E-08 1.95020E-07 2.77091E-07 3.05348E-07 + 2.85319E-07 2.34002E-07 1.71339E-07 1.13094E-07 6.76986E-08 3.68990E-08 + 1.83636E-08 8.36167E-09 3.48882E-09 1.33544E-09 4.69384E-10 1.51603E-10 + 4.50221E-11 1.22997E-11 3.09234E-12 7.15745E-13 + -3.73659E-12 -1.61437E-11 -6.42111E-11 -2.35041E-10 -7.91454E-10 -2.45044E-09 + -6.97174E-09 -1.82136E-08 -4.36526E-08 -9.58684E-08 -1.92634E-07 -3.53425E-07 + -5.90414E-07 -8.94487E-07 -1.22162E-06 -1.48952E-06 -1.59409E-06 -1.44657E-06 + -1.01811E-06 -3.67559E-07 3.67559E-07 1.01811E-06 1.44657E-06 1.59409E-06 + 1.48952E-06 1.22162E-06 8.94487E-07 5.90414E-07 3.53425E-07 1.92634E-07 + 9.58684E-08 4.36526E-08 1.82136E-08 6.97174E-09 2.45044E-09 7.91454E-10 + 2.35041E-10 6.42111E-11 1.61437E-11 3.73659E-12 + -1.71971E-11 -7.42990E-11 -2.95521E-10 -1.08174E-09 -3.64254E-09 -1.12778E-08 + -3.20863E-08 -8.38252E-08 -2.00904E-07 -4.41219E-07 -8.86565E-07 -1.62658E-06 + -2.71729E-06 -4.11673E-06 -5.62231E-06 -6.85529E-06 -7.33652E-06 -6.65762E-06 + -4.68570E-06 -1.69163E-06 1.69163E-06 4.68570E-06 6.65762E-06 7.33652E-06 + 6.85529E-06 5.62231E-06 4.11673E-06 2.71729E-06 1.62658E-06 8.86565E-07 + 4.41219E-07 2.00904E-07 8.38252E-08 3.20863E-08 1.12778E-08 3.64254E-09 + 1.08174E-09 2.95521E-10 7.42990E-11 1.71971E-11 + -6.98013E-11 -3.01573E-10 -1.19949E-09 -4.39067E-09 -1.47847E-08 -4.57755E-08 + -1.30235E-07 -3.40239E-07 -8.15451E-07 -1.79087E-06 -3.59848E-06 -6.60214E-06 + -1.10292E-05 -1.67094E-05 -2.28205E-05 -2.78250E-05 -2.97783E-05 -2.70227E-05 + -1.90188E-05 -6.86617E-06 6.86617E-06 1.90188E-05 2.70227E-05 2.97783E-05 + 2.78250E-05 2.28205E-05 1.67094E-05 1.10292E-05 6.60214E-06 3.59848E-06 + 1.79087E-06 8.15451E-07 3.40239E-07 1.30235E-07 4.57755E-08 1.47847E-08 + 4.39067E-09 1.19949E-09 3.01573E-10 6.98013E-11 + -2.49986E-10 -1.08005E-09 -4.29585E-09 -1.57247E-08 -5.29499E-08 -1.63940E-07 + -4.66424E-07 -1.21853E-06 -2.92045E-06 -6.41379E-06 -1.28876E-05 -2.36448E-05 + -3.94999E-05 -5.98430E-05 -8.17290E-05 -9.96522E-05 -1.06648E-04 -9.67787E-05 + -6.81138E-05 -2.45904E-05 2.45904E-05 6.81138E-05 9.67787E-05 1.06648E-04 + 9.96522E-05 8.17290E-05 5.98430E-05 3.94999E-05 2.36448E-05 1.28876E-05 + 6.41379E-06 2.92045E-06 1.21853E-06 4.66424E-07 1.63940E-07 5.29499E-08 + 1.57247E-08 4.29585E-09 1.08005E-09 2.49986E-10 + -7.90443E-10 -3.41507E-09 -1.35833E-08 -4.97208E-08 -1.67425E-07 -5.18370E-07 + -1.47481E-06 -3.85293E-06 -9.23432E-06 -2.02801E-05 -4.07499E-05 -7.47639E-05 + -1.24897E-04 -1.89221E-04 -2.58423E-04 -3.15096E-04 -3.37216E-04 -3.06011E-04 + -2.15375E-04 -7.77546E-05 7.77546E-05 2.15375E-04 3.06011E-04 3.37216E-04 + 3.15096E-04 2.58423E-04 1.89221E-04 1.24897E-04 7.47639E-05 4.07499E-05 + 2.02801E-05 9.23432E-06 3.85293E-06 1.47481E-06 5.18370E-07 1.67425E-07 + 4.97208E-08 1.35833E-08 3.41507E-09 7.90443E-10 + -2.20824E-09 -9.54060E-09 -3.79473E-08 -1.38904E-07 -4.67732E-07 -1.44816E-06 + -4.12015E-06 -1.07638E-05 -2.57977E-05 -5.66562E-05 -1.13842E-04 -2.08866E-04 + -3.48922E-04 -5.28624E-04 -7.21957E-04 -8.80294E-04 -9.42115E-04 -8.54969E-04 + -6.01763E-04 -2.17255E-04 2.17255E-04 6.01763E-04 8.54969E-04 9.42115E-04 + 8.80294E-04 7.21957E-04 5.28624E-04 3.48922E-04 2.08866E-04 1.13842E-04 + 5.66562E-05 2.57977E-05 1.07638E-05 4.12015E-06 1.44816E-06 4.67732E-07 + 1.38904E-07 3.79473E-08 9.54060E-09 2.20824E-09 + -5.45530E-09 -2.35694E-08 -9.37461E-08 -3.43152E-07 -1.15550E-06 -3.57757E-06 + -1.01785E-05 -2.65913E-05 -6.37314E-05 -1.39965E-04 -2.81239E-04 -5.15989E-04 + -8.61991E-04 -1.30595E-03 -1.78367E-03 -2.17515E-03 -2.32851E-03 -2.11396E-03 + -1.48854E-03 -5.37568E-04 5.37568E-04 1.48854E-03 2.11396E-03 2.32851E-03 + 2.17515E-03 1.78367E-03 1.30595E-03 8.61991E-04 5.15989E-04 2.81239E-04 + 1.39965E-04 6.37314E-05 2.65913E-05 1.01785E-05 3.57757E-06 1.15550E-06 + 3.43152E-07 9.37461E-08 2.35694E-08 5.45530E-09 + -1.19291E-08 -5.15391E-08 -2.04995E-07 -7.50370E-07 -2.52673E-06 -7.82307E-06 + -2.22574E-05 -5.81471E-05 -1.39361E-04 -3.06061E-04 -6.14985E-04 -1.12832E-03 + -1.88498E-03 -2.85617E-03 -3.90243E-03 -4.76348E-03 -5.10904E-03 -4.65170E-03 + -3.28592E-03 -1.18922E-03 1.18922E-03 3.28592E-03 4.65170E-03 5.10904E-03 + 4.76348E-03 3.90243E-03 2.85617E-03 1.88498E-03 1.12832E-03 6.14985E-04 + 3.06061E-04 1.39361E-04 5.81471E-05 2.22574E-05 7.82307E-06 2.52673E-06 + 7.50370E-07 2.04995E-07 5.15391E-08 1.19291E-08 + -2.31127E-08 -9.98570E-08 -3.97177E-07 -1.45384E-06 -4.89554E-06 -1.51572E-05 + -4.31237E-05 -1.12660E-04 -2.70013E-04 -5.92994E-04 -1.19154E-03 -2.18620E-03 + -3.65284E-03 -5.53819E-03 -7.58148E-03 -9.29942E-03 -1.00701E-02 -9.30140E-03 + -6.67346E-03 -2.44033E-03 2.44033E-03 6.67346E-03 9.30140E-03 1.00701E-02 + 9.29942E-03 7.58148E-03 5.53819E-03 3.65284E-03 2.18620E-03 1.19154E-03 + 5.92994E-04 2.70013E-04 1.12660E-04 4.31237E-05 1.51572E-05 4.89554E-06 + 1.45384E-06 3.97177E-07 9.98570E-08 2.31127E-08 + -3.97118E-08 -1.71573E-07 -6.82423E-07 -2.49797E-06 -8.41142E-06 -2.60428E-05 + -7.40943E-05 -1.93571E-04 -4.63931E-04 -1.01887E-03 -2.04732E-03 -3.75676E-03 + -6.28033E-03 -9.54198E-03 -1.31508E-02 -1.64042E-02 -1.83445E-02 -1.77393E-02 + -1.33367E-02 -5.02335E-03 5.02335E-03 1.33367E-02 1.77393E-02 1.83445E-02 + 1.64042E-02 1.31508E-02 9.54198E-03 6.28033E-03 3.75676E-03 2.04732E-03 + 1.01887E-03 4.63931E-04 1.93571E-04 7.40943E-05 2.60428E-05 8.41142E-06 + 2.49797E-06 6.82423E-07 1.71573E-07 3.97118E-08 + -6.05283E-08 -2.61509E-07 -1.04014E-06 -3.80738E-06 -1.28206E-05 -3.96943E-05 + -1.12934E-04 -2.95039E-04 -7.07121E-04 -1.55297E-03 -3.12066E-03 -5.72774E-03 + -9.58740E-03 -1.46404E-02 -2.05008E-02 -2.65695E-02 -3.17965E-02 -3.35237E-02 + -2.72740E-02 -1.07681E-02 1.07681E-02 2.72740E-02 3.35237E-02 3.17965E-02 + 2.65695E-02 2.05008E-02 1.46404E-02 9.58740E-03 5.72774E-03 3.12066E-03 + 1.55297E-03 7.07121E-04 2.95039E-04 1.12934E-04 3.96943E-05 1.28206E-05 + 3.80738E-06 1.04014E-06 2.61509E-07 6.05283E-08 + -8.17581E-08 -3.53231E-07 -1.40496E-06 -5.14278E-06 -1.73173E-05 -5.36167E-05 + -1.52544E-04 -3.98521E-04 -9.55138E-04 -2.09768E-03 -4.21551E-03 -7.74037E-03 + -1.29824E-02 -1.99841E-02 -2.86802E-02 -3.92881E-02 -5.13000E-02 -5.96346E-02 + -5.31594E-02 -2.24642E-02 2.24642E-02 5.31594E-02 5.96346E-02 5.13000E-02 + 3.92881E-02 2.86802E-02 1.99841E-02 1.29824E-02 7.74037E-03 4.21551E-03 + 2.09768E-03 9.55138E-04 3.98521E-04 1.52544E-04 5.36167E-05 1.73173E-05 + 5.14278E-06 1.40496E-06 3.53231E-07 8.17581E-08 + -9.74694E-08 -4.21111E-07 -1.67495E-06 -6.13106E-06 -2.06452E-05 -6.39202E-05 + -1.81859E-04 -4.75104E-04 -1.13869E-03 -2.50081E-03 -5.02598E-03 -9.23226E-03 + -1.55162E-02 -2.40773E-02 -3.53922E-02 -5.09749E-02 -7.13777E-02 -8.92967E-02 + -8.66836E-02 -3.96821E-02 3.96821E-02 8.66836E-02 8.92967E-02 7.13777E-02 + 5.09749E-02 3.53922E-02 2.40773E-02 1.55162E-02 9.23226E-03 5.02598E-03 + 2.50081E-03 1.13869E-03 4.75104E-04 1.81859E-04 6.39202E-05 2.06452E-05 + 6.13106E-06 1.67495E-06 4.21111E-07 9.74694E-08 + -1.01430E-07 -4.38222E-07 -1.74301E-06 -6.38018E-06 -2.14840E-05 -6.65173E-05 + -1.89248E-04 -4.94408E-04 -1.18495E-03 -2.60243E-03 -5.23039E-03 -9.60986E-03 + -1.61687E-02 -2.51994E-02 -3.75163E-02 -5.54188E-02 -8.01177E-02 -1.02716E-01 + -1.00166E-01 -4.54005E-02 4.54005E-02 1.00166E-01 1.02716E-01 8.01177E-02 + 5.54188E-02 3.75163E-02 2.51994E-02 1.61687E-02 9.60986E-03 5.23039E-03 + 2.60243E-03 1.18495E-03 4.94408E-04 1.89248E-04 6.65173E-05 2.14840E-05 + 6.38018E-06 1.74301E-06 4.38222E-07 1.01430E-07 + -8.95376E-08 -3.86842E-07 -1.53865E-06 -5.63213E-06 -1.89651E-05 -5.87185E-05 + -1.67059E-04 -4.36441E-04 -1.04602E-03 -2.29731E-03 -4.61714E-03 -8.48301E-03 + -1.42718E-02 -2.22379E-02 -3.30871E-02 -4.88224E-02 -7.04664E-02 -8.97824E-02 + -8.54572E-02 -3.74397E-02 3.74397E-02 8.54572E-02 8.97824E-02 7.04664E-02 + 4.88224E-02 3.30871E-02 2.22379E-02 1.42718E-02 8.48301E-03 4.61714E-03 + 2.29731E-03 1.04602E-03 4.36441E-04 1.67059E-04 5.87185E-05 1.89651E-05 + 5.63213E-06 1.53865E-06 3.86842E-07 8.95376E-08 + -6.16547E-08 -2.66376E-07 -1.05950E-06 -3.87823E-06 -1.30592E-05 -4.04330E-05 + -1.15036E-04 -3.00530E-04 -7.20282E-04 -1.58190E-03 -3.17924E-03 -5.84034E-03 + -9.81875E-03 -1.52565E-02 -2.25161E-02 -3.26977E-02 -4.62588E-02 -5.79675E-02 + -5.46250E-02 -2.38345E-02 2.38345E-02 5.46250E-02 5.79675E-02 4.62588E-02 + 3.26977E-02 2.25161E-02 1.52565E-02 9.81875E-03 5.84034E-03 3.17924E-03 + 1.58190E-03 7.20282E-04 3.00530E-04 1.15036E-04 4.04330E-05 1.30592E-05 + 3.87823E-06 1.05950E-06 2.66376E-07 6.16547E-08 + -2.19922E-08 -9.50160E-08 -3.77922E-07 -1.38336E-06 -4.65820E-06 -1.44224E-05 + -4.10330E-05 -1.07198E-04 -2.56923E-04 -5.64260E-04 -1.13400E-03 -2.08293E-03 + -3.49964E-03 -5.42439E-03 -7.94775E-03 -1.13741E-02 -1.57845E-02 -1.93983E-02 + -1.78396E-02 -7.58765E-03 7.58765E-03 1.78396E-02 1.93983E-02 1.57845E-02 + 1.13741E-02 7.94775E-03 5.42439E-03 3.49964E-03 2.08293E-03 1.13400E-03 + 5.64260E-04 2.56923E-04 1.07198E-04 4.10330E-05 1.44224E-05 4.65820E-06 + 1.38336E-06 3.77922E-07 9.50160E-08 2.19922E-08 + 2.19922E-08 9.50160E-08 3.77922E-07 1.38336E-06 4.65820E-06 1.44224E-05 + 4.10330E-05 1.07198E-04 2.56923E-04 5.64260E-04 1.13400E-03 2.08293E-03 + 3.49964E-03 5.42439E-03 7.94775E-03 1.13741E-02 1.57845E-02 1.93983E-02 + 1.78396E-02 7.58765E-03 -7.58765E-03 -1.78396E-02 -1.93983E-02 -1.57845E-02 + -1.13741E-02 -7.94775E-03 -5.42439E-03 -3.49964E-03 -2.08293E-03 -1.13400E-03 + -5.64260E-04 -2.56923E-04 -1.07198E-04 -4.10330E-05 -1.44224E-05 -4.65820E-06 + -1.38336E-06 -3.77922E-07 -9.50160E-08 -2.19922E-08 + 6.16547E-08 2.66376E-07 1.05950E-06 3.87823E-06 1.30592E-05 4.04330E-05 + 1.15036E-04 3.00530E-04 7.20282E-04 1.58190E-03 3.17924E-03 5.84034E-03 + 9.81875E-03 1.52565E-02 2.25161E-02 3.26977E-02 4.62588E-02 5.79675E-02 + 5.46250E-02 2.38345E-02 -2.38345E-02 -5.46250E-02 -5.79675E-02 -4.62588E-02 + -3.26977E-02 -2.25161E-02 -1.52565E-02 -9.81875E-03 -5.84034E-03 -3.17924E-03 + -1.58190E-03 -7.20282E-04 -3.00530E-04 -1.15036E-04 -4.04330E-05 -1.30592E-05 + -3.87823E-06 -1.05950E-06 -2.66376E-07 -6.16547E-08 + 8.95376E-08 3.86842E-07 1.53865E-06 5.63213E-06 1.89651E-05 5.87185E-05 + 1.67059E-04 4.36441E-04 1.04602E-03 2.29731E-03 4.61714E-03 8.48301E-03 + 1.42718E-02 2.22379E-02 3.30871E-02 4.88224E-02 7.04664E-02 8.97824E-02 + 8.54572E-02 3.74397E-02 -3.74397E-02 -8.54572E-02 -8.97824E-02 -7.04664E-02 + -4.88224E-02 -3.30871E-02 -2.22379E-02 -1.42718E-02 -8.48301E-03 -4.61714E-03 + -2.29731E-03 -1.04602E-03 -4.36441E-04 -1.67059E-04 -5.87185E-05 -1.89651E-05 + -5.63213E-06 -1.53865E-06 -3.86842E-07 -8.95376E-08 + 1.01430E-07 4.38222E-07 1.74301E-06 6.38018E-06 2.14840E-05 6.65173E-05 + 1.89248E-04 4.94408E-04 1.18495E-03 2.60243E-03 5.23039E-03 9.60986E-03 + 1.61687E-02 2.51994E-02 3.75163E-02 5.54188E-02 8.01177E-02 1.02716E-01 + 1.00166E-01 4.54005E-02 -4.54005E-02 -1.00166E-01 -1.02716E-01 -8.01177E-02 + -5.54188E-02 -3.75163E-02 -2.51994E-02 -1.61687E-02 -9.60986E-03 -5.23039E-03 + -2.60243E-03 -1.18495E-03 -4.94408E-04 -1.89248E-04 -6.65173E-05 -2.14840E-05 + -6.38018E-06 -1.74301E-06 -4.38222E-07 -1.01430E-07 + 9.74694E-08 4.21111E-07 1.67495E-06 6.13106E-06 2.06452E-05 6.39202E-05 + 1.81859E-04 4.75104E-04 1.13869E-03 2.50081E-03 5.02598E-03 9.23226E-03 + 1.55162E-02 2.40773E-02 3.53922E-02 5.09749E-02 7.13777E-02 8.92967E-02 + 8.66836E-02 3.96821E-02 -3.96821E-02 -8.66836E-02 -8.92967E-02 -7.13777E-02 + -5.09749E-02 -3.53922E-02 -2.40773E-02 -1.55162E-02 -9.23226E-03 -5.02598E-03 + -2.50081E-03 -1.13869E-03 -4.75104E-04 -1.81859E-04 -6.39202E-05 -2.06452E-05 + -6.13106E-06 -1.67495E-06 -4.21111E-07 -9.74694E-08 + 8.17581E-08 3.53231E-07 1.40496E-06 5.14278E-06 1.73173E-05 5.36167E-05 + 1.52544E-04 3.98521E-04 9.55138E-04 2.09768E-03 4.21551E-03 7.74037E-03 + 1.29824E-02 1.99841E-02 2.86802E-02 3.92881E-02 5.13000E-02 5.96346E-02 + 5.31594E-02 2.24642E-02 -2.24642E-02 -5.31594E-02 -5.96346E-02 -5.13000E-02 + -3.92881E-02 -2.86802E-02 -1.99841E-02 -1.29824E-02 -7.74037E-03 -4.21551E-03 + -2.09768E-03 -9.55138E-04 -3.98521E-04 -1.52544E-04 -5.36167E-05 -1.73173E-05 + -5.14278E-06 -1.40496E-06 -3.53231E-07 -8.17581E-08 + 6.05283E-08 2.61509E-07 1.04014E-06 3.80738E-06 1.28206E-05 3.96943E-05 + 1.12934E-04 2.95039E-04 7.07121E-04 1.55297E-03 3.12066E-03 5.72774E-03 + 9.58740E-03 1.46404E-02 2.05008E-02 2.65695E-02 3.17965E-02 3.35237E-02 + 2.72740E-02 1.07681E-02 -1.07681E-02 -2.72740E-02 -3.35237E-02 -3.17965E-02 + -2.65695E-02 -2.05008E-02 -1.46404E-02 -9.58740E-03 -5.72774E-03 -3.12066E-03 + -1.55297E-03 -7.07121E-04 -2.95039E-04 -1.12934E-04 -3.96943E-05 -1.28206E-05 + -3.80738E-06 -1.04014E-06 -2.61509E-07 -6.05283E-08 + 3.97118E-08 1.71573E-07 6.82423E-07 2.49797E-06 8.41142E-06 2.60428E-05 + 7.40943E-05 1.93571E-04 4.63931E-04 1.01887E-03 2.04732E-03 3.75676E-03 + 6.28033E-03 9.54198E-03 1.31508E-02 1.64042E-02 1.83445E-02 1.77393E-02 + 1.33367E-02 5.02335E-03 -5.02335E-03 -1.33367E-02 -1.77393E-02 -1.83445E-02 + -1.64042E-02 -1.31508E-02 -9.54198E-03 -6.28033E-03 -3.75676E-03 -2.04732E-03 + -1.01887E-03 -4.63931E-04 -1.93571E-04 -7.40943E-05 -2.60428E-05 -8.41142E-06 + -2.49797E-06 -6.82423E-07 -1.71573E-07 -3.97118E-08 + 2.31127E-08 9.98570E-08 3.97177E-07 1.45384E-06 4.89554E-06 1.51572E-05 + 4.31237E-05 1.12660E-04 2.70013E-04 5.92994E-04 1.19154E-03 2.18620E-03 + 3.65284E-03 5.53819E-03 7.58148E-03 9.29942E-03 1.00701E-02 9.30140E-03 + 6.67346E-03 2.44033E-03 -2.44033E-03 -6.67346E-03 -9.30140E-03 -1.00701E-02 + -9.29942E-03 -7.58148E-03 -5.53819E-03 -3.65284E-03 -2.18620E-03 -1.19154E-03 + -5.92994E-04 -2.70013E-04 -1.12660E-04 -4.31237E-05 -1.51572E-05 -4.89554E-06 + -1.45384E-06 -3.97177E-07 -9.98570E-08 -2.31127E-08 + 1.19291E-08 5.15391E-08 2.04995E-07 7.50370E-07 2.52673E-06 7.82307E-06 + 2.22574E-05 5.81471E-05 1.39361E-04 3.06061E-04 6.14985E-04 1.12832E-03 + 1.88498E-03 2.85617E-03 3.90243E-03 4.76348E-03 5.10904E-03 4.65170E-03 + 3.28592E-03 1.18922E-03 -1.18922E-03 -3.28592E-03 -4.65170E-03 -5.10904E-03 + -4.76348E-03 -3.90243E-03 -2.85617E-03 -1.88498E-03 -1.12832E-03 -6.14985E-04 + -3.06061E-04 -1.39361E-04 -5.81471E-05 -2.22574E-05 -7.82307E-06 -2.52673E-06 + -7.50370E-07 -2.04995E-07 -5.15391E-08 -1.19291E-08 + 5.45530E-09 2.35694E-08 9.37461E-08 3.43152E-07 1.15550E-06 3.57757E-06 + 1.01785E-05 2.65913E-05 6.37314E-05 1.39965E-04 2.81239E-04 5.15989E-04 + 8.61991E-04 1.30595E-03 1.78367E-03 2.17515E-03 2.32851E-03 2.11396E-03 + 1.48854E-03 5.37568E-04 -5.37568E-04 -1.48854E-03 -2.11396E-03 -2.32851E-03 + -2.17515E-03 -1.78367E-03 -1.30595E-03 -8.61991E-04 -5.15989E-04 -2.81239E-04 + -1.39965E-04 -6.37314E-05 -2.65913E-05 -1.01785E-05 -3.57757E-06 -1.15550E-06 + -3.43152E-07 -9.37461E-08 -2.35694E-08 -5.45530E-09 + 2.20824E-09 9.54060E-09 3.79473E-08 1.38904E-07 4.67732E-07 1.44816E-06 + 4.12015E-06 1.07638E-05 2.57977E-05 5.66562E-05 1.13842E-04 2.08866E-04 + 3.48922E-04 5.28624E-04 7.21957E-04 8.80294E-04 9.42115E-04 8.54969E-04 + 6.01763E-04 2.17255E-04 -2.17255E-04 -6.01763E-04 -8.54969E-04 -9.42115E-04 + -8.80294E-04 -7.21957E-04 -5.28624E-04 -3.48922E-04 -2.08866E-04 -1.13842E-04 + -5.66562E-05 -2.57977E-05 -1.07638E-05 -4.12015E-06 -1.44816E-06 -4.67732E-07 + -1.38904E-07 -3.79473E-08 -9.54060E-09 -2.20824E-09 + 7.90443E-10 3.41507E-09 1.35833E-08 4.97208E-08 1.67425E-07 5.18370E-07 + 1.47481E-06 3.85293E-06 9.23432E-06 2.02801E-05 4.07499E-05 7.47639E-05 + 1.24897E-04 1.89221E-04 2.58423E-04 3.15096E-04 3.37216E-04 3.06011E-04 + 2.15375E-04 7.77546E-05 -7.77546E-05 -2.15375E-04 -3.06011E-04 -3.37216E-04 + -3.15096E-04 -2.58423E-04 -1.89221E-04 -1.24897E-04 -7.47639E-05 -4.07499E-05 + -2.02801E-05 -9.23432E-06 -3.85293E-06 -1.47481E-06 -5.18370E-07 -1.67425E-07 + -4.97208E-08 -1.35833E-08 -3.41507E-09 -7.90443E-10 + 2.49986E-10 1.08005E-09 4.29585E-09 1.57247E-08 5.29499E-08 1.63940E-07 + 4.66424E-07 1.21853E-06 2.92045E-06 6.41379E-06 1.28876E-05 2.36448E-05 + 3.94999E-05 5.98430E-05 8.17290E-05 9.96522E-05 1.06648E-04 9.67787E-05 + 6.81138E-05 2.45904E-05 -2.45904E-05 -6.81138E-05 -9.67787E-05 -1.06648E-04 + -9.96522E-05 -8.17290E-05 -5.98430E-05 -3.94999E-05 -2.36448E-05 -1.28876E-05 + -6.41379E-06 -2.92045E-06 -1.21853E-06 -4.66424E-07 -1.63940E-07 -5.29499E-08 + -1.57247E-08 -4.29585E-09 -1.08005E-09 -2.49986E-10 + 6.98013E-11 3.01573E-10 1.19949E-09 4.39067E-09 1.47847E-08 4.57755E-08 + 1.30235E-07 3.40239E-07 8.15451E-07 1.79087E-06 3.59848E-06 6.60214E-06 + 1.10292E-05 1.67094E-05 2.28205E-05 2.78250E-05 2.97783E-05 2.70227E-05 + 1.90188E-05 6.86617E-06 -6.86617E-06 -1.90188E-05 -2.70227E-05 -2.97783E-05 + -2.78250E-05 -2.28205E-05 -1.67094E-05 -1.10292E-05 -6.60214E-06 -3.59848E-06 + -1.79087E-06 -8.15451E-07 -3.40239E-07 -1.30235E-07 -4.57755E-08 -1.47847E-08 + -4.39067E-09 -1.19949E-09 -3.01573E-10 -6.98013E-11 + 1.71971E-11 7.42990E-11 2.95521E-10 1.08174E-09 3.64254E-09 1.12778E-08 + 3.20863E-08 8.38252E-08 2.00904E-07 4.41219E-07 8.86565E-07 1.62658E-06 + 2.71729E-06 4.11673E-06 5.62231E-06 6.85529E-06 7.33652E-06 6.65762E-06 + 4.68570E-06 1.69163E-06 -1.69163E-06 -4.68570E-06 -6.65762E-06 -7.33652E-06 + -6.85529E-06 -5.62231E-06 -4.11673E-06 -2.71729E-06 -1.62658E-06 -8.86565E-07 + -4.41219E-07 -2.00904E-07 -8.38252E-08 -3.20863E-08 -1.12778E-08 -3.64254E-09 + -1.08174E-09 -2.95521E-10 -7.42990E-11 -1.71971E-11 + 3.73659E-12 1.61437E-11 6.42111E-11 2.35041E-10 7.91454E-10 2.45044E-09 + 6.97174E-09 1.82136E-08 4.36526E-08 9.58684E-08 1.92634E-07 3.53425E-07 + 5.90414E-07 8.94487E-07 1.22162E-06 1.48952E-06 1.59409E-06 1.44657E-06 + 1.01811E-06 3.67559E-07 -3.67559E-07 -1.01811E-06 -1.44657E-06 -1.59409E-06 + -1.48952E-06 -1.22162E-06 -8.94487E-07 -5.90414E-07 -3.53425E-07 -1.92634E-07 + -9.58684E-08 -4.36526E-08 -1.82136E-08 -6.97174E-09 -2.45044E-09 -7.91454E-10 + -2.35041E-10 -6.42111E-11 -1.61437E-11 -3.73659E-12 + 7.15745E-13 3.09234E-12 1.22997E-11 4.50221E-11 1.51603E-10 4.69384E-10 + 1.33544E-09 3.48882E-09 8.36167E-09 1.83636E-08 3.68990E-08 6.76986E-08 + 1.13094E-07 1.71339E-07 2.34002E-07 2.85319E-07 3.05348E-07 2.77091E-07 + 1.95020E-07 7.04060E-08 -7.04060E-08 -1.95020E-07 -2.77091E-07 -3.05348E-07 + -2.85319E-07 -2.34002E-07 -1.71339E-07 -1.13094E-07 -6.76986E-08 -3.68990E-08 + -1.83636E-08 -8.36167E-09 -3.48882E-09 -1.33544E-09 -4.69384E-10 -1.51603E-10 + -4.50221E-11 -1.22997E-11 -3.09234E-12 -7.15745E-13 + 1.20828E-13 5.22033E-13 2.07636E-12 7.60040E-12 2.55929E-11 7.92389E-11 + 2.25442E-10 5.88965E-10 1.41157E-09 3.10005E-09 6.22910E-09 1.14285E-08 + 1.90919E-08 2.89246E-08 3.95030E-08 4.81660E-08 5.15472E-08 4.67771E-08 + 3.29222E-08 1.18856E-08 -1.18856E-08 -3.29222E-08 -4.67771E-08 -5.15472E-08 + -4.81660E-08 -3.95030E-08 -2.89246E-08 -1.90919E-08 -1.14285E-08 -6.22910E-09 + -3.10005E-09 -1.41157E-09 -5.88965E-10 -2.25442E-10 -7.92389E-11 -2.55929E-11 + -7.60040E-12 -2.07636E-12 -5.22033E-13 -1.20828E-13 + 1.79722E-14 7.76480E-14 3.08842E-13 1.13050E-12 3.80673E-12 1.17861E-11 + 3.35326E-11 8.76036E-11 2.09960E-10 4.61107E-10 9.26527E-10 1.69990E-09 + 2.83977E-09 4.30230E-09 5.87574E-09 7.16430E-09 7.66722E-09 6.95771E-09 + 4.89691E-09 1.76788E-09 -1.76788E-09 -4.89691E-09 -6.95771E-09 -7.66722E-09 + -7.16430E-09 -5.87574E-09 -4.30230E-09 -2.83977E-09 -1.69990E-09 -9.26527E-10 + -4.61107E-10 -2.09960E-10 -8.76036E-11 -3.35326E-11 -1.17861E-11 -3.80673E-12 + -1.13050E-12 -3.08842E-13 -7.76480E-14 -1.79722E-14 + -2.10029E-14 -9.07419E-14 -3.60922E-13 -1.32113E-12 -4.44866E-12 -1.37736E-11 + -3.91873E-11 -1.02376E-10 -2.45366E-10 -5.38864E-10 -1.08277E-09 -1.98656E-09 + -3.31864E-09 -5.02780E-09 -6.86658E-09 -8.37242E-09 -8.96015E-09 -8.13100E-09 + -5.72268E-09 -2.06600E-09 2.06600E-09 5.72268E-09 8.13100E-09 8.96015E-09 + 8.37242E-09 6.86658E-09 5.02780E-09 3.31864E-09 1.98656E-09 1.08277E-09 + 5.38864E-10 2.45366E-10 1.02376E-10 3.91873E-11 1.37736E-11 4.44866E-12 + 1.32113E-12 3.60922E-13 9.07419E-14 2.10029E-14 + -1.41121E-13 -6.09706E-13 -2.42508E-12 -8.87686E-12 -2.98911E-11 -9.25468E-11 + -2.63304E-10 -6.87879E-10 -1.64864E-09 -3.62069E-09 -7.27525E-09 -1.33479E-08 + -2.22984E-08 -3.37824E-08 -4.61374E-08 -5.62553E-08 -6.02044E-08 -5.46332E-08 + -3.84514E-08 -1.38817E-08 1.38817E-08 3.84514E-08 5.46332E-08 6.02044E-08 + 5.62553E-08 4.61374E-08 3.37824E-08 2.22984E-08 1.33479E-08 7.27525E-09 + 3.62069E-09 1.64864E-09 6.87879E-10 2.63304E-10 9.25468E-11 2.98911E-11 + 8.87686E-12 2.42508E-12 6.09706E-13 1.41121E-13 + -8.35320E-13 -3.60896E-12 -1.43545E-11 -5.25437E-11 -1.76931E-10 -5.47800E-10 + -1.55854E-09 -4.07168E-09 -9.75860E-09 -2.14315E-08 -4.30635E-08 -7.90086E-08 + -1.31988E-07 -1.99964E-07 -2.73095E-07 -3.32985E-07 -3.56360E-07 -3.23383E-07 + -2.27601E-07 -8.21683E-08 8.21683E-08 2.27601E-07 3.23383E-07 3.56360E-07 + 3.32985E-07 2.73095E-07 1.99964E-07 1.31988E-07 7.90086E-08 4.30635E-08 + 2.14315E-08 9.75860E-09 4.07168E-09 1.55854E-09 5.47800E-10 1.76931E-10 + 5.25437E-11 1.43545E-11 3.60896E-12 8.35320E-13 + -4.35660E-12 -1.88225E-11 -7.48656E-11 -2.74041E-10 -9.22780E-10 -2.85705E-09 + -8.12856E-09 -2.12358E-08 -5.08959E-08 -1.11776E-07 -2.24597E-07 -4.12068E-07 + -6.88381E-07 -1.04291E-06 -1.42432E-06 -1.73668E-06 -1.85859E-06 -1.68660E-06 + -1.18705E-06 -4.28548E-07 4.28548E-07 1.18705E-06 1.68660E-06 1.85859E-06 + 1.73668E-06 1.42432E-06 1.04291E-06 6.88381E-07 4.12068E-07 2.24597E-07 + 1.11776E-07 5.08959E-08 2.12358E-08 8.12856E-09 2.85705E-09 9.22780E-10 + 2.74041E-10 7.48656E-11 1.88225E-11 4.35660E-12 + -2.00256E-11 -8.65194E-11 -3.44127E-10 -1.25966E-09 -4.24165E-09 -1.31327E-08 + -3.73638E-08 -9.76125E-08 -2.33948E-07 -5.13789E-07 -1.03238E-06 -1.89411E-06 + -3.16422E-06 -4.79384E-06 -6.54706E-06 -7.98283E-06 -8.54321E-06 -7.75264E-06 + -5.45639E-06 -1.96986E-06 1.96986E-06 5.45639E-06 7.75264E-06 8.54321E-06 + 7.98283E-06 6.54706E-06 4.79384E-06 3.16422E-06 1.89411E-06 1.03238E-06 + 5.13789E-07 2.33948E-07 9.76125E-08 3.73638E-08 1.31327E-08 4.24165E-09 + 1.25966E-09 3.44127E-10 8.65194E-11 2.00256E-11 + -8.11524E-11 -3.50615E-10 -1.39456E-09 -5.10469E-09 -1.71891E-08 -5.32195E-08 + -1.51414E-07 -3.95569E-07 -9.48061E-07 -2.08210E-06 -4.18367E-06 -7.67579E-06 + -1.28228E-05 -1.94268E-05 -2.65316E-05 -3.23499E-05 -3.46208E-05 -3.14171E-05 + -2.21117E-05 -7.98275E-06 7.98275E-06 2.21117E-05 3.14171E-05 3.46208E-05 + 3.23499E-05 2.65316E-05 1.94268E-05 1.28228E-05 7.67579E-06 4.18367E-06 + 2.08210E-06 9.48061E-07 3.95569E-07 1.51414E-07 5.32195E-08 1.71891E-08 + 5.10469E-09 1.39456E-09 3.50615E-10 8.11524E-11 + -2.90049E-10 -1.25314E-09 -4.98431E-09 -1.82448E-08 -6.14358E-08 -1.90213E-07 + -5.41174E-07 -1.41381E-06 -3.38849E-06 -7.44168E-06 -1.49530E-05 -2.74342E-05 + -4.58302E-05 -6.94336E-05 -9.48270E-05 -1.15623E-04 -1.23739E-04 -1.12289E-04 + -7.90299E-05 -2.85314E-05 2.85314E-05 7.90299E-05 1.12289E-04 1.23739E-04 + 1.15623E-04 9.48270E-05 6.94336E-05 4.58302E-05 2.74342E-05 1.49530E-05 + 7.44168E-06 3.38849E-06 1.41381E-06 5.41174E-07 1.90213E-07 6.14358E-08 + 1.82448E-08 4.98431E-09 1.25314E-09 2.90049E-10 + -9.14763E-10 -3.95219E-09 -1.57197E-08 -5.75408E-08 -1.93758E-07 -5.99899E-07 + -1.70677E-06 -4.45891E-06 -1.06867E-05 -2.34698E-05 -4.71590E-05 -8.65227E-05 + -1.44541E-04 -2.18981E-04 -2.99068E-04 -3.64654E-04 -3.90254E-04 -3.54142E-04 + -2.49250E-04 -8.99844E-05 8.99844E-05 2.49250E-04 3.54142E-04 3.90254E-04 + 3.64654E-04 2.99068E-04 2.18981E-04 1.44541E-04 8.65227E-05 4.71590E-05 + 2.34698E-05 1.06867E-05 4.45891E-06 1.70677E-06 5.99899E-07 1.93758E-07 + 5.75408E-08 1.57197E-08 3.95219E-09 9.14763E-10 + -2.54729E-09 -1.10054E-08 -4.37737E-08 -1.60231E-07 -5.39547E-07 -1.67051E-06 + -4.75275E-06 -1.24165E-05 -2.97587E-05 -6.53550E-05 -1.31321E-04 -2.40935E-04 + -4.02495E-04 -6.09788E-04 -8.32808E-04 -1.01546E-03 -1.08679E-03 -9.86284E-04 + -6.94205E-04 -2.50633E-04 2.50633E-04 6.94205E-04 9.86284E-04 1.08679E-03 + 1.01546E-03 8.32808E-04 6.09788E-04 4.02495E-04 2.40935E-04 1.31321E-04 + 6.53550E-05 2.97587E-05 1.24165E-05 4.75275E-06 1.67051E-06 5.39547E-07 + 1.60231E-07 4.37737E-08 1.10054E-08 2.54729E-09 + -6.26754E-09 -2.70786E-08 -1.07704E-07 -3.94243E-07 -1.32754E-06 -4.11023E-06 + -1.16940E-05 -3.05504E-05 -7.32203E-05 -1.60804E-04 -3.23112E-04 -5.92815E-04 + -9.90334E-04 -1.50041E-03 -2.04933E-03 -2.49930E-03 -2.67592E-03 -2.42992E-03 + -1.71146E-03 -6.18179E-04 6.18179E-04 1.71146E-03 2.42992E-03 2.67592E-03 + 2.49930E-03 2.04933E-03 1.50041E-03 9.90334E-04 5.92815E-04 3.23112E-04 + 1.60804E-04 7.32203E-05 3.05504E-05 1.16940E-05 4.11023E-06 1.32754E-06 + 3.94243E-07 1.07704E-07 2.70786E-08 6.26754E-09 + -1.36372E-08 -5.89187E-08 -2.34347E-07 -8.57811E-07 -2.88851E-06 -8.94322E-06 + -2.54443E-05 -6.64729E-05 -1.59316E-04 -3.49884E-04 -7.03042E-04 -1.28989E-03 + -2.15493E-03 -3.26544E-03 -4.46266E-03 -5.45053E-03 -5.85274E-03 -5.33821E-03 + -3.77815E-03 -1.36914E-03 1.36914E-03 3.77815E-03 5.33821E-03 5.85274E-03 + 5.45053E-03 4.46266E-03 3.26544E-03 2.15493E-03 1.28989E-03 7.03042E-04 + 3.49884E-04 1.59316E-04 6.64729E-05 2.54443E-05 8.94322E-06 2.88851E-06 + 8.57811E-07 2.34347E-07 5.89187E-08 1.36372E-08 + -2.62630E-08 -1.13468E-07 -4.51314E-07 -1.65201E-06 -5.56281E-06 -1.72232E-05 + -4.90016E-05 -1.28016E-04 -3.06817E-04 -6.73822E-04 -1.35396E-03 -2.48425E-03 + -4.15124E-03 -6.29634E-03 -8.63027E-03 -1.06196E-02 -1.15713E-02 -1.07858E-02 + -7.81328E-03 -2.87509E-03 2.87509E-03 7.81328E-03 1.07858E-02 1.15713E-02 + 1.06196E-02 8.63027E-03 6.29634E-03 4.15124E-03 2.48425E-03 1.35396E-03 + 6.73822E-04 3.06817E-04 1.28016E-04 4.90016E-05 1.72232E-05 5.56281E-06 + 1.65201E-06 4.51314E-07 1.13468E-07 2.62630E-08 + -4.48020E-08 -1.93565E-07 -7.69896E-07 -2.81816E-06 -9.48960E-06 -2.93810E-05 + -8.35917E-05 -2.18383E-04 -5.23398E-04 -1.14948E-03 -2.30978E-03 -4.23869E-03 + -7.08871E-03 -1.07867E-02 -1.49383E-02 -1.88558E-02 -2.15484E-02 -2.14506E-02 + -1.65770E-02 -6.34797E-03 6.34797E-03 1.65770E-02 2.14506E-02 2.15484E-02 + 1.88558E-02 1.49383E-02 1.07867E-02 7.08871E-03 4.23869E-03 2.30978E-03 + 1.14948E-03 5.23398E-04 2.18383E-04 8.35917E-05 2.93810E-05 9.48960E-06 + 2.81816E-06 7.69896E-07 1.93565E-07 4.48020E-08 + -6.77229E-08 -2.92593E-07 -1.16378E-06 -4.25994E-06 -1.43445E-05 -4.44125E-05 + -1.26358E-04 -3.30108E-04 -7.91172E-04 -1.73757E-03 -3.49173E-03 -6.41013E-03 + -1.07408E-02 -1.64694E-02 -2.33569E-02 -3.11645E-02 -3.90944E-02 -4.35109E-02 + -3.71945E-02 -1.52032E-02 1.52032E-02 3.71945E-02 4.35109E-02 3.90944E-02 + 3.11645E-02 2.33569E-02 1.64694E-02 1.07408E-02 6.41013E-03 3.49173E-03 + 1.73757E-03 7.91172E-04 3.30108E-04 1.26358E-04 4.44125E-05 1.43445E-05 + 4.25994E-06 1.16378E-06 2.92593E-07 6.77229E-08 + -9.06350E-08 -3.91584E-07 -1.55751E-06 -5.70116E-06 -1.91976E-05 -5.94381E-05 + -1.69107E-04 -4.41791E-04 -1.05884E-03 -2.32545E-03 -4.67355E-03 -8.58475E-03 + -1.44266E-02 -2.23771E-02 -3.28482E-02 -4.71700E-02 -6.58298E-02 -8.29779E-02 + -8.43973E-02 -4.11151E-02 4.11151E-02 8.43973E-02 8.29779E-02 6.58298E-02 + 4.71700E-02 3.28482E-02 2.23771E-02 1.44266E-02 8.58475E-03 4.67355E-03 + 2.32545E-03 1.05884E-03 4.41791E-04 1.69107E-04 5.94381E-05 1.91976E-05 + 5.70116E-06 1.55751E-06 3.91584E-07 9.06350E-08 + -1.07000E-07 -4.62288E-07 -1.83873E-06 -6.73056E-06 -2.26639E-05 -7.01703E-05 + -1.99641E-04 -5.21560E-04 -1.25003E-03 -2.74537E-03 -5.51791E-03 -1.01408E-02 + -1.70842E-02 -2.67592E-02 -4.04009E-02 -6.12795E-02 -9.19080E-02 -1.29262E-01 + -1.64502E-01 -1.06097E-01 1.06097E-01 1.64502E-01 1.29262E-01 9.19080E-02 + 6.12795E-02 4.04009E-02 2.67592E-02 1.70842E-02 1.01408E-02 5.51791E-03 + 2.74537E-03 1.25003E-03 5.21560E-04 1.99641E-04 7.01703E-05 2.26639E-05 + 6.73056E-06 1.83873E-06 4.62288E-07 1.07000E-07 + -1.10276E-07 -4.76441E-07 -1.89502E-06 -6.93662E-06 -2.33577E-05 -7.23185E-05 + -2.05753E-04 -5.37528E-04 -1.28830E-03 -2.82942E-03 -5.68693E-03 -1.04523E-02 + -1.76166E-02 -2.76408E-02 -4.19394E-02 -6.42087E-02 -9.72528E-02 -1.36164E-01 + -1.66709E-01 -1.00422E-01 1.00422E-01 1.66709E-01 1.36164E-01 9.72528E-02 + 6.42087E-02 4.19394E-02 2.76408E-02 1.76166E-02 1.04523E-02 5.68693E-03 + 2.82942E-03 1.28830E-03 5.37528E-04 2.05753E-04 7.23185E-05 2.33577E-05 + 6.93662E-06 1.89502E-06 4.76441E-07 1.10276E-07 + -9.65085E-08 -4.16960E-07 -1.65844E-06 -6.07062E-06 -2.04417E-05 -6.32900E-05 + -1.80066E-04 -4.70421E-04 -1.12746E-03 -2.47617E-03 -4.97665E-03 -9.14387E-03 + -1.53865E-02 -2.39917E-02 -3.57677E-02 -5.29793E-02 -7.68683E-02 -9.91550E-02 + -9.82817E-02 -4.54699E-02 4.54699E-02 9.82817E-02 9.91550E-02 7.68683E-02 + 5.29793E-02 3.57677E-02 2.39917E-02 1.53865E-02 9.14387E-03 4.97665E-03 + 2.47617E-03 1.12746E-03 4.70421E-04 1.80066E-04 6.32900E-05 2.04417E-05 + 6.07062E-06 1.65844E-06 4.16960E-07 9.65085E-08 + -6.60192E-08 -2.85233E-07 -1.13450E-06 -4.15277E-06 -1.39837E-05 -4.32952E-05 + -1.23179E-04 -3.21804E-04 -7.71269E-04 -1.69387E-03 -3.40414E-03 -6.25194E-03 + -1.04978E-02 -1.62330E-02 -2.36197E-02 -3.33261E-02 -4.53771E-02 -5.47241E-02 + -4.92849E-02 -2.05327E-02 2.05327E-02 4.92849E-02 5.47241E-02 4.53771E-02 + 3.33261E-02 2.36197E-02 1.62330E-02 1.04978E-02 6.25194E-03 3.40414E-03 + 1.69387E-03 7.71269E-04 3.21804E-04 1.23179E-04 4.32952E-05 1.39837E-05 + 4.15277E-06 1.13450E-06 2.85233E-07 6.60192E-08 + -2.34650E-08 -1.01379E-07 -4.03232E-07 -1.47601E-06 -4.97017E-06 -1.53883E-05 + -4.37811E-05 -1.14378E-04 -2.74130E-04 -6.02044E-04 -1.20987E-03 -2.22142E-03 + -3.72519E-03 -5.73071E-03 -8.21041E-03 -1.12096E-02 -1.45680E-02 -1.67960E-02 + -1.46195E-02 -5.96580E-03 5.96580E-03 1.46195E-02 1.67960E-02 1.45680E-02 + 1.12096E-02 8.21041E-03 5.73071E-03 3.72519E-03 2.22142E-03 1.20987E-03 + 6.02044E-04 2.74130E-04 1.14378E-04 4.37811E-05 1.53883E-05 4.97017E-06 + 1.47601E-06 4.03232E-07 1.01379E-07 2.34650E-08 + 2.34650E-08 1.01379E-07 4.03232E-07 1.47601E-06 4.97017E-06 1.53883E-05 + 4.37811E-05 1.14378E-04 2.74130E-04 6.02044E-04 1.20987E-03 2.22142E-03 + 3.72519E-03 5.73071E-03 8.21041E-03 1.12096E-02 1.45680E-02 1.67960E-02 + 1.46195E-02 5.96580E-03 -5.96580E-03 -1.46195E-02 -1.67960E-02 -1.45680E-02 + -1.12096E-02 -8.21041E-03 -5.73071E-03 -3.72519E-03 -2.22142E-03 -1.20987E-03 + -6.02044E-04 -2.74130E-04 -1.14378E-04 -4.37811E-05 -1.53883E-05 -4.97017E-06 + -1.47601E-06 -4.03232E-07 -1.01379E-07 -2.34650E-08 + 6.60192E-08 2.85233E-07 1.13450E-06 4.15277E-06 1.39837E-05 4.32952E-05 + 1.23179E-04 3.21804E-04 7.71269E-04 1.69387E-03 3.40414E-03 6.25194E-03 + 1.04978E-02 1.62330E-02 2.36197E-02 3.33261E-02 4.53771E-02 5.47241E-02 + 4.92849E-02 2.05327E-02 -2.05327E-02 -4.92849E-02 -5.47241E-02 -4.53771E-02 + -3.33261E-02 -2.36197E-02 -1.62330E-02 -1.04978E-02 -6.25194E-03 -3.40414E-03 + -1.69387E-03 -7.71269E-04 -3.21804E-04 -1.23179E-04 -4.32952E-05 -1.39837E-05 + -4.15277E-06 -1.13450E-06 -2.85233E-07 -6.60192E-08 + 9.65085E-08 4.16960E-07 1.65844E-06 6.07062E-06 2.04417E-05 6.32900E-05 + 1.80066E-04 4.70421E-04 1.12746E-03 2.47617E-03 4.97665E-03 9.14387E-03 + 1.53865E-02 2.39917E-02 3.57677E-02 5.29793E-02 7.68683E-02 9.91550E-02 + 9.82817E-02 4.54699E-02 -4.54699E-02 -9.82817E-02 -9.91550E-02 -7.68683E-02 + -5.29793E-02 -3.57677E-02 -2.39917E-02 -1.53865E-02 -9.14387E-03 -4.97665E-03 + -2.47617E-03 -1.12746E-03 -4.70421E-04 -1.80066E-04 -6.32900E-05 -2.04417E-05 + -6.07062E-06 -1.65844E-06 -4.16960E-07 -9.65085E-08 + 1.10276E-07 4.76441E-07 1.89502E-06 6.93662E-06 2.33577E-05 7.23185E-05 + 2.05753E-04 5.37528E-04 1.28830E-03 2.82942E-03 5.68693E-03 1.04523E-02 + 1.76166E-02 2.76408E-02 4.19394E-02 6.42087E-02 9.72528E-02 1.36164E-01 + 1.66709E-01 1.00422E-01 -1.00422E-01 -1.66709E-01 -1.36164E-01 -9.72528E-02 + -6.42087E-02 -4.19394E-02 -2.76408E-02 -1.76166E-02 -1.04523E-02 -5.68693E-03 + -2.82942E-03 -1.28830E-03 -5.37528E-04 -2.05753E-04 -7.23185E-05 -2.33577E-05 + -6.93662E-06 -1.89502E-06 -4.76441E-07 -1.10276E-07 + 1.07000E-07 4.62288E-07 1.83873E-06 6.73056E-06 2.26639E-05 7.01703E-05 + 1.99641E-04 5.21560E-04 1.25003E-03 2.74537E-03 5.51791E-03 1.01408E-02 + 1.70842E-02 2.67592E-02 4.04009E-02 6.12795E-02 9.19080E-02 1.29262E-01 + 1.64502E-01 1.06097E-01 -1.06097E-01 -1.64502E-01 -1.29262E-01 -9.19080E-02 + -6.12795E-02 -4.04009E-02 -2.67592E-02 -1.70842E-02 -1.01408E-02 -5.51791E-03 + -2.74537E-03 -1.25003E-03 -5.21560E-04 -1.99641E-04 -7.01703E-05 -2.26639E-05 + -6.73056E-06 -1.83873E-06 -4.62288E-07 -1.07000E-07 + 9.06350E-08 3.91584E-07 1.55751E-06 5.70116E-06 1.91976E-05 5.94381E-05 + 1.69107E-04 4.41791E-04 1.05884E-03 2.32545E-03 4.67355E-03 8.58475E-03 + 1.44266E-02 2.23771E-02 3.28482E-02 4.71700E-02 6.58298E-02 8.29779E-02 + 8.43973E-02 4.11151E-02 -4.11151E-02 -8.43973E-02 -8.29779E-02 -6.58298E-02 + -4.71700E-02 -3.28482E-02 -2.23771E-02 -1.44266E-02 -8.58475E-03 -4.67355E-03 + -2.32545E-03 -1.05884E-03 -4.41791E-04 -1.69107E-04 -5.94381E-05 -1.91976E-05 + -5.70116E-06 -1.55751E-06 -3.91584E-07 -9.06350E-08 + 6.77229E-08 2.92593E-07 1.16378E-06 4.25994E-06 1.43445E-05 4.44125E-05 + 1.26358E-04 3.30108E-04 7.91172E-04 1.73757E-03 3.49173E-03 6.41013E-03 + 1.07408E-02 1.64694E-02 2.33569E-02 3.11645E-02 3.90944E-02 4.35109E-02 + 3.71945E-02 1.52032E-02 -1.52032E-02 -3.71945E-02 -4.35109E-02 -3.90944E-02 + -3.11645E-02 -2.33569E-02 -1.64694E-02 -1.07408E-02 -6.41013E-03 -3.49173E-03 + -1.73757E-03 -7.91172E-04 -3.30108E-04 -1.26358E-04 -4.44125E-05 -1.43445E-05 + -4.25994E-06 -1.16378E-06 -2.92593E-07 -6.77229E-08 + 4.48020E-08 1.93565E-07 7.69896E-07 2.81816E-06 9.48960E-06 2.93810E-05 + 8.35917E-05 2.18383E-04 5.23398E-04 1.14948E-03 2.30978E-03 4.23869E-03 + 7.08871E-03 1.07867E-02 1.49383E-02 1.88558E-02 2.15484E-02 2.14506E-02 + 1.65770E-02 6.34797E-03 -6.34797E-03 -1.65770E-02 -2.14506E-02 -2.15484E-02 + -1.88558E-02 -1.49383E-02 -1.07867E-02 -7.08871E-03 -4.23869E-03 -2.30978E-03 + -1.14948E-03 -5.23398E-04 -2.18383E-04 -8.35917E-05 -2.93810E-05 -9.48960E-06 + -2.81816E-06 -7.69896E-07 -1.93565E-07 -4.48020E-08 + 2.62630E-08 1.13468E-07 4.51314E-07 1.65201E-06 5.56281E-06 1.72232E-05 + 4.90016E-05 1.28016E-04 3.06817E-04 6.73822E-04 1.35396E-03 2.48425E-03 + 4.15124E-03 6.29634E-03 8.63027E-03 1.06196E-02 1.15713E-02 1.07858E-02 + 7.81328E-03 2.87509E-03 -2.87509E-03 -7.81328E-03 -1.07858E-02 -1.15713E-02 + -1.06196E-02 -8.63027E-03 -6.29634E-03 -4.15124E-03 -2.48425E-03 -1.35396E-03 + -6.73822E-04 -3.06817E-04 -1.28016E-04 -4.90016E-05 -1.72232E-05 -5.56281E-06 + -1.65201E-06 -4.51314E-07 -1.13468E-07 -2.62630E-08 + 1.36372E-08 5.89187E-08 2.34347E-07 8.57811E-07 2.88851E-06 8.94322E-06 + 2.54443E-05 6.64729E-05 1.59316E-04 3.49884E-04 7.03042E-04 1.28989E-03 + 2.15493E-03 3.26544E-03 4.46266E-03 5.45053E-03 5.85274E-03 5.33821E-03 + 3.77815E-03 1.36914E-03 -1.36914E-03 -3.77815E-03 -5.33821E-03 -5.85274E-03 + -5.45053E-03 -4.46266E-03 -3.26544E-03 -2.15493E-03 -1.28989E-03 -7.03042E-04 + -3.49884E-04 -1.59316E-04 -6.64729E-05 -2.54443E-05 -8.94322E-06 -2.88851E-06 + -8.57811E-07 -2.34347E-07 -5.89187E-08 -1.36372E-08 + 6.26754E-09 2.70786E-08 1.07704E-07 3.94243E-07 1.32754E-06 4.11023E-06 + 1.16940E-05 3.05504E-05 7.32203E-05 1.60804E-04 3.23112E-04 5.92815E-04 + 9.90334E-04 1.50041E-03 2.04933E-03 2.49930E-03 2.67592E-03 2.42992E-03 + 1.71146E-03 6.18179E-04 -6.18179E-04 -1.71146E-03 -2.42992E-03 -2.67592E-03 + -2.49930E-03 -2.04933E-03 -1.50041E-03 -9.90334E-04 -5.92815E-04 -3.23112E-04 + -1.60804E-04 -7.32203E-05 -3.05504E-05 -1.16940E-05 -4.11023E-06 -1.32754E-06 + -3.94243E-07 -1.07704E-07 -2.70786E-08 -6.26754E-09 + 2.54729E-09 1.10054E-08 4.37737E-08 1.60231E-07 5.39547E-07 1.67051E-06 + 4.75275E-06 1.24165E-05 2.97587E-05 6.53550E-05 1.31321E-04 2.40935E-04 + 4.02495E-04 6.09788E-04 8.32808E-04 1.01546E-03 1.08679E-03 9.86284E-04 + 6.94205E-04 2.50633E-04 -2.50633E-04 -6.94205E-04 -9.86284E-04 -1.08679E-03 + -1.01546E-03 -8.32808E-04 -6.09788E-04 -4.02495E-04 -2.40935E-04 -1.31321E-04 + -6.53550E-05 -2.97587E-05 -1.24165E-05 -4.75275E-06 -1.67051E-06 -5.39547E-07 + -1.60231E-07 -4.37737E-08 -1.10054E-08 -2.54729E-09 + 9.14763E-10 3.95219E-09 1.57197E-08 5.75408E-08 1.93758E-07 5.99899E-07 + 1.70677E-06 4.45891E-06 1.06867E-05 2.34698E-05 4.71590E-05 8.65227E-05 + 1.44541E-04 2.18981E-04 2.99068E-04 3.64654E-04 3.90254E-04 3.54142E-04 + 2.49250E-04 8.99844E-05 -8.99844E-05 -2.49250E-04 -3.54142E-04 -3.90254E-04 + -3.64654E-04 -2.99068E-04 -2.18981E-04 -1.44541E-04 -8.65227E-05 -4.71590E-05 + -2.34698E-05 -1.06867E-05 -4.45891E-06 -1.70677E-06 -5.99899E-07 -1.93758E-07 + -5.75408E-08 -1.57197E-08 -3.95219E-09 -9.14763E-10 + 2.90049E-10 1.25314E-09 4.98431E-09 1.82448E-08 6.14358E-08 1.90213E-07 + 5.41174E-07 1.41381E-06 3.38849E-06 7.44168E-06 1.49530E-05 2.74342E-05 + 4.58302E-05 6.94336E-05 9.48270E-05 1.15623E-04 1.23739E-04 1.12289E-04 + 7.90299E-05 2.85314E-05 -2.85314E-05 -7.90299E-05 -1.12289E-04 -1.23739E-04 + -1.15623E-04 -9.48270E-05 -6.94336E-05 -4.58302E-05 -2.74342E-05 -1.49530E-05 + -7.44168E-06 -3.38849E-06 -1.41381E-06 -5.41174E-07 -1.90213E-07 -6.14358E-08 + -1.82448E-08 -4.98431E-09 -1.25314E-09 -2.90049E-10 + 8.11524E-11 3.50615E-10 1.39456E-09 5.10469E-09 1.71891E-08 5.32195E-08 + 1.51414E-07 3.95569E-07 9.48061E-07 2.08210E-06 4.18367E-06 7.67579E-06 + 1.28228E-05 1.94268E-05 2.65316E-05 3.23499E-05 3.46208E-05 3.14171E-05 + 2.21117E-05 7.98275E-06 -7.98275E-06 -2.21117E-05 -3.14171E-05 -3.46208E-05 + -3.23499E-05 -2.65316E-05 -1.94268E-05 -1.28228E-05 -7.67579E-06 -4.18367E-06 + -2.08210E-06 -9.48061E-07 -3.95569E-07 -1.51414E-07 -5.32195E-08 -1.71891E-08 + -5.10469E-09 -1.39456E-09 -3.50615E-10 -8.11524E-11 + 2.00256E-11 8.65194E-11 3.44127E-10 1.25966E-09 4.24165E-09 1.31327E-08 + 3.73638E-08 9.76125E-08 2.33948E-07 5.13789E-07 1.03238E-06 1.89411E-06 + 3.16422E-06 4.79384E-06 6.54706E-06 7.98283E-06 8.54321E-06 7.75264E-06 + 5.45639E-06 1.96986E-06 -1.96986E-06 -5.45639E-06 -7.75264E-06 -8.54321E-06 + -7.98283E-06 -6.54706E-06 -4.79384E-06 -3.16422E-06 -1.89411E-06 -1.03238E-06 + -5.13789E-07 -2.33948E-07 -9.76125E-08 -3.73638E-08 -1.31327E-08 -4.24165E-09 + -1.25966E-09 -3.44127E-10 -8.65194E-11 -2.00256E-11 + 4.35660E-12 1.88225E-11 7.48656E-11 2.74041E-10 9.22780E-10 2.85705E-09 + 8.12856E-09 2.12358E-08 5.08959E-08 1.11776E-07 2.24597E-07 4.12068E-07 + 6.88381E-07 1.04291E-06 1.42432E-06 1.73668E-06 1.85859E-06 1.68660E-06 + 1.18705E-06 4.28548E-07 -4.28548E-07 -1.18705E-06 -1.68660E-06 -1.85859E-06 + -1.73668E-06 -1.42432E-06 -1.04291E-06 -6.88381E-07 -4.12068E-07 -2.24597E-07 + -1.11776E-07 -5.08959E-08 -2.12358E-08 -8.12856E-09 -2.85705E-09 -9.22780E-10 + -2.74041E-10 -7.48656E-11 -1.88225E-11 -4.35660E-12 + 8.35320E-13 3.60896E-12 1.43545E-11 5.25437E-11 1.76931E-10 5.47800E-10 + 1.55854E-09 4.07168E-09 9.75860E-09 2.14315E-08 4.30635E-08 7.90086E-08 + 1.31988E-07 1.99964E-07 2.73095E-07 3.32985E-07 3.56360E-07 3.23383E-07 + 2.27601E-07 8.21683E-08 -8.21683E-08 -2.27601E-07 -3.23383E-07 -3.56360E-07 + -3.32985E-07 -2.73095E-07 -1.99964E-07 -1.31988E-07 -7.90086E-08 -4.30635E-08 + -2.14315E-08 -9.75860E-09 -4.07168E-09 -1.55854E-09 -5.47800E-10 -1.76931E-10 + -5.25437E-11 -1.43545E-11 -3.60896E-12 -8.35320E-13 + 1.41121E-13 6.09706E-13 2.42508E-12 8.87686E-12 2.98911E-11 9.25468E-11 + 2.63304E-10 6.87879E-10 1.64864E-09 3.62069E-09 7.27525E-09 1.33479E-08 + 2.22984E-08 3.37824E-08 4.61374E-08 5.62553E-08 6.02044E-08 5.46332E-08 + 3.84514E-08 1.38817E-08 -1.38817E-08 -3.84514E-08 -5.46332E-08 -6.02044E-08 + -5.62553E-08 -4.61374E-08 -3.37824E-08 -2.22984E-08 -1.33479E-08 -7.27525E-09 + -3.62069E-09 -1.64864E-09 -6.87879E-10 -2.63304E-10 -9.25468E-11 -2.98911E-11 + -8.87686E-12 -2.42508E-12 -6.09706E-13 -1.41121E-13 + 2.10029E-14 9.07419E-14 3.60922E-13 1.32113E-12 4.44866E-12 1.37736E-11 + 3.91873E-11 1.02376E-10 2.45366E-10 5.38864E-10 1.08277E-09 1.98656E-09 + 3.31864E-09 5.02780E-09 6.86658E-09 8.37242E-09 8.96015E-09 8.13100E-09 + 5.72268E-09 2.06600E-09 -2.06600E-09 -5.72268E-09 -8.13100E-09 -8.96015E-09 + -8.37242E-09 -6.86658E-09 -5.02780E-09 -3.31864E-09 -1.98656E-09 -1.08277E-09 + -5.38864E-10 -2.45366E-10 -1.02376E-10 -3.91873E-11 -1.37736E-11 -4.44866E-12 + -1.32113E-12 -3.60922E-13 -9.07419E-14 -2.10029E-14 + -2.10029E-14 -9.07419E-14 -3.60922E-13 -1.32113E-12 -4.44866E-12 -1.37736E-11 + -3.91873E-11 -1.02376E-10 -2.45366E-10 -5.38864E-10 -1.08277E-09 -1.98656E-09 + -3.31864E-09 -5.02780E-09 -6.86658E-09 -8.37242E-09 -8.96015E-09 -8.13100E-09 + -5.72268E-09 -2.06600E-09 2.06600E-09 5.72268E-09 8.13100E-09 8.96015E-09 + 8.37242E-09 6.86658E-09 5.02780E-09 3.31864E-09 1.98656E-09 1.08277E-09 + 5.38864E-10 2.45366E-10 1.02376E-10 3.91873E-11 1.37736E-11 4.44866E-12 + 1.32113E-12 3.60922E-13 9.07419E-14 2.10029E-14 + -1.41121E-13 -6.09706E-13 -2.42508E-12 -8.87686E-12 -2.98911E-11 -9.25468E-11 + -2.63304E-10 -6.87879E-10 -1.64864E-09 -3.62069E-09 -7.27525E-09 -1.33479E-08 + -2.22984E-08 -3.37824E-08 -4.61374E-08 -5.62553E-08 -6.02044E-08 -5.46332E-08 + -3.84514E-08 -1.38817E-08 1.38817E-08 3.84514E-08 5.46332E-08 6.02044E-08 + 5.62553E-08 4.61374E-08 3.37824E-08 2.22984E-08 1.33479E-08 7.27525E-09 + 3.62069E-09 1.64864E-09 6.87879E-10 2.63304E-10 9.25468E-11 2.98911E-11 + 8.87686E-12 2.42508E-12 6.09706E-13 1.41121E-13 + -8.35320E-13 -3.60896E-12 -1.43545E-11 -5.25437E-11 -1.76931E-10 -5.47800E-10 + -1.55854E-09 -4.07168E-09 -9.75860E-09 -2.14315E-08 -4.30635E-08 -7.90086E-08 + -1.31988E-07 -1.99964E-07 -2.73095E-07 -3.32985E-07 -3.56360E-07 -3.23383E-07 + -2.27601E-07 -8.21683E-08 8.21683E-08 2.27601E-07 3.23383E-07 3.56360E-07 + 3.32985E-07 2.73095E-07 1.99964E-07 1.31988E-07 7.90086E-08 4.30635E-08 + 2.14315E-08 9.75860E-09 4.07168E-09 1.55854E-09 5.47800E-10 1.76931E-10 + 5.25437E-11 1.43545E-11 3.60896E-12 8.35320E-13 + -4.35660E-12 -1.88225E-11 -7.48656E-11 -2.74041E-10 -9.22780E-10 -2.85705E-09 + -8.12856E-09 -2.12358E-08 -5.08959E-08 -1.11776E-07 -2.24597E-07 -4.12068E-07 + -6.88381E-07 -1.04291E-06 -1.42432E-06 -1.73668E-06 -1.85859E-06 -1.68660E-06 + -1.18705E-06 -4.28548E-07 4.28548E-07 1.18705E-06 1.68660E-06 1.85859E-06 + 1.73668E-06 1.42432E-06 1.04291E-06 6.88381E-07 4.12068E-07 2.24597E-07 + 1.11776E-07 5.08959E-08 2.12358E-08 8.12856E-09 2.85705E-09 9.22780E-10 + 2.74041E-10 7.48656E-11 1.88225E-11 4.35660E-12 + -2.00256E-11 -8.65194E-11 -3.44127E-10 -1.25966E-09 -4.24165E-09 -1.31327E-08 + -3.73638E-08 -9.76125E-08 -2.33948E-07 -5.13789E-07 -1.03238E-06 -1.89411E-06 + -3.16422E-06 -4.79384E-06 -6.54706E-06 -7.98283E-06 -8.54321E-06 -7.75264E-06 + -5.45639E-06 -1.96986E-06 1.96986E-06 5.45639E-06 7.75264E-06 8.54321E-06 + 7.98283E-06 6.54706E-06 4.79384E-06 3.16422E-06 1.89411E-06 1.03238E-06 + 5.13789E-07 2.33948E-07 9.76125E-08 3.73638E-08 1.31327E-08 4.24165E-09 + 1.25966E-09 3.44127E-10 8.65194E-11 2.00256E-11 + -8.11524E-11 -3.50615E-10 -1.39456E-09 -5.10469E-09 -1.71891E-08 -5.32195E-08 + -1.51414E-07 -3.95569E-07 -9.48061E-07 -2.08210E-06 -4.18367E-06 -7.67579E-06 + -1.28228E-05 -1.94268E-05 -2.65316E-05 -3.23499E-05 -3.46208E-05 -3.14171E-05 + -2.21117E-05 -7.98275E-06 7.98275E-06 2.21117E-05 3.14171E-05 3.46208E-05 + 3.23499E-05 2.65316E-05 1.94268E-05 1.28228E-05 7.67579E-06 4.18367E-06 + 2.08210E-06 9.48061E-07 3.95569E-07 1.51414E-07 5.32195E-08 1.71891E-08 + 5.10469E-09 1.39456E-09 3.50615E-10 8.11524E-11 + -2.90049E-10 -1.25314E-09 -4.98431E-09 -1.82448E-08 -6.14358E-08 -1.90213E-07 + -5.41174E-07 -1.41381E-06 -3.38849E-06 -7.44168E-06 -1.49530E-05 -2.74342E-05 + -4.58302E-05 -6.94336E-05 -9.48270E-05 -1.15623E-04 -1.23739E-04 -1.12289E-04 + -7.90299E-05 -2.85314E-05 2.85314E-05 7.90299E-05 1.12289E-04 1.23739E-04 + 1.15623E-04 9.48270E-05 6.94336E-05 4.58302E-05 2.74342E-05 1.49530E-05 + 7.44168E-06 3.38849E-06 1.41381E-06 5.41174E-07 1.90213E-07 6.14358E-08 + 1.82448E-08 4.98431E-09 1.25314E-09 2.90049E-10 + -9.14763E-10 -3.95219E-09 -1.57197E-08 -5.75408E-08 -1.93758E-07 -5.99899E-07 + -1.70677E-06 -4.45891E-06 -1.06867E-05 -2.34698E-05 -4.71590E-05 -8.65227E-05 + -1.44541E-04 -2.18981E-04 -2.99068E-04 -3.64654E-04 -3.90254E-04 -3.54142E-04 + -2.49250E-04 -8.99844E-05 8.99844E-05 2.49250E-04 3.54142E-04 3.90254E-04 + 3.64654E-04 2.99068E-04 2.18981E-04 1.44541E-04 8.65227E-05 4.71590E-05 + 2.34698E-05 1.06867E-05 4.45891E-06 1.70677E-06 5.99899E-07 1.93758E-07 + 5.75408E-08 1.57197E-08 3.95219E-09 9.14763E-10 + -2.54729E-09 -1.10054E-08 -4.37737E-08 -1.60231E-07 -5.39547E-07 -1.67051E-06 + -4.75275E-06 -1.24165E-05 -2.97587E-05 -6.53550E-05 -1.31321E-04 -2.40935E-04 + -4.02495E-04 -6.09788E-04 -8.32808E-04 -1.01546E-03 -1.08679E-03 -9.86284E-04 + -6.94205E-04 -2.50633E-04 2.50633E-04 6.94205E-04 9.86284E-04 1.08679E-03 + 1.01546E-03 8.32808E-04 6.09788E-04 4.02495E-04 2.40935E-04 1.31321E-04 + 6.53550E-05 2.97587E-05 1.24165E-05 4.75275E-06 1.67051E-06 5.39547E-07 + 1.60231E-07 4.37737E-08 1.10054E-08 2.54729E-09 + -6.26754E-09 -2.70786E-08 -1.07704E-07 -3.94243E-07 -1.32754E-06 -4.11023E-06 + -1.16940E-05 -3.05504E-05 -7.32203E-05 -1.60804E-04 -3.23112E-04 -5.92815E-04 + -9.90334E-04 -1.50041E-03 -2.04933E-03 -2.49930E-03 -2.67592E-03 -2.42992E-03 + -1.71146E-03 -6.18179E-04 6.18179E-04 1.71146E-03 2.42992E-03 2.67592E-03 + 2.49930E-03 2.04933E-03 1.50041E-03 9.90334E-04 5.92815E-04 3.23112E-04 + 1.60804E-04 7.32203E-05 3.05504E-05 1.16940E-05 4.11023E-06 1.32754E-06 + 3.94243E-07 1.07704E-07 2.70786E-08 6.26754E-09 + -1.36372E-08 -5.89187E-08 -2.34347E-07 -8.57811E-07 -2.88851E-06 -8.94322E-06 + -2.54443E-05 -6.64729E-05 -1.59316E-04 -3.49884E-04 -7.03042E-04 -1.28989E-03 + -2.15493E-03 -3.26544E-03 -4.46266E-03 -5.45053E-03 -5.85274E-03 -5.33821E-03 + -3.77815E-03 -1.36914E-03 1.36914E-03 3.77815E-03 5.33821E-03 5.85274E-03 + 5.45053E-03 4.46266E-03 3.26544E-03 2.15493E-03 1.28989E-03 7.03042E-04 + 3.49884E-04 1.59316E-04 6.64729E-05 2.54443E-05 8.94322E-06 2.88851E-06 + 8.57811E-07 2.34347E-07 5.89187E-08 1.36372E-08 + -2.62630E-08 -1.13468E-07 -4.51314E-07 -1.65201E-06 -5.56281E-06 -1.72232E-05 + -4.90016E-05 -1.28016E-04 -3.06817E-04 -6.73822E-04 -1.35396E-03 -2.48425E-03 + -4.15124E-03 -6.29634E-03 -8.63027E-03 -1.06196E-02 -1.15713E-02 -1.07858E-02 + -7.81328E-03 -2.87509E-03 2.87509E-03 7.81328E-03 1.07858E-02 1.15713E-02 + 1.06196E-02 8.63027E-03 6.29634E-03 4.15124E-03 2.48425E-03 1.35396E-03 + 6.73822E-04 3.06817E-04 1.28016E-04 4.90016E-05 1.72232E-05 5.56281E-06 + 1.65201E-06 4.51314E-07 1.13468E-07 2.62630E-08 + -4.48020E-08 -1.93565E-07 -7.69896E-07 -2.81816E-06 -9.48960E-06 -2.93810E-05 + -8.35917E-05 -2.18383E-04 -5.23398E-04 -1.14948E-03 -2.30978E-03 -4.23869E-03 + -7.08871E-03 -1.07867E-02 -1.49383E-02 -1.88558E-02 -2.15484E-02 -2.14506E-02 + -1.65770E-02 -6.34797E-03 6.34797E-03 1.65770E-02 2.14506E-02 2.15484E-02 + 1.88558E-02 1.49383E-02 1.07867E-02 7.08871E-03 4.23869E-03 2.30978E-03 + 1.14948E-03 5.23398E-04 2.18383E-04 8.35917E-05 2.93810E-05 9.48960E-06 + 2.81816E-06 7.69896E-07 1.93565E-07 4.48020E-08 + -6.77229E-08 -2.92593E-07 -1.16378E-06 -4.25994E-06 -1.43445E-05 -4.44125E-05 + -1.26358E-04 -3.30108E-04 -7.91172E-04 -1.73757E-03 -3.49173E-03 -6.41013E-03 + -1.07408E-02 -1.64694E-02 -2.33569E-02 -3.11645E-02 -3.90944E-02 -4.35109E-02 + -3.71945E-02 -1.52032E-02 1.52032E-02 3.71945E-02 4.35109E-02 3.90944E-02 + 3.11645E-02 2.33569E-02 1.64694E-02 1.07408E-02 6.41013E-03 3.49173E-03 + 1.73757E-03 7.91172E-04 3.30108E-04 1.26358E-04 4.44125E-05 1.43445E-05 + 4.25994E-06 1.16378E-06 2.92593E-07 6.77229E-08 + -9.06350E-08 -3.91584E-07 -1.55751E-06 -5.70116E-06 -1.91976E-05 -5.94381E-05 + -1.69107E-04 -4.41791E-04 -1.05884E-03 -2.32545E-03 -4.67355E-03 -8.58475E-03 + -1.44266E-02 -2.23771E-02 -3.28482E-02 -4.71700E-02 -6.58298E-02 -8.29779E-02 + -8.43973E-02 -4.11151E-02 4.11151E-02 8.43973E-02 8.29779E-02 6.58298E-02 + 4.71700E-02 3.28482E-02 2.23771E-02 1.44266E-02 8.58475E-03 4.67355E-03 + 2.32545E-03 1.05884E-03 4.41791E-04 1.69107E-04 5.94381E-05 1.91976E-05 + 5.70116E-06 1.55751E-06 3.91584E-07 9.06350E-08 + -1.07000E-07 -4.62288E-07 -1.83873E-06 -6.73056E-06 -2.26639E-05 -7.01703E-05 + -1.99641E-04 -5.21560E-04 -1.25003E-03 -2.74537E-03 -5.51791E-03 -1.01408E-02 + -1.70842E-02 -2.67592E-02 -4.04009E-02 -6.12795E-02 -9.19080E-02 -1.29262E-01 + -1.64502E-01 -1.06097E-01 1.06097E-01 1.64502E-01 1.29262E-01 9.19080E-02 + 6.12795E-02 4.04009E-02 2.67592E-02 1.70842E-02 1.01408E-02 5.51791E-03 + 2.74537E-03 1.25003E-03 5.21560E-04 1.99641E-04 7.01703E-05 2.26639E-05 + 6.73056E-06 1.83873E-06 4.62288E-07 1.07000E-07 + -1.10276E-07 -4.76441E-07 -1.89502E-06 -6.93662E-06 -2.33577E-05 -7.23185E-05 + -2.05753E-04 -5.37528E-04 -1.28830E-03 -2.82942E-03 -5.68693E-03 -1.04523E-02 + -1.76166E-02 -2.76408E-02 -4.19394E-02 -6.42087E-02 -9.72528E-02 -1.36164E-01 + -1.66709E-01 -1.00422E-01 1.00422E-01 1.66709E-01 1.36164E-01 9.72528E-02 + 6.42087E-02 4.19394E-02 2.76408E-02 1.76166E-02 1.04523E-02 5.68693E-03 + 2.82942E-03 1.28830E-03 5.37528E-04 2.05753E-04 7.23185E-05 2.33577E-05 + 6.93662E-06 1.89502E-06 4.76441E-07 1.10276E-07 + -9.65085E-08 -4.16960E-07 -1.65844E-06 -6.07062E-06 -2.04417E-05 -6.32900E-05 + -1.80066E-04 -4.70421E-04 -1.12746E-03 -2.47617E-03 -4.97665E-03 -9.14387E-03 + -1.53865E-02 -2.39917E-02 -3.57677E-02 -5.29793E-02 -7.68683E-02 -9.91550E-02 + -9.82817E-02 -4.54699E-02 4.54699E-02 9.82817E-02 9.91550E-02 7.68683E-02 + 5.29793E-02 3.57677E-02 2.39917E-02 1.53865E-02 9.14387E-03 4.97665E-03 + 2.47617E-03 1.12746E-03 4.70421E-04 1.80066E-04 6.32900E-05 2.04417E-05 + 6.07062E-06 1.65844E-06 4.16960E-07 9.65085E-08 + -6.60192E-08 -2.85233E-07 -1.13450E-06 -4.15277E-06 -1.39837E-05 -4.32952E-05 + -1.23179E-04 -3.21804E-04 -7.71269E-04 -1.69387E-03 -3.40414E-03 -6.25194E-03 + -1.04978E-02 -1.62330E-02 -2.36197E-02 -3.33261E-02 -4.53771E-02 -5.47241E-02 + -4.92849E-02 -2.05327E-02 2.05327E-02 4.92849E-02 5.47241E-02 4.53771E-02 + 3.33261E-02 2.36197E-02 1.62330E-02 1.04978E-02 6.25194E-03 3.40414E-03 + 1.69387E-03 7.71269E-04 3.21804E-04 1.23179E-04 4.32952E-05 1.39837E-05 + 4.15277E-06 1.13450E-06 2.85233E-07 6.60192E-08 + -2.34650E-08 -1.01379E-07 -4.03232E-07 -1.47601E-06 -4.97017E-06 -1.53883E-05 + -4.37811E-05 -1.14378E-04 -2.74130E-04 -6.02044E-04 -1.20987E-03 -2.22142E-03 + -3.72519E-03 -5.73071E-03 -8.21041E-03 -1.12096E-02 -1.45680E-02 -1.67960E-02 + -1.46195E-02 -5.96580E-03 5.96580E-03 1.46195E-02 1.67960E-02 1.45680E-02 + 1.12096E-02 8.21041E-03 5.73071E-03 3.72519E-03 2.22142E-03 1.20987E-03 + 6.02044E-04 2.74130E-04 1.14378E-04 4.37811E-05 1.53883E-05 4.97017E-06 + 1.47601E-06 4.03232E-07 1.01379E-07 2.34650E-08 + 2.34650E-08 1.01379E-07 4.03232E-07 1.47601E-06 4.97017E-06 1.53883E-05 + 4.37811E-05 1.14378E-04 2.74130E-04 6.02044E-04 1.20987E-03 2.22142E-03 + 3.72519E-03 5.73071E-03 8.21041E-03 1.12096E-02 1.45680E-02 1.67960E-02 + 1.46195E-02 5.96580E-03 -5.96580E-03 -1.46195E-02 -1.67960E-02 -1.45680E-02 + -1.12096E-02 -8.21041E-03 -5.73071E-03 -3.72519E-03 -2.22142E-03 -1.20987E-03 + -6.02044E-04 -2.74130E-04 -1.14378E-04 -4.37811E-05 -1.53883E-05 -4.97017E-06 + -1.47601E-06 -4.03232E-07 -1.01379E-07 -2.34650E-08 + 6.60192E-08 2.85233E-07 1.13450E-06 4.15277E-06 1.39837E-05 4.32952E-05 + 1.23179E-04 3.21804E-04 7.71269E-04 1.69387E-03 3.40414E-03 6.25194E-03 + 1.04978E-02 1.62330E-02 2.36197E-02 3.33261E-02 4.53771E-02 5.47241E-02 + 4.92849E-02 2.05327E-02 -2.05327E-02 -4.92849E-02 -5.47241E-02 -4.53771E-02 + -3.33261E-02 -2.36197E-02 -1.62330E-02 -1.04978E-02 -6.25194E-03 -3.40414E-03 + -1.69387E-03 -7.71269E-04 -3.21804E-04 -1.23179E-04 -4.32952E-05 -1.39837E-05 + -4.15277E-06 -1.13450E-06 -2.85233E-07 -6.60192E-08 + 9.65085E-08 4.16960E-07 1.65844E-06 6.07062E-06 2.04417E-05 6.32900E-05 + 1.80066E-04 4.70421E-04 1.12746E-03 2.47617E-03 4.97665E-03 9.14387E-03 + 1.53865E-02 2.39917E-02 3.57677E-02 5.29793E-02 7.68683E-02 9.91550E-02 + 9.82817E-02 4.54699E-02 -4.54699E-02 -9.82817E-02 -9.91550E-02 -7.68683E-02 + -5.29793E-02 -3.57677E-02 -2.39917E-02 -1.53865E-02 -9.14387E-03 -4.97665E-03 + -2.47617E-03 -1.12746E-03 -4.70421E-04 -1.80066E-04 -6.32900E-05 -2.04417E-05 + -6.07062E-06 -1.65844E-06 -4.16960E-07 -9.65085E-08 + 1.10276E-07 4.76441E-07 1.89502E-06 6.93662E-06 2.33577E-05 7.23185E-05 + 2.05753E-04 5.37528E-04 1.28830E-03 2.82942E-03 5.68693E-03 1.04523E-02 + 1.76166E-02 2.76408E-02 4.19394E-02 6.42087E-02 9.72528E-02 1.36164E-01 + 1.66709E-01 1.00422E-01 -1.00422E-01 -1.66709E-01 -1.36164E-01 -9.72528E-02 + -6.42087E-02 -4.19394E-02 -2.76408E-02 -1.76166E-02 -1.04523E-02 -5.68693E-03 + -2.82942E-03 -1.28830E-03 -5.37528E-04 -2.05753E-04 -7.23185E-05 -2.33577E-05 + -6.93662E-06 -1.89502E-06 -4.76441E-07 -1.10276E-07 + 1.07000E-07 4.62288E-07 1.83873E-06 6.73056E-06 2.26639E-05 7.01703E-05 + 1.99641E-04 5.21560E-04 1.25003E-03 2.74537E-03 5.51791E-03 1.01408E-02 + 1.70842E-02 2.67592E-02 4.04009E-02 6.12795E-02 9.19080E-02 1.29262E-01 + 1.64502E-01 1.06097E-01 -1.06097E-01 -1.64502E-01 -1.29262E-01 -9.19080E-02 + -6.12795E-02 -4.04009E-02 -2.67592E-02 -1.70842E-02 -1.01408E-02 -5.51791E-03 + -2.74537E-03 -1.25003E-03 -5.21560E-04 -1.99641E-04 -7.01703E-05 -2.26639E-05 + -6.73056E-06 -1.83873E-06 -4.62288E-07 -1.07000E-07 + 9.06350E-08 3.91584E-07 1.55751E-06 5.70116E-06 1.91976E-05 5.94381E-05 + 1.69107E-04 4.41791E-04 1.05884E-03 2.32545E-03 4.67355E-03 8.58475E-03 + 1.44266E-02 2.23771E-02 3.28482E-02 4.71700E-02 6.58298E-02 8.29779E-02 + 8.43973E-02 4.11151E-02 -4.11151E-02 -8.43973E-02 -8.29779E-02 -6.58298E-02 + -4.71700E-02 -3.28482E-02 -2.23771E-02 -1.44266E-02 -8.58475E-03 -4.67355E-03 + -2.32545E-03 -1.05884E-03 -4.41791E-04 -1.69107E-04 -5.94381E-05 -1.91976E-05 + -5.70116E-06 -1.55751E-06 -3.91584E-07 -9.06350E-08 + 6.77229E-08 2.92593E-07 1.16378E-06 4.25994E-06 1.43445E-05 4.44125E-05 + 1.26358E-04 3.30108E-04 7.91172E-04 1.73757E-03 3.49173E-03 6.41013E-03 + 1.07408E-02 1.64694E-02 2.33569E-02 3.11645E-02 3.90944E-02 4.35109E-02 + 3.71945E-02 1.52032E-02 -1.52032E-02 -3.71945E-02 -4.35109E-02 -3.90944E-02 + -3.11645E-02 -2.33569E-02 -1.64694E-02 -1.07408E-02 -6.41013E-03 -3.49173E-03 + -1.73757E-03 -7.91172E-04 -3.30108E-04 -1.26358E-04 -4.44125E-05 -1.43445E-05 + -4.25994E-06 -1.16378E-06 -2.92593E-07 -6.77229E-08 + 4.48020E-08 1.93565E-07 7.69896E-07 2.81816E-06 9.48960E-06 2.93810E-05 + 8.35917E-05 2.18383E-04 5.23398E-04 1.14948E-03 2.30978E-03 4.23869E-03 + 7.08871E-03 1.07867E-02 1.49383E-02 1.88558E-02 2.15484E-02 2.14506E-02 + 1.65770E-02 6.34797E-03 -6.34797E-03 -1.65770E-02 -2.14506E-02 -2.15484E-02 + -1.88558E-02 -1.49383E-02 -1.07867E-02 -7.08871E-03 -4.23869E-03 -2.30978E-03 + -1.14948E-03 -5.23398E-04 -2.18383E-04 -8.35917E-05 -2.93810E-05 -9.48960E-06 + -2.81816E-06 -7.69896E-07 -1.93565E-07 -4.48020E-08 + 2.62630E-08 1.13468E-07 4.51314E-07 1.65201E-06 5.56281E-06 1.72232E-05 + 4.90016E-05 1.28016E-04 3.06817E-04 6.73822E-04 1.35396E-03 2.48425E-03 + 4.15124E-03 6.29634E-03 8.63027E-03 1.06196E-02 1.15713E-02 1.07858E-02 + 7.81328E-03 2.87509E-03 -2.87509E-03 -7.81328E-03 -1.07858E-02 -1.15713E-02 + -1.06196E-02 -8.63027E-03 -6.29634E-03 -4.15124E-03 -2.48425E-03 -1.35396E-03 + -6.73822E-04 -3.06817E-04 -1.28016E-04 -4.90016E-05 -1.72232E-05 -5.56281E-06 + -1.65201E-06 -4.51314E-07 -1.13468E-07 -2.62630E-08 + 1.36372E-08 5.89187E-08 2.34347E-07 8.57811E-07 2.88851E-06 8.94322E-06 + 2.54443E-05 6.64729E-05 1.59316E-04 3.49884E-04 7.03042E-04 1.28989E-03 + 2.15493E-03 3.26544E-03 4.46266E-03 5.45053E-03 5.85274E-03 5.33821E-03 + 3.77815E-03 1.36914E-03 -1.36914E-03 -3.77815E-03 -5.33821E-03 -5.85274E-03 + -5.45053E-03 -4.46266E-03 -3.26544E-03 -2.15493E-03 -1.28989E-03 -7.03042E-04 + -3.49884E-04 -1.59316E-04 -6.64729E-05 -2.54443E-05 -8.94322E-06 -2.88851E-06 + -8.57811E-07 -2.34347E-07 -5.89187E-08 -1.36372E-08 + 6.26754E-09 2.70786E-08 1.07704E-07 3.94243E-07 1.32754E-06 4.11023E-06 + 1.16940E-05 3.05504E-05 7.32203E-05 1.60804E-04 3.23112E-04 5.92815E-04 + 9.90334E-04 1.50041E-03 2.04933E-03 2.49930E-03 2.67592E-03 2.42992E-03 + 1.71146E-03 6.18179E-04 -6.18179E-04 -1.71146E-03 -2.42992E-03 -2.67592E-03 + -2.49930E-03 -2.04933E-03 -1.50041E-03 -9.90334E-04 -5.92815E-04 -3.23112E-04 + -1.60804E-04 -7.32203E-05 -3.05504E-05 -1.16940E-05 -4.11023E-06 -1.32754E-06 + -3.94243E-07 -1.07704E-07 -2.70786E-08 -6.26754E-09 + 2.54729E-09 1.10054E-08 4.37737E-08 1.60231E-07 5.39547E-07 1.67051E-06 + 4.75275E-06 1.24165E-05 2.97587E-05 6.53550E-05 1.31321E-04 2.40935E-04 + 4.02495E-04 6.09788E-04 8.32808E-04 1.01546E-03 1.08679E-03 9.86284E-04 + 6.94205E-04 2.50633E-04 -2.50633E-04 -6.94205E-04 -9.86284E-04 -1.08679E-03 + -1.01546E-03 -8.32808E-04 -6.09788E-04 -4.02495E-04 -2.40935E-04 -1.31321E-04 + -6.53550E-05 -2.97587E-05 -1.24165E-05 -4.75275E-06 -1.67051E-06 -5.39547E-07 + -1.60231E-07 -4.37737E-08 -1.10054E-08 -2.54729E-09 + 9.14763E-10 3.95219E-09 1.57197E-08 5.75408E-08 1.93758E-07 5.99899E-07 + 1.70677E-06 4.45891E-06 1.06867E-05 2.34698E-05 4.71590E-05 8.65227E-05 + 1.44541E-04 2.18981E-04 2.99068E-04 3.64654E-04 3.90254E-04 3.54142E-04 + 2.49250E-04 8.99844E-05 -8.99844E-05 -2.49250E-04 -3.54142E-04 -3.90254E-04 + -3.64654E-04 -2.99068E-04 -2.18981E-04 -1.44541E-04 -8.65227E-05 -4.71590E-05 + -2.34698E-05 -1.06867E-05 -4.45891E-06 -1.70677E-06 -5.99899E-07 -1.93758E-07 + -5.75408E-08 -1.57197E-08 -3.95219E-09 -9.14763E-10 + 2.90049E-10 1.25314E-09 4.98431E-09 1.82448E-08 6.14358E-08 1.90213E-07 + 5.41174E-07 1.41381E-06 3.38849E-06 7.44168E-06 1.49530E-05 2.74342E-05 + 4.58302E-05 6.94336E-05 9.48270E-05 1.15623E-04 1.23739E-04 1.12289E-04 + 7.90299E-05 2.85314E-05 -2.85314E-05 -7.90299E-05 -1.12289E-04 -1.23739E-04 + -1.15623E-04 -9.48270E-05 -6.94336E-05 -4.58302E-05 -2.74342E-05 -1.49530E-05 + -7.44168E-06 -3.38849E-06 -1.41381E-06 -5.41174E-07 -1.90213E-07 -6.14358E-08 + -1.82448E-08 -4.98431E-09 -1.25314E-09 -2.90049E-10 + 8.11524E-11 3.50615E-10 1.39456E-09 5.10469E-09 1.71891E-08 5.32195E-08 + 1.51414E-07 3.95569E-07 9.48061E-07 2.08210E-06 4.18367E-06 7.67579E-06 + 1.28228E-05 1.94268E-05 2.65316E-05 3.23499E-05 3.46208E-05 3.14171E-05 + 2.21117E-05 7.98275E-06 -7.98275E-06 -2.21117E-05 -3.14171E-05 -3.46208E-05 + -3.23499E-05 -2.65316E-05 -1.94268E-05 -1.28228E-05 -7.67579E-06 -4.18367E-06 + -2.08210E-06 -9.48061E-07 -3.95569E-07 -1.51414E-07 -5.32195E-08 -1.71891E-08 + -5.10469E-09 -1.39456E-09 -3.50615E-10 -8.11524E-11 + 2.00256E-11 8.65194E-11 3.44127E-10 1.25966E-09 4.24165E-09 1.31327E-08 + 3.73638E-08 9.76125E-08 2.33948E-07 5.13789E-07 1.03238E-06 1.89411E-06 + 3.16422E-06 4.79384E-06 6.54706E-06 7.98283E-06 8.54321E-06 7.75264E-06 + 5.45639E-06 1.96986E-06 -1.96986E-06 -5.45639E-06 -7.75264E-06 -8.54321E-06 + -7.98283E-06 -6.54706E-06 -4.79384E-06 -3.16422E-06 -1.89411E-06 -1.03238E-06 + -5.13789E-07 -2.33948E-07 -9.76125E-08 -3.73638E-08 -1.31327E-08 -4.24165E-09 + -1.25966E-09 -3.44127E-10 -8.65194E-11 -2.00256E-11 + 4.35660E-12 1.88225E-11 7.48656E-11 2.74041E-10 9.22780E-10 2.85705E-09 + 8.12856E-09 2.12358E-08 5.08959E-08 1.11776E-07 2.24597E-07 4.12068E-07 + 6.88381E-07 1.04291E-06 1.42432E-06 1.73668E-06 1.85859E-06 1.68660E-06 + 1.18705E-06 4.28548E-07 -4.28548E-07 -1.18705E-06 -1.68660E-06 -1.85859E-06 + -1.73668E-06 -1.42432E-06 -1.04291E-06 -6.88381E-07 -4.12068E-07 -2.24597E-07 + -1.11776E-07 -5.08959E-08 -2.12358E-08 -8.12856E-09 -2.85705E-09 -9.22780E-10 + -2.74041E-10 -7.48656E-11 -1.88225E-11 -4.35660E-12 + 8.35320E-13 3.60896E-12 1.43545E-11 5.25437E-11 1.76931E-10 5.47800E-10 + 1.55854E-09 4.07168E-09 9.75860E-09 2.14315E-08 4.30635E-08 7.90086E-08 + 1.31988E-07 1.99964E-07 2.73095E-07 3.32985E-07 3.56360E-07 3.23383E-07 + 2.27601E-07 8.21683E-08 -8.21683E-08 -2.27601E-07 -3.23383E-07 -3.56360E-07 + -3.32985E-07 -2.73095E-07 -1.99964E-07 -1.31988E-07 -7.90086E-08 -4.30635E-08 + -2.14315E-08 -9.75860E-09 -4.07168E-09 -1.55854E-09 -5.47800E-10 -1.76931E-10 + -5.25437E-11 -1.43545E-11 -3.60896E-12 -8.35320E-13 + 1.41121E-13 6.09706E-13 2.42508E-12 8.87686E-12 2.98911E-11 9.25468E-11 + 2.63304E-10 6.87879E-10 1.64864E-09 3.62069E-09 7.27525E-09 1.33479E-08 + 2.22984E-08 3.37824E-08 4.61374E-08 5.62553E-08 6.02044E-08 5.46332E-08 + 3.84514E-08 1.38817E-08 -1.38817E-08 -3.84514E-08 -5.46332E-08 -6.02044E-08 + -5.62553E-08 -4.61374E-08 -3.37824E-08 -2.22984E-08 -1.33479E-08 -7.27525E-09 + -3.62069E-09 -1.64864E-09 -6.87879E-10 -2.63304E-10 -9.25468E-11 -2.98911E-11 + -8.87686E-12 -2.42508E-12 -6.09706E-13 -1.41121E-13 + 2.10029E-14 9.07419E-14 3.60922E-13 1.32113E-12 4.44866E-12 1.37736E-11 + 3.91873E-11 1.02376E-10 2.45366E-10 5.38864E-10 1.08277E-09 1.98656E-09 + 3.31864E-09 5.02780E-09 6.86658E-09 8.37242E-09 8.96015E-09 8.13100E-09 + 5.72268E-09 2.06600E-09 -2.06600E-09 -5.72268E-09 -8.13100E-09 -8.96015E-09 + -8.37242E-09 -6.86658E-09 -5.02780E-09 -3.31864E-09 -1.98656E-09 -1.08277E-09 + -5.38864E-10 -2.45366E-10 -1.02376E-10 -3.91873E-11 -1.37736E-11 -4.44866E-12 + -1.32113E-12 -3.60922E-13 -9.07419E-14 -2.10029E-14 + -1.79722E-14 -7.76480E-14 -3.08842E-13 -1.13050E-12 -3.80673E-12 -1.17861E-11 + -3.35326E-11 -8.76036E-11 -2.09960E-10 -4.61107E-10 -9.26527E-10 -1.69990E-09 + -2.83977E-09 -4.30230E-09 -5.87574E-09 -7.16430E-09 -7.66722E-09 -6.95771E-09 + -4.89691E-09 -1.76788E-09 1.76788E-09 4.89691E-09 6.95771E-09 7.66722E-09 + 7.16430E-09 5.87574E-09 4.30230E-09 2.83977E-09 1.69990E-09 9.26527E-10 + 4.61107E-10 2.09960E-10 8.76036E-11 3.35326E-11 1.17861E-11 3.80673E-12 + 1.13050E-12 3.08842E-13 7.76480E-14 1.79722E-14 + -1.20828E-13 -5.22033E-13 -2.07636E-12 -7.60040E-12 -2.55929E-11 -7.92389E-11 + -2.25442E-10 -5.88965E-10 -1.41157E-09 -3.10005E-09 -6.22910E-09 -1.14285E-08 + -1.90919E-08 -2.89246E-08 -3.95030E-08 -4.81660E-08 -5.15472E-08 -4.67771E-08 + -3.29222E-08 -1.18856E-08 1.18856E-08 3.29222E-08 4.67771E-08 5.15472E-08 + 4.81660E-08 3.95030E-08 2.89246E-08 1.90919E-08 1.14285E-08 6.22910E-09 + 3.10005E-09 1.41157E-09 5.88965E-10 2.25442E-10 7.92389E-11 2.55929E-11 + 7.60040E-12 2.07636E-12 5.22033E-13 1.20828E-13 + -7.15745E-13 -3.09234E-12 -1.22997E-11 -4.50221E-11 -1.51603E-10 -4.69384E-10 + -1.33544E-09 -3.48882E-09 -8.36167E-09 -1.83636E-08 -3.68990E-08 -6.76986E-08 + -1.13094E-07 -1.71339E-07 -2.34002E-07 -2.85319E-07 -3.05348E-07 -2.77091E-07 + -1.95020E-07 -7.04060E-08 7.04060E-08 1.95020E-07 2.77091E-07 3.05348E-07 + 2.85319E-07 2.34002E-07 1.71339E-07 1.13094E-07 6.76986E-08 3.68990E-08 + 1.83636E-08 8.36167E-09 3.48882E-09 1.33544E-09 4.69384E-10 1.51603E-10 + 4.50221E-11 1.22997E-11 3.09234E-12 7.15745E-13 + -3.73659E-12 -1.61437E-11 -6.42111E-11 -2.35041E-10 -7.91454E-10 -2.45044E-09 + -6.97174E-09 -1.82136E-08 -4.36526E-08 -9.58684E-08 -1.92634E-07 -3.53425E-07 + -5.90414E-07 -8.94487E-07 -1.22162E-06 -1.48952E-06 -1.59409E-06 -1.44657E-06 + -1.01811E-06 -3.67559E-07 3.67559E-07 1.01811E-06 1.44657E-06 1.59409E-06 + 1.48952E-06 1.22162E-06 8.94487E-07 5.90414E-07 3.53425E-07 1.92634E-07 + 9.58684E-08 4.36526E-08 1.82136E-08 6.97174E-09 2.45044E-09 7.91454E-10 + 2.35041E-10 6.42111E-11 1.61437E-11 3.73659E-12 + -1.71971E-11 -7.42990E-11 -2.95521E-10 -1.08174E-09 -3.64254E-09 -1.12778E-08 + -3.20863E-08 -8.38252E-08 -2.00904E-07 -4.41219E-07 -8.86565E-07 -1.62658E-06 + -2.71729E-06 -4.11673E-06 -5.62231E-06 -6.85529E-06 -7.33652E-06 -6.65762E-06 + -4.68570E-06 -1.69163E-06 1.69163E-06 4.68570E-06 6.65762E-06 7.33652E-06 + 6.85529E-06 5.62231E-06 4.11673E-06 2.71729E-06 1.62658E-06 8.86565E-07 + 4.41219E-07 2.00904E-07 8.38252E-08 3.20863E-08 1.12778E-08 3.64254E-09 + 1.08174E-09 2.95521E-10 7.42990E-11 1.71971E-11 + -6.98013E-11 -3.01573E-10 -1.19949E-09 -4.39067E-09 -1.47847E-08 -4.57755E-08 + -1.30235E-07 -3.40239E-07 -8.15451E-07 -1.79087E-06 -3.59848E-06 -6.60214E-06 + -1.10292E-05 -1.67094E-05 -2.28205E-05 -2.78250E-05 -2.97783E-05 -2.70227E-05 + -1.90188E-05 -6.86617E-06 6.86617E-06 1.90188E-05 2.70227E-05 2.97783E-05 + 2.78250E-05 2.28205E-05 1.67094E-05 1.10292E-05 6.60214E-06 3.59848E-06 + 1.79087E-06 8.15451E-07 3.40239E-07 1.30235E-07 4.57755E-08 1.47847E-08 + 4.39067E-09 1.19949E-09 3.01573E-10 6.98013E-11 + -2.49986E-10 -1.08005E-09 -4.29585E-09 -1.57247E-08 -5.29499E-08 -1.63940E-07 + -4.66424E-07 -1.21853E-06 -2.92045E-06 -6.41379E-06 -1.28876E-05 -2.36448E-05 + -3.94999E-05 -5.98430E-05 -8.17290E-05 -9.96522E-05 -1.06648E-04 -9.67787E-05 + -6.81138E-05 -2.45904E-05 2.45904E-05 6.81138E-05 9.67787E-05 1.06648E-04 + 9.96522E-05 8.17290E-05 5.98430E-05 3.94999E-05 2.36448E-05 1.28876E-05 + 6.41379E-06 2.92045E-06 1.21853E-06 4.66424E-07 1.63940E-07 5.29499E-08 + 1.57247E-08 4.29585E-09 1.08005E-09 2.49986E-10 + -7.90443E-10 -3.41507E-09 -1.35833E-08 -4.97208E-08 -1.67425E-07 -5.18370E-07 + -1.47481E-06 -3.85293E-06 -9.23432E-06 -2.02801E-05 -4.07499E-05 -7.47639E-05 + -1.24897E-04 -1.89221E-04 -2.58423E-04 -3.15096E-04 -3.37216E-04 -3.06011E-04 + -2.15375E-04 -7.77546E-05 7.77546E-05 2.15375E-04 3.06011E-04 3.37216E-04 + 3.15096E-04 2.58423E-04 1.89221E-04 1.24897E-04 7.47639E-05 4.07499E-05 + 2.02801E-05 9.23432E-06 3.85293E-06 1.47481E-06 5.18370E-07 1.67425E-07 + 4.97208E-08 1.35833E-08 3.41507E-09 7.90443E-10 + -2.20824E-09 -9.54060E-09 -3.79473E-08 -1.38904E-07 -4.67732E-07 -1.44816E-06 + -4.12015E-06 -1.07638E-05 -2.57977E-05 -5.66562E-05 -1.13842E-04 -2.08866E-04 + -3.48922E-04 -5.28624E-04 -7.21957E-04 -8.80294E-04 -9.42115E-04 -8.54969E-04 + -6.01763E-04 -2.17255E-04 2.17255E-04 6.01763E-04 8.54969E-04 9.42115E-04 + 8.80294E-04 7.21957E-04 5.28624E-04 3.48922E-04 2.08866E-04 1.13842E-04 + 5.66562E-05 2.57977E-05 1.07638E-05 4.12015E-06 1.44816E-06 4.67732E-07 + 1.38904E-07 3.79473E-08 9.54060E-09 2.20824E-09 + -5.45530E-09 -2.35694E-08 -9.37461E-08 -3.43152E-07 -1.15550E-06 -3.57757E-06 + -1.01785E-05 -2.65913E-05 -6.37314E-05 -1.39965E-04 -2.81239E-04 -5.15989E-04 + -8.61991E-04 -1.30595E-03 -1.78367E-03 -2.17515E-03 -2.32851E-03 -2.11396E-03 + -1.48854E-03 -5.37568E-04 5.37568E-04 1.48854E-03 2.11396E-03 2.32851E-03 + 2.17515E-03 1.78367E-03 1.30595E-03 8.61991E-04 5.15989E-04 2.81239E-04 + 1.39965E-04 6.37314E-05 2.65913E-05 1.01785E-05 3.57757E-06 1.15550E-06 + 3.43152E-07 9.37461E-08 2.35694E-08 5.45530E-09 + -1.19291E-08 -5.15391E-08 -2.04995E-07 -7.50370E-07 -2.52673E-06 -7.82307E-06 + -2.22574E-05 -5.81471E-05 -1.39361E-04 -3.06061E-04 -6.14985E-04 -1.12832E-03 + -1.88498E-03 -2.85617E-03 -3.90243E-03 -4.76348E-03 -5.10904E-03 -4.65170E-03 + -3.28592E-03 -1.18922E-03 1.18922E-03 3.28592E-03 4.65170E-03 5.10904E-03 + 4.76348E-03 3.90243E-03 2.85617E-03 1.88498E-03 1.12832E-03 6.14985E-04 + 3.06061E-04 1.39361E-04 5.81471E-05 2.22574E-05 7.82307E-06 2.52673E-06 + 7.50370E-07 2.04995E-07 5.15391E-08 1.19291E-08 + -2.31127E-08 -9.98570E-08 -3.97177E-07 -1.45384E-06 -4.89554E-06 -1.51572E-05 + -4.31237E-05 -1.12660E-04 -2.70013E-04 -5.92994E-04 -1.19154E-03 -2.18620E-03 + -3.65284E-03 -5.53819E-03 -7.58148E-03 -9.29942E-03 -1.00701E-02 -9.30140E-03 + -6.67346E-03 -2.44033E-03 2.44033E-03 6.67346E-03 9.30140E-03 1.00701E-02 + 9.29942E-03 7.58148E-03 5.53819E-03 3.65284E-03 2.18620E-03 1.19154E-03 + 5.92994E-04 2.70013E-04 1.12660E-04 4.31237E-05 1.51572E-05 4.89554E-06 + 1.45384E-06 3.97177E-07 9.98570E-08 2.31127E-08 + -3.97118E-08 -1.71573E-07 -6.82423E-07 -2.49797E-06 -8.41142E-06 -2.60428E-05 + -7.40943E-05 -1.93571E-04 -4.63931E-04 -1.01887E-03 -2.04732E-03 -3.75676E-03 + -6.28033E-03 -9.54198E-03 -1.31508E-02 -1.64042E-02 -1.83445E-02 -1.77393E-02 + -1.33367E-02 -5.02335E-03 5.02335E-03 1.33367E-02 1.77393E-02 1.83445E-02 + 1.64042E-02 1.31508E-02 9.54198E-03 6.28033E-03 3.75676E-03 2.04732E-03 + 1.01887E-03 4.63931E-04 1.93571E-04 7.40943E-05 2.60428E-05 8.41142E-06 + 2.49797E-06 6.82423E-07 1.71573E-07 3.97118E-08 + -6.05283E-08 -2.61509E-07 -1.04014E-06 -3.80738E-06 -1.28206E-05 -3.96943E-05 + -1.12934E-04 -2.95039E-04 -7.07121E-04 -1.55297E-03 -3.12066E-03 -5.72774E-03 + -9.58740E-03 -1.46404E-02 -2.05008E-02 -2.65695E-02 -3.17965E-02 -3.35237E-02 + -2.72740E-02 -1.07681E-02 1.07681E-02 2.72740E-02 3.35237E-02 3.17965E-02 + 2.65695E-02 2.05008E-02 1.46404E-02 9.58740E-03 5.72774E-03 3.12066E-03 + 1.55297E-03 7.07121E-04 2.95039E-04 1.12934E-04 3.96943E-05 1.28206E-05 + 3.80738E-06 1.04014E-06 2.61509E-07 6.05283E-08 + -8.17581E-08 -3.53231E-07 -1.40496E-06 -5.14278E-06 -1.73173E-05 -5.36167E-05 + -1.52544E-04 -3.98521E-04 -9.55138E-04 -2.09768E-03 -4.21551E-03 -7.74037E-03 + -1.29824E-02 -1.99841E-02 -2.86802E-02 -3.92881E-02 -5.13000E-02 -5.96346E-02 + -5.31594E-02 -2.24642E-02 2.24642E-02 5.31594E-02 5.96346E-02 5.13000E-02 + 3.92881E-02 2.86802E-02 1.99841E-02 1.29824E-02 7.74037E-03 4.21551E-03 + 2.09768E-03 9.55138E-04 3.98521E-04 1.52544E-04 5.36167E-05 1.73173E-05 + 5.14278E-06 1.40496E-06 3.53231E-07 8.17581E-08 + -9.74694E-08 -4.21111E-07 -1.67495E-06 -6.13106E-06 -2.06452E-05 -6.39202E-05 + -1.81859E-04 -4.75104E-04 -1.13869E-03 -2.50081E-03 -5.02598E-03 -9.23226E-03 + -1.55162E-02 -2.40773E-02 -3.53922E-02 -5.09749E-02 -7.13777E-02 -8.92967E-02 + -8.66836E-02 -3.96821E-02 3.96821E-02 8.66836E-02 8.92967E-02 7.13777E-02 + 5.09749E-02 3.53922E-02 2.40773E-02 1.55162E-02 9.23226E-03 5.02598E-03 + 2.50081E-03 1.13869E-03 4.75104E-04 1.81859E-04 6.39202E-05 2.06452E-05 + 6.13106E-06 1.67495E-06 4.21111E-07 9.74694E-08 + -1.01430E-07 -4.38222E-07 -1.74301E-06 -6.38018E-06 -2.14840E-05 -6.65173E-05 + -1.89248E-04 -4.94408E-04 -1.18495E-03 -2.60243E-03 -5.23039E-03 -9.60986E-03 + -1.61687E-02 -2.51994E-02 -3.75163E-02 -5.54188E-02 -8.01177E-02 -1.02716E-01 + -1.00166E-01 -4.54005E-02 4.54005E-02 1.00166E-01 1.02716E-01 8.01177E-02 + 5.54188E-02 3.75163E-02 2.51994E-02 1.61687E-02 9.60986E-03 5.23039E-03 + 2.60243E-03 1.18495E-03 4.94408E-04 1.89248E-04 6.65173E-05 2.14840E-05 + 6.38018E-06 1.74301E-06 4.38222E-07 1.01430E-07 + -8.95376E-08 -3.86842E-07 -1.53865E-06 -5.63213E-06 -1.89651E-05 -5.87185E-05 + -1.67059E-04 -4.36441E-04 -1.04602E-03 -2.29731E-03 -4.61714E-03 -8.48301E-03 + -1.42718E-02 -2.22379E-02 -3.30871E-02 -4.88224E-02 -7.04664E-02 -8.97824E-02 + -8.54572E-02 -3.74397E-02 3.74397E-02 8.54572E-02 8.97824E-02 7.04664E-02 + 4.88224E-02 3.30871E-02 2.22379E-02 1.42718E-02 8.48301E-03 4.61714E-03 + 2.29731E-03 1.04602E-03 4.36441E-04 1.67059E-04 5.87185E-05 1.89651E-05 + 5.63213E-06 1.53865E-06 3.86842E-07 8.95376E-08 + -6.16547E-08 -2.66376E-07 -1.05950E-06 -3.87823E-06 -1.30592E-05 -4.04330E-05 + -1.15036E-04 -3.00530E-04 -7.20282E-04 -1.58190E-03 -3.17924E-03 -5.84034E-03 + -9.81875E-03 -1.52565E-02 -2.25161E-02 -3.26977E-02 -4.62588E-02 -5.79675E-02 + -5.46250E-02 -2.38345E-02 2.38345E-02 5.46250E-02 5.79675E-02 4.62588E-02 + 3.26977E-02 2.25161E-02 1.52565E-02 9.81875E-03 5.84034E-03 3.17924E-03 + 1.58190E-03 7.20282E-04 3.00530E-04 1.15036E-04 4.04330E-05 1.30592E-05 + 3.87823E-06 1.05950E-06 2.66376E-07 6.16547E-08 + -2.19922E-08 -9.50160E-08 -3.77922E-07 -1.38336E-06 -4.65820E-06 -1.44224E-05 + -4.10330E-05 -1.07198E-04 -2.56923E-04 -5.64260E-04 -1.13400E-03 -2.08293E-03 + -3.49964E-03 -5.42439E-03 -7.94775E-03 -1.13741E-02 -1.57845E-02 -1.93983E-02 + -1.78396E-02 -7.58765E-03 7.58765E-03 1.78396E-02 1.93983E-02 1.57845E-02 + 1.13741E-02 7.94775E-03 5.42439E-03 3.49964E-03 2.08293E-03 1.13400E-03 + 5.64260E-04 2.56923E-04 1.07198E-04 4.10330E-05 1.44224E-05 4.65820E-06 + 1.38336E-06 3.77922E-07 9.50160E-08 2.19922E-08 + 2.19922E-08 9.50160E-08 3.77922E-07 1.38336E-06 4.65820E-06 1.44224E-05 + 4.10330E-05 1.07198E-04 2.56923E-04 5.64260E-04 1.13400E-03 2.08293E-03 + 3.49964E-03 5.42439E-03 7.94775E-03 1.13741E-02 1.57845E-02 1.93983E-02 + 1.78396E-02 7.58765E-03 -7.58765E-03 -1.78396E-02 -1.93983E-02 -1.57845E-02 + -1.13741E-02 -7.94775E-03 -5.42439E-03 -3.49964E-03 -2.08293E-03 -1.13400E-03 + -5.64260E-04 -2.56923E-04 -1.07198E-04 -4.10330E-05 -1.44224E-05 -4.65820E-06 + -1.38336E-06 -3.77922E-07 -9.50160E-08 -2.19922E-08 + 6.16547E-08 2.66376E-07 1.05950E-06 3.87823E-06 1.30592E-05 4.04330E-05 + 1.15036E-04 3.00530E-04 7.20282E-04 1.58190E-03 3.17924E-03 5.84034E-03 + 9.81875E-03 1.52565E-02 2.25161E-02 3.26977E-02 4.62588E-02 5.79675E-02 + 5.46250E-02 2.38345E-02 -2.38345E-02 -5.46250E-02 -5.79675E-02 -4.62588E-02 + -3.26977E-02 -2.25161E-02 -1.52565E-02 -9.81875E-03 -5.84034E-03 -3.17924E-03 + -1.58190E-03 -7.20282E-04 -3.00530E-04 -1.15036E-04 -4.04330E-05 -1.30592E-05 + -3.87823E-06 -1.05950E-06 -2.66376E-07 -6.16547E-08 + 8.95376E-08 3.86842E-07 1.53865E-06 5.63213E-06 1.89651E-05 5.87185E-05 + 1.67059E-04 4.36441E-04 1.04602E-03 2.29731E-03 4.61714E-03 8.48301E-03 + 1.42718E-02 2.22379E-02 3.30871E-02 4.88224E-02 7.04664E-02 8.97824E-02 + 8.54572E-02 3.74397E-02 -3.74397E-02 -8.54572E-02 -8.97824E-02 -7.04664E-02 + -4.88224E-02 -3.30871E-02 -2.22379E-02 -1.42718E-02 -8.48301E-03 -4.61714E-03 + -2.29731E-03 -1.04602E-03 -4.36441E-04 -1.67059E-04 -5.87185E-05 -1.89651E-05 + -5.63213E-06 -1.53865E-06 -3.86842E-07 -8.95376E-08 + 1.01430E-07 4.38222E-07 1.74301E-06 6.38018E-06 2.14840E-05 6.65173E-05 + 1.89248E-04 4.94408E-04 1.18495E-03 2.60243E-03 5.23039E-03 9.60986E-03 + 1.61687E-02 2.51994E-02 3.75163E-02 5.54188E-02 8.01177E-02 1.02716E-01 + 1.00166E-01 4.54005E-02 -4.54005E-02 -1.00166E-01 -1.02716E-01 -8.01177E-02 + -5.54188E-02 -3.75163E-02 -2.51994E-02 -1.61687E-02 -9.60986E-03 -5.23039E-03 + -2.60243E-03 -1.18495E-03 -4.94408E-04 -1.89248E-04 -6.65173E-05 -2.14840E-05 + -6.38018E-06 -1.74301E-06 -4.38222E-07 -1.01430E-07 + 9.74694E-08 4.21111E-07 1.67495E-06 6.13106E-06 2.06452E-05 6.39202E-05 + 1.81859E-04 4.75104E-04 1.13869E-03 2.50081E-03 5.02598E-03 9.23226E-03 + 1.55162E-02 2.40773E-02 3.53922E-02 5.09749E-02 7.13777E-02 8.92967E-02 + 8.66836E-02 3.96821E-02 -3.96821E-02 -8.66836E-02 -8.92967E-02 -7.13777E-02 + -5.09749E-02 -3.53922E-02 -2.40773E-02 -1.55162E-02 -9.23226E-03 -5.02598E-03 + -2.50081E-03 -1.13869E-03 -4.75104E-04 -1.81859E-04 -6.39202E-05 -2.06452E-05 + -6.13106E-06 -1.67495E-06 -4.21111E-07 -9.74694E-08 + 8.17581E-08 3.53231E-07 1.40496E-06 5.14278E-06 1.73173E-05 5.36167E-05 + 1.52544E-04 3.98521E-04 9.55138E-04 2.09768E-03 4.21551E-03 7.74037E-03 + 1.29824E-02 1.99841E-02 2.86802E-02 3.92881E-02 5.13000E-02 5.96346E-02 + 5.31594E-02 2.24642E-02 -2.24642E-02 -5.31594E-02 -5.96346E-02 -5.13000E-02 + -3.92881E-02 -2.86802E-02 -1.99841E-02 -1.29824E-02 -7.74037E-03 -4.21551E-03 + -2.09768E-03 -9.55138E-04 -3.98521E-04 -1.52544E-04 -5.36167E-05 -1.73173E-05 + -5.14278E-06 -1.40496E-06 -3.53231E-07 -8.17581E-08 + 6.05283E-08 2.61509E-07 1.04014E-06 3.80738E-06 1.28206E-05 3.96943E-05 + 1.12934E-04 2.95039E-04 7.07121E-04 1.55297E-03 3.12066E-03 5.72774E-03 + 9.58740E-03 1.46404E-02 2.05008E-02 2.65695E-02 3.17965E-02 3.35237E-02 + 2.72740E-02 1.07681E-02 -1.07681E-02 -2.72740E-02 -3.35237E-02 -3.17965E-02 + -2.65695E-02 -2.05008E-02 -1.46404E-02 -9.58740E-03 -5.72774E-03 -3.12066E-03 + -1.55297E-03 -7.07121E-04 -2.95039E-04 -1.12934E-04 -3.96943E-05 -1.28206E-05 + -3.80738E-06 -1.04014E-06 -2.61509E-07 -6.05283E-08 + 3.97118E-08 1.71573E-07 6.82423E-07 2.49797E-06 8.41142E-06 2.60428E-05 + 7.40943E-05 1.93571E-04 4.63931E-04 1.01887E-03 2.04732E-03 3.75676E-03 + 6.28033E-03 9.54198E-03 1.31508E-02 1.64042E-02 1.83445E-02 1.77393E-02 + 1.33367E-02 5.02335E-03 -5.02335E-03 -1.33367E-02 -1.77393E-02 -1.83445E-02 + -1.64042E-02 -1.31508E-02 -9.54198E-03 -6.28033E-03 -3.75676E-03 -2.04732E-03 + -1.01887E-03 -4.63931E-04 -1.93571E-04 -7.40943E-05 -2.60428E-05 -8.41142E-06 + -2.49797E-06 -6.82423E-07 -1.71573E-07 -3.97118E-08 + 2.31127E-08 9.98570E-08 3.97177E-07 1.45384E-06 4.89554E-06 1.51572E-05 + 4.31237E-05 1.12660E-04 2.70013E-04 5.92994E-04 1.19154E-03 2.18620E-03 + 3.65284E-03 5.53819E-03 7.58148E-03 9.29942E-03 1.00701E-02 9.30140E-03 + 6.67346E-03 2.44033E-03 -2.44033E-03 -6.67346E-03 -9.30140E-03 -1.00701E-02 + -9.29942E-03 -7.58148E-03 -5.53819E-03 -3.65284E-03 -2.18620E-03 -1.19154E-03 + -5.92994E-04 -2.70013E-04 -1.12660E-04 -4.31237E-05 -1.51572E-05 -4.89554E-06 + -1.45384E-06 -3.97177E-07 -9.98570E-08 -2.31127E-08 + 1.19291E-08 5.15391E-08 2.04995E-07 7.50370E-07 2.52673E-06 7.82307E-06 + 2.22574E-05 5.81471E-05 1.39361E-04 3.06061E-04 6.14985E-04 1.12832E-03 + 1.88498E-03 2.85617E-03 3.90243E-03 4.76348E-03 5.10904E-03 4.65170E-03 + 3.28592E-03 1.18922E-03 -1.18922E-03 -3.28592E-03 -4.65170E-03 -5.10904E-03 + -4.76348E-03 -3.90243E-03 -2.85617E-03 -1.88498E-03 -1.12832E-03 -6.14985E-04 + -3.06061E-04 -1.39361E-04 -5.81471E-05 -2.22574E-05 -7.82307E-06 -2.52673E-06 + -7.50370E-07 -2.04995E-07 -5.15391E-08 -1.19291E-08 + 5.45530E-09 2.35694E-08 9.37461E-08 3.43152E-07 1.15550E-06 3.57757E-06 + 1.01785E-05 2.65913E-05 6.37314E-05 1.39965E-04 2.81239E-04 5.15989E-04 + 8.61991E-04 1.30595E-03 1.78367E-03 2.17515E-03 2.32851E-03 2.11396E-03 + 1.48854E-03 5.37568E-04 -5.37568E-04 -1.48854E-03 -2.11396E-03 -2.32851E-03 + -2.17515E-03 -1.78367E-03 -1.30595E-03 -8.61991E-04 -5.15989E-04 -2.81239E-04 + -1.39965E-04 -6.37314E-05 -2.65913E-05 -1.01785E-05 -3.57757E-06 -1.15550E-06 + -3.43152E-07 -9.37461E-08 -2.35694E-08 -5.45530E-09 + 2.20824E-09 9.54060E-09 3.79473E-08 1.38904E-07 4.67732E-07 1.44816E-06 + 4.12015E-06 1.07638E-05 2.57977E-05 5.66562E-05 1.13842E-04 2.08866E-04 + 3.48922E-04 5.28624E-04 7.21957E-04 8.80294E-04 9.42115E-04 8.54969E-04 + 6.01763E-04 2.17255E-04 -2.17255E-04 -6.01763E-04 -8.54969E-04 -9.42115E-04 + -8.80294E-04 -7.21957E-04 -5.28624E-04 -3.48922E-04 -2.08866E-04 -1.13842E-04 + -5.66562E-05 -2.57977E-05 -1.07638E-05 -4.12015E-06 -1.44816E-06 -4.67732E-07 + -1.38904E-07 -3.79473E-08 -9.54060E-09 -2.20824E-09 + 7.90443E-10 3.41507E-09 1.35833E-08 4.97208E-08 1.67425E-07 5.18370E-07 + 1.47481E-06 3.85293E-06 9.23432E-06 2.02801E-05 4.07499E-05 7.47639E-05 + 1.24897E-04 1.89221E-04 2.58423E-04 3.15096E-04 3.37216E-04 3.06011E-04 + 2.15375E-04 7.77546E-05 -7.77546E-05 -2.15375E-04 -3.06011E-04 -3.37216E-04 + -3.15096E-04 -2.58423E-04 -1.89221E-04 -1.24897E-04 -7.47639E-05 -4.07499E-05 + -2.02801E-05 -9.23432E-06 -3.85293E-06 -1.47481E-06 -5.18370E-07 -1.67425E-07 + -4.97208E-08 -1.35833E-08 -3.41507E-09 -7.90443E-10 + 2.49986E-10 1.08005E-09 4.29585E-09 1.57247E-08 5.29499E-08 1.63940E-07 + 4.66424E-07 1.21853E-06 2.92045E-06 6.41379E-06 1.28876E-05 2.36448E-05 + 3.94999E-05 5.98430E-05 8.17290E-05 9.96522E-05 1.06648E-04 9.67787E-05 + 6.81138E-05 2.45904E-05 -2.45904E-05 -6.81138E-05 -9.67787E-05 -1.06648E-04 + -9.96522E-05 -8.17290E-05 -5.98430E-05 -3.94999E-05 -2.36448E-05 -1.28876E-05 + -6.41379E-06 -2.92045E-06 -1.21853E-06 -4.66424E-07 -1.63940E-07 -5.29499E-08 + -1.57247E-08 -4.29585E-09 -1.08005E-09 -2.49986E-10 + 6.98013E-11 3.01573E-10 1.19949E-09 4.39067E-09 1.47847E-08 4.57755E-08 + 1.30235E-07 3.40239E-07 8.15451E-07 1.79087E-06 3.59848E-06 6.60214E-06 + 1.10292E-05 1.67094E-05 2.28205E-05 2.78250E-05 2.97783E-05 2.70227E-05 + 1.90188E-05 6.86617E-06 -6.86617E-06 -1.90188E-05 -2.70227E-05 -2.97783E-05 + -2.78250E-05 -2.28205E-05 -1.67094E-05 -1.10292E-05 -6.60214E-06 -3.59848E-06 + -1.79087E-06 -8.15451E-07 -3.40239E-07 -1.30235E-07 -4.57755E-08 -1.47847E-08 + -4.39067E-09 -1.19949E-09 -3.01573E-10 -6.98013E-11 + 1.71971E-11 7.42990E-11 2.95521E-10 1.08174E-09 3.64254E-09 1.12778E-08 + 3.20863E-08 8.38252E-08 2.00904E-07 4.41219E-07 8.86565E-07 1.62658E-06 + 2.71729E-06 4.11673E-06 5.62231E-06 6.85529E-06 7.33652E-06 6.65762E-06 + 4.68570E-06 1.69163E-06 -1.69163E-06 -4.68570E-06 -6.65762E-06 -7.33652E-06 + -6.85529E-06 -5.62231E-06 -4.11673E-06 -2.71729E-06 -1.62658E-06 -8.86565E-07 + -4.41219E-07 -2.00904E-07 -8.38252E-08 -3.20863E-08 -1.12778E-08 -3.64254E-09 + -1.08174E-09 -2.95521E-10 -7.42990E-11 -1.71971E-11 + 3.73659E-12 1.61437E-11 6.42111E-11 2.35041E-10 7.91454E-10 2.45044E-09 + 6.97174E-09 1.82136E-08 4.36526E-08 9.58684E-08 1.92634E-07 3.53425E-07 + 5.90414E-07 8.94487E-07 1.22162E-06 1.48952E-06 1.59409E-06 1.44657E-06 + 1.01811E-06 3.67559E-07 -3.67559E-07 -1.01811E-06 -1.44657E-06 -1.59409E-06 + -1.48952E-06 -1.22162E-06 -8.94487E-07 -5.90414E-07 -3.53425E-07 -1.92634E-07 + -9.58684E-08 -4.36526E-08 -1.82136E-08 -6.97174E-09 -2.45044E-09 -7.91454E-10 + -2.35041E-10 -6.42111E-11 -1.61437E-11 -3.73659E-12 + 7.15745E-13 3.09234E-12 1.22997E-11 4.50221E-11 1.51603E-10 4.69384E-10 + 1.33544E-09 3.48882E-09 8.36167E-09 1.83636E-08 3.68990E-08 6.76986E-08 + 1.13094E-07 1.71339E-07 2.34002E-07 2.85319E-07 3.05348E-07 2.77091E-07 + 1.95020E-07 7.04060E-08 -7.04060E-08 -1.95020E-07 -2.77091E-07 -3.05348E-07 + -2.85319E-07 -2.34002E-07 -1.71339E-07 -1.13094E-07 -6.76986E-08 -3.68990E-08 + -1.83636E-08 -8.36167E-09 -3.48882E-09 -1.33544E-09 -4.69384E-10 -1.51603E-10 + -4.50221E-11 -1.22997E-11 -3.09234E-12 -7.15745E-13 + 1.20828E-13 5.22033E-13 2.07636E-12 7.60040E-12 2.55929E-11 7.92389E-11 + 2.25442E-10 5.88965E-10 1.41157E-09 3.10005E-09 6.22910E-09 1.14285E-08 + 1.90919E-08 2.89246E-08 3.95030E-08 4.81660E-08 5.15472E-08 4.67771E-08 + 3.29222E-08 1.18856E-08 -1.18856E-08 -3.29222E-08 -4.67771E-08 -5.15472E-08 + -4.81660E-08 -3.95030E-08 -2.89246E-08 -1.90919E-08 -1.14285E-08 -6.22910E-09 + -3.10005E-09 -1.41157E-09 -5.88965E-10 -2.25442E-10 -7.92389E-11 -2.55929E-11 + -7.60040E-12 -2.07636E-12 -5.22033E-13 -1.20828E-13 + 1.79722E-14 7.76480E-14 3.08842E-13 1.13050E-12 3.80673E-12 1.17861E-11 + 3.35326E-11 8.76036E-11 2.09960E-10 4.61107E-10 9.26527E-10 1.69990E-09 + 2.83977E-09 4.30230E-09 5.87574E-09 7.16430E-09 7.66722E-09 6.95771E-09 + 4.89691E-09 1.76788E-09 -1.76788E-09 -4.89691E-09 -6.95771E-09 -7.66722E-09 + -7.16430E-09 -5.87574E-09 -4.30230E-09 -2.83977E-09 -1.69990E-09 -9.26527E-10 + -4.61107E-10 -2.09960E-10 -8.76036E-11 -3.35326E-11 -1.17861E-11 -3.80673E-12 + -1.13050E-12 -3.08842E-13 -7.76480E-14 -1.79722E-14 + -1.31663E-14 -5.68841E-14 -2.26254E-13 -8.28189E-13 -2.78877E-12 -8.63439E-12 + -2.45656E-11 -6.41775E-11 -1.53814E-10 -3.37802E-10 -6.78763E-10 -1.24533E-09 + -2.08038E-09 -3.15181E-09 -4.30450E-09 -5.24848E-09 -5.61692E-09 -5.09714E-09 + -3.58742E-09 -1.29513E-09 1.29513E-09 3.58742E-09 5.09714E-09 5.61692E-09 + 5.24848E-09 4.30450E-09 3.15181E-09 2.08038E-09 1.24533E-09 6.78763E-10 + 3.37802E-10 1.53814E-10 6.41775E-11 2.45656E-11 8.63439E-12 2.78877E-12 + 8.28189E-13 2.26254E-13 5.68841E-14 1.31663E-14 + -8.86339E-14 -3.82938E-13 -1.52312E-12 -5.57529E-12 -1.87737E-11 -5.81258E-11 + -1.65373E-10 -4.32036E-10 -1.03546E-09 -2.27405E-09 -4.56937E-09 -8.38342E-09 + -1.40049E-08 -2.12177E-08 -2.89775E-08 -3.53323E-08 -3.78126E-08 -3.43135E-08 + -2.41502E-08 -8.71869E-09 8.71869E-09 2.41502E-08 3.43135E-08 3.78126E-08 + 3.53323E-08 2.89775E-08 2.12177E-08 1.40049E-08 8.38342E-09 4.56937E-09 + 2.27405E-09 1.03546E-09 4.32036E-10 1.65373E-10 5.81258E-11 1.87737E-11 + 5.57529E-12 1.52312E-12 3.82938E-13 8.86339E-14 + -5.25924E-13 -2.27223E-12 -9.03768E-12 -3.30819E-11 -1.11397E-10 -3.44899E-10 + -9.81270E-10 -2.56356E-09 -6.14409E-09 -1.34934E-08 -2.71131E-08 -4.97444E-08 + -8.31005E-08 -1.25899E-07 -1.71943E-07 -2.09650E-07 -2.24367E-07 -2.03604E-07 + -1.43299E-07 -5.17337E-08 5.17337E-08 1.43299E-07 2.03604E-07 2.24367E-07 + 2.09650E-07 1.71943E-07 1.25899E-07 8.31005E-08 4.97444E-08 2.71131E-08 + 1.34934E-08 6.14409E-09 2.56356E-09 9.81270E-10 3.44899E-10 1.11397E-10 + 3.30819E-11 9.03768E-12 2.27223E-12 5.25924E-13 + -2.75157E-12 -1.18880E-11 -4.72840E-11 -1.73080E-10 -5.82815E-10 -1.80447E-09 + -5.13388E-09 -1.34122E-08 -3.21451E-08 -7.05960E-08 -1.41852E-07 -2.60256E-07 + -4.34772E-07 -6.58686E-07 -8.99583E-07 -1.09686E-06 -1.17386E-06 -1.06523E-06 + -7.49722E-07 -2.70664E-07 2.70664E-07 7.49722E-07 1.06523E-06 1.17386E-06 + 1.09686E-06 8.99583E-07 6.58686E-07 4.34772E-07 2.60256E-07 1.41852E-07 + 7.05960E-08 3.21451E-08 1.34122E-08 5.13388E-09 1.80447E-09 5.82815E-10 + 1.73080E-10 4.72840E-11 1.18880E-11 2.75157E-12 + -1.26987E-11 -5.48642E-11 -2.18220E-10 -7.98782E-10 -2.68974E-09 -8.32780E-09 + -2.36934E-08 -6.18986E-08 -1.48353E-07 -3.25807E-07 -6.54662E-07 -1.20111E-06 + -2.00651E-06 -3.03990E-06 -4.15166E-06 -5.06212E-06 -5.41747E-06 -4.91615E-06 + -3.46004E-06 -1.24914E-06 1.24914E-06 3.46004E-06 4.91615E-06 5.41747E-06 + 5.06212E-06 4.15166E-06 3.03990E-06 2.00651E-06 1.20111E-06 6.54662E-07 + 3.25807E-07 1.48353E-07 6.18986E-08 2.36934E-08 8.32780E-09 2.68974E-09 + 7.98782E-10 2.18220E-10 5.48642E-11 1.26987E-11 + -5.17249E-11 -2.23475E-10 -8.88862E-10 -3.25363E-09 -1.09560E-08 -3.39211E-08 + -9.65086E-08 -2.52128E-07 -6.04275E-07 -1.32709E-06 -2.66659E-06 -4.89239E-06 + -8.17299E-06 -1.23822E-05 -1.69107E-05 -2.06192E-05 -2.20666E-05 -2.00246E-05 + -1.40935E-05 -5.08805E-06 5.08805E-06 1.40935E-05 2.00246E-05 2.20666E-05 + 2.06192E-05 1.69107E-05 1.23822E-05 8.17299E-06 4.89239E-06 2.66659E-06 + 1.32709E-06 6.04275E-07 2.52128E-07 9.65086E-08 3.39211E-08 1.09560E-08 + 3.25363E-09 8.88862E-10 2.23475E-10 5.17249E-11 + -1.86076E-10 -8.03930E-10 -3.19760E-09 -1.17046E-08 -3.94130E-08 -1.22028E-07 + -3.47180E-07 -9.07005E-07 -2.17382E-06 -4.77408E-06 -9.59280E-06 -1.75999E-05 + -2.94016E-05 -4.45439E-05 -6.08346E-05 -7.41756E-05 -7.93826E-05 -7.20367E-05 + -5.07002E-05 -1.83038E-05 1.83038E-05 5.07002E-05 7.20367E-05 7.93826E-05 + 7.41756E-05 6.08346E-05 4.45439E-05 2.94016E-05 1.75999E-05 9.59280E-06 + 4.77408E-06 2.17382E-06 9.07005E-07 3.47180E-07 1.22028E-07 3.94130E-08 + 1.17046E-08 3.19760E-09 8.03930E-10 1.86076E-10 + -5.91673E-10 -2.55629E-09 -1.01676E-08 -3.72177E-08 -1.25323E-07 -3.88018E-07 + -1.10395E-06 -2.88405E-06 -6.91220E-06 -1.51804E-05 -3.05027E-05 -5.59633E-05 + -9.34896E-05 -1.41638E-04 -1.93439E-04 -2.35860E-04 -2.52417E-04 -2.29059E-04 + -1.61214E-04 -5.82016E-05 5.82016E-05 1.61214E-04 2.29059E-04 2.52417E-04 + 2.35860E-04 1.93439E-04 1.41638E-04 9.34896E-05 5.59633E-05 3.05027E-05 + 1.51804E-05 6.91220E-06 2.88405E-06 1.10395E-06 3.88018E-07 1.25323E-07 + 3.72177E-08 1.01676E-08 2.55629E-09 5.91673E-10 + -1.66455E-09 -7.19161E-09 -2.86043E-08 -1.04704E-07 -3.52572E-07 -1.09161E-06 + -3.10573E-06 -8.11368E-06 -1.94461E-05 -4.27068E-05 -8.58131E-05 -1.57441E-04 + -2.63014E-04 -3.98471E-04 -5.44202E-04 -6.63549E-04 -7.10137E-04 -6.44434E-04 + -4.53568E-04 -1.63749E-04 1.63749E-04 4.53568E-04 6.44434E-04 7.10137E-04 + 6.63549E-04 5.44202E-04 3.98471E-04 2.63014E-04 1.57441E-04 8.58131E-05 + 4.27068E-05 1.94461E-05 8.11368E-06 3.10573E-06 1.09161E-06 3.52572E-07 + 1.04704E-07 2.86043E-08 7.19161E-09 1.66455E-09 + -4.14778E-09 -1.79203E-08 -7.12771E-08 -2.60905E-07 -8.78549E-07 -2.72010E-06 + -7.73894E-06 -2.02179E-05 -4.84563E-05 -1.06418E-04 -2.13832E-04 -3.92317E-04 + -6.55387E-04 -9.92930E-04 -1.35610E-03 -1.65360E-03 -1.76989E-03 -1.60641E-03 + -1.13084E-03 -4.08314E-04 4.08314E-04 1.13084E-03 1.60641E-03 1.76989E-03 + 1.65360E-03 1.35610E-03 9.92930E-04 6.55387E-04 3.92317E-04 2.13832E-04 + 1.06418E-04 4.84563E-05 2.02179E-05 7.73894E-06 2.72010E-06 8.78549E-07 + 2.60905E-07 7.12771E-08 1.79203E-08 4.14778E-09 + -9.16551E-09 -3.95991E-08 -1.57504E-07 -5.76533E-07 -1.94136E-06 -6.01071E-06 + -1.71010E-05 -4.46763E-05 -1.07076E-04 -2.35156E-04 -4.72512E-04 -8.66921E-04 + -1.44826E-03 -2.19426E-03 -2.99731E-03 -3.65635E-03 -3.91669E-03 -3.55932E-03 + -2.50904E-03 -9.06778E-04 9.06778E-04 2.50904E-03 3.55932E-03 3.91669E-03 + 3.65635E-03 2.99731E-03 2.19426E-03 1.44826E-03 8.66921E-04 4.72512E-04 + 2.35156E-04 1.07076E-04 4.46763E-05 1.71010E-05 6.01071E-06 1.94136E-06 + 5.76533E-07 1.57504E-07 3.95991E-08 9.16551E-09 + -1.79816E-08 -7.76885E-08 -3.09003E-07 -1.13109E-06 -3.80871E-06 -1.17923E-05 + -3.35501E-05 -8.76493E-05 -2.10069E-04 -4.61348E-04 -9.27013E-04 -1.70082E-03 + -2.84153E-03 -4.30633E-03 -5.88723E-03 -7.19684E-03 -7.74158E-03 -7.07992E-03 + -5.02555E-03 -1.82475E-03 1.82475E-03 5.02555E-03 7.07992E-03 7.74158E-03 + 7.19684E-03 5.88723E-03 4.30633E-03 2.84153E-03 1.70082E-03 9.27013E-04 + 4.61348E-04 2.10069E-04 8.76493E-05 3.35501E-05 1.17923E-05 3.80871E-06 + 1.13109E-06 3.09003E-07 7.76885E-08 1.79816E-08 + -3.13487E-08 -1.35441E-07 -5.38709E-07 -1.97191E-06 -6.64003E-06 -2.05584E-05 + -5.84906E-05 -1.52806E-04 -3.66231E-04 -8.04305E-04 -1.61615E-03 -2.96533E-03 + -4.95530E-03 -7.51684E-03 -1.03075E-02 -1.26971E-02 -1.38642E-02 -1.29636E-02 + -9.42202E-03 -3.47452E-03 3.47452E-03 9.42202E-03 1.29636E-02 1.38642E-02 + 1.26971E-02 1.03075E-02 7.51684E-03 4.95530E-03 2.96533E-03 1.61615E-03 + 8.04305E-04 3.66231E-04 1.52806E-04 5.84906E-05 2.05584E-05 6.64003E-06 + 1.97191E-06 5.38709E-07 1.35441E-07 3.13487E-08 + -4.85736E-08 -2.09860E-07 -8.34708E-07 -3.05540E-06 -1.02885E-05 -3.18544E-05 + -9.06288E-05 -2.36767E-04 -5.67460E-04 -1.24624E-03 -2.50421E-03 -4.59533E-03 + -7.68390E-03 -1.16849E-02 -1.61504E-02 -2.02898E-02 -2.29930E-02 -2.26400E-02 + -1.73202E-02 -6.59276E-03 6.59276E-03 1.73202E-02 2.26400E-02 2.29930E-02 + 2.02898E-02 1.61504E-02 1.16849E-02 7.68390E-03 4.59533E-03 2.50421E-03 + 1.24624E-03 5.67460E-04 2.36767E-04 9.06288E-05 3.18544E-05 1.02885E-05 + 3.05540E-06 8.34708E-07 2.09860E-07 4.85736E-08 + -6.67917E-08 -2.88570E-07 -1.14778E-06 -4.20136E-06 -1.41473E-05 -4.38018E-05 + -1.24620E-04 -3.25569E-04 -7.80293E-04 -1.71367E-03 -3.44360E-03 -6.32068E-03 + -1.05817E-02 -1.61704E-02 -2.26959E-02 -2.95803E-02 -3.57438E-02 -3.81185E-02 + -3.12835E-02 -1.23947E-02 1.23947E-02 3.12835E-02 3.81185E-02 3.57438E-02 + 2.95803E-02 2.26959E-02 1.61704E-02 1.05817E-02 6.32068E-03 3.44360E-03 + 1.71367E-03 7.80293E-04 3.25569E-04 1.24620E-04 4.38018E-05 1.41473E-05 + 4.20136E-06 1.14778E-06 2.88570E-07 6.67917E-08 + -8.11049E-08 -3.50410E-07 -1.39374E-06 -5.10170E-06 -1.71790E-05 -5.31884E-05 + -1.51326E-04 -3.95337E-04 -9.47507E-04 -2.08092E-03 -4.18184E-03 -7.67855E-03 + -1.28790E-02 -1.98281E-02 -2.84741E-02 -3.90713E-02 -5.11538E-02 -5.94533E-02 + -5.22190E-02 -2.14979E-02 2.14979E-02 5.22190E-02 5.94533E-02 5.11538E-02 + 3.90713E-02 2.84741E-02 1.98281E-02 1.28790E-02 7.67855E-03 4.18184E-03 + 2.08092E-03 9.47507E-04 3.95337E-04 1.51326E-04 5.31884E-05 1.71790E-05 + 5.10170E-06 1.39374E-06 3.50410E-07 8.11049E-08 + -8.59056E-08 -3.71151E-07 -1.47624E-06 -5.40367E-06 -1.81958E-05 -5.63366E-05 + -1.60283E-04 -4.18738E-04 -1.00359E-03 -2.20411E-03 -4.42972E-03 -8.13731E-03 + -1.36789E-02 -2.12452E-02 -3.13159E-02 -4.53690E-02 -6.40207E-02 -8.03976E-02 + -7.72116E-02 -3.46685E-02 3.46685E-02 7.72116E-02 8.03976E-02 6.40207E-02 + 4.53690E-02 3.13159E-02 2.12452E-02 1.36789E-02 8.13731E-03 4.42972E-03 + 2.20411E-03 1.00359E-03 4.18738E-04 1.60283E-04 5.63366E-05 1.81958E-05 + 5.40367E-06 1.47624E-06 3.71151E-07 8.59056E-08 + -7.70106E-08 -3.32720E-07 -1.32338E-06 -4.84415E-06 -1.63118E-05 -5.05033E-05 + -1.43687E-04 -3.75380E-04 -8.99677E-04 -1.97591E-03 -3.97132E-03 -7.29794E-03 + -1.22905E-02 -1.92265E-02 -2.89307E-02 -4.36208E-02 -6.48323E-02 -8.79975E-02 + -1.00621E-01 -5.59169E-02 5.59169E-02 1.00621E-01 8.79975E-02 6.48323E-02 + 4.36208E-02 2.89307E-02 1.92265E-02 1.22905E-02 7.29794E-03 3.97132E-03 + 1.97591E-03 8.99677E-04 3.75380E-04 1.43687E-04 5.05033E-05 1.63118E-05 + 4.84415E-06 1.32338E-06 3.32720E-07 7.70106E-08 + -5.36408E-08 -2.31752E-07 -9.21784E-07 -3.37413E-06 -1.13617E-05 -3.51774E-05 + -1.00083E-04 -2.61466E-04 -6.26659E-04 -1.37630E-03 -2.76626E-03 -5.08427E-03 + -8.56929E-03 -1.34460E-02 -2.04042E-02 -3.12453E-02 -4.73167E-02 -6.59220E-02 + -7.93155E-02 -4.59465E-02 4.59465E-02 7.93155E-02 6.59220E-02 4.73167E-02 + 3.12453E-02 2.04042E-02 1.34460E-02 8.56929E-03 5.08427E-03 2.76626E-03 + 1.37630E-03 6.26659E-04 2.61466E-04 1.00083E-04 3.51774E-05 1.13617E-05 + 3.37413E-06 9.21784E-07 2.31752E-07 5.36408E-08 + -1.92515E-08 -8.31751E-08 -3.30825E-07 -1.21097E-06 -4.07770E-06 -1.26251E-05 + -3.59195E-05 -9.38394E-05 -2.24906E-04 -4.93949E-04 -9.92802E-04 -1.82473E-03 + -3.07550E-03 -4.82551E-03 -7.32093E-03 -1.12027E-02 -1.69023E-02 -2.27868E-02 + -2.43873E-02 -1.22277E-02 1.22277E-02 2.43873E-02 2.27868E-02 1.69023E-02 + 1.12027E-02 7.32093E-03 4.82551E-03 3.07550E-03 1.82473E-03 9.92802E-04 + 4.93949E-04 2.24906E-04 9.38394E-05 3.59195E-05 1.26251E-05 4.07770E-06 + 1.21097E-06 3.30825E-07 8.31751E-08 1.92515E-08 + 1.92515E-08 8.31751E-08 3.30825E-07 1.21097E-06 4.07770E-06 1.26251E-05 + 3.59195E-05 9.38394E-05 2.24906E-04 4.93949E-04 9.92802E-04 1.82473E-03 + 3.07550E-03 4.82551E-03 7.32093E-03 1.12027E-02 1.69023E-02 2.27868E-02 + 2.43873E-02 1.22277E-02 -1.22277E-02 -2.43873E-02 -2.27868E-02 -1.69023E-02 + -1.12027E-02 -7.32093E-03 -4.82551E-03 -3.07550E-03 -1.82473E-03 -9.92802E-04 + -4.93949E-04 -2.24906E-04 -9.38394E-05 -3.59195E-05 -1.26251E-05 -4.07770E-06 + -1.21097E-06 -3.30825E-07 -8.31751E-08 -1.92515E-08 + 5.36408E-08 2.31752E-07 9.21784E-07 3.37413E-06 1.13617E-05 3.51774E-05 + 1.00083E-04 2.61466E-04 6.26659E-04 1.37630E-03 2.76626E-03 5.08427E-03 + 8.56929E-03 1.34460E-02 2.04042E-02 3.12453E-02 4.73167E-02 6.59220E-02 + 7.93155E-02 4.59465E-02 -4.59465E-02 -7.93155E-02 -6.59220E-02 -4.73167E-02 + -3.12453E-02 -2.04042E-02 -1.34460E-02 -8.56929E-03 -5.08427E-03 -2.76626E-03 + -1.37630E-03 -6.26659E-04 -2.61466E-04 -1.00083E-04 -3.51774E-05 -1.13617E-05 + -3.37413E-06 -9.21784E-07 -2.31752E-07 -5.36408E-08 + 7.70106E-08 3.32720E-07 1.32338E-06 4.84415E-06 1.63118E-05 5.05033E-05 + 1.43687E-04 3.75380E-04 8.99677E-04 1.97591E-03 3.97132E-03 7.29794E-03 + 1.22905E-02 1.92265E-02 2.89307E-02 4.36208E-02 6.48323E-02 8.79975E-02 + 1.00621E-01 5.59169E-02 -5.59169E-02 -1.00621E-01 -8.79975E-02 -6.48323E-02 + -4.36208E-02 -2.89307E-02 -1.92265E-02 -1.22905E-02 -7.29794E-03 -3.97132E-03 + -1.97591E-03 -8.99677E-04 -3.75380E-04 -1.43687E-04 -5.05033E-05 -1.63118E-05 + -4.84415E-06 -1.32338E-06 -3.32720E-07 -7.70106E-08 + 8.59056E-08 3.71151E-07 1.47624E-06 5.40367E-06 1.81958E-05 5.63366E-05 + 1.60283E-04 4.18738E-04 1.00359E-03 2.20411E-03 4.42972E-03 8.13731E-03 + 1.36789E-02 2.12452E-02 3.13159E-02 4.53690E-02 6.40207E-02 8.03976E-02 + 7.72116E-02 3.46685E-02 -3.46685E-02 -7.72116E-02 -8.03976E-02 -6.40207E-02 + -4.53690E-02 -3.13159E-02 -2.12452E-02 -1.36789E-02 -8.13731E-03 -4.42972E-03 + -2.20411E-03 -1.00359E-03 -4.18738E-04 -1.60283E-04 -5.63366E-05 -1.81958E-05 + -5.40367E-06 -1.47624E-06 -3.71151E-07 -8.59056E-08 + 8.11049E-08 3.50410E-07 1.39374E-06 5.10170E-06 1.71790E-05 5.31884E-05 + 1.51326E-04 3.95337E-04 9.47507E-04 2.08092E-03 4.18184E-03 7.67855E-03 + 1.28790E-02 1.98281E-02 2.84741E-02 3.90713E-02 5.11538E-02 5.94533E-02 + 5.22190E-02 2.14979E-02 -2.14979E-02 -5.22190E-02 -5.94533E-02 -5.11538E-02 + -3.90713E-02 -2.84741E-02 -1.98281E-02 -1.28790E-02 -7.67855E-03 -4.18184E-03 + -2.08092E-03 -9.47507E-04 -3.95337E-04 -1.51326E-04 -5.31884E-05 -1.71790E-05 + -5.10170E-06 -1.39374E-06 -3.50410E-07 -8.11049E-08 + 6.67917E-08 2.88570E-07 1.14778E-06 4.20136E-06 1.41473E-05 4.38018E-05 + 1.24620E-04 3.25569E-04 7.80293E-04 1.71367E-03 3.44360E-03 6.32068E-03 + 1.05817E-02 1.61704E-02 2.26959E-02 2.95803E-02 3.57438E-02 3.81185E-02 + 3.12835E-02 1.23947E-02 -1.23947E-02 -3.12835E-02 -3.81185E-02 -3.57438E-02 + -2.95803E-02 -2.26959E-02 -1.61704E-02 -1.05817E-02 -6.32068E-03 -3.44360E-03 + -1.71367E-03 -7.80293E-04 -3.25569E-04 -1.24620E-04 -4.38018E-05 -1.41473E-05 + -4.20136E-06 -1.14778E-06 -2.88570E-07 -6.67917E-08 + 4.85736E-08 2.09860E-07 8.34708E-07 3.05540E-06 1.02885E-05 3.18544E-05 + 9.06288E-05 2.36767E-04 5.67460E-04 1.24624E-03 2.50421E-03 4.59533E-03 + 7.68390E-03 1.16849E-02 1.61504E-02 2.02898E-02 2.29930E-02 2.26400E-02 + 1.73202E-02 6.59276E-03 -6.59276E-03 -1.73202E-02 -2.26400E-02 -2.29930E-02 + -2.02898E-02 -1.61504E-02 -1.16849E-02 -7.68390E-03 -4.59533E-03 -2.50421E-03 + -1.24624E-03 -5.67460E-04 -2.36767E-04 -9.06288E-05 -3.18544E-05 -1.02885E-05 + -3.05540E-06 -8.34708E-07 -2.09860E-07 -4.85736E-08 + 3.13487E-08 1.35441E-07 5.38709E-07 1.97191E-06 6.64003E-06 2.05584E-05 + 5.84906E-05 1.52806E-04 3.66231E-04 8.04305E-04 1.61615E-03 2.96533E-03 + 4.95530E-03 7.51684E-03 1.03075E-02 1.26971E-02 1.38642E-02 1.29636E-02 + 9.42202E-03 3.47452E-03 -3.47452E-03 -9.42202E-03 -1.29636E-02 -1.38642E-02 + -1.26971E-02 -1.03075E-02 -7.51684E-03 -4.95530E-03 -2.96533E-03 -1.61615E-03 + -8.04305E-04 -3.66231E-04 -1.52806E-04 -5.84906E-05 -2.05584E-05 -6.64003E-06 + -1.97191E-06 -5.38709E-07 -1.35441E-07 -3.13487E-08 + 1.79816E-08 7.76885E-08 3.09003E-07 1.13109E-06 3.80871E-06 1.17923E-05 + 3.35501E-05 8.76493E-05 2.10069E-04 4.61348E-04 9.27013E-04 1.70082E-03 + 2.84153E-03 4.30633E-03 5.88723E-03 7.19684E-03 7.74158E-03 7.07992E-03 + 5.02555E-03 1.82475E-03 -1.82475E-03 -5.02555E-03 -7.07992E-03 -7.74158E-03 + -7.19684E-03 -5.88723E-03 -4.30633E-03 -2.84153E-03 -1.70082E-03 -9.27013E-04 + -4.61348E-04 -2.10069E-04 -8.76493E-05 -3.35501E-05 -1.17923E-05 -3.80871E-06 + -1.13109E-06 -3.09003E-07 -7.76885E-08 -1.79816E-08 + 9.16551E-09 3.95991E-08 1.57504E-07 5.76533E-07 1.94136E-06 6.01071E-06 + 1.71010E-05 4.46763E-05 1.07076E-04 2.35156E-04 4.72512E-04 8.66921E-04 + 1.44826E-03 2.19426E-03 2.99731E-03 3.65635E-03 3.91669E-03 3.55932E-03 + 2.50904E-03 9.06778E-04 -9.06778E-04 -2.50904E-03 -3.55932E-03 -3.91669E-03 + -3.65635E-03 -2.99731E-03 -2.19426E-03 -1.44826E-03 -8.66921E-04 -4.72512E-04 + -2.35156E-04 -1.07076E-04 -4.46763E-05 -1.71010E-05 -6.01071E-06 -1.94136E-06 + -5.76533E-07 -1.57504E-07 -3.95991E-08 -9.16551E-09 + 4.14778E-09 1.79203E-08 7.12771E-08 2.60905E-07 8.78549E-07 2.72010E-06 + 7.73894E-06 2.02179E-05 4.84563E-05 1.06418E-04 2.13832E-04 3.92317E-04 + 6.55387E-04 9.92930E-04 1.35610E-03 1.65360E-03 1.76989E-03 1.60641E-03 + 1.13084E-03 4.08314E-04 -4.08314E-04 -1.13084E-03 -1.60641E-03 -1.76989E-03 + -1.65360E-03 -1.35610E-03 -9.92930E-04 -6.55387E-04 -3.92317E-04 -2.13832E-04 + -1.06418E-04 -4.84563E-05 -2.02179E-05 -7.73894E-06 -2.72010E-06 -8.78549E-07 + -2.60905E-07 -7.12771E-08 -1.79203E-08 -4.14778E-09 + 1.66455E-09 7.19161E-09 2.86043E-08 1.04704E-07 3.52572E-07 1.09161E-06 + 3.10573E-06 8.11368E-06 1.94461E-05 4.27068E-05 8.58131E-05 1.57441E-04 + 2.63014E-04 3.98471E-04 5.44202E-04 6.63549E-04 7.10137E-04 6.44434E-04 + 4.53568E-04 1.63749E-04 -1.63749E-04 -4.53568E-04 -6.44434E-04 -7.10137E-04 + -6.63549E-04 -5.44202E-04 -3.98471E-04 -2.63014E-04 -1.57441E-04 -8.58131E-05 + -4.27068E-05 -1.94461E-05 -8.11368E-06 -3.10573E-06 -1.09161E-06 -3.52572E-07 + -1.04704E-07 -2.86043E-08 -7.19161E-09 -1.66455E-09 + 5.91673E-10 2.55629E-09 1.01676E-08 3.72177E-08 1.25323E-07 3.88018E-07 + 1.10395E-06 2.88405E-06 6.91220E-06 1.51804E-05 3.05027E-05 5.59633E-05 + 9.34896E-05 1.41638E-04 1.93439E-04 2.35860E-04 2.52417E-04 2.29059E-04 + 1.61214E-04 5.82016E-05 -5.82016E-05 -1.61214E-04 -2.29059E-04 -2.52417E-04 + -2.35860E-04 -1.93439E-04 -1.41638E-04 -9.34896E-05 -5.59633E-05 -3.05027E-05 + -1.51804E-05 -6.91220E-06 -2.88405E-06 -1.10395E-06 -3.88018E-07 -1.25323E-07 + -3.72177E-08 -1.01676E-08 -2.55629E-09 -5.91673E-10 + 1.86076E-10 8.03930E-10 3.19760E-09 1.17046E-08 3.94130E-08 1.22028E-07 + 3.47180E-07 9.07005E-07 2.17382E-06 4.77408E-06 9.59280E-06 1.75999E-05 + 2.94016E-05 4.45439E-05 6.08346E-05 7.41756E-05 7.93826E-05 7.20367E-05 + 5.07002E-05 1.83038E-05 -1.83038E-05 -5.07002E-05 -7.20367E-05 -7.93826E-05 + -7.41756E-05 -6.08346E-05 -4.45439E-05 -2.94016E-05 -1.75999E-05 -9.59280E-06 + -4.77408E-06 -2.17382E-06 -9.07005E-07 -3.47180E-07 -1.22028E-07 -3.94130E-08 + -1.17046E-08 -3.19760E-09 -8.03930E-10 -1.86076E-10 + 5.17249E-11 2.23475E-10 8.88862E-10 3.25363E-09 1.09560E-08 3.39211E-08 + 9.65086E-08 2.52128E-07 6.04275E-07 1.32709E-06 2.66659E-06 4.89239E-06 + 8.17299E-06 1.23822E-05 1.69107E-05 2.06192E-05 2.20666E-05 2.00246E-05 + 1.40935E-05 5.08805E-06 -5.08805E-06 -1.40935E-05 -2.00246E-05 -2.20666E-05 + -2.06192E-05 -1.69107E-05 -1.23822E-05 -8.17299E-06 -4.89239E-06 -2.66659E-06 + -1.32709E-06 -6.04275E-07 -2.52128E-07 -9.65086E-08 -3.39211E-08 -1.09560E-08 + -3.25363E-09 -8.88862E-10 -2.23475E-10 -5.17249E-11 + 1.26987E-11 5.48642E-11 2.18220E-10 7.98782E-10 2.68974E-09 8.32780E-09 + 2.36934E-08 6.18986E-08 1.48353E-07 3.25807E-07 6.54662E-07 1.20111E-06 + 2.00651E-06 3.03990E-06 4.15166E-06 5.06212E-06 5.41747E-06 4.91615E-06 + 3.46004E-06 1.24914E-06 -1.24914E-06 -3.46004E-06 -4.91615E-06 -5.41747E-06 + -5.06212E-06 -4.15166E-06 -3.03990E-06 -2.00651E-06 -1.20111E-06 -6.54662E-07 + -3.25807E-07 -1.48353E-07 -6.18986E-08 -2.36934E-08 -8.32780E-09 -2.68974E-09 + -7.98782E-10 -2.18220E-10 -5.48642E-11 -1.26987E-11 + 2.75157E-12 1.18880E-11 4.72840E-11 1.73080E-10 5.82815E-10 1.80447E-09 + 5.13388E-09 1.34122E-08 3.21451E-08 7.05960E-08 1.41852E-07 2.60256E-07 + 4.34772E-07 6.58686E-07 8.99583E-07 1.09686E-06 1.17386E-06 1.06523E-06 + 7.49722E-07 2.70664E-07 -2.70664E-07 -7.49722E-07 -1.06523E-06 -1.17386E-06 + -1.09686E-06 -8.99583E-07 -6.58686E-07 -4.34772E-07 -2.60256E-07 -1.41852E-07 + -7.05960E-08 -3.21451E-08 -1.34122E-08 -5.13388E-09 -1.80447E-09 -5.82815E-10 + -1.73080E-10 -4.72840E-11 -1.18880E-11 -2.75157E-12 + 5.25924E-13 2.27223E-12 9.03768E-12 3.30819E-11 1.11397E-10 3.44899E-10 + 9.81270E-10 2.56356E-09 6.14409E-09 1.34934E-08 2.71131E-08 4.97444E-08 + 8.31005E-08 1.25899E-07 1.71943E-07 2.09650E-07 2.24367E-07 2.03604E-07 + 1.43299E-07 5.17337E-08 -5.17337E-08 -1.43299E-07 -2.03604E-07 -2.24367E-07 + -2.09650E-07 -1.71943E-07 -1.25899E-07 -8.31005E-08 -4.97444E-08 -2.71131E-08 + -1.34934E-08 -6.14409E-09 -2.56356E-09 -9.81270E-10 -3.44899E-10 -1.11397E-10 + -3.30819E-11 -9.03768E-12 -2.27223E-12 -5.25924E-13 + 8.86339E-14 3.82938E-13 1.52312E-12 5.57529E-12 1.87737E-11 5.81258E-11 + 1.65373E-10 4.32036E-10 1.03546E-09 2.27405E-09 4.56937E-09 8.38342E-09 + 1.40049E-08 2.12177E-08 2.89775E-08 3.53323E-08 3.78126E-08 3.43135E-08 + 2.41502E-08 8.71869E-09 -8.71869E-09 -2.41502E-08 -3.43135E-08 -3.78126E-08 + -3.53323E-08 -2.89775E-08 -2.12177E-08 -1.40049E-08 -8.38342E-09 -4.56937E-09 + -2.27405E-09 -1.03546E-09 -4.32036E-10 -1.65373E-10 -5.81258E-11 -1.87737E-11 + -5.57529E-12 -1.52312E-12 -3.82938E-13 -8.86339E-14 + 1.31663E-14 5.68841E-14 2.26254E-13 8.28189E-13 2.78877E-12 8.63439E-12 + 2.45656E-11 6.41775E-11 1.53814E-10 3.37802E-10 6.78763E-10 1.24533E-09 + 2.08038E-09 3.15181E-09 4.30450E-09 5.24848E-09 5.61692E-09 5.09714E-09 + 3.58742E-09 1.29513E-09 -1.29513E-09 -3.58742E-09 -5.09714E-09 -5.61692E-09 + -5.24848E-09 -4.30450E-09 -3.15181E-09 -2.08038E-09 -1.24533E-09 -6.78763E-10 + -3.37802E-10 -1.53814E-10 -6.41775E-11 -2.45656E-11 -8.63439E-12 -2.78877E-12 + -8.28189E-13 -2.26254E-13 -5.68841E-14 -1.31663E-14 + -8.26686E-15 -3.57166E-14 -1.42061E-13 -5.20006E-13 -1.75102E-12 -5.42138E-12 + -1.54243E-11 -4.02959E-11 -9.65774E-11 -2.12100E-10 -4.26184E-10 -7.81920E-10 + -1.30624E-09 -1.97897E-09 -2.70272E-09 -3.29543E-09 -3.52677E-09 -3.20041E-09 + -2.25248E-09 -8.13190E-10 8.13190E-10 2.25248E-09 3.20041E-09 3.52677E-09 + 3.29543E-09 2.70272E-09 1.97897E-09 1.30624E-09 7.81920E-10 4.26184E-10 + 2.12100E-10 9.65774E-11 4.02959E-11 1.54243E-11 5.42138E-12 1.75102E-12 + 5.20006E-13 1.42061E-13 3.57166E-14 8.26686E-15 + -5.57824E-14 -2.41005E-13 -9.58588E-13 -3.50885E-12 -1.18154E-11 -3.65819E-11 + -1.04079E-10 -2.71905E-10 -6.51676E-10 -1.43119E-09 -2.87577E-09 -5.27617E-09 + -8.81411E-09 -1.33535E-08 -1.82372E-08 -2.22366E-08 -2.37976E-08 -2.15954E-08 + -1.51991E-08 -5.48717E-09 5.48717E-09 1.51991E-08 2.15954E-08 2.37976E-08 + 2.22366E-08 1.82372E-08 1.33535E-08 8.81411E-09 5.27617E-09 2.87577E-09 + 1.43119E-09 6.51676E-10 2.71905E-10 1.04079E-10 3.65819E-11 1.18154E-11 + 3.50885E-12 9.58588E-13 2.41005E-13 5.57824E-14 + -3.31990E-13 -1.43434E-12 -5.70504E-12 -2.08830E-11 -7.03193E-11 -2.17718E-10 + -6.19427E-10 -1.61825E-09 -3.87846E-09 -8.51774E-09 -1.71151E-08 -3.14012E-08 + -5.24573E-08 -7.94736E-08 -1.08539E-07 -1.32342E-07 -1.41632E-07 -1.28525E-07 + -9.04575E-08 -3.26569E-08 3.26569E-08 9.04575E-08 1.28525E-07 1.41632E-07 + 1.32342E-07 1.08539E-07 7.94736E-08 5.24573E-08 3.14012E-08 1.71151E-08 + 8.51774E-09 3.87846E-09 1.61825E-09 6.19427E-10 2.17718E-10 7.03193E-11 + 2.08830E-11 5.70504E-12 1.43434E-12 3.31990E-13 + -1.74359E-12 -7.53310E-12 -2.99626E-11 -1.09676E-10 -3.69314E-10 -1.14344E-09 + -3.25320E-09 -8.49896E-09 -2.03695E-08 -4.47348E-08 -8.98880E-08 -1.64917E-07 + -2.75503E-07 -4.17392E-07 -5.70041E-07 -6.95051E-07 -7.43843E-07 -6.75009E-07 + -4.75079E-07 -1.71513E-07 1.71513E-07 4.75079E-07 6.75009E-07 7.43843E-07 + 6.95051E-07 5.70041E-07 4.17392E-07 2.75503E-07 1.64917E-07 8.98880E-08 + 4.47348E-08 2.03695E-08 8.49896E-09 3.25320E-09 1.14344E-09 3.69314E-10 + 1.09676E-10 2.99626E-11 7.53310E-12 1.74359E-12 + -8.08607E-12 -3.49354E-11 -1.38954E-10 -5.08634E-10 -1.71273E-09 -5.30282E-09 + -1.50870E-08 -3.94147E-08 -9.44652E-08 -2.07462E-07 -4.16863E-07 -7.64819E-07 + -1.27767E-06 -1.93569E-06 -2.64362E-06 -3.22336E-06 -3.44964E-06 -3.13042E-06 + -2.20322E-06 -7.95406E-07 7.95406E-07 2.20322E-06 3.13042E-06 3.44964E-06 + 3.22336E-06 2.64362E-06 1.93569E-06 1.27767E-06 7.64819E-07 4.16863E-07 + 2.07462E-07 9.44652E-08 3.94147E-08 1.50870E-08 5.30282E-09 1.71273E-09 + 5.08634E-10 1.38954E-10 3.49354E-11 8.08607E-12 + -3.31392E-11 -1.43176E-10 -5.69477E-10 -2.08454E-09 -7.01928E-09 -2.17326E-08 + -6.18312E-08 -1.61533E-07 -3.87148E-07 -8.50241E-07 -1.70843E-06 -3.13446E-06 + -5.23628E-06 -7.93306E-06 -1.08344E-05 -1.32103E-05 -1.41377E-05 -1.28294E-05 + -9.02947E-06 -3.25982E-06 3.25982E-06 9.02947E-06 1.28294E-05 1.41377E-05 + 1.32103E-05 1.08344E-05 7.93306E-06 5.23628E-06 3.13446E-06 1.70843E-06 + 8.50241E-07 3.87148E-07 1.61533E-07 6.18312E-08 2.17326E-08 7.01928E-09 + 2.08454E-09 5.69477E-10 1.43176E-10 3.31392E-11 + -1.20135E-10 -5.19037E-10 -2.06445E-09 -7.55679E-09 -2.54460E-08 -7.87842E-08 + -2.24148E-07 -5.85585E-07 -1.40347E-06 -3.08226E-06 -6.19336E-06 -1.13630E-05 + -1.89824E-05 -2.87586E-05 -3.92763E-05 -4.78896E-05 -5.12514E-05 -4.65087E-05 + -3.27333E-05 -1.18174E-05 1.18174E-05 3.27333E-05 4.65087E-05 5.12514E-05 + 4.78896E-05 3.92763E-05 2.87586E-05 1.89824E-05 1.13630E-05 6.19336E-06 + 3.08226E-06 1.40347E-06 5.85585E-07 2.24148E-07 7.87842E-08 2.54460E-08 + 7.55679E-09 2.06445E-09 5.19037E-10 1.20135E-10 + -3.85660E-10 -1.66622E-09 -6.62734E-09 -2.42590E-08 -8.16874E-08 -2.52915E-07 + -7.19566E-07 -1.87986E-06 -4.50546E-06 -9.89475E-06 -1.98820E-05 -3.64776E-05 + -6.09377E-05 -9.23216E-05 -1.26086E-04 -1.53736E-04 -1.64528E-04 -1.49303E-04 + -1.05081E-04 -3.79364E-05 3.79364E-05 1.05081E-04 1.49303E-04 1.64528E-04 + 1.53736E-04 1.26086E-04 9.23216E-05 6.09377E-05 3.64776E-05 1.98820E-05 + 9.89475E-06 4.50546E-06 1.87986E-06 7.19566E-07 2.52915E-07 8.16874E-08 + 2.42590E-08 6.62734E-09 1.66622E-09 3.85660E-10 + -1.09774E-09 -4.74271E-09 -1.88639E-08 -6.90502E-08 -2.32513E-07 -7.19892E-07 + -2.04816E-06 -5.35079E-06 -1.28243E-05 -2.81642E-05 -5.65919E-05 -1.03829E-04 + -1.73452E-04 -2.62782E-04 -3.58888E-04 -4.37593E-04 -4.68313E-04 -4.24979E-04 + -2.99106E-04 -1.07984E-04 1.07984E-04 2.99106E-04 4.24979E-04 4.68313E-04 + 4.37593E-04 3.58888E-04 2.62782E-04 1.73452E-04 1.03829E-04 5.65919E-05 + 2.81642E-05 1.28243E-05 5.35079E-06 2.04816E-06 7.19892E-07 2.32513E-07 + 6.90502E-08 1.88639E-08 4.74271E-09 1.09774E-09 + -2.77426E-09 -1.19861E-08 -4.76741E-08 -1.74508E-07 -5.87622E-07 -1.81935E-06 + -5.17623E-06 -1.35229E-05 -3.24102E-05 -7.11783E-05 -1.43022E-04 -2.62403E-04 + -4.38358E-04 -6.64122E-04 -9.07012E-04 -1.10594E-03 -1.18362E-03 -1.07415E-03 + -7.56040E-04 -2.72956E-04 2.72956E-04 7.56040E-04 1.07415E-03 1.18362E-03 + 1.10594E-03 9.07012E-04 6.64122E-04 4.38358E-04 2.62403E-04 1.43022E-04 + 7.11783E-05 3.24102E-05 1.35229E-05 5.17623E-06 1.81935E-06 5.87622E-07 + 1.74508E-07 4.76741E-08 1.19861E-08 2.77426E-09 + -6.23384E-09 -2.69330E-08 -1.07125E-07 -3.92124E-07 -1.32040E-06 -4.08813E-06 + -1.16311E-05 -3.03862E-05 -7.28266E-05 -1.59940E-04 -3.21375E-04 -5.89627E-04 + -9.85007E-04 -1.49233E-03 -2.03822E-03 -2.48555E-03 -2.66077E-03 -2.41558E-03 + -1.70091E-03 -6.14260E-04 6.14260E-04 1.70091E-03 2.41558E-03 2.66077E-03 + 2.48555E-03 2.03822E-03 1.49233E-03 9.85007E-04 5.89627E-04 3.21375E-04 + 1.59940E-04 7.28266E-05 3.03862E-05 1.16311E-05 4.08813E-06 1.32040E-06 + 3.92124E-07 1.07125E-07 2.69330E-08 6.23384E-09 + -1.24693E-08 -5.38730E-08 -2.14278E-07 -7.84350E-07 -2.64115E-06 -8.17733E-06 + -2.32653E-05 -6.07803E-05 -1.45672E-04 -3.19921E-04 -6.42834E-04 -1.17941E-03 + -1.97032E-03 -2.98537E-03 -4.07851E-03 -4.97706E-03 -5.33529E-03 -4.85388E-03 + -3.42584E-03 -1.23916E-03 1.23916E-03 3.42584E-03 4.85388E-03 5.33529E-03 + 4.97706E-03 4.07851E-03 2.98537E-03 1.97032E-03 1.17941E-03 6.42834E-04 + 3.19921E-04 1.45672E-04 6.07803E-05 2.32653E-05 8.17733E-06 2.64115E-06 + 7.84350E-07 2.14278E-07 5.38730E-08 1.24693E-08 + -2.22180E-08 -9.59918E-08 -3.81803E-07 -1.39757E-06 -4.70604E-06 -1.45705E-05 + -4.14544E-05 -1.08299E-04 -2.59561E-04 -5.70040E-04 -1.14542E-03 -2.10154E-03 + -3.51114E-03 -5.32191E-03 -7.27917E-03 -8.90965E-03 -9.60861E-03 -8.82215E-03 + -6.28977E-03 -2.29057E-03 2.29057E-03 6.28977E-03 8.82215E-03 9.60861E-03 + 8.90965E-03 7.27917E-03 5.32191E-03 3.51114E-03 2.10154E-03 1.14542E-03 + 5.70040E-04 2.59561E-04 1.08299E-04 4.14544E-05 1.45705E-05 4.70604E-06 + 1.39757E-06 3.81803E-07 9.59918E-08 2.22180E-08 + -3.52517E-08 -1.52303E-07 -6.05779E-07 -2.21742E-06 -7.46672E-06 -2.31179E-05 + -6.57727E-05 -1.71831E-04 -4.11827E-04 -9.04442E-04 -1.81737E-03 -3.33461E-03 + -5.57302E-03 -8.45787E-03 -1.16160E-02 -1.43669E-02 -1.58150E-02 -1.49677E-02 + -1.10196E-02 -4.09789E-03 4.09789E-03 1.10196E-02 1.49677E-02 1.58150E-02 + 1.43669E-02 1.16160E-02 8.45787E-03 5.57302E-03 3.33461E-03 1.81737E-03 + 9.04442E-04 4.11827E-04 1.71831E-04 6.57727E-05 2.31179E-05 7.46672E-06 + 2.21742E-06 6.05779E-07 1.52303E-07 3.52517E-08 + -4.96848E-08 -2.14660E-07 -8.53803E-07 -3.12529E-06 -1.05238E-05 -3.25831E-05 + -9.27020E-05 -2.42183E-04 -5.80441E-04 -1.27475E-03 -2.56153E-03 -4.70086E-03 + -7.86325E-03 -1.19758E-02 -1.66341E-02 -2.11567E-02 -2.45328E-02 -2.49145E-02 + -1.96254E-02 -7.60113E-03 7.60113E-03 1.96254E-02 2.49145E-02 2.45328E-02 + 2.11567E-02 1.66341E-02 1.19758E-02 7.86325E-03 4.70086E-03 2.56153E-03 + 1.27475E-03 5.80441E-04 2.42183E-04 9.27020E-05 3.25831E-05 1.05238E-05 + 3.12529E-06 8.53803E-07 2.14660E-07 4.96848E-08 + -6.18208E-08 -2.67094E-07 -1.06235E-06 -3.88868E-06 -1.30944E-05 -4.05419E-05 + -1.15345E-04 -3.01339E-04 -7.22221E-04 -1.58614E-03 -3.18743E-03 -5.85163E-03 + -9.80627E-03 -1.50459E-02 -2.13864E-02 -2.87048E-02 -3.63941E-02 -4.10080E-02 + -3.53013E-02 -1.44185E-02 1.44185E-02 3.53013E-02 4.10080E-02 3.63941E-02 + 2.87048E-02 2.13864E-02 1.50459E-02 9.80627E-03 5.85163E-03 3.18743E-03 + 1.58614E-03 7.22221E-04 3.01339E-04 1.15345E-04 4.05419E-05 1.30944E-05 + 3.88868E-06 1.06235E-06 2.67094E-07 6.18208E-08 + -6.69688E-08 -2.89335E-07 -1.15082E-06 -4.21250E-06 -1.41848E-05 -4.39179E-05 + -1.24951E-04 -3.26432E-04 -7.82363E-04 -1.71824E-03 -3.45320E-03 -6.34301E-03 + -1.06588E-02 -1.65313E-02 -2.42694E-02 -3.48879E-02 -4.88038E-02 -6.13895E-02 + -6.10544E-02 -2.88404E-02 2.88404E-02 6.10544E-02 6.13895E-02 4.88038E-02 + 3.48879E-02 2.42694E-02 1.65313E-02 1.06588E-02 6.34301E-03 3.45320E-03 + 1.71824E-03 7.82363E-04 3.26432E-04 1.24951E-04 4.39179E-05 1.41848E-05 + 4.21250E-06 1.15082E-06 2.89335E-07 6.69688E-08 + -6.11782E-08 -2.64317E-07 -1.05131E-06 -3.84826E-06 -1.29583E-05 -4.01205E-05 + -1.14146E-04 -2.98207E-04 -7.14715E-04 -1.56969E-03 -3.15491E-03 -5.79808E-03 + -9.76800E-03 -1.53003E-02 -2.31062E-02 -3.50778E-02 -5.27142E-02 -7.45300E-02 + -9.59849E-02 -6.52687E-02 6.52687E-02 9.59849E-02 7.45300E-02 5.27142E-02 + 3.50778E-02 2.31062E-02 1.53003E-02 9.76800E-03 5.79808E-03 3.15491E-03 + 1.56969E-03 7.14715E-04 2.98207E-04 1.14146E-04 4.01205E-05 1.29583E-05 + 3.84826E-06 1.05131E-06 2.64317E-07 6.11782E-08 + -4.31985E-08 -1.86637E-07 -7.42340E-07 -2.71729E-06 -9.14995E-06 -2.83294E-05 + -8.05999E-05 -2.10566E-04 -5.04667E-04 -1.10838E-03 -2.22782E-03 -4.09530E-03 + -6.90780E-03 -1.08705E-02 -1.66268E-02 -2.58231E-02 -3.98546E-02 -5.83905E-02 + -7.97714E-02 -5.56363E-02 5.56363E-02 7.97714E-02 5.83905E-02 3.98546E-02 + 2.58231E-02 1.66268E-02 1.08705E-02 6.90780E-03 4.09530E-03 2.22782E-03 + 1.10838E-03 5.04667E-04 2.10566E-04 8.05999E-05 2.83294E-05 9.14995E-06 + 2.71729E-06 7.42340E-07 1.86637E-07 4.31985E-08 + -1.56153E-08 -6.74652E-08 -2.68340E-07 -9.82243E-07 -3.30751E-06 -1.02405E-05 + -2.91351E-05 -7.61153E-05 -1.82427E-04 -4.00656E-04 -8.05313E-04 -1.48041E-03 + -2.49737E-03 -3.93133E-03 -6.01754E-03 -9.35356E-03 -1.43769E-02 -1.99931E-02 + -2.30863E-02 -1.24981E-02 1.24981E-02 2.30863E-02 1.99931E-02 1.43769E-02 + 9.35356E-03 6.01754E-03 3.93133E-03 2.49737E-03 1.48041E-03 8.05313E-04 + 4.00656E-04 1.82427E-04 7.61153E-05 2.91351E-05 1.02405E-05 3.30751E-06 + 9.82243E-07 2.68340E-07 6.74652E-08 1.56153E-08 + 1.56153E-08 6.74652E-08 2.68340E-07 9.82243E-07 3.30751E-06 1.02405E-05 + 2.91351E-05 7.61153E-05 1.82427E-04 4.00656E-04 8.05313E-04 1.48041E-03 + 2.49737E-03 3.93133E-03 6.01754E-03 9.35356E-03 1.43769E-02 1.99931E-02 + 2.30863E-02 1.24981E-02 -1.24981E-02 -2.30863E-02 -1.99931E-02 -1.43769E-02 + -9.35356E-03 -6.01754E-03 -3.93133E-03 -2.49737E-03 -1.48041E-03 -8.05313E-04 + -4.00656E-04 -1.82427E-04 -7.61153E-05 -2.91351E-05 -1.02405E-05 -3.30751E-06 + -9.82243E-07 -2.68340E-07 -6.74652E-08 -1.56153E-08 + 4.31985E-08 1.86637E-07 7.42340E-07 2.71729E-06 9.14995E-06 2.83294E-05 + 8.05999E-05 2.10566E-04 5.04667E-04 1.10838E-03 2.22782E-03 4.09530E-03 + 6.90780E-03 1.08705E-02 1.66268E-02 2.58231E-02 3.98546E-02 5.83905E-02 + 7.97714E-02 5.56363E-02 -5.56363E-02 -7.97714E-02 -5.83905E-02 -3.98546E-02 + -2.58231E-02 -1.66268E-02 -1.08705E-02 -6.90780E-03 -4.09530E-03 -2.22782E-03 + -1.10838E-03 -5.04667E-04 -2.10566E-04 -8.05999E-05 -2.83294E-05 -9.14995E-06 + -2.71729E-06 -7.42340E-07 -1.86637E-07 -4.31985E-08 + 6.11782E-08 2.64317E-07 1.05131E-06 3.84826E-06 1.29583E-05 4.01205E-05 + 1.14146E-04 2.98207E-04 7.14715E-04 1.56969E-03 3.15491E-03 5.79808E-03 + 9.76800E-03 1.53003E-02 2.31062E-02 3.50778E-02 5.27142E-02 7.45300E-02 + 9.59849E-02 6.52687E-02 -6.52687E-02 -9.59849E-02 -7.45300E-02 -5.27142E-02 + -3.50778E-02 -2.31062E-02 -1.53003E-02 -9.76800E-03 -5.79808E-03 -3.15491E-03 + -1.56969E-03 -7.14715E-04 -2.98207E-04 -1.14146E-04 -4.01205E-05 -1.29583E-05 + -3.84826E-06 -1.05131E-06 -2.64317E-07 -6.11782E-08 + 6.69688E-08 2.89335E-07 1.15082E-06 4.21250E-06 1.41848E-05 4.39179E-05 + 1.24951E-04 3.26432E-04 7.82363E-04 1.71824E-03 3.45320E-03 6.34301E-03 + 1.06588E-02 1.65313E-02 2.42694E-02 3.48879E-02 4.88038E-02 6.13895E-02 + 6.10544E-02 2.88404E-02 -2.88404E-02 -6.10544E-02 -6.13895E-02 -4.88038E-02 + -3.48879E-02 -2.42694E-02 -1.65313E-02 -1.06588E-02 -6.34301E-03 -3.45320E-03 + -1.71824E-03 -7.82363E-04 -3.26432E-04 -1.24951E-04 -4.39179E-05 -1.41848E-05 + -4.21250E-06 -1.15082E-06 -2.89335E-07 -6.69688E-08 + 6.18208E-08 2.67094E-07 1.06235E-06 3.88868E-06 1.30944E-05 4.05419E-05 + 1.15345E-04 3.01339E-04 7.22221E-04 1.58614E-03 3.18743E-03 5.85163E-03 + 9.80627E-03 1.50459E-02 2.13864E-02 2.87048E-02 3.63941E-02 4.10080E-02 + 3.53013E-02 1.44185E-02 -1.44185E-02 -3.53013E-02 -4.10080E-02 -3.63941E-02 + -2.87048E-02 -2.13864E-02 -1.50459E-02 -9.80627E-03 -5.85163E-03 -3.18743E-03 + -1.58614E-03 -7.22221E-04 -3.01339E-04 -1.15345E-04 -4.05419E-05 -1.30944E-05 + -3.88868E-06 -1.06235E-06 -2.67094E-07 -6.18208E-08 + 4.96848E-08 2.14660E-07 8.53803E-07 3.12529E-06 1.05238E-05 3.25831E-05 + 9.27020E-05 2.42183E-04 5.80441E-04 1.27475E-03 2.56153E-03 4.70086E-03 + 7.86325E-03 1.19758E-02 1.66341E-02 2.11567E-02 2.45328E-02 2.49145E-02 + 1.96254E-02 7.60113E-03 -7.60113E-03 -1.96254E-02 -2.49145E-02 -2.45328E-02 + -2.11567E-02 -1.66341E-02 -1.19758E-02 -7.86325E-03 -4.70086E-03 -2.56153E-03 + -1.27475E-03 -5.80441E-04 -2.42183E-04 -9.27020E-05 -3.25831E-05 -1.05238E-05 + -3.12529E-06 -8.53803E-07 -2.14660E-07 -4.96848E-08 + 3.52517E-08 1.52303E-07 6.05779E-07 2.21742E-06 7.46672E-06 2.31179E-05 + 6.57727E-05 1.71831E-04 4.11827E-04 9.04442E-04 1.81737E-03 3.33461E-03 + 5.57302E-03 8.45787E-03 1.16160E-02 1.43669E-02 1.58150E-02 1.49677E-02 + 1.10196E-02 4.09789E-03 -4.09789E-03 -1.10196E-02 -1.49677E-02 -1.58150E-02 + -1.43669E-02 -1.16160E-02 -8.45787E-03 -5.57302E-03 -3.33461E-03 -1.81737E-03 + -9.04442E-04 -4.11827E-04 -1.71831E-04 -6.57727E-05 -2.31179E-05 -7.46672E-06 + -2.21742E-06 -6.05779E-07 -1.52303E-07 -3.52517E-08 + 2.22180E-08 9.59918E-08 3.81803E-07 1.39757E-06 4.70604E-06 1.45705E-05 + 4.14544E-05 1.08299E-04 2.59561E-04 5.70040E-04 1.14542E-03 2.10154E-03 + 3.51114E-03 5.32191E-03 7.27917E-03 8.90965E-03 9.60861E-03 8.82215E-03 + 6.28977E-03 2.29057E-03 -2.29057E-03 -6.28977E-03 -8.82215E-03 -9.60861E-03 + -8.90965E-03 -7.27917E-03 -5.32191E-03 -3.51114E-03 -2.10154E-03 -1.14542E-03 + -5.70040E-04 -2.59561E-04 -1.08299E-04 -4.14544E-05 -1.45705E-05 -4.70604E-06 + -1.39757E-06 -3.81803E-07 -9.59918E-08 -2.22180E-08 + 1.24693E-08 5.38730E-08 2.14278E-07 7.84350E-07 2.64115E-06 8.17733E-06 + 2.32653E-05 6.07803E-05 1.45672E-04 3.19921E-04 6.42834E-04 1.17941E-03 + 1.97032E-03 2.98537E-03 4.07851E-03 4.97706E-03 5.33529E-03 4.85388E-03 + 3.42584E-03 1.23916E-03 -1.23916E-03 -3.42584E-03 -4.85388E-03 -5.33529E-03 + -4.97706E-03 -4.07851E-03 -2.98537E-03 -1.97032E-03 -1.17941E-03 -6.42834E-04 + -3.19921E-04 -1.45672E-04 -6.07803E-05 -2.32653E-05 -8.17733E-06 -2.64115E-06 + -7.84350E-07 -2.14278E-07 -5.38730E-08 -1.24693E-08 + 6.23384E-09 2.69330E-08 1.07125E-07 3.92124E-07 1.32040E-06 4.08813E-06 + 1.16311E-05 3.03862E-05 7.28266E-05 1.59940E-04 3.21375E-04 5.89627E-04 + 9.85007E-04 1.49233E-03 2.03822E-03 2.48555E-03 2.66077E-03 2.41558E-03 + 1.70091E-03 6.14260E-04 -6.14260E-04 -1.70091E-03 -2.41558E-03 -2.66077E-03 + -2.48555E-03 -2.03822E-03 -1.49233E-03 -9.85007E-04 -5.89627E-04 -3.21375E-04 + -1.59940E-04 -7.28266E-05 -3.03862E-05 -1.16311E-05 -4.08813E-06 -1.32040E-06 + -3.92124E-07 -1.07125E-07 -2.69330E-08 -6.23384E-09 + 2.77426E-09 1.19861E-08 4.76741E-08 1.74508E-07 5.87622E-07 1.81935E-06 + 5.17623E-06 1.35229E-05 3.24102E-05 7.11783E-05 1.43022E-04 2.62403E-04 + 4.38358E-04 6.64122E-04 9.07012E-04 1.10594E-03 1.18362E-03 1.07415E-03 + 7.56040E-04 2.72956E-04 -2.72956E-04 -7.56040E-04 -1.07415E-03 -1.18362E-03 + -1.10594E-03 -9.07012E-04 -6.64122E-04 -4.38358E-04 -2.62403E-04 -1.43022E-04 + -7.11783E-05 -3.24102E-05 -1.35229E-05 -5.17623E-06 -1.81935E-06 -5.87622E-07 + -1.74508E-07 -4.76741E-08 -1.19861E-08 -2.77426E-09 + 1.09774E-09 4.74271E-09 1.88639E-08 6.90502E-08 2.32513E-07 7.19892E-07 + 2.04816E-06 5.35079E-06 1.28243E-05 2.81642E-05 5.65919E-05 1.03829E-04 + 1.73452E-04 2.62782E-04 3.58888E-04 4.37593E-04 4.68313E-04 4.24979E-04 + 2.99106E-04 1.07984E-04 -1.07984E-04 -2.99106E-04 -4.24979E-04 -4.68313E-04 + -4.37593E-04 -3.58888E-04 -2.62782E-04 -1.73452E-04 -1.03829E-04 -5.65919E-05 + -2.81642E-05 -1.28243E-05 -5.35079E-06 -2.04816E-06 -7.19892E-07 -2.32513E-07 + -6.90502E-08 -1.88639E-08 -4.74271E-09 -1.09774E-09 + 3.85660E-10 1.66622E-09 6.62734E-09 2.42590E-08 8.16874E-08 2.52915E-07 + 7.19566E-07 1.87986E-06 4.50546E-06 9.89475E-06 1.98820E-05 3.64776E-05 + 6.09377E-05 9.23216E-05 1.26086E-04 1.53736E-04 1.64528E-04 1.49303E-04 + 1.05081E-04 3.79364E-05 -3.79364E-05 -1.05081E-04 -1.49303E-04 -1.64528E-04 + -1.53736E-04 -1.26086E-04 -9.23216E-05 -6.09377E-05 -3.64776E-05 -1.98820E-05 + -9.89475E-06 -4.50546E-06 -1.87986E-06 -7.19566E-07 -2.52915E-07 -8.16874E-08 + -2.42590E-08 -6.62734E-09 -1.66622E-09 -3.85660E-10 + 1.20135E-10 5.19037E-10 2.06445E-09 7.55679E-09 2.54460E-08 7.87842E-08 + 2.24148E-07 5.85585E-07 1.40347E-06 3.08226E-06 6.19336E-06 1.13630E-05 + 1.89824E-05 2.87586E-05 3.92763E-05 4.78896E-05 5.12514E-05 4.65087E-05 + 3.27333E-05 1.18174E-05 -1.18174E-05 -3.27333E-05 -4.65087E-05 -5.12514E-05 + -4.78896E-05 -3.92763E-05 -2.87586E-05 -1.89824E-05 -1.13630E-05 -6.19336E-06 + -3.08226E-06 -1.40347E-06 -5.85585E-07 -2.24148E-07 -7.87842E-08 -2.54460E-08 + -7.55679E-09 -2.06445E-09 -5.19037E-10 -1.20135E-10 + 3.31392E-11 1.43176E-10 5.69477E-10 2.08454E-09 7.01928E-09 2.17326E-08 + 6.18312E-08 1.61533E-07 3.87148E-07 8.50241E-07 1.70843E-06 3.13446E-06 + 5.23628E-06 7.93306E-06 1.08344E-05 1.32103E-05 1.41377E-05 1.28294E-05 + 9.02947E-06 3.25982E-06 -3.25982E-06 -9.02947E-06 -1.28294E-05 -1.41377E-05 + -1.32103E-05 -1.08344E-05 -7.93306E-06 -5.23628E-06 -3.13446E-06 -1.70843E-06 + -8.50241E-07 -3.87148E-07 -1.61533E-07 -6.18312E-08 -2.17326E-08 -7.01928E-09 + -2.08454E-09 -5.69477E-10 -1.43176E-10 -3.31392E-11 + 8.08607E-12 3.49354E-11 1.38954E-10 5.08634E-10 1.71273E-09 5.30282E-09 + 1.50870E-08 3.94147E-08 9.44652E-08 2.07462E-07 4.16863E-07 7.64819E-07 + 1.27767E-06 1.93569E-06 2.64362E-06 3.22336E-06 3.44964E-06 3.13042E-06 + 2.20322E-06 7.95406E-07 -7.95406E-07 -2.20322E-06 -3.13042E-06 -3.44964E-06 + -3.22336E-06 -2.64362E-06 -1.93569E-06 -1.27767E-06 -7.64819E-07 -4.16863E-07 + -2.07462E-07 -9.44652E-08 -3.94147E-08 -1.50870E-08 -5.30282E-09 -1.71273E-09 + -5.08634E-10 -1.38954E-10 -3.49354E-11 -8.08607E-12 + 1.74359E-12 7.53310E-12 2.99626E-11 1.09676E-10 3.69314E-10 1.14344E-09 + 3.25320E-09 8.49896E-09 2.03695E-08 4.47348E-08 8.98880E-08 1.64917E-07 + 2.75503E-07 4.17392E-07 5.70041E-07 6.95051E-07 7.43843E-07 6.75009E-07 + 4.75079E-07 1.71513E-07 -1.71513E-07 -4.75079E-07 -6.75009E-07 -7.43843E-07 + -6.95051E-07 -5.70041E-07 -4.17392E-07 -2.75503E-07 -1.64917E-07 -8.98880E-08 + -4.47348E-08 -2.03695E-08 -8.49896E-09 -3.25320E-09 -1.14344E-09 -3.69314E-10 + -1.09676E-10 -2.99626E-11 -7.53310E-12 -1.74359E-12 + 3.31990E-13 1.43434E-12 5.70504E-12 2.08830E-11 7.03193E-11 2.17718E-10 + 6.19427E-10 1.61825E-09 3.87846E-09 8.51774E-09 1.71151E-08 3.14012E-08 + 5.24573E-08 7.94736E-08 1.08539E-07 1.32342E-07 1.41632E-07 1.28525E-07 + 9.04575E-08 3.26569E-08 -3.26569E-08 -9.04575E-08 -1.28525E-07 -1.41632E-07 + -1.32342E-07 -1.08539E-07 -7.94736E-08 -5.24573E-08 -3.14012E-08 -1.71151E-08 + -8.51774E-09 -3.87846E-09 -1.61825E-09 -6.19427E-10 -2.17718E-10 -7.03193E-11 + -2.08830E-11 -5.70504E-12 -1.43434E-12 -3.31990E-13 + 5.57824E-14 2.41005E-13 9.58588E-13 3.50885E-12 1.18154E-11 3.65819E-11 + 1.04079E-10 2.71905E-10 6.51676E-10 1.43119E-09 2.87577E-09 5.27617E-09 + 8.81411E-09 1.33535E-08 1.82372E-08 2.22366E-08 2.37976E-08 2.15954E-08 + 1.51991E-08 5.48717E-09 -5.48717E-09 -1.51991E-08 -2.15954E-08 -2.37976E-08 + -2.22366E-08 -1.82372E-08 -1.33535E-08 -8.81411E-09 -5.27617E-09 -2.87577E-09 + -1.43119E-09 -6.51676E-10 -2.71905E-10 -1.04079E-10 -3.65819E-11 -1.18154E-11 + -3.50885E-12 -9.58588E-13 -2.41005E-13 -5.57824E-14 + 8.26686E-15 3.57166E-14 1.42061E-13 5.20006E-13 1.75102E-12 5.42138E-12 + 1.54243E-11 4.02959E-11 9.65774E-11 2.12100E-10 4.26184E-10 7.81920E-10 + 1.30624E-09 1.97897E-09 2.70272E-09 3.29543E-09 3.52677E-09 3.20041E-09 + 2.25248E-09 8.13190E-10 -8.13190E-10 -2.25248E-09 -3.20041E-09 -3.52677E-09 + -3.29543E-09 -2.70272E-09 -1.97897E-09 -1.30624E-09 -7.81920E-10 -4.26184E-10 + -2.12100E-10 -9.65774E-11 -4.02959E-11 -1.54243E-11 -5.42138E-12 -1.75102E-12 + -5.20006E-13 -1.42061E-13 -3.57166E-14 -8.26686E-15 + -4.45743E-15 -1.92581E-14 -7.65983E-14 -2.80383E-13 -9.44137E-13 -2.92317E-12 + -8.31669E-12 -2.17273E-11 -5.20738E-11 -1.14363E-10 -2.29795E-10 -4.21605E-10 + -7.04313E-10 -1.06705E-09 -1.45729E-09 -1.77687E-09 -1.90161E-09 -1.72564E-09 + -1.21452E-09 -4.38466E-10 4.38466E-10 1.21452E-09 1.72564E-09 1.90161E-09 + 1.77687E-09 1.45729E-09 1.06705E-09 7.04313E-10 4.21605E-10 2.29795E-10 + 1.14363E-10 5.20738E-11 2.17273E-11 8.31669E-12 2.92317E-12 9.44137E-13 + 2.80383E-13 7.65983E-14 1.92581E-14 4.45743E-15 + -3.01949E-14 -1.30456E-13 -5.18882E-13 -1.89933E-12 -6.39564E-12 -1.98017E-11 + -5.63378E-11 -1.47182E-10 -3.52751E-10 -7.74701E-10 -1.55665E-09 -2.85598E-09 + -4.77106E-09 -7.22824E-09 -9.87177E-09 -1.20367E-08 -1.28816E-08 -1.16896E-08 + -8.22724E-09 -2.97020E-09 2.97020E-09 8.22724E-09 1.16896E-08 1.28816E-08 + 1.20367E-08 9.87177E-09 7.22824E-09 4.77106E-09 2.85598E-09 1.55665E-09 + 7.74701E-10 3.52751E-10 1.47182E-10 5.63378E-11 1.98017E-11 6.39564E-12 + 1.89933E-12 5.18882E-13 1.30456E-13 3.01949E-14 + -1.80598E-13 -7.80263E-13 -3.10346E-12 -1.13600E-11 -3.82527E-11 -1.18435E-10 + -3.36960E-10 -8.80304E-10 -2.10983E-09 -4.63353E-09 -9.31041E-09 -1.70818E-08 + -2.85360E-08 -4.32325E-08 -5.90437E-08 -7.19920E-08 -7.70457E-08 -6.99161E-08 + -4.92076E-08 -1.77649E-08 1.77649E-08 4.92076E-08 6.99161E-08 7.70457E-08 + 7.19920E-08 5.90437E-08 4.32325E-08 2.85360E-08 1.70818E-08 9.31041E-09 + 4.63353E-09 2.10983E-09 8.80304E-10 3.36960E-10 1.18435E-10 3.82527E-11 + 1.13600E-11 3.10346E-12 7.80263E-13 1.80598E-13 + -9.54448E-13 -4.12364E-12 -1.64016E-11 -6.00371E-11 -2.02163E-10 -6.25924E-10 + -1.78081E-09 -4.65236E-09 -1.11503E-08 -2.44880E-08 -4.92049E-08 -9.02763E-08 + -1.50811E-07 -2.28481E-07 -3.12042E-07 -3.80473E-07 -4.07182E-07 -3.69502E-07 + -2.60059E-07 -9.38866E-08 9.38866E-08 2.60059E-07 3.69502E-07 4.07182E-07 + 3.80473E-07 3.12042E-07 2.28481E-07 1.50811E-07 9.02763E-08 4.92049E-08 + 2.44880E-08 1.11503E-08 4.65236E-09 1.78081E-09 6.25924E-10 2.02163E-10 + 6.00371E-11 1.64016E-11 4.12364E-12 9.54448E-13 + -4.46126E-12 -1.92747E-11 -7.66642E-11 -2.80624E-10 -9.44949E-10 -2.92568E-09 + -8.32384E-09 -2.17460E-08 -5.21186E-08 -1.14461E-07 -2.29993E-07 -4.21968E-07 + -7.04919E-07 -1.06796E-06 -1.45854E-06 -1.77840E-06 -1.90324E-06 -1.72712E-06 + -1.21556E-06 -4.38843E-07 4.38843E-07 1.21556E-06 1.72712E-06 1.90324E-06 + 1.77840E-06 1.45854E-06 1.06796E-06 7.04919E-07 4.21968E-07 2.29993E-07 + 1.14461E-07 5.21186E-08 2.17460E-08 8.32384E-09 2.92568E-09 9.44949E-10 + 2.80624E-10 7.66642E-11 1.92747E-11 4.46126E-12 + -1.84633E-11 -7.97697E-11 -3.17281E-10 -1.16139E-09 -3.91074E-09 -1.21082E-08 + -3.44489E-08 -8.99973E-08 -2.15697E-07 -4.73706E-07 -9.51843E-07 -1.74635E-06 + -2.91736E-06 -4.41985E-06 -6.03629E-06 -7.36005E-06 -7.87671E-06 -7.14782E-06 + -5.03071E-06 -1.81619E-06 1.81619E-06 5.03071E-06 7.14782E-06 7.87671E-06 + 7.36005E-06 6.03629E-06 4.41985E-06 2.91736E-06 1.74635E-06 9.51843E-07 + 4.73706E-07 2.15697E-07 8.99973E-08 3.44489E-08 1.21082E-08 3.91074E-09 + 1.16139E-09 3.17281E-10 7.97697E-11 1.84633E-11 + -6.77426E-11 -2.92678E-10 -1.16412E-09 -4.26118E-09 -1.43487E-08 -4.44254E-08 + -1.26394E-07 -3.30204E-07 -7.91401E-07 -1.73805E-06 -3.49236E-06 -6.40742E-06 + -1.07039E-05 -1.62166E-05 -2.21474E-05 -2.70044E-05 -2.89000E-05 -2.62257E-05 + -1.84579E-05 -6.66367E-06 6.66367E-06 1.84579E-05 2.62257E-05 2.89000E-05 + 2.70044E-05 2.21474E-05 1.62166E-05 1.07039E-05 6.40742E-06 3.49236E-06 + 1.73805E-06 7.91401E-07 3.30204E-07 1.26394E-07 4.44254E-08 1.43487E-08 + 4.26118E-09 1.16412E-09 2.92678E-10 6.77426E-11 + -2.20668E-10 -9.53385E-10 -3.79205E-09 -1.38806E-08 -4.67401E-08 -1.44713E-07 + -4.11723E-07 -1.07562E-06 -2.57795E-06 -5.66160E-06 -1.13762E-05 -2.08718E-05 + -3.48675E-05 -5.28248E-05 -7.21440E-05 -8.79653E-05 -9.41403E-05 -8.54288E-05 + -6.01256E-05 -2.17065E-05 2.17065E-05 6.01256E-05 8.54288E-05 9.41403E-05 + 8.79653E-05 7.21440E-05 5.28248E-05 3.48675E-05 2.08718E-05 1.13762E-05 + 5.66160E-06 2.57795E-06 1.07562E-06 4.11723E-07 1.44713E-07 4.67401E-08 + 1.38806E-08 3.79205E-09 9.53385E-10 2.20668E-10 + -6.39151E-10 -2.76142E-09 -1.09834E-08 -4.02042E-08 -1.35380E-07 -4.19153E-07 + -1.19253E-06 -3.11547E-06 -7.46686E-06 -1.63985E-05 -3.29503E-05 -6.04540E-05 + -1.00991E-04 -1.53004E-04 -2.08961E-04 -2.54786E-04 -2.72672E-04 -2.47439E-04 + -1.74151E-04 -6.28719E-05 6.28719E-05 1.74151E-04 2.47439E-04 2.72672E-04 + 2.54786E-04 2.08961E-04 1.53004E-04 1.00991E-04 6.04540E-05 3.29503E-05 + 1.63985E-05 7.46686E-06 3.11547E-06 1.19253E-06 4.19153E-07 1.35380E-07 + 4.02042E-08 1.09834E-08 2.76142E-09 6.39151E-10 + -1.64858E-09 -7.12259E-09 -2.83298E-08 -1.03700E-07 -3.49188E-07 -1.08113E-06 + -3.07592E-06 -8.03582E-06 -1.92595E-05 -4.22970E-05 -8.49896E-05 -1.55930E-04 + -2.60490E-04 -3.94647E-04 -5.38979E-04 -6.57179E-04 -7.03318E-04 -6.38243E-04 + -4.49208E-04 -1.62174E-04 1.62174E-04 4.49208E-04 6.38243E-04 7.03318E-04 + 6.57179E-04 5.38979E-04 3.94647E-04 2.60490E-04 1.55930E-04 8.49896E-05 + 4.22970E-05 1.92595E-05 8.03582E-06 3.07592E-06 1.08113E-06 3.49188E-07 + 1.03700E-07 2.83298E-08 7.12259E-09 1.64858E-09 + -3.79166E-09 -1.63817E-08 -6.51574E-08 -2.38505E-07 -8.03118E-07 -2.48656E-06 + -7.07449E-06 -1.84820E-05 -4.42959E-05 -9.72813E-05 -1.95472E-04 -3.58633E-04 + -5.99116E-04 -9.07675E-04 -1.23965E-03 -1.51156E-03 -1.61780E-03 -1.46827E-03 + -1.03353E-03 -3.73162E-04 3.73162E-04 1.03353E-03 1.46827E-03 1.61780E-03 + 1.51156E-03 1.23965E-03 9.07675E-04 5.99116E-04 3.58633E-04 1.95472E-04 + 9.72813E-05 4.42959E-05 1.84820E-05 7.07449E-06 2.48656E-06 8.03118E-07 + 2.38505E-07 6.51574E-08 1.63817E-08 3.79166E-09 + -7.78281E-09 -3.36252E-08 -1.33743E-07 -4.89558E-07 -1.64849E-06 -5.10394E-06 + -1.45212E-05 -3.79365E-05 -9.09224E-05 -1.99681E-04 -4.01229E-04 -7.36137E-04 + -1.22976E-03 -1.86318E-03 -2.54487E-03 -3.10388E-03 -3.32386E-03 -3.01934E-03 + -2.12755E-03 -7.68722E-04 7.68722E-04 2.12755E-03 3.01934E-03 3.32386E-03 + 3.10388E-03 2.54487E-03 1.86318E-03 1.22976E-03 7.36137E-04 4.01229E-04 + 1.99681E-04 9.09224E-05 3.79365E-05 1.45212E-05 5.10394E-06 1.64849E-06 + 4.89558E-07 1.33743E-07 3.36252E-08 7.78281E-09 + -1.42575E-08 -6.15988E-08 -2.45007E-07 -8.96832E-07 -3.01991E-06 -9.35003E-06 + -2.66017E-05 -6.94967E-05 -1.66563E-04 -3.65800E-04 -7.35023E-04 -1.34856E-03 + -2.25295E-03 -3.41396E-03 -4.66576E-03 -5.69961E-03 -6.12406E-03 -5.59354E-03 + -3.96678E-03 -1.43974E-03 1.43974E-03 3.96678E-03 5.59354E-03 6.12406E-03 + 5.69961E-03 4.66576E-03 3.41396E-03 2.25295E-03 1.34856E-03 7.35023E-04 + 3.65800E-04 1.66563E-04 6.94967E-05 2.66017E-05 9.35003E-06 3.01991E-06 + 8.96832E-07 2.45007E-07 6.15988E-08 1.42575E-08 + -2.32787E-08 -1.00575E-07 -4.00031E-07 -1.46429E-06 -4.93071E-06 -1.52661E-05 + -4.34336E-05 -1.13470E-04 -2.71953E-04 -5.97255E-04 -1.20011E-03 -2.20194E-03 + -3.67932E-03 -5.57973E-03 -7.64556E-03 -9.40526E-03 -1.02555E-02 -9.58906E-03 + -6.98321E-03 -2.58090E-03 2.58090E-03 6.98321E-03 9.58906E-03 1.02555E-02 + 9.40526E-03 7.64556E-03 5.57973E-03 3.67932E-03 2.20194E-03 1.20011E-03 + 5.97255E-04 2.71953E-04 1.13470E-04 4.34336E-05 1.52661E-05 4.93071E-06 + 1.46429E-06 4.00031E-07 1.00575E-07 2.32787E-08 + -3.37516E-08 -1.45822E-07 -5.80002E-07 -2.12306E-06 -7.14900E-06 -2.21342E-05 + -6.29739E-05 -1.64519E-04 -3.94303E-04 -8.65958E-04 -1.74006E-03 -3.19302E-03 + -5.33864E-03 -8.11646E-03 -1.12139E-02 -1.40946E-02 -1.60387E-02 -1.59605E-02 + -1.23897E-02 -4.76670E-03 4.76670E-03 1.23897E-02 1.59605E-02 1.60387E-02 + 1.40946E-02 1.12139E-02 8.11646E-03 5.33864E-03 3.19302E-03 1.74006E-03 + 8.65958E-04 3.94303E-04 1.64519E-04 6.29739E-05 2.21342E-05 7.14900E-06 + 2.12306E-06 5.80002E-07 1.45822E-07 3.37516E-08 + -4.31251E-08 -1.86320E-07 -7.41079E-07 -2.71268E-06 -9.13441E-06 -2.82813E-05 + -8.04630E-05 -2.10209E-04 -5.03808E-04 -1.10646E-03 -2.22342E-03 -4.08109E-03 + -6.83284E-03 -1.04460E-02 -1.46906E-02 -1.92786E-02 -2.36788E-02 -2.59110E-02 + -2.18544E-02 -8.81577E-03 8.81577E-03 2.18544E-02 2.59110E-02 2.36788E-02 + 1.92786E-02 1.46906E-02 1.04460E-02 6.83284E-03 4.08109E-03 2.22342E-03 + 1.10646E-03 5.03808E-04 2.10209E-04 8.04630E-05 2.82813E-05 9.13441E-06 + 2.71268E-06 7.41079E-07 1.86320E-07 4.31251E-08 + -4.78183E-08 -2.06596E-07 -8.21729E-07 -3.00789E-06 -1.01285E-05 -3.13591E-05 + -8.92195E-05 -2.33085E-04 -5.58637E-04 -1.22688E-03 -2.46557E-03 -4.52739E-03 + -7.59540E-03 -1.17053E-02 -1.68699E-02 -2.33767E-02 -3.11889E-02 -3.72950E-02 + -3.42216E-02 -1.47639E-02 1.47639E-02 3.42216E-02 3.72950E-02 3.11889E-02 + 2.33767E-02 1.68699E-02 1.17053E-02 7.59540E-03 4.52739E-03 2.46557E-03 + 1.22688E-03 5.58637E-04 2.33085E-04 8.92195E-05 3.13591E-05 1.01285E-05 + 3.00789E-06 8.21729E-07 2.06596E-07 4.78183E-08 + -4.45113E-08 -1.92309E-07 -7.64901E-07 -2.79987E-06 -9.42803E-06 -2.91904E-05 + -8.30494E-05 -2.16966E-04 -5.20004E-04 -1.14204E-03 -2.29521E-03 -4.21611E-03 + -7.08585E-03 -1.09961E-02 -1.61717E-02 -2.33443E-02 -3.28999E-02 -4.19764E-02 + -4.30875E-02 -2.10541E-02 2.10541E-02 4.30875E-02 4.19764E-02 3.28999E-02 + 2.33443E-02 1.61717E-02 1.09961E-02 7.08585E-03 4.21611E-03 2.29521E-03 + 1.14204E-03 5.20004E-04 2.16966E-04 8.30494E-05 2.91904E-05 9.42803E-06 + 2.79987E-06 7.64901E-07 1.92309E-07 4.45113E-08 + -3.18457E-08 -1.37588E-07 -5.47250E-07 -2.00317E-06 -6.74531E-06 -2.08843E-05 + -5.94179E-05 -1.55229E-04 -3.72038E-04 -8.17081E-04 -1.64216E-03 -3.01698E-03 + -5.07425E-03 -7.89603E-03 -1.16997E-02 -1.71215E-02 -2.45147E-02 -3.18058E-02 + -3.36229E-02 -1.69338E-02 1.69338E-02 3.36229E-02 3.18058E-02 2.45147E-02 + 1.71215E-02 1.16997E-02 7.89603E-03 5.07425E-03 3.01698E-03 1.64216E-03 + 8.17081E-04 3.72038E-04 1.55229E-04 5.94179E-05 2.08843E-05 6.74531E-06 + 2.00317E-06 5.47250E-07 1.37588E-07 3.18457E-08 + -1.15897E-08 -5.00727E-08 -1.99162E-07 -7.29021E-07 -2.45484E-06 -7.60049E-06 + -2.16241E-05 -5.64928E-05 -1.35397E-04 -2.97363E-04 -5.97637E-04 -1.09797E-03 + -1.84658E-03 -2.87263E-03 -4.25162E-03 -6.20347E-03 -8.82747E-03 -1.12048E-02 + -1.10159E-02 -5.08925E-03 5.08925E-03 1.10159E-02 1.12048E-02 8.82747E-03 + 6.20347E-03 4.25162E-03 2.87263E-03 1.84658E-03 1.09797E-03 5.97637E-04 + 2.97363E-04 1.35397E-04 5.64928E-05 2.16241E-05 7.60049E-06 2.45484E-06 + 7.29021E-07 1.99162E-07 5.00727E-08 1.15897E-08 + 1.15897E-08 5.00727E-08 1.99162E-07 7.29021E-07 2.45484E-06 7.60049E-06 + 2.16241E-05 5.64928E-05 1.35397E-04 2.97363E-04 5.97637E-04 1.09797E-03 + 1.84658E-03 2.87263E-03 4.25162E-03 6.20347E-03 8.82747E-03 1.12048E-02 + 1.10159E-02 5.08925E-03 -5.08925E-03 -1.10159E-02 -1.12048E-02 -8.82747E-03 + -6.20347E-03 -4.25162E-03 -2.87263E-03 -1.84658E-03 -1.09797E-03 -5.97637E-04 + -2.97363E-04 -1.35397E-04 -5.64928E-05 -2.16241E-05 -7.60049E-06 -2.45484E-06 + -7.29021E-07 -1.99162E-07 -5.00727E-08 -1.15897E-08 + 3.18457E-08 1.37588E-07 5.47250E-07 2.00317E-06 6.74531E-06 2.08843E-05 + 5.94179E-05 1.55229E-04 3.72038E-04 8.17081E-04 1.64216E-03 3.01698E-03 + 5.07425E-03 7.89603E-03 1.16997E-02 1.71215E-02 2.45147E-02 3.18058E-02 + 3.36229E-02 1.69338E-02 -1.69338E-02 -3.36229E-02 -3.18058E-02 -2.45147E-02 + -1.71215E-02 -1.16997E-02 -7.89603E-03 -5.07425E-03 -3.01698E-03 -1.64216E-03 + -8.17081E-04 -3.72038E-04 -1.55229E-04 -5.94179E-05 -2.08843E-05 -6.74531E-06 + -2.00317E-06 -5.47250E-07 -1.37588E-07 -3.18457E-08 + 4.45113E-08 1.92309E-07 7.64901E-07 2.79987E-06 9.42803E-06 2.91904E-05 + 8.30494E-05 2.16966E-04 5.20004E-04 1.14204E-03 2.29521E-03 4.21611E-03 + 7.08585E-03 1.09961E-02 1.61717E-02 2.33443E-02 3.28999E-02 4.19764E-02 + 4.30875E-02 2.10541E-02 -2.10541E-02 -4.30875E-02 -4.19764E-02 -3.28999E-02 + -2.33443E-02 -1.61717E-02 -1.09961E-02 -7.08585E-03 -4.21611E-03 -2.29521E-03 + -1.14204E-03 -5.20004E-04 -2.16966E-04 -8.30494E-05 -2.91904E-05 -9.42803E-06 + -2.79987E-06 -7.64901E-07 -1.92309E-07 -4.45113E-08 + 4.78183E-08 2.06596E-07 8.21729E-07 3.00789E-06 1.01285E-05 3.13591E-05 + 8.92195E-05 2.33085E-04 5.58637E-04 1.22688E-03 2.46557E-03 4.52739E-03 + 7.59540E-03 1.17053E-02 1.68699E-02 2.33767E-02 3.11889E-02 3.72950E-02 + 3.42216E-02 1.47639E-02 -1.47639E-02 -3.42216E-02 -3.72950E-02 -3.11889E-02 + -2.33767E-02 -1.68699E-02 -1.17053E-02 -7.59540E-03 -4.52739E-03 -2.46557E-03 + -1.22688E-03 -5.58637E-04 -2.33085E-04 -8.92195E-05 -3.13591E-05 -1.01285E-05 + -3.00789E-06 -8.21729E-07 -2.06596E-07 -4.78183E-08 + 4.31251E-08 1.86320E-07 7.41079E-07 2.71268E-06 9.13441E-06 2.82813E-05 + 8.04630E-05 2.10209E-04 5.03808E-04 1.10646E-03 2.22342E-03 4.08109E-03 + 6.83284E-03 1.04460E-02 1.46906E-02 1.92786E-02 2.36788E-02 2.59110E-02 + 2.18544E-02 8.81577E-03 -8.81577E-03 -2.18544E-02 -2.59110E-02 -2.36788E-02 + -1.92786E-02 -1.46906E-02 -1.04460E-02 -6.83284E-03 -4.08109E-03 -2.22342E-03 + -1.10646E-03 -5.03808E-04 -2.10209E-04 -8.04630E-05 -2.82813E-05 -9.13441E-06 + -2.71268E-06 -7.41079E-07 -1.86320E-07 -4.31251E-08 + 3.37516E-08 1.45822E-07 5.80002E-07 2.12306E-06 7.14900E-06 2.21342E-05 + 6.29739E-05 1.64519E-04 3.94303E-04 8.65958E-04 1.74006E-03 3.19302E-03 + 5.33864E-03 8.11646E-03 1.12139E-02 1.40946E-02 1.60387E-02 1.59605E-02 + 1.23897E-02 4.76670E-03 -4.76670E-03 -1.23897E-02 -1.59605E-02 -1.60387E-02 + -1.40946E-02 -1.12139E-02 -8.11646E-03 -5.33864E-03 -3.19302E-03 -1.74006E-03 + -8.65958E-04 -3.94303E-04 -1.64519E-04 -6.29739E-05 -2.21342E-05 -7.14900E-06 + -2.12306E-06 -5.80002E-07 -1.45822E-07 -3.37516E-08 + 2.32787E-08 1.00575E-07 4.00031E-07 1.46429E-06 4.93071E-06 1.52661E-05 + 4.34336E-05 1.13470E-04 2.71953E-04 5.97255E-04 1.20011E-03 2.20194E-03 + 3.67932E-03 5.57973E-03 7.64556E-03 9.40526E-03 1.02555E-02 9.58906E-03 + 6.98321E-03 2.58090E-03 -2.58090E-03 -6.98321E-03 -9.58906E-03 -1.02555E-02 + -9.40526E-03 -7.64556E-03 -5.57973E-03 -3.67932E-03 -2.20194E-03 -1.20011E-03 + -5.97255E-04 -2.71953E-04 -1.13470E-04 -4.34336E-05 -1.52661E-05 -4.93071E-06 + -1.46429E-06 -4.00031E-07 -1.00575E-07 -2.32787E-08 + 1.42575E-08 6.15988E-08 2.45007E-07 8.96832E-07 3.01991E-06 9.35003E-06 + 2.66017E-05 6.94967E-05 1.66563E-04 3.65800E-04 7.35023E-04 1.34856E-03 + 2.25295E-03 3.41396E-03 4.66576E-03 5.69961E-03 6.12406E-03 5.59354E-03 + 3.96678E-03 1.43974E-03 -1.43974E-03 -3.96678E-03 -5.59354E-03 -6.12406E-03 + -5.69961E-03 -4.66576E-03 -3.41396E-03 -2.25295E-03 -1.34856E-03 -7.35023E-04 + -3.65800E-04 -1.66563E-04 -6.94967E-05 -2.66017E-05 -9.35003E-06 -3.01991E-06 + -8.96832E-07 -2.45007E-07 -6.15988E-08 -1.42575E-08 + 7.78281E-09 3.36252E-08 1.33743E-07 4.89558E-07 1.64849E-06 5.10394E-06 + 1.45212E-05 3.79365E-05 9.09224E-05 1.99681E-04 4.01229E-04 7.36137E-04 + 1.22976E-03 1.86318E-03 2.54487E-03 3.10388E-03 3.32386E-03 3.01934E-03 + 2.12755E-03 7.68722E-04 -7.68722E-04 -2.12755E-03 -3.01934E-03 -3.32386E-03 + -3.10388E-03 -2.54487E-03 -1.86318E-03 -1.22976E-03 -7.36137E-04 -4.01229E-04 + -1.99681E-04 -9.09224E-05 -3.79365E-05 -1.45212E-05 -5.10394E-06 -1.64849E-06 + -4.89558E-07 -1.33743E-07 -3.36252E-08 -7.78281E-09 + 3.79166E-09 1.63817E-08 6.51574E-08 2.38505E-07 8.03118E-07 2.48656E-06 + 7.07449E-06 1.84820E-05 4.42959E-05 9.72813E-05 1.95472E-04 3.58633E-04 + 5.99116E-04 9.07675E-04 1.23965E-03 1.51156E-03 1.61780E-03 1.46827E-03 + 1.03353E-03 3.73162E-04 -3.73162E-04 -1.03353E-03 -1.46827E-03 -1.61780E-03 + -1.51156E-03 -1.23965E-03 -9.07675E-04 -5.99116E-04 -3.58633E-04 -1.95472E-04 + -9.72813E-05 -4.42959E-05 -1.84820E-05 -7.07449E-06 -2.48656E-06 -8.03118E-07 + -2.38505E-07 -6.51574E-08 -1.63817E-08 -3.79166E-09 + 1.64858E-09 7.12259E-09 2.83298E-08 1.03700E-07 3.49188E-07 1.08113E-06 + 3.07592E-06 8.03582E-06 1.92595E-05 4.22970E-05 8.49896E-05 1.55930E-04 + 2.60490E-04 3.94647E-04 5.38979E-04 6.57179E-04 7.03318E-04 6.38243E-04 + 4.49208E-04 1.62174E-04 -1.62174E-04 -4.49208E-04 -6.38243E-04 -7.03318E-04 + -6.57179E-04 -5.38979E-04 -3.94647E-04 -2.60490E-04 -1.55930E-04 -8.49896E-05 + -4.22970E-05 -1.92595E-05 -8.03582E-06 -3.07592E-06 -1.08113E-06 -3.49188E-07 + -1.03700E-07 -2.83298E-08 -7.12259E-09 -1.64858E-09 + 6.39151E-10 2.76142E-09 1.09834E-08 4.02042E-08 1.35380E-07 4.19153E-07 + 1.19253E-06 3.11547E-06 7.46686E-06 1.63985E-05 3.29503E-05 6.04540E-05 + 1.00991E-04 1.53004E-04 2.08961E-04 2.54786E-04 2.72672E-04 2.47439E-04 + 1.74151E-04 6.28719E-05 -6.28719E-05 -1.74151E-04 -2.47439E-04 -2.72672E-04 + -2.54786E-04 -2.08961E-04 -1.53004E-04 -1.00991E-04 -6.04540E-05 -3.29503E-05 + -1.63985E-05 -7.46686E-06 -3.11547E-06 -1.19253E-06 -4.19153E-07 -1.35380E-07 + -4.02042E-08 -1.09834E-08 -2.76142E-09 -6.39151E-10 + 2.20668E-10 9.53385E-10 3.79205E-09 1.38806E-08 4.67401E-08 1.44713E-07 + 4.11723E-07 1.07562E-06 2.57795E-06 5.66160E-06 1.13762E-05 2.08718E-05 + 3.48675E-05 5.28248E-05 7.21440E-05 8.79653E-05 9.41403E-05 8.54288E-05 + 6.01256E-05 2.17065E-05 -2.17065E-05 -6.01256E-05 -8.54288E-05 -9.41403E-05 + -8.79653E-05 -7.21440E-05 -5.28248E-05 -3.48675E-05 -2.08718E-05 -1.13762E-05 + -5.66160E-06 -2.57795E-06 -1.07562E-06 -4.11723E-07 -1.44713E-07 -4.67401E-08 + -1.38806E-08 -3.79205E-09 -9.53385E-10 -2.20668E-10 + 6.77426E-11 2.92678E-10 1.16412E-09 4.26118E-09 1.43487E-08 4.44254E-08 + 1.26394E-07 3.30204E-07 7.91401E-07 1.73805E-06 3.49236E-06 6.40742E-06 + 1.07039E-05 1.62166E-05 2.21474E-05 2.70044E-05 2.89000E-05 2.62257E-05 + 1.84579E-05 6.66367E-06 -6.66367E-06 -1.84579E-05 -2.62257E-05 -2.89000E-05 + -2.70044E-05 -2.21474E-05 -1.62166E-05 -1.07039E-05 -6.40742E-06 -3.49236E-06 + -1.73805E-06 -7.91401E-07 -3.30204E-07 -1.26394E-07 -4.44254E-08 -1.43487E-08 + -4.26118E-09 -1.16412E-09 -2.92678E-10 -6.77426E-11 + 1.84633E-11 7.97697E-11 3.17281E-10 1.16139E-09 3.91074E-09 1.21082E-08 + 3.44489E-08 8.99973E-08 2.15697E-07 4.73706E-07 9.51843E-07 1.74635E-06 + 2.91736E-06 4.41985E-06 6.03629E-06 7.36005E-06 7.87671E-06 7.14782E-06 + 5.03071E-06 1.81619E-06 -1.81619E-06 -5.03071E-06 -7.14782E-06 -7.87671E-06 + -7.36005E-06 -6.03629E-06 -4.41985E-06 -2.91736E-06 -1.74635E-06 -9.51843E-07 + -4.73706E-07 -2.15697E-07 -8.99973E-08 -3.44489E-08 -1.21082E-08 -3.91074E-09 + -1.16139E-09 -3.17281E-10 -7.97697E-11 -1.84633E-11 + 4.46126E-12 1.92747E-11 7.66642E-11 2.80624E-10 9.44949E-10 2.92568E-09 + 8.32384E-09 2.17460E-08 5.21186E-08 1.14461E-07 2.29993E-07 4.21968E-07 + 7.04919E-07 1.06796E-06 1.45854E-06 1.77840E-06 1.90324E-06 1.72712E-06 + 1.21556E-06 4.38843E-07 -4.38843E-07 -1.21556E-06 -1.72712E-06 -1.90324E-06 + -1.77840E-06 -1.45854E-06 -1.06796E-06 -7.04919E-07 -4.21968E-07 -2.29993E-07 + -1.14461E-07 -5.21186E-08 -2.17460E-08 -8.32384E-09 -2.92568E-09 -9.44949E-10 + -2.80624E-10 -7.66642E-11 -1.92747E-11 -4.46126E-12 + 9.54448E-13 4.12364E-12 1.64016E-11 6.00371E-11 2.02163E-10 6.25924E-10 + 1.78081E-09 4.65236E-09 1.11503E-08 2.44880E-08 4.92049E-08 9.02763E-08 + 1.50811E-07 2.28481E-07 3.12042E-07 3.80473E-07 4.07182E-07 3.69502E-07 + 2.60059E-07 9.38866E-08 -9.38866E-08 -2.60059E-07 -3.69502E-07 -4.07182E-07 + -3.80473E-07 -3.12042E-07 -2.28481E-07 -1.50811E-07 -9.02763E-08 -4.92049E-08 + -2.44880E-08 -1.11503E-08 -4.65236E-09 -1.78081E-09 -6.25924E-10 -2.02163E-10 + -6.00371E-11 -1.64016E-11 -4.12364E-12 -9.54448E-13 + 1.80598E-13 7.80263E-13 3.10346E-12 1.13600E-11 3.82527E-11 1.18435E-10 + 3.36960E-10 8.80304E-10 2.10983E-09 4.63353E-09 9.31041E-09 1.70818E-08 + 2.85360E-08 4.32325E-08 5.90437E-08 7.19920E-08 7.70457E-08 6.99161E-08 + 4.92076E-08 1.77649E-08 -1.77649E-08 -4.92076E-08 -6.99161E-08 -7.70457E-08 + -7.19920E-08 -5.90437E-08 -4.32325E-08 -2.85360E-08 -1.70818E-08 -9.31041E-09 + -4.63353E-09 -2.10983E-09 -8.80304E-10 -3.36960E-10 -1.18435E-10 -3.82527E-11 + -1.13600E-11 -3.10346E-12 -7.80263E-13 -1.80598E-13 + 3.01949E-14 1.30456E-13 5.18882E-13 1.89933E-12 6.39564E-12 1.98017E-11 + 5.63378E-11 1.47182E-10 3.52751E-10 7.74701E-10 1.55665E-09 2.85598E-09 + 4.77106E-09 7.22824E-09 9.87177E-09 1.20367E-08 1.28816E-08 1.16896E-08 + 8.22724E-09 2.97020E-09 -2.97020E-09 -8.22724E-09 -1.16896E-08 -1.28816E-08 + -1.20367E-08 -9.87177E-09 -7.22824E-09 -4.77106E-09 -2.85598E-09 -1.55665E-09 + -7.74701E-10 -3.52751E-10 -1.47182E-10 -5.63378E-11 -1.98017E-11 -6.39564E-12 + -1.89933E-12 -5.18882E-13 -1.30456E-13 -3.01949E-14 + 4.45743E-15 1.92581E-14 7.65983E-14 2.80383E-13 9.44137E-13 2.92317E-12 + 8.31669E-12 2.17273E-11 5.20738E-11 1.14363E-10 2.29795E-10 4.21605E-10 + 7.04313E-10 1.06705E-09 1.45729E-09 1.77687E-09 1.90161E-09 1.72564E-09 + 1.21452E-09 4.38466E-10 -4.38466E-10 -1.21452E-09 -1.72564E-09 -1.90161E-09 + -1.77687E-09 -1.45729E-09 -1.06705E-09 -7.04313E-10 -4.21605E-10 -2.29795E-10 + -1.14363E-10 -5.20738E-11 -2.17273E-11 -8.31669E-12 -2.92317E-12 -9.44137E-13 + -2.80383E-13 -7.65983E-14 -1.92581E-14 -4.45743E-15 + -2.07048E-15 -8.94538E-15 -3.55799E-14 -1.30238E-13 -4.38551E-13 -1.35781E-12 + -3.86310E-12 -1.00923E-11 -2.41883E-11 -5.31215E-11 -1.06740E-10 -1.95836E-10 + -3.27153E-10 -4.95643E-10 -6.76910E-10 -8.25357E-10 -8.83296E-10 -8.01558E-10 + -5.64145E-10 -2.03667E-10 2.03667E-10 5.64145E-10 8.01558E-10 8.83296E-10 + 8.25357E-10 6.76910E-10 4.95643E-10 3.27153E-10 1.95836E-10 1.06740E-10 + 5.31215E-11 2.41883E-11 1.00923E-11 3.86310E-12 1.35781E-12 4.38551E-13 + 1.30238E-13 3.55799E-14 8.94538E-15 2.07048E-15 + -1.41133E-14 -6.09759E-14 -2.42529E-13 -8.87762E-13 -2.98937E-12 -9.25547E-12 + -2.63327E-11 -6.87939E-11 -1.64878E-10 -3.62101E-10 -7.27588E-10 -1.33491E-09 + -2.23003E-09 -3.37853E-09 -4.61413E-09 -5.62602E-09 -6.02095E-09 -5.46379E-09 + -3.84547E-09 -1.38829E-09 1.38829E-09 3.84547E-09 5.46379E-09 6.02095E-09 + 5.62602E-09 4.61413E-09 3.37853E-09 2.23003E-09 1.33491E-09 7.27588E-10 + 3.62101E-10 1.64878E-10 6.87939E-11 2.63327E-11 9.25547E-12 2.98937E-12 + 8.87762E-13 2.42529E-13 6.09759E-14 1.41133E-14 + -8.50771E-14 -3.67571E-13 -1.46200E-12 -5.35156E-12 -1.80203E-11 -5.57933E-11 + -1.58737E-10 -4.14699E-10 -9.93910E-10 -2.18279E-09 -4.38600E-09 -8.04700E-09 + -1.34429E-08 -2.03663E-08 -2.78147E-08 -3.39144E-08 -3.62952E-08 -3.29365E-08 + -2.31810E-08 -8.36881E-09 8.36881E-09 2.31810E-08 3.29365E-08 3.62952E-08 + 3.39144E-08 2.78147E-08 2.03663E-08 1.34429E-08 8.04700E-09 4.38600E-09 + 2.18279E-09 9.93910E-10 4.14699E-10 1.58737E-10 5.57933E-11 1.80203E-11 + 5.35156E-12 1.46200E-12 3.67571E-13 8.50771E-14 + -4.54041E-13 -1.96166E-12 -7.80242E-12 -2.85603E-11 -9.61713E-11 -2.97759E-10 + -8.47151E-10 -2.21317E-09 -5.30432E-09 -1.16492E-08 -2.34073E-08 -4.29454E-08 + -7.17424E-08 -1.08691E-07 -1.48442E-07 -1.80995E-07 -1.93701E-07 -1.75776E-07 + -1.23713E-07 -4.46628E-08 4.46628E-08 1.23713E-07 1.75776E-07 1.93701E-07 + 1.80995E-07 1.48442E-07 1.08691E-07 7.17424E-08 4.29454E-08 2.34073E-08 + 1.16492E-08 5.30432E-09 2.21317E-09 8.47151E-10 2.97759E-10 9.61713E-11 + 2.85603E-11 7.80242E-12 1.96166E-12 4.54041E-13 + -2.14798E-12 -9.28024E-12 -3.69118E-11 -1.35113E-10 -4.54968E-10 -1.40864E-09 + -4.00771E-09 -1.04701E-08 -2.50937E-08 -5.51100E-08 -1.10735E-07 -2.03166E-07 + -3.39400E-07 -5.14196E-07 -7.02250E-07 -8.56253E-07 -9.16361E-07 -8.31563E-07 + -5.85262E-07 -2.11291E-07 2.11291E-07 5.85262E-07 8.31563E-07 9.16361E-07 + 8.56253E-07 7.02250E-07 5.14196E-07 3.39400E-07 2.03166E-07 1.10735E-07 + 5.51100E-08 2.50937E-08 1.04701E-08 4.00771E-09 1.40864E-09 4.54968E-10 + 1.35113E-10 3.69118E-11 9.28024E-12 2.14798E-12 + -9.02081E-12 -3.89739E-11 -1.55017E-10 -5.67431E-10 -1.91071E-09 -5.91582E-09 + -1.68311E-08 -4.39710E-08 -1.05385E-07 -2.31444E-07 -4.65052E-07 -8.53232E-07 + -1.42537E-06 -2.15946E-06 -2.94922E-06 -3.59598E-06 -3.84841E-06 -3.49229E-06 + -2.45791E-06 -8.87354E-07 8.87354E-07 2.45791E-06 3.49229E-06 3.84841E-06 + 3.59598E-06 2.94922E-06 2.15946E-06 1.42537E-06 8.53232E-07 4.65052E-07 + 2.31444E-07 1.05385E-07 4.39710E-08 1.68311E-08 5.91582E-09 1.91071E-09 + 5.67431E-10 1.55017E-10 3.89739E-11 9.02081E-12 + -3.36838E-11 -1.45529E-10 -5.78836E-10 -2.11879E-09 -7.13463E-09 -2.20897E-08 + -6.28473E-08 -1.64188E-07 -3.93510E-07 -8.64213E-07 -1.73651E-06 -3.18597E-06 + -5.32233E-06 -8.06342E-06 -1.10124E-05 -1.34274E-05 -1.43700E-05 -1.30402E-05 + -9.17785E-06 -3.31339E-06 3.31339E-06 9.17785E-06 1.30402E-05 1.43700E-05 + 1.34274E-05 1.10124E-05 8.06342E-06 5.32233E-06 3.18597E-06 1.73651E-06 + 8.64213E-07 3.93510E-07 1.64188E-07 6.28473E-08 2.20897E-08 7.13463E-09 + 2.11879E-09 5.78836E-10 1.45529E-10 3.36838E-11 + -1.12010E-10 -4.83931E-10 -1.92482E-09 -7.04568E-09 -2.37250E-08 -7.34555E-08 + -2.08988E-07 -5.45979E-07 -1.30855E-06 -2.87379E-06 -5.77446E-06 -1.05944E-05 + -1.76985E-05 -2.68135E-05 -3.66198E-05 -4.46506E-05 -4.77850E-05 -4.33630E-05 + -3.05194E-05 -1.10181E-05 1.10181E-05 3.05194E-05 4.33630E-05 4.77850E-05 + 4.46506E-05 3.66198E-05 2.68135E-05 1.76985E-05 1.05944E-05 5.77446E-06 + 2.87379E-06 1.30855E-06 5.45979E-07 2.08988E-07 7.34555E-08 2.37250E-08 + 7.04568E-09 1.92482E-09 4.83931E-10 1.12010E-10 + -3.32208E-10 -1.43529E-09 -5.70880E-09 -2.08967E-08 -7.03656E-08 -2.17861E-07 + -6.19835E-07 -1.61931E-06 -3.88101E-06 -8.52335E-06 -1.71264E-05 -3.14218E-05 + -5.24918E-05 -7.95260E-05 -1.08610E-04 -1.32429E-04 -1.41725E-04 -1.28610E-04 + -9.05172E-05 -3.26785E-05 3.26785E-05 9.05172E-05 1.28610E-04 1.41725E-04 + 1.32429E-04 1.08610E-04 7.95260E-05 5.24918E-05 3.14218E-05 1.71264E-05 + 8.52335E-06 3.88101E-06 1.61931E-06 6.19835E-07 2.17861E-07 7.03656E-08 + 2.08967E-08 5.70880E-09 1.43529E-09 3.32208E-10 + -8.79905E-10 -3.80158E-09 -1.51206E-08 -5.53482E-08 -1.86374E-07 -5.77039E-07 + -1.64173E-06 -4.28900E-06 -1.02795E-05 -2.25754E-05 -4.53620E-05 -8.32257E-05 + -1.39033E-04 -2.10637E-04 -2.87672E-04 -3.50759E-04 -3.75382E-04 -3.40647E-04 + -2.39752E-04 -8.65557E-05 8.65557E-05 2.39752E-04 3.40647E-04 3.75382E-04 + 3.50759E-04 2.87672E-04 2.10637E-04 1.39033E-04 8.32257E-05 4.53620E-05 + 2.25754E-05 1.02795E-05 4.28900E-06 1.64173E-06 5.77039E-07 1.86374E-07 + 5.53482E-08 1.51206E-08 3.80158E-09 8.79905E-10 + -2.08292E-09 -8.99915E-09 -3.57938E-08 -1.31021E-07 -4.41188E-07 -1.36597E-06 + -3.88632E-06 -1.01530E-05 -2.43337E-05 -5.34408E-05 -1.07381E-04 -1.97013E-04 + -3.29120E-04 -4.98623E-04 -6.80985E-04 -8.30340E-04 -8.88666E-04 -8.06493E-04 + -5.67674E-04 -2.04957E-04 2.04957E-04 5.67674E-04 8.06493E-04 8.88666E-04 + 8.30340E-04 6.80985E-04 4.98623E-04 3.29120E-04 1.97013E-04 1.07381E-04 + 5.34408E-05 2.43337E-05 1.01530E-05 3.88632E-06 1.36597E-06 4.41188E-07 + 1.31021E-07 3.57938E-08 8.99915E-09 2.08292E-09 + -4.40696E-09 -1.90400E-08 -7.57309E-08 -2.77208E-07 -9.33445E-07 -2.89007E-06 + -8.22251E-06 -2.14812E-05 -5.14841E-05 -1.13068E-04 -2.27193E-04 -4.16831E-04 + -6.96341E-04 -1.05498E-03 -1.44090E-03 -1.75723E-03 -1.88147E-03 -1.70885E-03 + -1.20406E-03 -4.35055E-04 4.35055E-04 1.20406E-03 1.70885E-03 1.88147E-03 + 1.75723E-03 1.44090E-03 1.05498E-03 6.96341E-04 4.16831E-04 2.27193E-04 + 1.13068E-04 5.14841E-05 2.14812E-05 8.22251E-06 2.89007E-06 9.33445E-07 + 2.77208E-07 7.57309E-08 1.90400E-08 4.40696E-09 + -8.32500E-09 -3.59677E-08 -1.43060E-07 -5.23663E-07 -1.76333E-06 -5.45951E-06 + -1.55328E-05 -4.05793E-05 -9.72565E-05 -2.13592E-04 -4.29181E-04 -7.87422E-04 + -1.31546E-03 -1.99317E-03 -2.72332E-03 -3.32517E-03 -3.57095E-03 -3.26146E-03 + -2.31459E-03 -8.40793E-04 8.40793E-04 2.31459E-03 3.26146E-03 3.57095E-03 + 3.32517E-03 2.72332E-03 1.99317E-03 1.31546E-03 7.87422E-04 4.29181E-04 + 2.13592E-04 9.72565E-05 4.05793E-05 1.55328E-05 5.45951E-06 1.76333E-06 + 5.23663E-07 1.43060E-07 3.59677E-08 8.32500E-09 + -1.40054E-08 -6.05095E-08 -2.40674E-07 -8.80973E-07 -2.96651E-06 -9.18468E-06 + -2.61313E-05 -6.82677E-05 -1.63617E-04 -3.59331E-04 -7.22026E-04 -1.32473E-03 + -2.21331E-03 -3.35511E-03 -4.59212E-03 -5.63724E-03 -6.13382E-03 -5.73616E-03 + -4.19175E-03 -1.55503E-03 1.55503E-03 4.19175E-03 5.73616E-03 6.13382E-03 + 5.63724E-03 4.59212E-03 3.35511E-03 2.21331E-03 1.32473E-03 7.22026E-04 + 3.59331E-04 1.63617E-04 6.82677E-05 2.61313E-05 9.18468E-06 2.96651E-06 + 8.80973E-07 2.40674E-07 6.05095E-08 1.40054E-08 + -2.08811E-08 -9.02156E-08 -3.58829E-07 -1.31347E-06 -4.42286E-06 -1.36938E-05 + -3.89600E-05 -1.01783E-04 -2.43943E-04 -5.35740E-04 -1.07650E-03 -1.97523E-03 + -3.30119E-03 -5.01125E-03 -6.89413E-03 -8.59229E-03 -9.67679E-03 -9.57745E-03 + -7.45578E-03 -2.88335E-03 2.88335E-03 7.45578E-03 9.57745E-03 9.67679E-03 + 8.59229E-03 6.89413E-03 5.01125E-03 3.30119E-03 1.97523E-03 1.07650E-03 + 5.35740E-04 2.43943E-04 1.01783E-04 3.89600E-05 1.36938E-05 4.42286E-06 + 1.31347E-06 3.58829E-07 9.02156E-08 2.08811E-08 + -2.73501E-08 -1.18165E-07 -4.69995E-07 -1.72039E-06 -5.79307E-06 -1.79361E-05 + -5.10299E-05 -1.33315E-04 -3.19517E-04 -7.01715E-04 -1.41004E-03 -2.58756E-03 + -4.32749E-03 -6.58792E-03 -9.15200E-03 -1.17103E-02 -1.39035E-02 -1.48166E-02 + -1.23626E-02 -4.97564E-03 4.97564E-03 1.23626E-02 1.48166E-02 1.39035E-02 + 1.17103E-02 9.15200E-03 6.58792E-03 4.32749E-03 2.58756E-03 1.41004E-03 + 7.01715E-04 3.19517E-04 1.33315E-04 5.10299E-05 1.79361E-05 5.79307E-06 + 1.72039E-06 4.69995E-07 1.18165E-07 2.73501E-08 + -3.09632E-08 -1.33775E-07 -5.32083E-07 -1.94766E-06 -6.55837E-06 -2.03055E-05 + -5.77712E-05 -1.50927E-04 -3.61727E-04 -7.94419E-04 -1.59637E-03 -2.93002E-03 + -4.90471E-03 -7.49414E-03 -1.05326E-02 -1.38552E-02 -1.72342E-02 -1.93542E-02 + -1.68103E-02 -6.90727E-03 6.90727E-03 1.68103E-02 1.93542E-02 1.72342E-02 + 1.38552E-02 1.05326E-02 7.49414E-03 4.90471E-03 2.93002E-03 1.59637E-03 + 7.94419E-04 3.61727E-04 1.50927E-04 5.77712E-05 2.03055E-05 6.55837E-06 + 1.94766E-06 5.32083E-07 1.33775E-07 3.09632E-08 + -2.92890E-08 -1.26542E-07 -5.03314E-07 -1.84235E-06 -6.20376E-06 -1.92076E-05 + -5.46475E-05 -1.42766E-04 -3.42168E-04 -7.51468E-04 -1.51010E-03 -2.77208E-03 + -4.64366E-03 -7.11450E-03 -1.00766E-02 -1.34630E-02 -1.70845E-02 -1.94863E-02 + -1.70928E-02 -7.07807E-03 7.07807E-03 1.70928E-02 1.94863E-02 1.70845E-02 + 1.34630E-02 1.00766E-02 7.11450E-03 4.64366E-03 2.77208E-03 1.51010E-03 + 7.51468E-04 3.42168E-04 1.42766E-04 5.46475E-05 1.92076E-05 6.20376E-06 + 1.84235E-06 5.03314E-07 1.26542E-07 2.92890E-08 + -2.11853E-08 -9.15298E-08 -3.64056E-07 -1.33260E-06 -4.48729E-06 -1.38932E-05 + -3.95275E-05 -1.03265E-04 -2.47496E-04 -5.43551E-04 -1.09229E-03 -2.00521E-03 + -3.35967E-03 -5.15032E-03 -7.30195E-03 -9.75380E-03 -1.23101E-02 -1.38715E-02 + -1.20157E-02 -4.94576E-03 4.94576E-03 1.20157E-02 1.38715E-02 1.23101E-02 + 9.75380E-03 7.30195E-03 5.15032E-03 3.35967E-03 2.00521E-03 1.09229E-03 + 5.43551E-04 2.47496E-04 1.03265E-04 3.95275E-05 1.38932E-05 4.48729E-06 + 1.33260E-06 3.64056E-07 9.15298E-08 2.11853E-08 + -7.75273E-09 -3.34952E-08 -1.33226E-07 -4.87665E-07 -1.64212E-06 -5.08421E-06 + -1.44651E-05 -3.77898E-05 -9.05711E-05 -1.98912E-04 -3.99721E-04 -7.33787E-04 + -1.22930E-03 -1.88341E-03 -2.66434E-03 -3.53643E-03 -4.40645E-03 -4.87623E-03 + -4.14002E-03 -1.67739E-03 1.67739E-03 4.14002E-03 4.87623E-03 4.40645E-03 + 3.53643E-03 2.66434E-03 1.88341E-03 1.22930E-03 7.33787E-04 3.99721E-04 + 1.98912E-04 9.05711E-05 3.77898E-05 1.44651E-05 5.08421E-06 1.64212E-06 + 4.87665E-07 1.33226E-07 3.34952E-08 7.75273E-09 + 7.75273E-09 3.34952E-08 1.33226E-07 4.87665E-07 1.64212E-06 5.08421E-06 + 1.44651E-05 3.77898E-05 9.05711E-05 1.98912E-04 3.99721E-04 7.33787E-04 + 1.22930E-03 1.88341E-03 2.66434E-03 3.53643E-03 4.40645E-03 4.87623E-03 + 4.14002E-03 1.67739E-03 -1.67739E-03 -4.14002E-03 -4.87623E-03 -4.40645E-03 + -3.53643E-03 -2.66434E-03 -1.88341E-03 -1.22930E-03 -7.33787E-04 -3.99721E-04 + -1.98912E-04 -9.05711E-05 -3.77898E-05 -1.44651E-05 -5.08421E-06 -1.64212E-06 + -4.87665E-07 -1.33226E-07 -3.34952E-08 -7.75273E-09 + 2.11853E-08 9.15298E-08 3.64056E-07 1.33260E-06 4.48729E-06 1.38932E-05 + 3.95275E-05 1.03265E-04 2.47496E-04 5.43551E-04 1.09229E-03 2.00521E-03 + 3.35967E-03 5.15032E-03 7.30195E-03 9.75380E-03 1.23101E-02 1.38715E-02 + 1.20157E-02 4.94576E-03 -4.94576E-03 -1.20157E-02 -1.38715E-02 -1.23101E-02 + -9.75380E-03 -7.30195E-03 -5.15032E-03 -3.35967E-03 -2.00521E-03 -1.09229E-03 + -5.43551E-04 -2.47496E-04 -1.03265E-04 -3.95275E-05 -1.38932E-05 -4.48729E-06 + -1.33260E-06 -3.64056E-07 -9.15298E-08 -2.11853E-08 + 2.92890E-08 1.26542E-07 5.03314E-07 1.84235E-06 6.20376E-06 1.92076E-05 + 5.46475E-05 1.42766E-04 3.42168E-04 7.51468E-04 1.51010E-03 2.77208E-03 + 4.64366E-03 7.11450E-03 1.00766E-02 1.34630E-02 1.70845E-02 1.94863E-02 + 1.70928E-02 7.07807E-03 -7.07807E-03 -1.70928E-02 -1.94863E-02 -1.70845E-02 + -1.34630E-02 -1.00766E-02 -7.11450E-03 -4.64366E-03 -2.77208E-03 -1.51010E-03 + -7.51468E-04 -3.42168E-04 -1.42766E-04 -5.46475E-05 -1.92076E-05 -6.20376E-06 + -1.84235E-06 -5.03314E-07 -1.26542E-07 -2.92890E-08 + 3.09632E-08 1.33775E-07 5.32083E-07 1.94766E-06 6.55837E-06 2.03055E-05 + 5.77712E-05 1.50927E-04 3.61727E-04 7.94419E-04 1.59637E-03 2.93002E-03 + 4.90471E-03 7.49414E-03 1.05326E-02 1.38552E-02 1.72342E-02 1.93542E-02 + 1.68103E-02 6.90727E-03 -6.90727E-03 -1.68103E-02 -1.93542E-02 -1.72342E-02 + -1.38552E-02 -1.05326E-02 -7.49414E-03 -4.90471E-03 -2.93002E-03 -1.59637E-03 + -7.94419E-04 -3.61727E-04 -1.50927E-04 -5.77712E-05 -2.03055E-05 -6.55837E-06 + -1.94766E-06 -5.32083E-07 -1.33775E-07 -3.09632E-08 + 2.73501E-08 1.18165E-07 4.69995E-07 1.72039E-06 5.79307E-06 1.79361E-05 + 5.10299E-05 1.33315E-04 3.19517E-04 7.01715E-04 1.41004E-03 2.58756E-03 + 4.32749E-03 6.58792E-03 9.15200E-03 1.17103E-02 1.39035E-02 1.48166E-02 + 1.23626E-02 4.97564E-03 -4.97564E-03 -1.23626E-02 -1.48166E-02 -1.39035E-02 + -1.17103E-02 -9.15200E-03 -6.58792E-03 -4.32749E-03 -2.58756E-03 -1.41004E-03 + -7.01715E-04 -3.19517E-04 -1.33315E-04 -5.10299E-05 -1.79361E-05 -5.79307E-06 + -1.72039E-06 -4.69995E-07 -1.18165E-07 -2.73501E-08 + 2.08811E-08 9.02156E-08 3.58829E-07 1.31347E-06 4.42286E-06 1.36938E-05 + 3.89600E-05 1.01783E-04 2.43943E-04 5.35740E-04 1.07650E-03 1.97523E-03 + 3.30119E-03 5.01125E-03 6.89413E-03 8.59229E-03 9.67679E-03 9.57745E-03 + 7.45578E-03 2.88335E-03 -2.88335E-03 -7.45578E-03 -9.57745E-03 -9.67679E-03 + -8.59229E-03 -6.89413E-03 -5.01125E-03 -3.30119E-03 -1.97523E-03 -1.07650E-03 + -5.35740E-04 -2.43943E-04 -1.01783E-04 -3.89600E-05 -1.36938E-05 -4.42286E-06 + -1.31347E-06 -3.58829E-07 -9.02156E-08 -2.08811E-08 + 1.40054E-08 6.05095E-08 2.40674E-07 8.80973E-07 2.96651E-06 9.18468E-06 + 2.61313E-05 6.82677E-05 1.63617E-04 3.59331E-04 7.22026E-04 1.32473E-03 + 2.21331E-03 3.35511E-03 4.59212E-03 5.63724E-03 6.13382E-03 5.73616E-03 + 4.19175E-03 1.55503E-03 -1.55503E-03 -4.19175E-03 -5.73616E-03 -6.13382E-03 + -5.63724E-03 -4.59212E-03 -3.35511E-03 -2.21331E-03 -1.32473E-03 -7.22026E-04 + -3.59331E-04 -1.63617E-04 -6.82677E-05 -2.61313E-05 -9.18468E-06 -2.96651E-06 + -8.80973E-07 -2.40674E-07 -6.05095E-08 -1.40054E-08 + 8.32500E-09 3.59677E-08 1.43060E-07 5.23663E-07 1.76333E-06 5.45951E-06 + 1.55328E-05 4.05793E-05 9.72565E-05 2.13592E-04 4.29181E-04 7.87422E-04 + 1.31546E-03 1.99317E-03 2.72332E-03 3.32517E-03 3.57095E-03 3.26146E-03 + 2.31459E-03 8.40793E-04 -8.40793E-04 -2.31459E-03 -3.26146E-03 -3.57095E-03 + -3.32517E-03 -2.72332E-03 -1.99317E-03 -1.31546E-03 -7.87422E-04 -4.29181E-04 + -2.13592E-04 -9.72565E-05 -4.05793E-05 -1.55328E-05 -5.45951E-06 -1.76333E-06 + -5.23663E-07 -1.43060E-07 -3.59677E-08 -8.32500E-09 + 4.40696E-09 1.90400E-08 7.57309E-08 2.77208E-07 9.33445E-07 2.89007E-06 + 8.22251E-06 2.14812E-05 5.14841E-05 1.13068E-04 2.27193E-04 4.16831E-04 + 6.96341E-04 1.05498E-03 1.44090E-03 1.75723E-03 1.88147E-03 1.70885E-03 + 1.20406E-03 4.35055E-04 -4.35055E-04 -1.20406E-03 -1.70885E-03 -1.88147E-03 + -1.75723E-03 -1.44090E-03 -1.05498E-03 -6.96341E-04 -4.16831E-04 -2.27193E-04 + -1.13068E-04 -5.14841E-05 -2.14812E-05 -8.22251E-06 -2.89007E-06 -9.33445E-07 + -2.77208E-07 -7.57309E-08 -1.90400E-08 -4.40696E-09 + 2.08292E-09 8.99915E-09 3.57938E-08 1.31021E-07 4.41188E-07 1.36597E-06 + 3.88632E-06 1.01530E-05 2.43337E-05 5.34408E-05 1.07381E-04 1.97013E-04 + 3.29120E-04 4.98623E-04 6.80985E-04 8.30340E-04 8.88666E-04 8.06493E-04 + 5.67674E-04 2.04957E-04 -2.04957E-04 -5.67674E-04 -8.06493E-04 -8.88666E-04 + -8.30340E-04 -6.80985E-04 -4.98623E-04 -3.29120E-04 -1.97013E-04 -1.07381E-04 + -5.34408E-05 -2.43337E-05 -1.01530E-05 -3.88632E-06 -1.36597E-06 -4.41188E-07 + -1.31021E-07 -3.57938E-08 -8.99915E-09 -2.08292E-09 + 8.79905E-10 3.80158E-09 1.51206E-08 5.53482E-08 1.86374E-07 5.77039E-07 + 1.64173E-06 4.28900E-06 1.02795E-05 2.25754E-05 4.53620E-05 8.32257E-05 + 1.39033E-04 2.10637E-04 2.87672E-04 3.50759E-04 3.75382E-04 3.40647E-04 + 2.39752E-04 8.65557E-05 -8.65557E-05 -2.39752E-04 -3.40647E-04 -3.75382E-04 + -3.50759E-04 -2.87672E-04 -2.10637E-04 -1.39033E-04 -8.32257E-05 -4.53620E-05 + -2.25754E-05 -1.02795E-05 -4.28900E-06 -1.64173E-06 -5.77039E-07 -1.86374E-07 + -5.53482E-08 -1.51206E-08 -3.80158E-09 -8.79905E-10 + 3.32208E-10 1.43529E-09 5.70880E-09 2.08967E-08 7.03656E-08 2.17861E-07 + 6.19835E-07 1.61931E-06 3.88101E-06 8.52335E-06 1.71264E-05 3.14218E-05 + 5.24918E-05 7.95260E-05 1.08610E-04 1.32429E-04 1.41725E-04 1.28610E-04 + 9.05172E-05 3.26785E-05 -3.26785E-05 -9.05172E-05 -1.28610E-04 -1.41725E-04 + -1.32429E-04 -1.08610E-04 -7.95260E-05 -5.24918E-05 -3.14218E-05 -1.71264E-05 + -8.52335E-06 -3.88101E-06 -1.61931E-06 -6.19835E-07 -2.17861E-07 -7.03656E-08 + -2.08967E-08 -5.70880E-09 -1.43529E-09 -3.32208E-10 + 1.12010E-10 4.83931E-10 1.92482E-09 7.04568E-09 2.37250E-08 7.34555E-08 + 2.08988E-07 5.45979E-07 1.30855E-06 2.87379E-06 5.77446E-06 1.05944E-05 + 1.76985E-05 2.68135E-05 3.66198E-05 4.46506E-05 4.77850E-05 4.33630E-05 + 3.05194E-05 1.10181E-05 -1.10181E-05 -3.05194E-05 -4.33630E-05 -4.77850E-05 + -4.46506E-05 -3.66198E-05 -2.68135E-05 -1.76985E-05 -1.05944E-05 -5.77446E-06 + -2.87379E-06 -1.30855E-06 -5.45979E-07 -2.08988E-07 -7.34555E-08 -2.37250E-08 + -7.04568E-09 -1.92482E-09 -4.83931E-10 -1.12010E-10 + 3.36838E-11 1.45529E-10 5.78836E-10 2.11879E-09 7.13463E-09 2.20897E-08 + 6.28473E-08 1.64188E-07 3.93510E-07 8.64213E-07 1.73651E-06 3.18597E-06 + 5.32233E-06 8.06342E-06 1.10124E-05 1.34274E-05 1.43700E-05 1.30402E-05 + 9.17785E-06 3.31339E-06 -3.31339E-06 -9.17785E-06 -1.30402E-05 -1.43700E-05 + -1.34274E-05 -1.10124E-05 -8.06342E-06 -5.32233E-06 -3.18597E-06 -1.73651E-06 + -8.64213E-07 -3.93510E-07 -1.64188E-07 -6.28473E-08 -2.20897E-08 -7.13463E-09 + -2.11879E-09 -5.78836E-10 -1.45529E-10 -3.36838E-11 + 9.02081E-12 3.89739E-11 1.55017E-10 5.67431E-10 1.91071E-09 5.91582E-09 + 1.68311E-08 4.39710E-08 1.05385E-07 2.31444E-07 4.65052E-07 8.53232E-07 + 1.42537E-06 2.15946E-06 2.94922E-06 3.59598E-06 3.84841E-06 3.49229E-06 + 2.45791E-06 8.87354E-07 -8.87354E-07 -2.45791E-06 -3.49229E-06 -3.84841E-06 + -3.59598E-06 -2.94922E-06 -2.15946E-06 -1.42537E-06 -8.53232E-07 -4.65052E-07 + -2.31444E-07 -1.05385E-07 -4.39710E-08 -1.68311E-08 -5.91582E-09 -1.91071E-09 + -5.67431E-10 -1.55017E-10 -3.89739E-11 -9.02081E-12 + 2.14798E-12 9.28024E-12 3.69118E-11 1.35113E-10 4.54968E-10 1.40864E-09 + 4.00771E-09 1.04701E-08 2.50937E-08 5.51100E-08 1.10735E-07 2.03166E-07 + 3.39400E-07 5.14196E-07 7.02250E-07 8.56253E-07 9.16361E-07 8.31563E-07 + 5.85262E-07 2.11291E-07 -2.11291E-07 -5.85262E-07 -8.31563E-07 -9.16361E-07 + -8.56253E-07 -7.02250E-07 -5.14196E-07 -3.39400E-07 -2.03166E-07 -1.10735E-07 + -5.51100E-08 -2.50937E-08 -1.04701E-08 -4.00771E-09 -1.40864E-09 -4.54968E-10 + -1.35113E-10 -3.69118E-11 -9.28024E-12 -2.14798E-12 + 4.54041E-13 1.96166E-12 7.80242E-12 2.85603E-11 9.61713E-11 2.97759E-10 + 8.47151E-10 2.21317E-09 5.30432E-09 1.16492E-08 2.34073E-08 4.29454E-08 + 7.17424E-08 1.08691E-07 1.48442E-07 1.80995E-07 1.93701E-07 1.75776E-07 + 1.23713E-07 4.46628E-08 -4.46628E-08 -1.23713E-07 -1.75776E-07 -1.93701E-07 + -1.80995E-07 -1.48442E-07 -1.08691E-07 -7.17424E-08 -4.29454E-08 -2.34073E-08 + -1.16492E-08 -5.30432E-09 -2.21317E-09 -8.47151E-10 -2.97759E-10 -9.61713E-11 + -2.85603E-11 -7.80242E-12 -1.96166E-12 -4.54041E-13 + 8.50771E-14 3.67571E-13 1.46200E-12 5.35156E-12 1.80203E-11 5.57933E-11 + 1.58737E-10 4.14699E-10 9.93910E-10 2.18279E-09 4.38600E-09 8.04700E-09 + 1.34429E-08 2.03663E-08 2.78147E-08 3.39144E-08 3.62952E-08 3.29365E-08 + 2.31810E-08 8.36881E-09 -8.36881E-09 -2.31810E-08 -3.29365E-08 -3.62952E-08 + -3.39144E-08 -2.78147E-08 -2.03663E-08 -1.34429E-08 -8.04700E-09 -4.38600E-09 + -2.18279E-09 -9.93910E-10 -4.14699E-10 -1.58737E-10 -5.57933E-11 -1.80203E-11 + -5.35156E-12 -1.46200E-12 -3.67571E-13 -8.50771E-14 + 1.41133E-14 6.09759E-14 2.42529E-13 8.87762E-13 2.98937E-12 9.25547E-12 + 2.63327E-11 6.87939E-11 1.64878E-10 3.62101E-10 7.27588E-10 1.33491E-09 + 2.23003E-09 3.37853E-09 4.61413E-09 5.62602E-09 6.02095E-09 5.46379E-09 + 3.84547E-09 1.38829E-09 -1.38829E-09 -3.84547E-09 -5.46379E-09 -6.02095E-09 + -5.62602E-09 -4.61413E-09 -3.37853E-09 -2.23003E-09 -1.33491E-09 -7.27588E-10 + -3.62101E-10 -1.64878E-10 -6.87939E-11 -2.63327E-11 -9.25547E-12 -2.98937E-12 + -8.87762E-13 -2.42529E-13 -6.09759E-14 -1.41133E-14 + 2.07048E-15 8.94538E-15 3.55799E-14 1.30238E-13 4.38551E-13 1.35781E-12 + 3.86310E-12 1.00923E-11 2.41883E-11 5.31215E-11 1.06740E-10 1.95836E-10 + 3.27153E-10 4.95643E-10 6.76910E-10 8.25357E-10 8.83296E-10 8.01558E-10 + 5.64145E-10 2.03667E-10 -2.03667E-10 -5.64145E-10 -8.01558E-10 -8.83296E-10 + -8.25357E-10 -6.76910E-10 -4.95643E-10 -3.27153E-10 -1.95836E-10 -1.06740E-10 + -5.31215E-11 -2.41883E-11 -1.00923E-11 -3.86310E-12 -1.35781E-12 -4.38551E-13 + -1.30238E-13 -3.55799E-14 -8.94538E-15 -2.07048E-15 + -8.32573E-16 -3.59709E-15 -1.43073E-14 -5.23709E-14 -1.76349E-13 -5.45999E-13 + -1.55342E-12 -4.05829E-12 -9.72651E-12 -2.13610E-11 -4.29219E-11 -7.87488E-11 + -1.31554E-10 -1.99306E-10 -2.72197E-10 -3.31890E-10 -3.55188E-10 -3.22320E-10 + -2.26852E-10 -8.18981E-11 8.18981E-11 2.26852E-10 3.22320E-10 3.55188E-10 + 3.31890E-10 2.72197E-10 1.99306E-10 1.31554E-10 7.87488E-11 4.29219E-11 + 2.13610E-11 9.72651E-12 4.05829E-12 1.55342E-12 5.45999E-13 1.76349E-13 + 5.23709E-14 1.43073E-14 3.59709E-15 8.32573E-16 + -5.73034E-15 -2.47576E-14 -9.84724E-14 -3.60452E-13 -1.21375E-12 -3.75794E-12 + -1.06917E-11 -2.79319E-11 -6.69445E-11 -1.47021E-10 -2.95418E-10 -5.42003E-10 + -9.05444E-10 -1.37176E-09 -1.87345E-09 -2.28429E-09 -2.44465E-09 -2.21843E-09 + -1.56135E-09 -5.63679E-10 5.63679E-10 1.56135E-09 2.21843E-09 2.44465E-09 + 2.28429E-09 1.87345E-09 1.37176E-09 9.05444E-10 5.42003E-10 2.95418E-10 + 1.47021E-10 6.69445E-11 2.79319E-11 1.06917E-11 3.75794E-12 1.21375E-12 + 3.60452E-13 9.84724E-14 2.47576E-14 5.73034E-15 + -3.49580E-14 -1.51034E-13 -6.00732E-13 -2.19894E-12 -7.40451E-12 -2.29253E-11 + -6.52247E-11 -1.70399E-10 -4.08395E-10 -8.96905E-10 -1.80220E-09 -3.30649E-09 + -5.52366E-09 -8.36844E-09 -1.14290E-08 -1.39354E-08 -1.49136E-08 -1.35335E-08 + -9.52503E-09 -3.43872E-09 3.43872E-09 9.52503E-09 1.35335E-08 1.49136E-08 + 1.39354E-08 1.14290E-08 8.36844E-09 5.52366E-09 3.30649E-09 1.80220E-09 + 8.96905E-10 4.08395E-10 1.70399E-10 6.52247E-11 2.29253E-11 7.40451E-12 + 2.19894E-12 6.00732E-13 1.51034E-13 3.49580E-14 + -1.89297E-13 -8.17850E-13 -3.25296E-12 -1.19073E-11 -4.00954E-11 -1.24141E-10 + -3.53192E-10 -9.22710E-10 -2.21146E-09 -4.85674E-09 -9.75890E-09 -1.79047E-08 + -2.99107E-08 -4.53151E-08 -6.18879E-08 -7.54600E-08 -8.07571E-08 -7.32840E-08 + -5.15781E-08 -1.86207E-08 1.86207E-08 5.15781E-08 7.32840E-08 8.07571E-08 + 7.54600E-08 6.18879E-08 4.53151E-08 2.99107E-08 1.79047E-08 9.75890E-09 + 4.85674E-09 2.21146E-09 9.22710E-10 3.53192E-10 1.24141E-10 4.00954E-11 + 1.19073E-11 3.25296E-12 8.17850E-13 1.89297E-13 + -9.11297E-13 -3.93721E-12 -1.56601E-11 -5.73228E-11 -1.93024E-10 -5.97626E-10 + -1.70030E-09 -4.44202E-09 -1.06462E-08 -2.33808E-08 -4.69804E-08 -8.61949E-08 + -1.43993E-07 -2.18152E-07 -2.97935E-07 -3.63272E-07 -3.88773E-07 -3.52797E-07 + -2.48302E-07 -8.96419E-08 8.96419E-08 2.48302E-07 3.52797E-07 3.88773E-07 + 3.63272E-07 2.97935E-07 2.18152E-07 1.43993E-07 8.61949E-08 4.69804E-08 + 2.33808E-08 1.06462E-08 4.44202E-09 1.70030E-09 5.97626E-10 1.93024E-10 + 5.73228E-11 1.56601E-11 3.93721E-12 9.11297E-13 + -3.90666E-12 -1.68785E-11 -6.71336E-11 -2.45738E-10 -8.27476E-10 -2.56197E-09 + -7.28905E-09 -1.90426E-08 -4.56394E-08 -1.00232E-07 -2.01401E-07 -3.69510E-07 + -6.17286E-07 -9.35199E-07 -1.27722E-06 -1.55732E-06 -1.66664E-06 -1.51241E-06 + -1.06445E-06 -3.84288E-07 3.84288E-07 1.06445E-06 1.51241E-06 1.66664E-06 + 1.55732E-06 1.27722E-06 9.35199E-07 6.17286E-07 3.69510E-07 2.01401E-07 + 1.00232E-07 4.56394E-08 1.90426E-08 7.28905E-09 2.56197E-09 8.27476E-10 + 2.45738E-10 6.71336E-11 1.68785E-11 3.90666E-12 + -1.49374E-11 -6.45362E-11 -2.56690E-10 -9.39599E-10 -3.16392E-09 -9.79590E-09 + -2.78702E-08 -7.28107E-08 -1.74506E-07 -3.83244E-07 -7.70072E-07 -1.41285E-06 + -2.36024E-06 -3.57580E-06 -4.88355E-06 -5.95452E-06 -6.37252E-06 -5.78282E-06 + -4.07001E-06 -1.46935E-06 1.46935E-06 4.07001E-06 5.78282E-06 6.37252E-06 + 5.95452E-06 4.88355E-06 3.57580E-06 2.36024E-06 1.41285E-06 7.70072E-07 + 3.83244E-07 1.74506E-07 7.28107E-08 2.78702E-08 9.79590E-09 3.16392E-09 + 9.39599E-10 2.56690E-10 6.45362E-11 1.49374E-11 + -5.10132E-11 -2.20400E-10 -8.76630E-10 -3.20885E-09 -1.08052E-08 -3.34543E-08 + -9.51805E-08 -2.48658E-07 -5.95959E-07 -1.30883E-06 -2.62990E-06 -4.82507E-06 + -8.06052E-06 -1.22118E-05 -1.66780E-05 -2.03355E-05 -2.17630E-05 -1.97491E-05 + -1.38996E-05 -5.01803E-06 5.01803E-06 1.38996E-05 1.97491E-05 2.17630E-05 + 2.03355E-05 1.66780E-05 1.22118E-05 8.06052E-06 4.82507E-06 2.62990E-06 + 1.30883E-06 5.95959E-07 2.48658E-07 9.51805E-08 3.34543E-08 1.08052E-08 + 3.20885E-09 8.76630E-10 2.20400E-10 5.10132E-11 + -1.55771E-10 -6.72998E-10 -2.67682E-09 -9.79835E-09 -3.29940E-08 -1.02154E-07 + -2.90637E-07 -7.59287E-07 -1.81978E-06 -3.99655E-06 -8.03048E-06 -1.47335E-05 + -2.46131E-05 -3.72893E-05 -5.09268E-05 -6.20951E-05 -6.64540E-05 -6.03045E-05 + -4.24430E-05 -1.53227E-05 1.53227E-05 4.24430E-05 6.03045E-05 6.64540E-05 + 6.20951E-05 5.09268E-05 3.72893E-05 2.46131E-05 1.47335E-05 8.03048E-06 + 3.99655E-06 1.81978E-06 7.59287E-07 2.90637E-07 1.02154E-07 3.29940E-08 + 9.79835E-09 2.67682E-09 6.72998E-10 1.55771E-10 + -4.25510E-10 -1.83839E-09 -7.31213E-09 -2.67656E-08 -9.01280E-08 -2.79048E-07 + -7.93917E-07 -2.07410E-06 -4.97100E-06 -1.09172E-05 -2.19364E-05 -4.02467E-05 + -6.72343E-05 -1.01861E-04 -1.39114E-04 -1.69622E-04 -1.81529E-04 -1.64732E-04 + -1.15940E-04 -4.18570E-05 4.18570E-05 1.15940E-04 1.64732E-04 1.81529E-04 + 1.69622E-04 1.39114E-04 1.01861E-04 6.72343E-05 4.02467E-05 2.19364E-05 + 1.09172E-05 4.97100E-06 2.07410E-06 7.93917E-07 2.79048E-07 9.01280E-08 + 2.67656E-08 7.31213E-09 1.83839E-09 4.25510E-10 + -1.03962E-09 -4.49161E-09 -1.78652E-08 -6.53944E-08 -2.20203E-07 -6.81777E-07 + -1.93972E-06 -5.06750E-06 -1.21453E-05 -2.66731E-05 -5.35956E-05 -9.83319E-05 + -1.64268E-04 -2.48870E-04 -3.39888E-04 -4.14432E-04 -4.43541E-04 -4.02528E-04 + -2.83333E-04 -1.02297E-04 1.02297E-04 2.83333E-04 4.02528E-04 4.43541E-04 + 4.14432E-04 3.39888E-04 2.48870E-04 1.64268E-04 9.83319E-05 5.35956E-05 + 2.66731E-05 1.21453E-05 5.06750E-06 1.93972E-06 6.81777E-07 2.20203E-07 + 6.53944E-08 1.78652E-08 4.49161E-09 1.03962E-09 + -2.26942E-09 -9.80490E-09 -3.89986E-08 -1.42752E-07 -4.80690E-07 -1.48828E-06 + -4.23429E-06 -1.10620E-05 -2.65124E-05 -5.82257E-05 -1.16996E-04 -2.14653E-04 + -3.58589E-04 -5.43273E-04 -7.41992E-04 -9.04858E-04 -9.68820E-04 -8.79981E-04 + -6.20120E-04 -2.24092E-04 2.24092E-04 6.20120E-04 8.79981E-04 9.68820E-04 + 9.04858E-04 7.41992E-04 5.43273E-04 3.58589E-04 2.14653E-04 1.16996E-04 + 5.82257E-05 2.65124E-05 1.10620E-05 4.23429E-06 1.48828E-06 4.80690E-07 + 1.42752E-07 3.89986E-08 9.80490E-09 2.26942E-09 + -4.41679E-09 -1.90825E-08 -7.58998E-08 -2.77827E-07 -9.35528E-07 -2.89651E-06 + -8.24085E-06 -2.15291E-05 -5.15990E-05 -1.13320E-04 -2.27700E-04 -4.17762E-04 + -6.97901E-04 -1.05740E-03 -1.44458E-03 -1.76348E-03 -1.89365E-03 -1.73015E-03 + -1.22896E-03 -4.46810E-04 4.46810E-04 1.22896E-03 1.73015E-03 1.89365E-03 + 1.76348E-03 1.44458E-03 1.05740E-03 6.97901E-04 4.17762E-04 2.27700E-04 + 1.13320E-04 5.15990E-05 2.15291E-05 8.24085E-06 2.89651E-06 9.35528E-07 + 2.77827E-07 7.58998E-08 1.90825E-08 4.41679E-09 + -7.63675E-09 -3.29942E-08 -1.31233E-07 -4.80370E-07 -1.61755E-06 -5.00816E-06 + -1.42487E-05 -3.72245E-05 -8.92161E-05 -1.95934E-04 -3.93700E-04 -7.22328E-04 + -1.20675E-03 -1.82884E-03 -2.50142E-03 -3.06691E-03 -3.33308E-03 -3.11794E-03 + -2.28387E-03 -8.49354E-04 8.49354E-04 2.28387E-03 3.11794E-03 3.33308E-03 + 3.06691E-03 2.50142E-03 1.82884E-03 1.20675E-03 7.22328E-04 3.93700E-04 + 1.95934E-04 8.92161E-05 3.72245E-05 1.42487E-05 5.00816E-06 1.61755E-06 + 4.80370E-07 1.31233E-07 3.29942E-08 7.63675E-09 + -1.16646E-08 -5.03963E-08 -2.00449E-07 -7.33732E-07 -2.47070E-06 -7.64961E-06 + -2.17638E-05 -5.68578E-05 -1.36271E-04 -2.99275E-04 -6.01351E-04 -1.10333E-03 + -1.84352E-03 -2.79574E-03 -3.83545E-03 -4.75293E-03 -5.31253E-03 -5.23149E-03 + -4.07339E-03 -1.57896E-03 1.57896E-03 4.07339E-03 5.23149E-03 5.31253E-03 + 4.75293E-03 3.83545E-03 2.79574E-03 1.84352E-03 1.10333E-03 6.01351E-04 + 2.99275E-04 1.36271E-04 5.68578E-05 2.17638E-05 7.64961E-06 2.47070E-06 + 7.33732E-07 2.00449E-07 5.03963E-08 1.16646E-08 + -1.55942E-08 -6.73739E-08 -2.67977E-07 -9.80913E-07 -3.30304E-06 -1.02266E-05 + -2.90957E-05 -7.60123E-05 -1.82179E-04 -4.00096E-04 -8.03942E-04 -1.47510E-03 + -2.46526E-03 -3.74282E-03 -5.15797E-03 -6.48586E-03 -7.50710E-03 -7.82268E-03 + -6.45877E-03 -2.59421E-03 2.59421E-03 6.45877E-03 7.82268E-03 7.50710E-03 + 6.48586E-03 5.15797E-03 3.74282E-03 2.46526E-03 1.47510E-03 8.03942E-04 + 4.00096E-04 1.82179E-04 7.60123E-05 2.90957E-05 1.02266E-05 3.30304E-06 + 9.80913E-07 2.67977E-07 6.73739E-08 1.55942E-08 + -1.79471E-08 -7.75396E-08 -3.08411E-07 -1.12892E-06 -3.80141E-06 -1.17697E-05 + -3.34858E-05 -8.74813E-05 -2.09667E-04 -4.60464E-04 -9.25253E-04 -1.69777E-03 + -2.83814E-03 -4.31357E-03 -5.96591E-03 -7.57278E-03 -8.92506E-03 -9.52057E-03 + -8.01701E-03 -3.25324E-03 3.25324E-03 8.01701E-03 9.52057E-03 8.92506E-03 + 7.57278E-03 5.96591E-03 4.31357E-03 2.83814E-03 1.69777E-03 9.25253E-04 + 4.60464E-04 2.09667E-04 8.74813E-05 3.34858E-05 1.17697E-05 3.80141E-06 + 1.12892E-06 3.08411E-07 7.75396E-08 1.79471E-08 + -1.71872E-08 -7.42564E-08 -2.95352E-07 -1.08112E-06 -3.64046E-06 -1.12713E-05 + -3.20680E-05 -8.37772E-05 -2.00789E-04 -4.40968E-04 -8.86082E-04 -1.62595E-03 + -2.71848E-03 -4.13349E-03 -5.72040E-03 -7.25298E-03 -8.47984E-03 -8.88254E-03 + -7.31908E-03 -2.92873E-03 2.92873E-03 7.31908E-03 8.88254E-03 8.47984E-03 + 7.25298E-03 5.72040E-03 4.13349E-03 2.71848E-03 1.62595E-03 8.86082E-04 + 4.40968E-04 2.00789E-04 8.37772E-05 3.20680E-05 1.12713E-05 3.64046E-06 + 1.08112E-06 2.95352E-07 7.42564E-08 1.71872E-08 + -1.25339E-08 -5.41522E-08 -2.15388E-07 -7.88415E-07 -2.65484E-06 -8.21972E-06 + -2.33859E-05 -6.10953E-05 -1.46427E-04 -3.21580E-04 -6.46185E-04 -1.18574E-03 + -1.98244E-03 -3.01354E-03 -4.16318E-03 -5.23921E-03 -5.99925E-03 -6.05717E-03 + -4.79262E-03 -1.86907E-03 1.86907E-03 4.79262E-03 6.05717E-03 5.99925E-03 + 5.23921E-03 4.16318E-03 3.01354E-03 1.98244E-03 1.18574E-03 6.46185E-04 + 3.21580E-04 1.46427E-04 6.10953E-05 2.33859E-05 8.21972E-06 2.65484E-06 + 7.88415E-07 2.15388E-07 5.41522E-08 1.25339E-08 + -4.60552E-09 -1.98979E-08 -7.91431E-08 -2.89698E-07 -9.75503E-07 -3.02028E-06 + -8.59299E-06 -2.24491E-05 -5.38038E-05 -1.18163E-04 -2.37436E-04 -4.35688E-04 + -7.28369E-04 -1.10674E-03 -1.52617E-03 -1.90875E-03 -2.15216E-03 -2.11626E-03 + -1.62551E-03 -6.21734E-04 6.21734E-04 1.62551E-03 2.11626E-03 2.15216E-03 + 1.90875E-03 1.52617E-03 1.10674E-03 7.28369E-04 4.35688E-04 2.37436E-04 + 1.18163E-04 5.38038E-05 2.24491E-05 8.59299E-06 3.02028E-06 9.75503E-07 + 2.89698E-07 7.91431E-08 1.98979E-08 4.60552E-09 + 4.60552E-09 1.98979E-08 7.91431E-08 2.89698E-07 9.75503E-07 3.02028E-06 + 8.59299E-06 2.24491E-05 5.38038E-05 1.18163E-04 2.37436E-04 4.35688E-04 + 7.28369E-04 1.10674E-03 1.52617E-03 1.90875E-03 2.15216E-03 2.11626E-03 + 1.62551E-03 6.21734E-04 -6.21734E-04 -1.62551E-03 -2.11626E-03 -2.15216E-03 + -1.90875E-03 -1.52617E-03 -1.10674E-03 -7.28369E-04 -4.35688E-04 -2.37436E-04 + -1.18163E-04 -5.38038E-05 -2.24491E-05 -8.59299E-06 -3.02028E-06 -9.75503E-07 + -2.89698E-07 -7.91431E-08 -1.98979E-08 -4.60552E-09 + 1.25339E-08 5.41522E-08 2.15388E-07 7.88415E-07 2.65484E-06 8.21972E-06 + 2.33859E-05 6.10953E-05 1.46427E-04 3.21580E-04 6.46185E-04 1.18574E-03 + 1.98244E-03 3.01354E-03 4.16318E-03 5.23921E-03 5.99925E-03 6.05717E-03 + 4.79262E-03 1.86907E-03 -1.86907E-03 -4.79262E-03 -6.05717E-03 -5.99925E-03 + -5.23921E-03 -4.16318E-03 -3.01354E-03 -1.98244E-03 -1.18574E-03 -6.46185E-04 + -3.21580E-04 -1.46427E-04 -6.10953E-05 -2.33859E-05 -8.21972E-06 -2.65484E-06 + -7.88415E-07 -2.15388E-07 -5.41522E-08 -1.25339E-08 + 1.71872E-08 7.42564E-08 2.95352E-07 1.08112E-06 3.64046E-06 1.12713E-05 + 3.20680E-05 8.37772E-05 2.00789E-04 4.40968E-04 8.86082E-04 1.62595E-03 + 2.71848E-03 4.13349E-03 5.72040E-03 7.25298E-03 8.47984E-03 8.88254E-03 + 7.31908E-03 2.92873E-03 -2.92873E-03 -7.31908E-03 -8.88254E-03 -8.47984E-03 + -7.25298E-03 -5.72040E-03 -4.13349E-03 -2.71848E-03 -1.62595E-03 -8.86082E-04 + -4.40968E-04 -2.00789E-04 -8.37772E-05 -3.20680E-05 -1.12713E-05 -3.64046E-06 + -1.08112E-06 -2.95352E-07 -7.42564E-08 -1.71872E-08 + 1.79471E-08 7.75396E-08 3.08411E-07 1.12892E-06 3.80141E-06 1.17697E-05 + 3.34858E-05 8.74813E-05 2.09667E-04 4.60464E-04 9.25253E-04 1.69777E-03 + 2.83814E-03 4.31357E-03 5.96591E-03 7.57278E-03 8.92506E-03 9.52057E-03 + 8.01701E-03 3.25324E-03 -3.25324E-03 -8.01701E-03 -9.52057E-03 -8.92506E-03 + -7.57278E-03 -5.96591E-03 -4.31357E-03 -2.83814E-03 -1.69777E-03 -9.25253E-04 + -4.60464E-04 -2.09667E-04 -8.74813E-05 -3.34858E-05 -1.17697E-05 -3.80141E-06 + -1.12892E-06 -3.08411E-07 -7.75396E-08 -1.79471E-08 + 1.55942E-08 6.73739E-08 2.67977E-07 9.80913E-07 3.30304E-06 1.02266E-05 + 2.90957E-05 7.60123E-05 1.82179E-04 4.00096E-04 8.03942E-04 1.47510E-03 + 2.46526E-03 3.74282E-03 5.15797E-03 6.48586E-03 7.50710E-03 7.82268E-03 + 6.45877E-03 2.59421E-03 -2.59421E-03 -6.45877E-03 -7.82268E-03 -7.50710E-03 + -6.48586E-03 -5.15797E-03 -3.74282E-03 -2.46526E-03 -1.47510E-03 -8.03942E-04 + -4.00096E-04 -1.82179E-04 -7.60123E-05 -2.90957E-05 -1.02266E-05 -3.30304E-06 + -9.80913E-07 -2.67977E-07 -6.73739E-08 -1.55942E-08 + 1.16646E-08 5.03963E-08 2.00449E-07 7.33732E-07 2.47070E-06 7.64961E-06 + 2.17638E-05 5.68578E-05 1.36271E-04 2.99275E-04 6.01351E-04 1.10333E-03 + 1.84352E-03 2.79574E-03 3.83545E-03 4.75293E-03 5.31253E-03 5.23149E-03 + 4.07339E-03 1.57896E-03 -1.57896E-03 -4.07339E-03 -5.23149E-03 -5.31253E-03 + -4.75293E-03 -3.83545E-03 -2.79574E-03 -1.84352E-03 -1.10333E-03 -6.01351E-04 + -2.99275E-04 -1.36271E-04 -5.68578E-05 -2.17638E-05 -7.64961E-06 -2.47070E-06 + -7.33732E-07 -2.00449E-07 -5.03963E-08 -1.16646E-08 + 7.63675E-09 3.29942E-08 1.31233E-07 4.80370E-07 1.61755E-06 5.00816E-06 + 1.42487E-05 3.72245E-05 8.92161E-05 1.95934E-04 3.93700E-04 7.22328E-04 + 1.20675E-03 1.82884E-03 2.50142E-03 3.06691E-03 3.33308E-03 3.11794E-03 + 2.28387E-03 8.49354E-04 -8.49354E-04 -2.28387E-03 -3.11794E-03 -3.33308E-03 + -3.06691E-03 -2.50142E-03 -1.82884E-03 -1.20675E-03 -7.22328E-04 -3.93700E-04 + -1.95934E-04 -8.92161E-05 -3.72245E-05 -1.42487E-05 -5.00816E-06 -1.61755E-06 + -4.80370E-07 -1.31233E-07 -3.29942E-08 -7.63675E-09 + 4.41679E-09 1.90825E-08 7.58998E-08 2.77827E-07 9.35528E-07 2.89651E-06 + 8.24085E-06 2.15291E-05 5.15990E-05 1.13320E-04 2.27700E-04 4.17762E-04 + 6.97901E-04 1.05740E-03 1.44458E-03 1.76348E-03 1.89365E-03 1.73015E-03 + 1.22896E-03 4.46810E-04 -4.46810E-04 -1.22896E-03 -1.73015E-03 -1.89365E-03 + -1.76348E-03 -1.44458E-03 -1.05740E-03 -6.97901E-04 -4.17762E-04 -2.27700E-04 + -1.13320E-04 -5.15990E-05 -2.15291E-05 -8.24085E-06 -2.89651E-06 -9.35528E-07 + -2.77827E-07 -7.58998E-08 -1.90825E-08 -4.41679E-09 + 2.26942E-09 9.80490E-09 3.89986E-08 1.42752E-07 4.80690E-07 1.48828E-06 + 4.23429E-06 1.10620E-05 2.65124E-05 5.82257E-05 1.16996E-04 2.14653E-04 + 3.58589E-04 5.43273E-04 7.41992E-04 9.04858E-04 9.68820E-04 8.79981E-04 + 6.20120E-04 2.24092E-04 -2.24092E-04 -6.20120E-04 -8.79981E-04 -9.68820E-04 + -9.04858E-04 -7.41992E-04 -5.43273E-04 -3.58589E-04 -2.14653E-04 -1.16996E-04 + -5.82257E-05 -2.65124E-05 -1.10620E-05 -4.23429E-06 -1.48828E-06 -4.80690E-07 + -1.42752E-07 -3.89986E-08 -9.80490E-09 -2.26942E-09 + 1.03962E-09 4.49161E-09 1.78652E-08 6.53944E-08 2.20203E-07 6.81777E-07 + 1.93972E-06 5.06750E-06 1.21453E-05 2.66731E-05 5.35956E-05 9.83319E-05 + 1.64268E-04 2.48870E-04 3.39888E-04 4.14432E-04 4.43541E-04 4.02528E-04 + 2.83333E-04 1.02297E-04 -1.02297E-04 -2.83333E-04 -4.02528E-04 -4.43541E-04 + -4.14432E-04 -3.39888E-04 -2.48870E-04 -1.64268E-04 -9.83319E-05 -5.35956E-05 + -2.66731E-05 -1.21453E-05 -5.06750E-06 -1.93972E-06 -6.81777E-07 -2.20203E-07 + -6.53944E-08 -1.78652E-08 -4.49161E-09 -1.03962E-09 + 4.25510E-10 1.83839E-09 7.31213E-09 2.67656E-08 9.01280E-08 2.79048E-07 + 7.93917E-07 2.07410E-06 4.97100E-06 1.09172E-05 2.19364E-05 4.02467E-05 + 6.72343E-05 1.01861E-04 1.39114E-04 1.69622E-04 1.81529E-04 1.64732E-04 + 1.15940E-04 4.18570E-05 -4.18570E-05 -1.15940E-04 -1.64732E-04 -1.81529E-04 + -1.69622E-04 -1.39114E-04 -1.01861E-04 -6.72343E-05 -4.02467E-05 -2.19364E-05 + -1.09172E-05 -4.97100E-06 -2.07410E-06 -7.93917E-07 -2.79048E-07 -9.01280E-08 + -2.67656E-08 -7.31213E-09 -1.83839E-09 -4.25510E-10 + 1.55771E-10 6.72998E-10 2.67682E-09 9.79835E-09 3.29940E-08 1.02154E-07 + 2.90637E-07 7.59287E-07 1.81978E-06 3.99655E-06 8.03048E-06 1.47335E-05 + 2.46131E-05 3.72893E-05 5.09268E-05 6.20951E-05 6.64540E-05 6.03045E-05 + 4.24430E-05 1.53227E-05 -1.53227E-05 -4.24430E-05 -6.03045E-05 -6.64540E-05 + -6.20951E-05 -5.09268E-05 -3.72893E-05 -2.46131E-05 -1.47335E-05 -8.03048E-06 + -3.99655E-06 -1.81978E-06 -7.59287E-07 -2.90637E-07 -1.02154E-07 -3.29940E-08 + -9.79835E-09 -2.67682E-09 -6.72998E-10 -1.55771E-10 + 5.10132E-11 2.20400E-10 8.76630E-10 3.20885E-09 1.08052E-08 3.34543E-08 + 9.51805E-08 2.48658E-07 5.95959E-07 1.30883E-06 2.62990E-06 4.82507E-06 + 8.06052E-06 1.22118E-05 1.66780E-05 2.03355E-05 2.17630E-05 1.97491E-05 + 1.38996E-05 5.01803E-06 -5.01803E-06 -1.38996E-05 -1.97491E-05 -2.17630E-05 + -2.03355E-05 -1.66780E-05 -1.22118E-05 -8.06052E-06 -4.82507E-06 -2.62990E-06 + -1.30883E-06 -5.95959E-07 -2.48658E-07 -9.51805E-08 -3.34543E-08 -1.08052E-08 + -3.20885E-09 -8.76630E-10 -2.20400E-10 -5.10132E-11 + 1.49374E-11 6.45362E-11 2.56690E-10 9.39599E-10 3.16392E-09 9.79590E-09 + 2.78702E-08 7.28107E-08 1.74506E-07 3.83244E-07 7.70072E-07 1.41285E-06 + 2.36024E-06 3.57580E-06 4.88355E-06 5.95452E-06 6.37252E-06 5.78282E-06 + 4.07001E-06 1.46935E-06 -1.46935E-06 -4.07001E-06 -5.78282E-06 -6.37252E-06 + -5.95452E-06 -4.88355E-06 -3.57580E-06 -2.36024E-06 -1.41285E-06 -7.70072E-07 + -3.83244E-07 -1.74506E-07 -7.28107E-08 -2.78702E-08 -9.79590E-09 -3.16392E-09 + -9.39599E-10 -2.56690E-10 -6.45362E-11 -1.49374E-11 + 3.90666E-12 1.68785E-11 6.71336E-11 2.45738E-10 8.27476E-10 2.56197E-09 + 7.28905E-09 1.90426E-08 4.56394E-08 1.00232E-07 2.01401E-07 3.69510E-07 + 6.17286E-07 9.35199E-07 1.27722E-06 1.55732E-06 1.66664E-06 1.51241E-06 + 1.06445E-06 3.84288E-07 -3.84288E-07 -1.06445E-06 -1.51241E-06 -1.66664E-06 + -1.55732E-06 -1.27722E-06 -9.35199E-07 -6.17286E-07 -3.69510E-07 -2.01401E-07 + -1.00232E-07 -4.56394E-08 -1.90426E-08 -7.28905E-09 -2.56197E-09 -8.27476E-10 + -2.45738E-10 -6.71336E-11 -1.68785E-11 -3.90666E-12 + 9.11297E-13 3.93721E-12 1.56601E-11 5.73228E-11 1.93024E-10 5.97626E-10 + 1.70030E-09 4.44202E-09 1.06462E-08 2.33808E-08 4.69804E-08 8.61949E-08 + 1.43993E-07 2.18152E-07 2.97935E-07 3.63272E-07 3.88773E-07 3.52797E-07 + 2.48302E-07 8.96419E-08 -8.96419E-08 -2.48302E-07 -3.52797E-07 -3.88773E-07 + -3.63272E-07 -2.97935E-07 -2.18152E-07 -1.43993E-07 -8.61949E-08 -4.69804E-08 + -2.33808E-08 -1.06462E-08 -4.44202E-09 -1.70030E-09 -5.97626E-10 -1.93024E-10 + -5.73228E-11 -1.56601E-11 -3.93721E-12 -9.11297E-13 + 1.89297E-13 8.17850E-13 3.25296E-12 1.19073E-11 4.00954E-11 1.24141E-10 + 3.53192E-10 9.22710E-10 2.21146E-09 4.85674E-09 9.75890E-09 1.79047E-08 + 2.99107E-08 4.53151E-08 6.18879E-08 7.54600E-08 8.07571E-08 7.32840E-08 + 5.15781E-08 1.86207E-08 -1.86207E-08 -5.15781E-08 -7.32840E-08 -8.07571E-08 + -7.54600E-08 -6.18879E-08 -4.53151E-08 -2.99107E-08 -1.79047E-08 -9.75890E-09 + -4.85674E-09 -2.21146E-09 -9.22710E-10 -3.53192E-10 -1.24141E-10 -4.00954E-11 + -1.19073E-11 -3.25296E-12 -8.17850E-13 -1.89297E-13 + 3.49580E-14 1.51034E-13 6.00732E-13 2.19894E-12 7.40451E-12 2.29253E-11 + 6.52247E-11 1.70399E-10 4.08395E-10 8.96905E-10 1.80220E-09 3.30649E-09 + 5.52366E-09 8.36844E-09 1.14290E-08 1.39354E-08 1.49136E-08 1.35335E-08 + 9.52503E-09 3.43872E-09 -3.43872E-09 -9.52503E-09 -1.35335E-08 -1.49136E-08 + -1.39354E-08 -1.14290E-08 -8.36844E-09 -5.52366E-09 -3.30649E-09 -1.80220E-09 + -8.96905E-10 -4.08395E-10 -1.70399E-10 -6.52247E-11 -2.29253E-11 -7.40451E-12 + -2.19894E-12 -6.00732E-13 -1.51034E-13 -3.49580E-14 + 5.73034E-15 2.47576E-14 9.84724E-14 3.60452E-13 1.21375E-12 3.75794E-12 + 1.06917E-11 2.79319E-11 6.69445E-11 1.47021E-10 2.95418E-10 5.42003E-10 + 9.05444E-10 1.37176E-09 1.87345E-09 2.28429E-09 2.44465E-09 2.21843E-09 + 1.56135E-09 5.63679E-10 -5.63679E-10 -1.56135E-09 -2.21843E-09 -2.44465E-09 + -2.28429E-09 -1.87345E-09 -1.37176E-09 -9.05444E-10 -5.42003E-10 -2.95418E-10 + -1.47021E-10 -6.69445E-11 -2.79319E-11 -1.06917E-11 -3.75794E-12 -1.21375E-12 + -3.60452E-13 -9.84724E-14 -2.47576E-14 -5.73034E-15 + 8.32573E-16 3.59709E-15 1.43073E-14 5.23709E-14 1.76349E-13 5.45999E-13 + 1.55342E-12 4.05829E-12 9.72651E-12 2.13610E-11 4.29219E-11 7.87488E-11 + 1.31554E-10 1.99306E-10 2.72197E-10 3.31890E-10 3.55188E-10 3.22320E-10 + 2.26852E-10 8.18981E-11 -8.18981E-11 -2.26852E-10 -3.22320E-10 -3.55188E-10 + -3.31890E-10 -2.72197E-10 -1.99306E-10 -1.31554E-10 -7.87488E-11 -4.29219E-11 + -2.13610E-11 -9.72651E-12 -4.05829E-12 -1.55342E-12 -5.45999E-13 -1.76349E-13 + -5.23709E-14 -1.43073E-14 -3.59709E-15 -8.32573E-16 + -2.91905E-16 -1.26116E-15 -5.01621E-15 -1.83615E-14 -6.18289E-14 -1.91430E-13 + -5.44637E-13 -1.42286E-12 -3.41017E-12 -7.48931E-12 -1.50487E-11 -2.76098E-11 + -4.61235E-11 -6.98779E-11 -9.54339E-11 -1.16363E-10 -1.24531E-10 -1.13007E-10 + -7.95356E-11 -2.87139E-11 2.87139E-11 7.95356E-11 1.13007E-10 1.24531E-10 + 1.16363E-10 9.54339E-11 6.98779E-11 4.61235E-11 2.76098E-11 1.50487E-11 + 7.48931E-12 3.41017E-12 1.42286E-12 5.44637E-13 1.91430E-13 6.18289E-14 + 1.83615E-14 5.01621E-15 1.26116E-15 2.91905E-16 + -2.03818E-15 -8.80586E-15 -3.50249E-14 -1.28207E-13 -4.31711E-13 -1.33663E-12 + -3.80285E-12 -9.93490E-12 -2.38110E-11 -5.22929E-11 -1.05075E-10 -1.92781E-10 + -3.22051E-10 -4.87912E-10 -6.66352E-10 -8.12484E-10 -8.69519E-10 -7.89055E-10 + -5.55345E-10 -2.00491E-10 2.00491E-10 5.55345E-10 7.89055E-10 8.69519E-10 + 8.12484E-10 6.66352E-10 4.87912E-10 3.22051E-10 1.92781E-10 1.05075E-10 + 5.22929E-11 2.38110E-11 9.93490E-12 3.80285E-12 1.33663E-12 4.31711E-13 + 1.28207E-13 3.50249E-14 8.80586E-15 2.03818E-15 + -1.26506E-14 -5.46564E-14 -2.17394E-13 -7.95756E-13 -2.67956E-12 -8.29625E-12 + -2.36036E-11 -6.16642E-11 -1.47791E-10 -3.24573E-10 -6.52182E-10 -1.19656E-09 + -1.99891E-09 -3.02838E-09 -4.13593E-09 -5.04295E-09 -5.39695E-09 -4.89753E-09 + -3.44693E-09 -1.24441E-09 1.24441E-09 3.44693E-09 4.89753E-09 5.39695E-09 + 5.04295E-09 4.13593E-09 3.02838E-09 1.99891E-09 1.19656E-09 6.52182E-10 + 3.24573E-10 1.47791E-10 6.16642E-11 2.36036E-11 8.29625E-12 2.67956E-12 + 7.95756E-13 2.17394E-13 5.46564E-14 1.26506E-14 + -6.99145E-14 -3.02062E-13 -1.20144E-12 -4.39780E-12 -1.48087E-11 -4.58497E-11 + -1.30447E-10 -3.40791E-10 -8.16774E-10 -1.79377E-09 -3.60432E-09 -6.61285E-09 + -1.10471E-08 -1.67366E-08 -2.28575E-08 -2.78702E-08 -2.98266E-08 -2.70665E-08 + -1.90497E-08 -6.87731E-09 6.87731E-09 1.90497E-08 2.70665E-08 2.98266E-08 + 2.78702E-08 2.28575E-08 1.67366E-08 1.10471E-08 6.61285E-09 3.60432E-09 + 1.79377E-09 8.16774E-10 3.40791E-10 1.30447E-10 4.58497E-11 1.48087E-11 + 4.39780E-12 1.20144E-12 3.02062E-13 6.99145E-14 + -3.44600E-13 -1.48883E-12 -5.92175E-12 -2.16762E-11 -7.29904E-11 -2.25988E-10 + -6.42956E-10 -1.67972E-09 -4.02578E-09 -8.84129E-09 -1.77653E-08 -3.25939E-08 + -5.44498E-08 -8.24924E-08 -1.12662E-07 -1.37368E-07 -1.47012E-07 -1.33407E-07 + -9.38935E-08 -3.38974E-08 3.38974E-08 9.38935E-08 1.33407E-07 1.47012E-07 + 1.37368E-07 1.12662E-07 8.24924E-08 5.44498E-08 3.25939E-08 1.77653E-08 + 8.84129E-09 4.02578E-09 1.67972E-09 6.42956E-10 2.25988E-10 7.29904E-11 + 2.16762E-11 5.92175E-12 1.48883E-12 3.44600E-13 + -1.51704E-12 -6.55427E-12 -2.60693E-11 -9.54252E-11 -3.21326E-10 -9.94867E-10 + -2.83049E-09 -7.39463E-09 -1.77227E-08 -3.89221E-08 -7.82082E-08 -1.43488E-07 + -2.39705E-07 -3.63157E-07 -4.95972E-07 -6.04738E-07 -6.47190E-07 -5.87301E-07 + -4.13348E-07 -1.49227E-07 1.49227E-07 4.13348E-07 5.87301E-07 6.47190E-07 + 6.04738E-07 4.95972E-07 3.63157E-07 2.39705E-07 1.43488E-07 7.82082E-08 + 3.89221E-08 1.77227E-08 7.39463E-09 2.83049E-09 9.94867E-10 3.21326E-10 + 9.54252E-11 2.60693E-11 6.55427E-12 1.51704E-12 + -5.97193E-12 -2.58014E-11 -1.02624E-10 -3.75649E-10 -1.26493E-09 -3.91637E-09 + -1.11424E-08 -2.91095E-08 -6.97669E-08 -1.53220E-07 -3.07873E-07 -5.64854E-07 + -9.43617E-07 -1.42960E-06 -1.95243E-06 -2.38060E-06 -2.54771E-06 -2.31195E-06 + -1.62718E-06 -5.87443E-07 5.87443E-07 1.62718E-06 2.31195E-06 2.54771E-06 + 2.38060E-06 1.95243E-06 1.42960E-06 9.43617E-07 5.64854E-07 3.07873E-07 + 1.53220E-07 6.97669E-08 2.91095E-08 1.11424E-08 3.91637E-09 1.26493E-09 + 3.75649E-10 1.02624E-10 2.58014E-11 5.97193E-12 + -2.10367E-11 -9.08881E-11 -3.61504E-10 -1.32326E-09 -4.45583E-09 -1.37958E-08 + -3.92504E-08 -1.02541E-07 -2.45761E-07 -5.39732E-07 -1.08451E-06 -1.98976E-06 + -3.32399E-06 -5.03590E-06 -6.87764E-06 -8.38591E-06 -8.97459E-06 -8.14410E-06 + -5.73190E-06 -2.06933E-06 2.06933E-06 5.73190E-06 8.14410E-06 8.97459E-06 + 8.38591E-06 6.87764E-06 5.03590E-06 3.32399E-06 1.98976E-06 1.08451E-06 + 5.39732E-07 2.45761E-07 1.02541E-07 3.92504E-08 1.37958E-08 4.45583E-09 + 1.32326E-09 3.61504E-10 9.08881E-11 2.10367E-11 + -6.63194E-11 -2.86529E-10 -1.13966E-09 -4.17165E-09 -1.40472E-08 -4.34921E-08 + -1.23739E-07 -3.23267E-07 -7.74774E-07 -1.70153E-06 -3.41898E-06 -6.27281E-06 + -1.04790E-05 -1.58759E-05 -2.16821E-05 -2.64370E-05 -2.82929E-05 -2.56747E-05 + -1.80701E-05 -6.52367E-06 6.52367E-06 1.80701E-05 2.56747E-05 2.82929E-05 + 2.64370E-05 2.16821E-05 1.58759E-05 1.04790E-05 6.27281E-06 3.41898E-06 + 1.70153E-06 7.74774E-07 3.23267E-07 1.23739E-07 4.34921E-08 1.40472E-08 + 4.17165E-09 1.13966E-09 2.86529E-10 6.63194E-11 + -1.87011E-10 -8.07970E-10 -3.21367E-09 -1.17634E-08 -3.96111E-08 -1.22641E-07 + -3.48925E-07 -9.11563E-07 -2.18475E-06 -4.79807E-06 -9.64101E-06 -1.76884E-05 + -2.95493E-05 -4.47677E-05 -6.11403E-05 -7.45484E-05 -7.97817E-05 -7.23991E-05 + -5.09554E-05 -1.83960E-05 1.83960E-05 5.09554E-05 7.23991E-05 7.97817E-05 + 7.45484E-05 6.11403E-05 4.47677E-05 2.95493E-05 1.76884E-05 9.64101E-06 + 4.79807E-06 2.18475E-06 9.11563E-07 3.48925E-07 1.22641E-07 3.96111E-08 + 1.17634E-08 3.21367E-09 8.07970E-10 1.87011E-10 + -4.71101E-10 -2.03537E-09 -8.09558E-09 -2.96334E-08 -9.97847E-08 -3.08946E-07 + -8.78981E-07 -2.29633E-06 -5.50362E-06 -1.20869E-05 -2.42868E-05 -4.45590E-05 + -7.44380E-05 -1.12775E-04 -1.54020E-04 -1.87798E-04 -2.00986E-04 -1.82398E-04 + -1.28383E-04 -4.63516E-05 4.63516E-05 1.28383E-04 1.82398E-04 2.00986E-04 + 1.87798E-04 1.54020E-04 1.12775E-04 7.44380E-05 4.45590E-05 2.42868E-05 + 1.20869E-05 5.50362E-06 2.29633E-06 8.78981E-07 3.08946E-07 9.97847E-08 + 2.96334E-08 8.09558E-09 2.03537E-09 4.71101E-10 + -1.05807E-09 -4.57136E-09 -1.81824E-08 -6.65555E-08 -2.24113E-07 -6.93882E-07 + -1.97416E-06 -5.15747E-06 -1.23609E-05 -2.71467E-05 -5.45472E-05 -1.00078E-04 + -1.67185E-04 -2.53290E-04 -3.45932E-04 -4.21840E-04 -4.51594E-04 -4.10072E-04 + -2.88873E-04 -1.04362E-04 1.04362E-04 2.88873E-04 4.10072E-04 4.51594E-04 + 4.21840E-04 3.45932E-04 2.53290E-04 1.67185E-04 1.00078E-04 5.45472E-05 + 2.71467E-05 1.23609E-05 5.15747E-06 1.97416E-06 6.93882E-07 2.24113E-07 + 6.65555E-08 1.81824E-08 4.57136E-09 1.05807E-09 + -2.11269E-09 -9.12778E-09 -3.63054E-08 -1.32894E-07 -4.47494E-07 -1.38550E-06 + -3.94187E-06 -1.02981E-05 -2.46815E-05 -5.42047E-05 -1.08916E-04 -1.99829E-04 + -3.33826E-04 -5.05770E-04 -6.90872E-04 -8.43027E-04 -9.04253E-04 -8.24441E-04 + -5.84019E-04 -2.11898E-04 2.11898E-04 5.84019E-04 8.24441E-04 9.04253E-04 + 8.43027E-04 6.90872E-04 5.05770E-04 3.33826E-04 1.99829E-04 1.08916E-04 + 5.42047E-05 2.46815E-05 1.02981E-05 3.94187E-06 1.38550E-06 4.47494E-07 + 1.32894E-07 3.63054E-08 9.12778E-09 2.11269E-09 + -3.73540E-09 -1.61386E-08 -6.41906E-08 -2.34966E-07 -7.91202E-07 -2.44966E-06 + -6.96952E-06 -1.82078E-05 -4.36387E-05 -9.58379E-05 -1.92572E-04 -3.53313E-04 + -5.90241E-04 -8.94367E-04 -1.22249E-03 -1.49571E-03 -1.61688E-03 -1.49778E-03 + -1.08389E-03 -3.99633E-04 3.99633E-04 1.08389E-03 1.49778E-03 1.61688E-03 + 1.49571E-03 1.22249E-03 8.94367E-04 5.90241E-04 3.53313E-04 1.92572E-04 + 9.58379E-05 4.36387E-05 1.82078E-05 6.96952E-06 2.44966E-06 7.91202E-07 + 2.34966E-07 6.41906E-08 1.61386E-08 3.73540E-09 + -5.81401E-09 -2.51191E-08 -9.99104E-08 -3.65716E-07 -1.23148E-06 -3.81281E-06 + -1.08478E-05 -2.83398E-05 -6.79220E-05 -1.49168E-04 -2.99732E-04 -5.49923E-04 + -9.18737E-04 -1.39253E-03 -1.90637E-03 -2.34668E-03 -2.58130E-03 -2.47397E-03 + -1.86914E-03 -7.10591E-04 7.10591E-04 1.86914E-03 2.47397E-03 2.58130E-03 + 2.34668E-03 1.90637E-03 1.39253E-03 9.18737E-04 5.49923E-04 2.99732E-04 + 1.49168E-04 6.79220E-05 2.83398E-05 1.08478E-05 3.81281E-06 1.23148E-06 + 3.65716E-07 9.99104E-08 2.51191E-08 5.81401E-09 + -7.89264E-09 -3.40997E-08 -1.35630E-07 -4.96466E-07 -1.67175E-06 -5.17597E-06 + -1.47261E-05 -3.84718E-05 -9.22055E-05 -2.02499E-04 -4.06892E-04 -7.46539E-04 + -1.24730E-03 -1.89127E-03 -2.59408E-03 -3.21634E-03 -3.60799E-03 -3.58444E-03 + -2.82362E-03 -1.10341E-03 1.10341E-03 2.82362E-03 3.58444E-03 3.60799E-03 + 3.21634E-03 2.59408E-03 1.89127E-03 1.24730E-03 7.46539E-04 4.06892E-04 + 2.02499E-04 9.22055E-05 3.84718E-05 1.47261E-05 5.17597E-06 1.67175E-06 + 4.96466E-07 1.35630E-07 3.40997E-08 7.89264E-09 + -9.19249E-09 -3.97157E-08 -1.57967E-07 -5.78230E-07 -1.94708E-06 -6.02841E-06 + -1.71514E-05 -4.48078E-05 -1.07391E-04 -2.35849E-04 -4.73905E-04 -8.69498E-04 + -1.45281E-03 -2.20336E-03 -3.02461E-03 -3.75949E-03 -4.24152E-03 -4.25259E-03 + -3.38183E-03 -1.32916E-03 1.32916E-03 3.38183E-03 4.25259E-03 4.24152E-03 + 3.75949E-03 3.02461E-03 2.20336E-03 1.45281E-03 8.69498E-04 4.73905E-04 + 2.35849E-04 1.07391E-04 4.48078E-05 1.71514E-05 6.02841E-06 1.94708E-06 + 5.78230E-07 1.57967E-07 3.97157E-08 9.19249E-09 + -8.88031E-09 -3.83669E-08 -1.52603E-07 -5.58593E-07 -1.88095E-06 -5.82368E-06 + -1.65689E-05 -4.32861E-05 -1.03744E-04 -2.27839E-04 -4.57811E-04 -8.39973E-04 + -1.40348E-03 -2.12834E-03 -2.91922E-03 -3.61426E-03 -4.02956E-03 -3.94964E-03 + -3.05881E-03 -1.18152E-03 1.18152E-03 3.05881E-03 3.94964E-03 4.02956E-03 + 3.61426E-03 2.91922E-03 2.12834E-03 1.40348E-03 8.39973E-04 4.57811E-04 + 2.27839E-04 1.03744E-04 4.32861E-05 1.65689E-05 5.82368E-06 1.88095E-06 + 5.58593E-07 1.52603E-07 3.83669E-08 8.88031E-09 + -6.51298E-09 -2.81390E-08 -1.11922E-07 -4.09682E-07 -1.37953E-06 -4.27119E-06 + -1.21519E-05 -3.17468E-05 -7.60877E-05 -1.67101E-04 -3.35767E-04 -6.16049E-04 + -1.02930E-03 -1.56050E-03 -2.13729E-03 -2.63066E-03 -2.88421E-03 -2.73807E-03 + -2.03984E-03 -7.67308E-04 7.67308E-04 2.03984E-03 2.73807E-03 2.88421E-03 + 2.63066E-03 2.13729E-03 1.56050E-03 1.02930E-03 6.16049E-04 3.35767E-04 + 1.67101E-04 7.60877E-05 3.17468E-05 1.21519E-05 4.27119E-06 1.37953E-06 + 4.09682E-07 1.11922E-07 2.81390E-08 6.51298E-09 + -2.39987E-09 -1.03685E-08 -4.12403E-08 -1.50958E-07 -5.08321E-07 -1.57383E-06 + -4.47769E-06 -1.16979E-05 -2.80364E-05 -6.15727E-05 -1.23722E-04 -2.26997E-04 + -3.79256E-04 -5.74876E-04 -7.86620E-04 -9.64763E-04 -1.04733E-03 -9.75399E-04 + -7.09255E-04 -2.62207E-04 2.62207E-04 7.09255E-04 9.75399E-04 1.04733E-03 + 9.64763E-04 7.86620E-04 5.74876E-04 3.79256E-04 2.26997E-04 1.23722E-04 + 6.15727E-05 2.80364E-05 1.16979E-05 4.47769E-06 1.57383E-06 5.08321E-07 + 1.50958E-07 4.12403E-08 1.03685E-08 2.39987E-09 + 2.39987E-09 1.03685E-08 4.12403E-08 1.50958E-07 5.08321E-07 1.57383E-06 + 4.47769E-06 1.16979E-05 2.80364E-05 6.15727E-05 1.23722E-04 2.26997E-04 + 3.79256E-04 5.74876E-04 7.86620E-04 9.64763E-04 1.04733E-03 9.75399E-04 + 7.09255E-04 2.62207E-04 -2.62207E-04 -7.09255E-04 -9.75399E-04 -1.04733E-03 + -9.64763E-04 -7.86620E-04 -5.74876E-04 -3.79256E-04 -2.26997E-04 -1.23722E-04 + -6.15727E-05 -2.80364E-05 -1.16979E-05 -4.47769E-06 -1.57383E-06 -5.08321E-07 + -1.50958E-07 -4.12403E-08 -1.03685E-08 -2.39987E-09 + 6.51298E-09 2.81390E-08 1.11922E-07 4.09682E-07 1.37953E-06 4.27119E-06 + 1.21519E-05 3.17468E-05 7.60877E-05 1.67101E-04 3.35767E-04 6.16049E-04 + 1.02930E-03 1.56050E-03 2.13729E-03 2.63066E-03 2.88421E-03 2.73807E-03 + 2.03984E-03 7.67308E-04 -7.67308E-04 -2.03984E-03 -2.73807E-03 -2.88421E-03 + -2.63066E-03 -2.13729E-03 -1.56050E-03 -1.02930E-03 -6.16049E-04 -3.35767E-04 + -1.67101E-04 -7.60877E-05 -3.17468E-05 -1.21519E-05 -4.27119E-06 -1.37953E-06 + -4.09682E-07 -1.11922E-07 -2.81390E-08 -6.51298E-09 + 8.88031E-09 3.83669E-08 1.52603E-07 5.58593E-07 1.88095E-06 5.82368E-06 + 1.65689E-05 4.32861E-05 1.03744E-04 2.27839E-04 4.57811E-04 8.39973E-04 + 1.40348E-03 2.12834E-03 2.91922E-03 3.61426E-03 4.02956E-03 3.94964E-03 + 3.05881E-03 1.18152E-03 -1.18152E-03 -3.05881E-03 -3.94964E-03 -4.02956E-03 + -3.61426E-03 -2.91922E-03 -2.12834E-03 -1.40348E-03 -8.39973E-04 -4.57811E-04 + -2.27839E-04 -1.03744E-04 -4.32861E-05 -1.65689E-05 -5.82368E-06 -1.88095E-06 + -5.58593E-07 -1.52603E-07 -3.83669E-08 -8.88031E-09 + 9.19249E-09 3.97157E-08 1.57967E-07 5.78230E-07 1.94708E-06 6.02841E-06 + 1.71514E-05 4.48078E-05 1.07391E-04 2.35849E-04 4.73905E-04 8.69498E-04 + 1.45281E-03 2.20336E-03 3.02461E-03 3.75949E-03 4.24152E-03 4.25259E-03 + 3.38183E-03 1.32916E-03 -1.32916E-03 -3.38183E-03 -4.25259E-03 -4.24152E-03 + -3.75949E-03 -3.02461E-03 -2.20336E-03 -1.45281E-03 -8.69498E-04 -4.73905E-04 + -2.35849E-04 -1.07391E-04 -4.48078E-05 -1.71514E-05 -6.02841E-06 -1.94708E-06 + -5.78230E-07 -1.57967E-07 -3.97157E-08 -9.19249E-09 + 7.89264E-09 3.40997E-08 1.35630E-07 4.96466E-07 1.67175E-06 5.17597E-06 + 1.47261E-05 3.84718E-05 9.22055E-05 2.02499E-04 4.06892E-04 7.46539E-04 + 1.24730E-03 1.89127E-03 2.59408E-03 3.21634E-03 3.60799E-03 3.58444E-03 + 2.82362E-03 1.10341E-03 -1.10341E-03 -2.82362E-03 -3.58444E-03 -3.60799E-03 + -3.21634E-03 -2.59408E-03 -1.89127E-03 -1.24730E-03 -7.46539E-04 -4.06892E-04 + -2.02499E-04 -9.22055E-05 -3.84718E-05 -1.47261E-05 -5.17597E-06 -1.67175E-06 + -4.96466E-07 -1.35630E-07 -3.40997E-08 -7.89264E-09 + 5.81401E-09 2.51191E-08 9.99104E-08 3.65716E-07 1.23148E-06 3.81281E-06 + 1.08478E-05 2.83398E-05 6.79220E-05 1.49168E-04 2.99732E-04 5.49923E-04 + 9.18737E-04 1.39253E-03 1.90637E-03 2.34668E-03 2.58130E-03 2.47397E-03 + 1.86914E-03 7.10591E-04 -7.10591E-04 -1.86914E-03 -2.47397E-03 -2.58130E-03 + -2.34668E-03 -1.90637E-03 -1.39253E-03 -9.18737E-04 -5.49923E-04 -2.99732E-04 + -1.49168E-04 -6.79220E-05 -2.83398E-05 -1.08478E-05 -3.81281E-06 -1.23148E-06 + -3.65716E-07 -9.99104E-08 -2.51191E-08 -5.81401E-09 + 3.73540E-09 1.61386E-08 6.41906E-08 2.34966E-07 7.91202E-07 2.44966E-06 + 6.96952E-06 1.82078E-05 4.36387E-05 9.58379E-05 1.92572E-04 3.53313E-04 + 5.90241E-04 8.94367E-04 1.22249E-03 1.49571E-03 1.61688E-03 1.49778E-03 + 1.08389E-03 3.99633E-04 -3.99633E-04 -1.08389E-03 -1.49778E-03 -1.61688E-03 + -1.49571E-03 -1.22249E-03 -8.94367E-04 -5.90241E-04 -3.53313E-04 -1.92572E-04 + -9.58379E-05 -4.36387E-05 -1.82078E-05 -6.96952E-06 -2.44966E-06 -7.91202E-07 + -2.34966E-07 -6.41906E-08 -1.61386E-08 -3.73540E-09 + 2.11269E-09 9.12778E-09 3.63054E-08 1.32894E-07 4.47494E-07 1.38550E-06 + 3.94187E-06 1.02981E-05 2.46815E-05 5.42047E-05 1.08916E-04 1.99829E-04 + 3.33826E-04 5.05770E-04 6.90872E-04 8.43027E-04 9.04253E-04 8.24441E-04 + 5.84019E-04 2.11898E-04 -2.11898E-04 -5.84019E-04 -8.24441E-04 -9.04253E-04 + -8.43027E-04 -6.90872E-04 -5.05770E-04 -3.33826E-04 -1.99829E-04 -1.08916E-04 + -5.42047E-05 -2.46815E-05 -1.02981E-05 -3.94187E-06 -1.38550E-06 -4.47494E-07 + -1.32894E-07 -3.63054E-08 -9.12778E-09 -2.11269E-09 + 1.05807E-09 4.57136E-09 1.81824E-08 6.65555E-08 2.24113E-07 6.93882E-07 + 1.97416E-06 5.15747E-06 1.23609E-05 2.71467E-05 5.45472E-05 1.00078E-04 + 1.67185E-04 2.53290E-04 3.45932E-04 4.21840E-04 4.51594E-04 4.10072E-04 + 2.88873E-04 1.04362E-04 -1.04362E-04 -2.88873E-04 -4.10072E-04 -4.51594E-04 + -4.21840E-04 -3.45932E-04 -2.53290E-04 -1.67185E-04 -1.00078E-04 -5.45472E-05 + -2.71467E-05 -1.23609E-05 -5.15747E-06 -1.97416E-06 -6.93882E-07 -2.24113E-07 + -6.65555E-08 -1.81824E-08 -4.57136E-09 -1.05807E-09 + 4.71101E-10 2.03537E-09 8.09558E-09 2.96334E-08 9.97847E-08 3.08946E-07 + 8.78981E-07 2.29633E-06 5.50362E-06 1.20869E-05 2.42868E-05 4.45590E-05 + 7.44380E-05 1.12775E-04 1.54020E-04 1.87798E-04 2.00986E-04 1.82398E-04 + 1.28383E-04 4.63516E-05 -4.63516E-05 -1.28383E-04 -1.82398E-04 -2.00986E-04 + -1.87798E-04 -1.54020E-04 -1.12775E-04 -7.44380E-05 -4.45590E-05 -2.42868E-05 + -1.20869E-05 -5.50362E-06 -2.29633E-06 -8.78981E-07 -3.08946E-07 -9.97847E-08 + -2.96334E-08 -8.09558E-09 -2.03537E-09 -4.71101E-10 + 1.87011E-10 8.07970E-10 3.21367E-09 1.17634E-08 3.96111E-08 1.22641E-07 + 3.48925E-07 9.11563E-07 2.18475E-06 4.79807E-06 9.64101E-06 1.76884E-05 + 2.95493E-05 4.47677E-05 6.11403E-05 7.45484E-05 7.97817E-05 7.23991E-05 + 5.09554E-05 1.83960E-05 -1.83960E-05 -5.09554E-05 -7.23991E-05 -7.97817E-05 + -7.45484E-05 -6.11403E-05 -4.47677E-05 -2.95493E-05 -1.76884E-05 -9.64101E-06 + -4.79807E-06 -2.18475E-06 -9.11563E-07 -3.48925E-07 -1.22641E-07 -3.96111E-08 + -1.17634E-08 -3.21367E-09 -8.07970E-10 -1.87011E-10 + 6.63194E-11 2.86529E-10 1.13966E-09 4.17165E-09 1.40472E-08 4.34921E-08 + 1.23739E-07 3.23267E-07 7.74774E-07 1.70153E-06 3.41898E-06 6.27281E-06 + 1.04790E-05 1.58759E-05 2.16821E-05 2.64370E-05 2.82929E-05 2.56747E-05 + 1.80701E-05 6.52367E-06 -6.52367E-06 -1.80701E-05 -2.56747E-05 -2.82929E-05 + -2.64370E-05 -2.16821E-05 -1.58759E-05 -1.04790E-05 -6.27281E-06 -3.41898E-06 + -1.70153E-06 -7.74774E-07 -3.23267E-07 -1.23739E-07 -4.34921E-08 -1.40472E-08 + -4.17165E-09 -1.13966E-09 -2.86529E-10 -6.63194E-11 + 2.10367E-11 9.08881E-11 3.61504E-10 1.32326E-09 4.45583E-09 1.37958E-08 + 3.92504E-08 1.02541E-07 2.45761E-07 5.39732E-07 1.08451E-06 1.98976E-06 + 3.32399E-06 5.03590E-06 6.87764E-06 8.38591E-06 8.97459E-06 8.14410E-06 + 5.73190E-06 2.06933E-06 -2.06933E-06 -5.73190E-06 -8.14410E-06 -8.97459E-06 + -8.38591E-06 -6.87764E-06 -5.03590E-06 -3.32399E-06 -1.98976E-06 -1.08451E-06 + -5.39732E-07 -2.45761E-07 -1.02541E-07 -3.92504E-08 -1.37958E-08 -4.45583E-09 + -1.32326E-09 -3.61504E-10 -9.08881E-11 -2.10367E-11 + 5.97193E-12 2.58014E-11 1.02624E-10 3.75649E-10 1.26493E-09 3.91637E-09 + 1.11424E-08 2.91095E-08 6.97669E-08 1.53220E-07 3.07873E-07 5.64854E-07 + 9.43617E-07 1.42960E-06 1.95243E-06 2.38060E-06 2.54771E-06 2.31195E-06 + 1.62718E-06 5.87443E-07 -5.87443E-07 -1.62718E-06 -2.31195E-06 -2.54771E-06 + -2.38060E-06 -1.95243E-06 -1.42960E-06 -9.43617E-07 -5.64854E-07 -3.07873E-07 + -1.53220E-07 -6.97669E-08 -2.91095E-08 -1.11424E-08 -3.91637E-09 -1.26493E-09 + -3.75649E-10 -1.02624E-10 -2.58014E-11 -5.97193E-12 + 1.51704E-12 6.55427E-12 2.60693E-11 9.54252E-11 3.21326E-10 9.94867E-10 + 2.83049E-09 7.39463E-09 1.77227E-08 3.89221E-08 7.82082E-08 1.43488E-07 + 2.39705E-07 3.63157E-07 4.95972E-07 6.04738E-07 6.47190E-07 5.87301E-07 + 4.13348E-07 1.49227E-07 -1.49227E-07 -4.13348E-07 -5.87301E-07 -6.47190E-07 + -6.04738E-07 -4.95972E-07 -3.63157E-07 -2.39705E-07 -1.43488E-07 -7.82082E-08 + -3.89221E-08 -1.77227E-08 -7.39463E-09 -2.83049E-09 -9.94867E-10 -3.21326E-10 + -9.54252E-11 -2.60693E-11 -6.55427E-12 -1.51704E-12 + 3.44600E-13 1.48883E-12 5.92175E-12 2.16762E-11 7.29904E-11 2.25988E-10 + 6.42956E-10 1.67972E-09 4.02578E-09 8.84129E-09 1.77653E-08 3.25939E-08 + 5.44498E-08 8.24924E-08 1.12662E-07 1.37368E-07 1.47012E-07 1.33407E-07 + 9.38935E-08 3.38974E-08 -3.38974E-08 -9.38935E-08 -1.33407E-07 -1.47012E-07 + -1.37368E-07 -1.12662E-07 -8.24924E-08 -5.44498E-08 -3.25939E-08 -1.77653E-08 + -8.84129E-09 -4.02578E-09 -1.67972E-09 -6.42956E-10 -2.25988E-10 -7.29904E-11 + -2.16762E-11 -5.92175E-12 -1.48883E-12 -3.44600E-13 + 6.99145E-14 3.02062E-13 1.20144E-12 4.39780E-12 1.48087E-11 4.58497E-11 + 1.30447E-10 3.40791E-10 8.16774E-10 1.79377E-09 3.60432E-09 6.61285E-09 + 1.10471E-08 1.67366E-08 2.28575E-08 2.78702E-08 2.98266E-08 2.70665E-08 + 1.90497E-08 6.87731E-09 -6.87731E-09 -1.90497E-08 -2.70665E-08 -2.98266E-08 + -2.78702E-08 -2.28575E-08 -1.67366E-08 -1.10471E-08 -6.61285E-09 -3.60432E-09 + -1.79377E-09 -8.16774E-10 -3.40791E-10 -1.30447E-10 -4.58497E-11 -1.48087E-11 + -4.39780E-12 -1.20144E-12 -3.02062E-13 -6.99145E-14 + 1.26506E-14 5.46564E-14 2.17394E-13 7.95756E-13 2.67956E-12 8.29625E-12 + 2.36036E-11 6.16642E-11 1.47791E-10 3.24573E-10 6.52182E-10 1.19656E-09 + 1.99891E-09 3.02838E-09 4.13593E-09 5.04295E-09 5.39695E-09 4.89753E-09 + 3.44693E-09 1.24441E-09 -1.24441E-09 -3.44693E-09 -4.89753E-09 -5.39695E-09 + -5.04295E-09 -4.13593E-09 -3.02838E-09 -1.99891E-09 -1.19656E-09 -6.52182E-10 + -3.24573E-10 -1.47791E-10 -6.16642E-11 -2.36036E-11 -8.29625E-12 -2.67956E-12 + -7.95756E-13 -2.17394E-13 -5.46564E-14 -1.26506E-14 + 2.03818E-15 8.80586E-15 3.50249E-14 1.28207E-13 4.31711E-13 1.33663E-12 + 3.80285E-12 9.93490E-12 2.38110E-11 5.22929E-11 1.05075E-10 1.92781E-10 + 3.22051E-10 4.87912E-10 6.66352E-10 8.12484E-10 8.69519E-10 7.89055E-10 + 5.55345E-10 2.00491E-10 -2.00491E-10 -5.55345E-10 -7.89055E-10 -8.69519E-10 + -8.12484E-10 -6.66352E-10 -4.87912E-10 -3.22051E-10 -1.92781E-10 -1.05075E-10 + -5.22929E-11 -2.38110E-11 -9.93490E-12 -3.80285E-12 -1.33663E-12 -4.31711E-13 + -1.28207E-13 -3.50249E-14 -8.80586E-15 -2.03818E-15 + 2.91905E-16 1.26116E-15 5.01621E-15 1.83615E-14 6.18289E-14 1.91430E-13 + 5.44637E-13 1.42286E-12 3.41017E-12 7.48931E-12 1.50487E-11 2.76098E-11 + 4.61235E-11 6.98779E-11 9.54339E-11 1.16363E-10 1.24531E-10 1.13007E-10 + 7.95356E-11 2.87139E-11 -2.87139E-11 -7.95356E-11 -1.13007E-10 -1.24531E-10 + -1.16363E-10 -9.54339E-11 -6.98779E-11 -4.61235E-11 -2.76098E-11 -1.50487E-11 + -7.48931E-12 -3.41017E-12 -1.42286E-12 -5.44637E-13 -1.91430E-13 -6.18289E-14 + -1.83615E-14 -5.01621E-15 -1.26116E-15 -2.91905E-16 + -9.00950E-17 -3.89251E-16 -1.54823E-15 -5.66719E-15 -1.90832E-14 -5.90840E-14 + -1.68099E-13 -4.39158E-13 -1.05253E-12 -2.31154E-12 -4.64469E-12 -8.52161E-12 + -1.42358E-11 -2.15675E-11 -2.94552E-11 -3.59147E-11 -3.84359E-11 -3.48791E-11 + -2.45483E-11 -8.86241E-12 8.86241E-12 2.45483E-11 3.48791E-11 3.84359E-11 + 3.59147E-11 2.94552E-11 2.15675E-11 1.42358E-11 8.52161E-12 4.64469E-12 + 2.31154E-12 1.05253E-12 4.39158E-13 1.68099E-13 5.90840E-14 1.90832E-14 + 5.66719E-15 1.54823E-15 3.89251E-16 9.00950E-17 + -6.41901E-16 -2.77330E-15 -1.10307E-14 -4.03771E-14 -1.35962E-13 -4.20957E-13 + -1.19766E-12 -3.12888E-12 -7.49899E-12 -1.64690E-11 -3.30921E-11 -6.07141E-11 + -1.01426E-10 -1.53662E-10 -2.09860E-10 -2.55882E-10 -2.73845E-10 -2.48504E-10 + -1.74899E-10 -6.31421E-11 6.31421E-11 1.74899E-10 2.48504E-10 2.73845E-10 + 2.55882E-10 2.09860E-10 1.53662E-10 1.01426E-10 6.07141E-11 3.30921E-11 + 1.64690E-11 7.49899E-12 3.12888E-12 1.19766E-12 4.20957E-13 1.35962E-13 + 4.03771E-14 1.10307E-14 2.77330E-15 6.41901E-16 + -4.07835E-15 -1.76203E-14 -7.00840E-14 -2.56538E-13 -8.63843E-13 -2.67457E-12 + -7.60940E-12 -1.98795E-11 -4.76452E-11 -1.04637E-10 -2.10252E-10 -3.85750E-10 + -6.44415E-10 -9.76300E-10 -1.33335E-09 -1.62576E-09 -1.73989E-09 -1.57888E-09 + -1.11123E-09 -4.01177E-10 4.01177E-10 1.11123E-09 1.57888E-09 1.73989E-09 + 1.62576E-09 1.33335E-09 9.76300E-10 6.44415E-10 3.85750E-10 2.10252E-10 + 1.04637E-10 4.76452E-11 1.98795E-11 7.60940E-12 2.67457E-12 8.63843E-13 + 2.56538E-13 7.00840E-14 1.76203E-14 4.07835E-15 + -2.31421E-14 -9.99844E-14 -3.97684E-13 -1.45570E-12 -4.90178E-12 -1.51765E-11 + -4.31787E-11 -1.12804E-10 -2.70357E-10 -5.93750E-10 -1.19305E-09 -2.18889E-09 + -3.65666E-09 -5.53990E-09 -7.56597E-09 -9.22519E-09 -9.87278E-09 -8.95917E-09 + -6.30556E-09 -2.27643E-09 2.27643E-09 6.30556E-09 8.95917E-09 9.87278E-09 + 9.22519E-09 7.56597E-09 5.53990E-09 3.65666E-09 2.18889E-09 1.19305E-09 + 5.93750E-10 2.70357E-10 1.12804E-10 4.31787E-11 1.51765E-11 4.90178E-12 + 1.45570E-12 3.97684E-13 9.99844E-14 2.31421E-14 + -1.17423E-13 -5.07321E-13 -2.01785E-12 -7.38621E-12 -2.48716E-11 -7.70058E-11 + -2.19089E-10 -5.72367E-10 -1.37179E-09 -3.01269E-09 -6.05355E-09 -1.11064E-08 + -1.85539E-08 -2.81095E-08 -3.83897E-08 -4.68086E-08 -5.00945E-08 -4.54589E-08 + -3.19944E-08 -1.15506E-08 1.15506E-08 3.19944E-08 4.54589E-08 5.00945E-08 + 4.68086E-08 3.83897E-08 2.81095E-08 1.85539E-08 1.11064E-08 6.05355E-09 + 3.01269E-09 1.37179E-09 5.72367E-10 2.19089E-10 7.70058E-11 2.48716E-11 + 7.38621E-12 2.01785E-12 5.07321E-13 1.17423E-13 + -5.33189E-13 -2.30361E-12 -9.16253E-12 -3.35389E-11 -1.12936E-10 -3.49663E-10 + -9.94825E-10 -2.59897E-09 -6.22896E-09 -1.36798E-08 -2.74876E-08 -5.04315E-08 + -8.42485E-08 -1.27638E-07 -1.74318E-07 -2.12546E-07 -2.27466E-07 -2.06417E-07 + -1.45278E-07 -5.24484E-08 5.24484E-08 1.45278E-07 2.06417E-07 2.27466E-07 + 2.12546E-07 1.74318E-07 1.27638E-07 8.42485E-08 5.04315E-08 2.74876E-08 + 1.36798E-08 6.22896E-09 2.59897E-09 9.94825E-10 3.49663E-10 1.12936E-10 + 3.35389E-11 9.16253E-12 2.30361E-12 5.33189E-13 + -2.16718E-12 -9.36320E-12 -3.72417E-11 -1.36321E-10 -4.59035E-10 -1.42123E-09 + -4.04354E-09 -1.05637E-08 -2.53180E-08 -5.56027E-08 -1.11725E-07 -2.04983E-07 + -3.42434E-07 -5.18793E-07 -7.08527E-07 -8.63908E-07 -9.24553E-07 -8.38996E-07 + -5.90494E-07 -2.13180E-07 2.13180E-07 5.90494E-07 8.38996E-07 9.24553E-07 + 8.63908E-07 7.08527E-07 5.18793E-07 3.42434E-07 2.04983E-07 1.11725E-07 + 5.56027E-08 2.53180E-08 1.05637E-08 4.04354E-09 1.42123E-09 4.59035E-10 + 1.36321E-10 3.72417E-11 9.36320E-12 2.16718E-12 + -7.88229E-12 -3.40550E-11 -1.35452E-10 -4.95816E-10 -1.66956E-09 -5.16918E-09 + -1.47068E-08 -3.84214E-08 -9.20846E-08 -2.02233E-07 -4.06358E-07 -7.45545E-07 + -1.24547E-06 -1.88691E-06 -2.57700E-06 -3.14213E-06 -3.36270E-06 -3.05153E-06 + -2.14770E-06 -7.75361E-07 7.75361E-07 2.14770E-06 3.05153E-06 3.36270E-06 + 3.14213E-06 2.57700E-06 1.88691E-06 1.24547E-06 7.45545E-07 4.06358E-07 + 2.02233E-07 9.20846E-08 3.84214E-08 1.47068E-08 5.16918E-09 1.66956E-09 + 4.95816E-10 1.35452E-10 3.40550E-11 7.88229E-12 + -2.56302E-11 -1.10734E-10 -4.40439E-10 -1.61220E-09 -5.42877E-09 -1.68082E-08 + -4.78208E-08 -1.24931E-07 -2.99423E-07 -6.57584E-07 -1.32132E-06 -2.42422E-06 + -4.04979E-06 -6.13550E-06 -8.37939E-06 -1.02170E-05 -1.09342E-05 -9.92238E-06 + -6.98347E-06 -2.52117E-06 2.52117E-06 6.98347E-06 9.92238E-06 1.09342E-05 + 1.02170E-05 8.37939E-06 6.13550E-06 4.04979E-06 2.42422E-06 1.32132E-06 + 6.57584E-07 2.99423E-07 1.24931E-07 4.78208E-08 1.68082E-08 5.42877E-09 + 1.61220E-09 4.40439E-10 1.10734E-10 2.56302E-11 + -7.43971E-11 -3.21429E-10 -1.27847E-09 -4.67976E-09 -1.57582E-08 -4.87894E-08 + -1.38810E-07 -3.62641E-07 -8.69141E-07 -1.90878E-06 -3.83541E-06 -7.03683E-06 + -1.17554E-05 -1.78096E-05 -2.43230E-05 -2.96570E-05 -3.17389E-05 -2.88019E-05 + -2.02711E-05 -7.31828E-06 7.31828E-06 2.02711E-05 2.88019E-05 3.17389E-05 + 2.96570E-05 2.43230E-05 1.78096E-05 1.17554E-05 7.03683E-06 3.83541E-06 + 1.90878E-06 8.69141E-07 3.62641E-07 1.38810E-07 4.87894E-08 1.57582E-08 + 4.67976E-09 1.27847E-09 3.21429E-10 7.43971E-11 + -1.92406E-10 -8.31281E-10 -3.30638E-09 -1.21028E-08 -4.07539E-08 -1.26179E-07 + -3.58992E-07 -9.37863E-07 -2.24778E-06 -4.93650E-06 -9.91917E-06 -1.81987E-05 + -3.04019E-05 -4.60593E-05 -6.29043E-05 -7.66995E-05 -8.20846E-05 -7.44903E-05 + -5.24286E-05 -1.89282E-05 1.89282E-05 5.24286E-05 7.44903E-05 8.20846E-05 + 7.66995E-05 6.29043E-05 4.60593E-05 3.04019E-05 1.81987E-05 9.91917E-06 + 4.93650E-06 2.24778E-06 9.37863E-07 3.58992E-07 1.26179E-07 4.07539E-08 + 1.21028E-08 3.30638E-09 8.31281E-10 1.92406E-10 + -4.42266E-10 -1.91079E-09 -7.60007E-09 -2.78196E-08 -9.36771E-08 -2.90037E-07 + -8.25181E-07 -2.15578E-06 -5.16676E-06 -1.13471E-05 -2.28003E-05 -4.18316E-05 + -6.98819E-05 -1.05872E-04 -1.44594E-04 -1.76310E-04 -1.88710E-04 -1.71291E-04 + -1.20599E-04 -4.35506E-05 4.35506E-05 1.20599E-04 1.71291E-04 1.88710E-04 + 1.76310E-04 1.44594E-04 1.05872E-04 6.98819E-05 4.18316E-05 2.28003E-05 + 1.13471E-05 5.16676E-06 2.15578E-06 8.25181E-07 2.90037E-07 9.36771E-08 + 2.78196E-08 7.60007E-09 1.91079E-09 4.42266E-10 + -9.00809E-10 -3.89190E-09 -1.54799E-08 -5.66631E-08 -1.90802E-07 -5.90748E-07 + -1.68073E-06 -4.39090E-06 -1.05237E-05 -2.31117E-05 -4.64396E-05 -8.52028E-05 + -1.42336E-04 -2.15644E-04 -2.94530E-04 -3.59224E-04 -3.84774E-04 -3.49801E-04 + -2.46813E-04 -8.92784E-05 8.92784E-05 2.46813E-04 3.49801E-04 3.84774E-04 + 3.59224E-04 2.94530E-04 2.15644E-04 1.42336E-04 8.52028E-05 4.64396E-05 + 2.31117E-05 1.05237E-05 4.39090E-06 1.68073E-06 5.90748E-07 1.90802E-07 + 5.66631E-08 1.54799E-08 3.89190E-09 9.00809E-10 + -1.61936E-09 -6.99634E-09 -2.78277E-08 -1.01861E-07 -3.42999E-07 -1.06197E-06 + -3.02140E-06 -7.89337E-06 -1.89181E-05 -4.15472E-05 -8.34831E-05 -1.53167E-04 + -2.55874E-04 -3.87675E-04 -5.29617E-04 -6.46580E-04 -6.94589E-04 -6.35301E-04 + -4.52013E-04 -1.64556E-04 1.64556E-04 4.52013E-04 6.35301E-04 6.94589E-04 + 6.46580E-04 5.29617E-04 3.87675E-04 2.55874E-04 1.53167E-04 8.34831E-05 + 4.15472E-05 1.89181E-05 7.89337E-06 3.02140E-06 1.06197E-06 3.42999E-07 + 1.01861E-07 2.78277E-08 6.99634E-09 1.61936E-09 + -2.55474E-09 -1.10376E-08 -4.39017E-08 -1.60700E-07 -5.41125E-07 -1.67539E-06 + -4.76665E-06 -1.24528E-05 -2.98457E-05 -6.55462E-05 -1.31705E-04 -2.41640E-04 + -4.03681E-04 -6.11673E-04 -8.36070E-04 -1.02293E-03 -1.10598E-03 -1.02500E-03 + -7.42317E-04 -2.73857E-04 2.73857E-04 7.42317E-04 1.02500E-03 1.10598E-03 + 1.02293E-03 8.36070E-04 6.11673E-04 4.03681E-04 2.41640E-04 1.31705E-04 + 6.55462E-05 2.98457E-05 1.24528E-05 4.76665E-06 1.67539E-06 5.41125E-07 + 1.60700E-07 4.39017E-08 1.10376E-08 2.55474E-09 + -3.50533E-09 -1.51446E-08 -6.02369E-08 -2.20494E-07 -7.42469E-07 -2.29878E-06 + -6.54025E-06 -1.70863E-05 -4.09508E-05 -8.99349E-05 -1.80711E-04 -3.31552E-04 + -5.53894E-04 -8.39375E-04 -1.14799E-03 -1.40798E-03 -1.53307E-03 -1.44104E-03 + -1.06293E-03 -3.97397E-04 3.97397E-04 1.06293E-03 1.44104E-03 1.53307E-03 + 1.40798E-03 1.14799E-03 8.39375E-04 5.53894E-04 3.31552E-04 1.80711E-04 + 8.99349E-05 4.09508E-05 1.70863E-05 6.54025E-06 2.29878E-06 7.42469E-07 + 2.20494E-07 6.02369E-08 1.51446E-08 3.50533E-09 + -4.11591E-09 -1.77826E-08 -7.07294E-08 -2.58901E-07 -8.71798E-07 -2.69920E-06 + -7.67948E-06 -2.00626E-05 -4.80840E-05 -1.05600E-04 -2.12189E-04 -3.89305E-04 + -6.50381E-04 -9.85624E-04 -1.34822E-03 -1.65444E-03 -1.80406E-03 -1.70047E-03 + -1.25860E-03 -4.71695E-04 4.71695E-04 1.25860E-03 1.70047E-03 1.80406E-03 + 1.65444E-03 1.34822E-03 9.85624E-04 6.50381E-04 3.89305E-04 2.12189E-04 + 1.05600E-04 4.80840E-05 2.00626E-05 7.67948E-06 2.69920E-06 8.71798E-07 + 2.58901E-07 7.07294E-08 1.77826E-08 4.11591E-09 + -3.99938E-09 -1.72791E-08 -6.87270E-08 -2.51571E-07 -8.47117E-07 -2.62278E-06 + -7.46206E-06 -1.94946E-05 -4.67227E-05 -1.02611E-04 -2.06181E-04 -3.78283E-04 + -6.31963E-04 -9.57649E-04 -1.30941E-03 -1.60403E-03 -1.74000E-03 -1.62296E-03 + -1.18501E-03 -4.39775E-04 4.39775E-04 1.18501E-03 1.62296E-03 1.74000E-03 + 1.60403E-03 1.30941E-03 9.57649E-04 6.31963E-04 3.78283E-04 2.06181E-04 + 1.02611E-04 4.67227E-05 1.94946E-05 7.46206E-06 2.62278E-06 8.47117E-07 + 2.51571E-07 6.87270E-08 1.72791E-08 3.99938E-09 + -2.94427E-09 -1.27206E-08 -5.05955E-08 -1.85202E-07 -6.23631E-07 -1.93084E-06 + -5.49342E-06 -1.43515E-05 -3.43963E-05 -7.55401E-05 -1.51787E-04 -2.78484E-04 + -4.65232E-04 -7.04925E-04 -9.63346E-04 -1.17750E-03 -1.26909E-03 -1.16829E-03 + -8.38355E-04 -3.07157E-04 3.07157E-04 8.38355E-04 1.16829E-03 1.26909E-03 + 1.17750E-03 9.63346E-04 7.04925E-04 4.65232E-04 2.78484E-04 1.51787E-04 + 7.55401E-05 3.43963E-05 1.43515E-05 5.49342E-06 1.93084E-06 6.23631E-07 + 1.85202E-07 5.05955E-08 1.27206E-08 2.94427E-09 + -1.08689E-09 -4.69584E-09 -1.86775E-08 -6.83679E-08 -2.30216E-07 -7.12778E-07 + -2.02792E-06 -5.29792E-06 -1.26975E-05 -2.78859E-05 -5.60327E-05 -1.02803E-04 + -1.71741E-04 -2.60209E-04 -3.55492E-04 -4.33995E-04 -4.66106E-04 -4.26012E-04 + -3.02758E-04 -1.10117E-04 1.10117E-04 3.02758E-04 4.26012E-04 4.66106E-04 + 4.33995E-04 3.55492E-04 2.60209E-04 1.71741E-04 1.02803E-04 5.60327E-05 + 2.78859E-05 1.26975E-05 5.29792E-06 2.02792E-06 7.12778E-07 2.30216E-07 + 6.83679E-08 1.86775E-08 4.69584E-09 1.08689E-09 + 1.08689E-09 4.69584E-09 1.86775E-08 6.83679E-08 2.30216E-07 7.12778E-07 + 2.02792E-06 5.29792E-06 1.26975E-05 2.78859E-05 5.60327E-05 1.02803E-04 + 1.71741E-04 2.60209E-04 3.55492E-04 4.33995E-04 4.66106E-04 4.26012E-04 + 3.02758E-04 1.10117E-04 -1.10117E-04 -3.02758E-04 -4.26012E-04 -4.66106E-04 + -4.33995E-04 -3.55492E-04 -2.60209E-04 -1.71741E-04 -1.02803E-04 -5.60327E-05 + -2.78859E-05 -1.26975E-05 -5.29792E-06 -2.02792E-06 -7.12778E-07 -2.30216E-07 + -6.83679E-08 -1.86775E-08 -4.69584E-09 -1.08689E-09 + 2.94427E-09 1.27206E-08 5.05955E-08 1.85202E-07 6.23631E-07 1.93084E-06 + 5.49342E-06 1.43515E-05 3.43963E-05 7.55401E-05 1.51787E-04 2.78484E-04 + 4.65232E-04 7.04925E-04 9.63346E-04 1.17750E-03 1.26909E-03 1.16829E-03 + 8.38355E-04 3.07157E-04 -3.07157E-04 -8.38355E-04 -1.16829E-03 -1.26909E-03 + -1.17750E-03 -9.63346E-04 -7.04925E-04 -4.65232E-04 -2.78484E-04 -1.51787E-04 + -7.55401E-05 -3.43963E-05 -1.43515E-05 -5.49342E-06 -1.93084E-06 -6.23631E-07 + -1.85202E-07 -5.05955E-08 -1.27206E-08 -2.94427E-09 + 3.99938E-09 1.72791E-08 6.87270E-08 2.51571E-07 8.47117E-07 2.62278E-06 + 7.46206E-06 1.94946E-05 4.67227E-05 1.02611E-04 2.06181E-04 3.78283E-04 + 6.31963E-04 9.57649E-04 1.30941E-03 1.60403E-03 1.74000E-03 1.62296E-03 + 1.18501E-03 4.39775E-04 -4.39775E-04 -1.18501E-03 -1.62296E-03 -1.74000E-03 + -1.60403E-03 -1.30941E-03 -9.57649E-04 -6.31963E-04 -3.78283E-04 -2.06181E-04 + -1.02611E-04 -4.67227E-05 -1.94946E-05 -7.46206E-06 -2.62278E-06 -8.47117E-07 + -2.51571E-07 -6.87270E-08 -1.72791E-08 -3.99938E-09 + 4.11591E-09 1.77826E-08 7.07294E-08 2.58901E-07 8.71798E-07 2.69920E-06 + 7.67948E-06 2.00626E-05 4.80840E-05 1.05600E-04 2.12189E-04 3.89305E-04 + 6.50381E-04 9.85624E-04 1.34822E-03 1.65444E-03 1.80406E-03 1.70047E-03 + 1.25860E-03 4.71695E-04 -4.71695E-04 -1.25860E-03 -1.70047E-03 -1.80406E-03 + -1.65444E-03 -1.34822E-03 -9.85624E-04 -6.50381E-04 -3.89305E-04 -2.12189E-04 + -1.05600E-04 -4.80840E-05 -2.00626E-05 -7.67948E-06 -2.69920E-06 -8.71798E-07 + -2.58901E-07 -7.07294E-08 -1.77826E-08 -4.11591E-09 + 3.50533E-09 1.51446E-08 6.02369E-08 2.20494E-07 7.42469E-07 2.29878E-06 + 6.54025E-06 1.70863E-05 4.09508E-05 8.99349E-05 1.80711E-04 3.31552E-04 + 5.53894E-04 8.39375E-04 1.14799E-03 1.40798E-03 1.53307E-03 1.44104E-03 + 1.06293E-03 3.97397E-04 -3.97397E-04 -1.06293E-03 -1.44104E-03 -1.53307E-03 + -1.40798E-03 -1.14799E-03 -8.39375E-04 -5.53894E-04 -3.31552E-04 -1.80711E-04 + -8.99349E-05 -4.09508E-05 -1.70863E-05 -6.54025E-06 -2.29878E-06 -7.42469E-07 + -2.20494E-07 -6.02369E-08 -1.51446E-08 -3.50533E-09 + 2.55474E-09 1.10376E-08 4.39017E-08 1.60700E-07 5.41125E-07 1.67539E-06 + 4.76665E-06 1.24528E-05 2.98457E-05 6.55462E-05 1.31705E-04 2.41640E-04 + 4.03681E-04 6.11673E-04 8.36070E-04 1.02293E-03 1.10598E-03 1.02500E-03 + 7.42317E-04 2.73857E-04 -2.73857E-04 -7.42317E-04 -1.02500E-03 -1.10598E-03 + -1.02293E-03 -8.36070E-04 -6.11673E-04 -4.03681E-04 -2.41640E-04 -1.31705E-04 + -6.55462E-05 -2.98457E-05 -1.24528E-05 -4.76665E-06 -1.67539E-06 -5.41125E-07 + -1.60700E-07 -4.39017E-08 -1.10376E-08 -2.55474E-09 + 1.61936E-09 6.99634E-09 2.78277E-08 1.01861E-07 3.42999E-07 1.06197E-06 + 3.02140E-06 7.89337E-06 1.89181E-05 4.15472E-05 8.34831E-05 1.53167E-04 + 2.55874E-04 3.87675E-04 5.29617E-04 6.46580E-04 6.94589E-04 6.35301E-04 + 4.52013E-04 1.64556E-04 -1.64556E-04 -4.52013E-04 -6.35301E-04 -6.94589E-04 + -6.46580E-04 -5.29617E-04 -3.87675E-04 -2.55874E-04 -1.53167E-04 -8.34831E-05 + -4.15472E-05 -1.89181E-05 -7.89337E-06 -3.02140E-06 -1.06197E-06 -3.42999E-07 + -1.01861E-07 -2.78277E-08 -6.99634E-09 -1.61936E-09 + 9.00809E-10 3.89190E-09 1.54799E-08 5.66631E-08 1.90802E-07 5.90748E-07 + 1.68073E-06 4.39090E-06 1.05237E-05 2.31117E-05 4.64396E-05 8.52028E-05 + 1.42336E-04 2.15644E-04 2.94530E-04 3.59224E-04 3.84774E-04 3.49801E-04 + 2.46813E-04 8.92784E-05 -8.92784E-05 -2.46813E-04 -3.49801E-04 -3.84774E-04 + -3.59224E-04 -2.94530E-04 -2.15644E-04 -1.42336E-04 -8.52028E-05 -4.64396E-05 + -2.31117E-05 -1.05237E-05 -4.39090E-06 -1.68073E-06 -5.90748E-07 -1.90802E-07 + -5.66631E-08 -1.54799E-08 -3.89190E-09 -9.00809E-10 + 4.42266E-10 1.91079E-09 7.60007E-09 2.78196E-08 9.36771E-08 2.90037E-07 + 8.25181E-07 2.15578E-06 5.16676E-06 1.13471E-05 2.28003E-05 4.18316E-05 + 6.98819E-05 1.05872E-04 1.44594E-04 1.76310E-04 1.88710E-04 1.71291E-04 + 1.20599E-04 4.35506E-05 -4.35506E-05 -1.20599E-04 -1.71291E-04 -1.88710E-04 + -1.76310E-04 -1.44594E-04 -1.05872E-04 -6.98819E-05 -4.18316E-05 -2.28003E-05 + -1.13471E-05 -5.16676E-06 -2.15578E-06 -8.25181E-07 -2.90037E-07 -9.36771E-08 + -2.78196E-08 -7.60007E-09 -1.91079E-09 -4.42266E-10 + 1.92406E-10 8.31281E-10 3.30638E-09 1.21028E-08 4.07539E-08 1.26179E-07 + 3.58992E-07 9.37863E-07 2.24778E-06 4.93650E-06 9.91917E-06 1.81987E-05 + 3.04019E-05 4.60593E-05 6.29043E-05 7.66995E-05 8.20846E-05 7.44903E-05 + 5.24286E-05 1.89282E-05 -1.89282E-05 -5.24286E-05 -7.44903E-05 -8.20846E-05 + -7.66995E-05 -6.29043E-05 -4.60593E-05 -3.04019E-05 -1.81987E-05 -9.91917E-06 + -4.93650E-06 -2.24778E-06 -9.37863E-07 -3.58992E-07 -1.26179E-07 -4.07539E-08 + -1.21028E-08 -3.30638E-09 -8.31281E-10 -1.92406E-10 + 7.43971E-11 3.21429E-10 1.27847E-09 4.67976E-09 1.57582E-08 4.87894E-08 + 1.38810E-07 3.62641E-07 8.69141E-07 1.90878E-06 3.83541E-06 7.03683E-06 + 1.17554E-05 1.78096E-05 2.43230E-05 2.96570E-05 3.17389E-05 2.88019E-05 + 2.02711E-05 7.31828E-06 -7.31828E-06 -2.02711E-05 -2.88019E-05 -3.17389E-05 + -2.96570E-05 -2.43230E-05 -1.78096E-05 -1.17554E-05 -7.03683E-06 -3.83541E-06 + -1.90878E-06 -8.69141E-07 -3.62641E-07 -1.38810E-07 -4.87894E-08 -1.57582E-08 + -4.67976E-09 -1.27847E-09 -3.21429E-10 -7.43971E-11 + 2.56302E-11 1.10734E-10 4.40439E-10 1.61220E-09 5.42877E-09 1.68082E-08 + 4.78208E-08 1.24931E-07 2.99423E-07 6.57584E-07 1.32132E-06 2.42422E-06 + 4.04979E-06 6.13550E-06 8.37939E-06 1.02170E-05 1.09342E-05 9.92238E-06 + 6.98347E-06 2.52117E-06 -2.52117E-06 -6.98347E-06 -9.92238E-06 -1.09342E-05 + -1.02170E-05 -8.37939E-06 -6.13550E-06 -4.04979E-06 -2.42422E-06 -1.32132E-06 + -6.57584E-07 -2.99423E-07 -1.24931E-07 -4.78208E-08 -1.68082E-08 -5.42877E-09 + -1.61220E-09 -4.40439E-10 -1.10734E-10 -2.56302E-11 + 7.88229E-12 3.40550E-11 1.35452E-10 4.95816E-10 1.66956E-09 5.16918E-09 + 1.47068E-08 3.84214E-08 9.20846E-08 2.02233E-07 4.06358E-07 7.45545E-07 + 1.24547E-06 1.88691E-06 2.57700E-06 3.14213E-06 3.36270E-06 3.05153E-06 + 2.14770E-06 7.75361E-07 -7.75361E-07 -2.14770E-06 -3.05153E-06 -3.36270E-06 + -3.14213E-06 -2.57700E-06 -1.88691E-06 -1.24547E-06 -7.45545E-07 -4.06358E-07 + -2.02233E-07 -9.20846E-08 -3.84214E-08 -1.47068E-08 -5.16918E-09 -1.66956E-09 + -4.95816E-10 -1.35452E-10 -3.40550E-11 -7.88229E-12 + 2.16718E-12 9.36320E-12 3.72417E-11 1.36321E-10 4.59035E-10 1.42123E-09 + 4.04354E-09 1.05637E-08 2.53180E-08 5.56027E-08 1.11725E-07 2.04983E-07 + 3.42434E-07 5.18793E-07 7.08527E-07 8.63908E-07 9.24553E-07 8.38996E-07 + 5.90494E-07 2.13180E-07 -2.13180E-07 -5.90494E-07 -8.38996E-07 -9.24553E-07 + -8.63908E-07 -7.08527E-07 -5.18793E-07 -3.42434E-07 -2.04983E-07 -1.11725E-07 + -5.56027E-08 -2.53180E-08 -1.05637E-08 -4.04354E-09 -1.42123E-09 -4.59035E-10 + -1.36321E-10 -3.72417E-11 -9.36320E-12 -2.16718E-12 + 5.33189E-13 2.30361E-12 9.16253E-12 3.35389E-11 1.12936E-10 3.49663E-10 + 9.94825E-10 2.59897E-09 6.22896E-09 1.36798E-08 2.74876E-08 5.04315E-08 + 8.42485E-08 1.27638E-07 1.74318E-07 2.12546E-07 2.27466E-07 2.06417E-07 + 1.45278E-07 5.24484E-08 -5.24484E-08 -1.45278E-07 -2.06417E-07 -2.27466E-07 + -2.12546E-07 -1.74318E-07 -1.27638E-07 -8.42485E-08 -5.04315E-08 -2.74876E-08 + -1.36798E-08 -6.22896E-09 -2.59897E-09 -9.94825E-10 -3.49663E-10 -1.12936E-10 + -3.35389E-11 -9.16253E-12 -2.30361E-12 -5.33189E-13 + 1.17423E-13 5.07321E-13 2.01785E-12 7.38621E-12 2.48716E-11 7.70058E-11 + 2.19089E-10 5.72367E-10 1.37179E-09 3.01269E-09 6.05355E-09 1.11064E-08 + 1.85539E-08 2.81095E-08 3.83897E-08 4.68086E-08 5.00945E-08 4.54589E-08 + 3.19944E-08 1.15506E-08 -1.15506E-08 -3.19944E-08 -4.54589E-08 -5.00945E-08 + -4.68086E-08 -3.83897E-08 -2.81095E-08 -1.85539E-08 -1.11064E-08 -6.05355E-09 + -3.01269E-09 -1.37179E-09 -5.72367E-10 -2.19089E-10 -7.70058E-11 -2.48716E-11 + -7.38621E-12 -2.01785E-12 -5.07321E-13 -1.17423E-13 + 2.31421E-14 9.99844E-14 3.97684E-13 1.45570E-12 4.90178E-12 1.51765E-11 + 4.31787E-11 1.12804E-10 2.70357E-10 5.93750E-10 1.19305E-09 2.18889E-09 + 3.65666E-09 5.53990E-09 7.56597E-09 9.22519E-09 9.87278E-09 8.95917E-09 + 6.30556E-09 2.27643E-09 -2.27643E-09 -6.30556E-09 -8.95917E-09 -9.87278E-09 + -9.22519E-09 -7.56597E-09 -5.53990E-09 -3.65666E-09 -2.18889E-09 -1.19305E-09 + -5.93750E-10 -2.70357E-10 -1.12804E-10 -4.31787E-11 -1.51765E-11 -4.90178E-12 + -1.45570E-12 -3.97684E-13 -9.99844E-14 -2.31421E-14 + 4.07835E-15 1.76203E-14 7.00840E-14 2.56538E-13 8.63843E-13 2.67457E-12 + 7.60940E-12 1.98795E-11 4.76452E-11 1.04637E-10 2.10252E-10 3.85750E-10 + 6.44415E-10 9.76300E-10 1.33335E-09 1.62576E-09 1.73989E-09 1.57888E-09 + 1.11123E-09 4.01177E-10 -4.01177E-10 -1.11123E-09 -1.57888E-09 -1.73989E-09 + -1.62576E-09 -1.33335E-09 -9.76300E-10 -6.44415E-10 -3.85750E-10 -2.10252E-10 + -1.04637E-10 -4.76452E-11 -1.98795E-11 -7.60940E-12 -2.67457E-12 -8.63843E-13 + -2.56538E-13 -7.00840E-14 -1.76203E-14 -4.07835E-15 + 6.41901E-16 2.77330E-15 1.10307E-14 4.03771E-14 1.35962E-13 4.20957E-13 + 1.19766E-12 3.12888E-12 7.49899E-12 1.64690E-11 3.30921E-11 6.07141E-11 + 1.01426E-10 1.53662E-10 2.09860E-10 2.55882E-10 2.73845E-10 2.48504E-10 + 1.74899E-10 6.31421E-11 -6.31421E-11 -1.74899E-10 -2.48504E-10 -2.73845E-10 + -2.55882E-10 -2.09860E-10 -1.53662E-10 -1.01426E-10 -6.07141E-11 -3.30921E-11 + -1.64690E-11 -7.49899E-12 -3.12888E-12 -1.19766E-12 -4.20957E-13 -1.35962E-13 + -4.03771E-14 -1.10307E-14 -2.77330E-15 -6.41901E-16 + 9.00950E-17 3.89251E-16 1.54823E-15 5.66719E-15 1.90832E-14 5.90840E-14 + 1.68099E-13 4.39158E-13 1.05253E-12 2.31154E-12 4.64469E-12 8.52161E-12 + 1.42358E-11 2.15675E-11 2.94552E-11 3.59147E-11 3.84359E-11 3.48791E-11 + 2.45483E-11 8.86241E-12 -8.86241E-12 -2.45483E-11 -3.48791E-11 -3.84359E-11 + -3.59147E-11 -2.94552E-11 -2.15675E-11 -1.42358E-11 -8.52161E-12 -4.64469E-12 + -2.31154E-12 -1.05253E-12 -4.39158E-13 -1.68099E-13 -5.90840E-14 -1.90832E-14 + -5.66719E-15 -1.54823E-15 -3.89251E-16 -9.00950E-17 + -2.47607E-17 -1.06977E-16 -4.25498E-16 -1.55751E-15 -5.24462E-15 -1.62380E-14 + -4.61987E-14 -1.20694E-13 -2.89266E-13 -6.35278E-13 -1.27650E-12 -2.34199E-12 + -3.91241E-12 -5.92737E-12 -8.09514E-12 -9.87041E-12 -1.05633E-11 -9.58579E-12 + -6.74658E-12 -2.43565E-12 2.43565E-12 6.74658E-12 9.58579E-12 1.05633E-11 + 9.87041E-12 8.09514E-12 5.92737E-12 3.91241E-12 2.34199E-12 1.27650E-12 + 6.35278E-13 2.89266E-13 1.20694E-13 4.61987E-14 1.62380E-14 5.24462E-15 + 1.55751E-15 4.25498E-16 1.06977E-16 2.47607E-17 + -1.81097E-16 -7.82419E-16 -3.11204E-15 -1.13914E-14 -3.83584E-14 -1.18763E-13 + -3.37891E-13 -8.82736E-13 -2.11566E-12 -4.64634E-12 -9.33613E-12 -1.71290E-11 + -2.86149E-11 -4.33520E-11 -5.92068E-11 -7.21909E-11 -7.72586E-11 -7.01092E-11 + -4.93436E-11 -1.78140E-11 1.78140E-11 4.93436E-11 7.01092E-11 7.72586E-11 + 7.21909E-11 5.92068E-11 4.33520E-11 2.86149E-11 1.71290E-11 9.33613E-12 + 4.64634E-12 2.11566E-12 8.82736E-13 3.37891E-13 1.18763E-13 3.83584E-14 + 1.13914E-14 3.11204E-15 7.82419E-16 1.81097E-16 + -1.18431E-15 -5.11674E-15 -2.03516E-14 -7.44959E-14 -2.50851E-13 -7.76666E-13 + -2.20969E-12 -5.77279E-12 -1.38357E-11 -3.03854E-11 -6.10550E-11 -1.12018E-10 + -1.87131E-10 -2.83507E-10 -3.87192E-10 -4.72103E-10 -5.05244E-10 -4.58490E-10 + -3.22690E-10 -1.16497E-10 1.16497E-10 3.22690E-10 4.58490E-10 5.05244E-10 + 4.72103E-10 3.87192E-10 2.83507E-10 1.87131E-10 1.12018E-10 6.10550E-11 + 3.03854E-11 1.38357E-11 5.77279E-12 2.20969E-12 7.76666E-13 2.50851E-13 + 7.44959E-14 2.03516E-14 5.11674E-15 1.18431E-15 + -6.93097E-15 -2.99449E-14 -1.19105E-13 -4.35975E-13 -1.46806E-12 -4.54531E-12 + -1.29318E-11 -3.37843E-11 -8.09709E-11 -1.77826E-10 -3.57314E-10 -6.55565E-10 + -1.09515E-09 -1.65918E-09 -2.26598E-09 -2.76291E-09 -2.95686E-09 -2.68324E-09 + -1.88849E-09 -6.81782E-10 6.81782E-10 1.88849E-09 2.68324E-09 2.95686E-09 + 2.76291E-09 2.26598E-09 1.65918E-09 1.09515E-09 6.55565E-10 3.57314E-10 + 1.77826E-10 8.09709E-11 3.37843E-11 1.29318E-11 4.54531E-12 1.46806E-12 + 4.35975E-13 1.19105E-13 2.99449E-14 6.93097E-15 + -3.63113E-14 -1.56881E-13 -6.23987E-13 -2.28407E-12 -7.69115E-12 -2.38128E-11 + -6.77497E-11 -1.76995E-10 -4.24205E-10 -9.31626E-10 -1.87196E-09 -3.43449E-09 + -5.73750E-09 -8.69240E-09 -1.18714E-08 -1.44748E-08 -1.54909E-08 -1.40574E-08 + -9.89376E-09 -3.57184E-09 3.57184E-09 9.89376E-09 1.40574E-08 1.54909E-08 + 1.44748E-08 1.18714E-08 8.69240E-09 5.73750E-09 3.43449E-09 1.87196E-09 + 9.31626E-10 4.24205E-10 1.76995E-10 6.77497E-11 2.38128E-11 7.69115E-12 + 2.28407E-12 6.23987E-13 1.56881E-13 3.63113E-14 + -1.70256E-13 -7.35583E-13 -2.92575E-12 -1.07095E-11 -3.60623E-11 -1.11654E-10 + -3.17665E-10 -8.29896E-10 -1.98901E-09 -4.36821E-09 -8.77727E-09 -1.61037E-08 + -2.69020E-08 -4.07569E-08 -5.56627E-08 -6.78695E-08 -7.26339E-08 -6.59125E-08 + -4.63899E-08 -1.67477E-08 1.67477E-08 4.63899E-08 6.59125E-08 7.26339E-08 + 6.78695E-08 5.56627E-08 4.07569E-08 2.69020E-08 1.61037E-08 8.77727E-09 + 4.36821E-09 1.98901E-09 8.29896E-10 3.17665E-10 1.11654E-10 3.60623E-11 + 1.07095E-11 2.92575E-12 7.35583E-13 1.70256E-13 + -7.13901E-13 -3.08437E-12 -1.22680E-11 -4.49061E-11 -1.51213E-10 -4.68174E-10 + -1.33200E-09 -3.47983E-09 -8.34012E-09 -1.83163E-08 -3.68039E-08 -6.75242E-08 + -1.12803E-07 -1.70898E-07 -2.33399E-07 -2.84584E-07 -3.04561E-07 -2.76377E-07 + -1.94517E-07 -7.02246E-08 7.02246E-08 1.94517E-07 2.76377E-07 3.04561E-07 + 2.84584E-07 2.33399E-07 1.70898E-07 1.12803E-07 6.75242E-08 3.68039E-08 + 1.83163E-08 8.34012E-09 3.47983E-09 1.33200E-09 4.68174E-10 1.51213E-10 + 4.49061E-11 1.22680E-11 3.08437E-12 7.13901E-13 + -2.67361E-12 -1.15512E-11 -4.59444E-11 -1.68177E-10 -5.66302E-10 -1.75334E-09 + -4.98843E-09 -1.30322E-08 -3.12343E-08 -6.85959E-08 -1.37833E-07 -2.52883E-07 + -4.22454E-07 -6.40024E-07 -8.74095E-07 -1.06579E-06 -1.14060E-06 -1.03505E-06 + -7.28481E-07 -2.62996E-07 2.62996E-07 7.28481E-07 1.03505E-06 1.14060E-06 + 1.06579E-06 8.74095E-07 6.40024E-07 4.22454E-07 2.52883E-07 1.37833E-07 + 6.85959E-08 3.12343E-08 1.30322E-08 4.98843E-09 1.75334E-09 5.66302E-10 + 1.68177E-10 4.59444E-11 1.15512E-11 2.67361E-12 + -8.92839E-12 -3.85746E-11 -1.53429E-10 -5.61617E-10 -1.89114E-09 -5.85521E-09 + -1.66586E-08 -4.35205E-08 -1.04306E-07 -2.29073E-07 -4.60288E-07 -8.44490E-07 + -1.41076E-06 -2.13733E-06 -2.91900E-06 -3.55914E-06 -3.80898E-06 -3.45651E-06 + -2.43273E-06 -8.78262E-07 8.78262E-07 2.43273E-06 3.45651E-06 3.80898E-06 + 3.55914E-06 2.91900E-06 2.13733E-06 1.41076E-06 8.44490E-07 4.60288E-07 + 2.29073E-07 1.04306E-07 4.35205E-08 1.66586E-08 5.85521E-09 1.89114E-09 + 5.61617E-10 1.53429E-10 3.85746E-11 8.92839E-12 + -2.65359E-11 -1.14647E-10 -4.56004E-10 -1.66918E-09 -5.62063E-09 -1.74022E-08 + -4.95108E-08 -1.29347E-07 -3.10005E-07 -6.80823E-07 -1.36801E-06 -2.50990E-06 + -4.19291E-06 -6.35233E-06 -8.67552E-06 -1.05781E-05 -1.13206E-05 -1.02730E-05 + -7.23028E-06 -2.61027E-06 2.61027E-06 7.23028E-06 1.02730E-05 1.13206E-05 + 1.05781E-05 8.67552E-06 6.35233E-06 4.19291E-06 2.50990E-06 1.36801E-06 + 6.80823E-07 3.10005E-07 1.29347E-07 4.95108E-08 1.74022E-08 5.62063E-09 + 1.66918E-09 4.56004E-10 1.14647E-10 2.65359E-11 + -7.00414E-11 -3.02610E-10 -1.20362E-09 -4.40578E-09 -1.48356E-08 -4.59330E-08 + -1.30684E-07 -3.41409E-07 -8.18257E-07 -1.79703E-06 -3.61087E-06 -6.62485E-06 + -1.10672E-05 -1.67669E-05 -2.28990E-05 -2.79208E-05 -2.98808E-05 -2.71158E-05 + -1.90845E-05 -6.88993E-06 6.88993E-06 1.90845E-05 2.71158E-05 2.98808E-05 + 2.79208E-05 2.28990E-05 1.67669E-05 1.10672E-05 6.62485E-06 3.61087E-06 + 1.79703E-06 8.18257E-07 3.41409E-07 1.30684E-07 4.59330E-08 1.48356E-08 + 4.40578E-09 1.20362E-09 3.02610E-10 7.00414E-11 + -1.63793E-10 -7.07657E-10 -2.81468E-09 -1.03029E-08 -3.46932E-08 -1.07415E-07 + -3.05605E-07 -7.98389E-07 -1.91350E-06 -4.20237E-06 -8.44404E-06 -1.54923E-05 + -2.58807E-05 -3.92096E-05 -5.35496E-05 -6.52936E-05 -6.98789E-05 -6.34158E-05 + -4.46361E-05 -1.61154E-05 1.61154E-05 4.46361E-05 6.34158E-05 6.98789E-05 + 6.52936E-05 5.35496E-05 3.92096E-05 2.58807E-05 1.54923E-05 8.44404E-06 + 4.20237E-06 1.91350E-06 7.98389E-07 3.05605E-07 1.07415E-07 3.46932E-08 + 1.03029E-08 2.81468E-09 7.07657E-10 1.63793E-10 + -3.38391E-10 -1.46200E-09 -5.81505E-09 -2.12856E-08 -7.16753E-08 -2.21916E-07 + -6.31371E-07 -1.64945E-06 -3.95324E-06 -8.68199E-06 -1.74452E-05 -3.20067E-05 + -5.34688E-05 -8.10063E-05 -1.10634E-04 -1.34904E-04 -1.44400E-04 -1.31087E-04 + -9.23085E-05 -3.33388E-05 3.33388E-05 9.23085E-05 1.31087E-04 1.44400E-04 + 1.34904E-04 1.10634E-04 8.10063E-05 5.34688E-05 3.20067E-05 1.74452E-05 + 8.68199E-06 3.95324E-06 1.64945E-06 6.31371E-07 2.21916E-07 7.16753E-08 + 2.12856E-08 5.81505E-09 1.46200E-09 3.38391E-10 + -6.15362E-10 -2.65864E-09 -1.05746E-08 -3.87077E-08 -1.30341E-07 -4.03552E-07 + -1.14814E-06 -2.99951E-06 -7.18894E-06 -1.57881E-05 -3.17239E-05 -5.82038E-05 + -9.72327E-05 -1.47311E-04 -2.01198E-04 -2.45384E-04 -2.62813E-04 -2.38882E-04 + -1.68508E-04 -6.09419E-05 6.09419E-05 1.68508E-04 2.38882E-04 2.62813E-04 + 2.45384E-04 2.01198E-04 1.47311E-04 9.72327E-05 5.82038E-05 3.17239E-05 + 1.57881E-05 7.18894E-06 2.99951E-06 1.14814E-06 4.03552E-07 1.30341E-07 + 3.87077E-08 1.05746E-08 2.65864E-09 6.15362E-10 + -9.79723E-10 -4.23284E-09 -1.68360E-08 -6.16270E-08 -2.07517E-07 -6.42499E-07 + -1.82797E-06 -4.77556E-06 -1.14456E-05 -2.51364E-05 -5.05079E-05 -9.26669E-05 + -1.54805E-04 -2.34540E-04 -3.20369E-04 -3.90897E-04 -4.19209E-04 -3.82079E-04 + -2.70541E-04 -9.81282E-05 9.81282E-05 2.70541E-04 3.82079E-04 4.19209E-04 + 3.90897E-04 3.20369E-04 2.34540E-04 1.54805E-04 9.26669E-05 5.05079E-05 + 2.51364E-05 1.14456E-05 4.77556E-06 1.82797E-06 6.42499E-07 2.07517E-07 + 6.16270E-08 1.68360E-08 4.23284E-09 9.79723E-10 + -1.35381E-09 -5.84905E-09 -2.32644E-08 -8.51578E-08 -2.86752E-07 -8.87823E-07 + -2.52594E-06 -6.59899E-06 -1.58158E-05 -3.47342E-05 -6.97932E-05 -1.28050E-04 + -2.13915E-04 -3.24100E-04 -4.42755E-04 -5.40481E-04 -5.80449E-04 -5.30601E-04 + -3.77229E-04 -1.37250E-04 1.37250E-04 3.77229E-04 5.30601E-04 5.80449E-04 + 5.40481E-04 4.42755E-04 3.24100E-04 2.13915E-04 1.28050E-04 6.97932E-05 + 3.47342E-05 1.58158E-05 6.59899E-06 2.52594E-06 8.87823E-07 2.86752E-07 + 8.51578E-08 2.32644E-08 5.84905E-09 1.35381E-09 + -1.59807E-09 -6.90438E-09 -2.74619E-08 -1.00522E-07 -3.38490E-07 -1.04801E-06 + -2.98168E-06 -7.78962E-06 -1.86694E-05 -4.10011E-05 -8.23857E-05 -1.51153E-04 + -2.52511E-04 -3.82579E-04 -5.22653E-04 -6.38069E-04 -6.85423E-04 -6.26877E-04 + -4.45983E-04 -1.62350E-04 1.62350E-04 4.45983E-04 6.26877E-04 6.85423E-04 + 6.38069E-04 5.22653E-04 3.82579E-04 2.52511E-04 1.51153E-04 8.23857E-05 + 4.10011E-05 1.86694E-05 7.78962E-06 2.98168E-06 1.04801E-06 3.38490E-07 + 1.00522E-07 2.74619E-08 6.90438E-09 1.59807E-09 + -1.55868E-09 -6.73419E-09 -2.67850E-08 -9.80447E-08 -3.30147E-07 -1.02218E-06 + -2.90819E-06 -7.59762E-06 -1.82092E-05 -3.99905E-05 -8.03550E-05 -1.47427E-04 + -2.46286E-04 -3.73142E-04 -5.09717E-04 -6.22048E-04 -6.67474E-04 -6.09055E-04 + -4.31935E-04 -1.56856E-04 1.56856E-04 4.31935E-04 6.09055E-04 6.67474E-04 + 6.22048E-04 5.09717E-04 3.73142E-04 2.46286E-04 1.47427E-04 8.03550E-05 + 3.99905E-05 1.82092E-05 7.59762E-06 2.90819E-06 1.02218E-06 3.30147E-07 + 9.80447E-08 2.67850E-08 6.73419E-09 1.55868E-09 + -1.15023E-09 -4.96952E-09 -1.97661E-08 -7.23525E-08 -2.43633E-07 -7.54320E-07 + -2.14611E-06 -5.60669E-06 -1.34376E-05 -2.95112E-05 -5.92983E-05 -1.08795E-04 + -1.81748E-04 -2.75356E-04 -3.76100E-04 -4.58783E-04 -4.91639E-04 -4.47383E-04 + -3.16085E-04 -1.14453E-04 1.14453E-04 3.16085E-04 4.47383E-04 4.91639E-04 + 4.58783E-04 3.76100E-04 2.75356E-04 1.81748E-04 1.08795E-04 5.92983E-05 + 2.95112E-05 1.34376E-05 5.60669E-06 2.14611E-06 7.54320E-07 2.43633E-07 + 7.23525E-08 1.97661E-08 4.96952E-09 1.15023E-09 + -4.25112E-10 -1.83667E-09 -7.30529E-09 -2.67406E-08 -9.00437E-08 -2.78787E-07 + -7.93175E-07 -2.07216E-06 -4.96635E-06 -1.09069E-05 -2.19159E-05 -4.02091E-05 + -6.71715E-05 -1.01767E-04 -1.38992E-04 -1.69509E-04 -1.81523E-04 -1.64944E-04 + -1.16304E-04 -4.20485E-05 4.20485E-05 1.16304E-04 1.64944E-04 1.81523E-04 + 1.69509E-04 1.38992E-04 1.01767E-04 6.71715E-05 4.02091E-05 2.19159E-05 + 1.09069E-05 4.96635E-06 2.07216E-06 7.93175E-07 2.78787E-07 9.00437E-08 + 2.67406E-08 7.30529E-09 1.83667E-09 4.25112E-10 + 4.25112E-10 1.83667E-09 7.30529E-09 2.67406E-08 9.00437E-08 2.78787E-07 + 7.93175E-07 2.07216E-06 4.96635E-06 1.09069E-05 2.19159E-05 4.02091E-05 + 6.71715E-05 1.01767E-04 1.38992E-04 1.69509E-04 1.81523E-04 1.64944E-04 + 1.16304E-04 4.20485E-05 -4.20485E-05 -1.16304E-04 -1.64944E-04 -1.81523E-04 + -1.69509E-04 -1.38992E-04 -1.01767E-04 -6.71715E-05 -4.02091E-05 -2.19159E-05 + -1.09069E-05 -4.96635E-06 -2.07216E-06 -7.93175E-07 -2.78787E-07 -9.00437E-08 + -2.67406E-08 -7.30529E-09 -1.83667E-09 -4.25112E-10 + 1.15023E-09 4.96952E-09 1.97661E-08 7.23525E-08 2.43633E-07 7.54320E-07 + 2.14611E-06 5.60669E-06 1.34376E-05 2.95112E-05 5.92983E-05 1.08795E-04 + 1.81748E-04 2.75356E-04 3.76100E-04 4.58783E-04 4.91639E-04 4.47383E-04 + 3.16085E-04 1.14453E-04 -1.14453E-04 -3.16085E-04 -4.47383E-04 -4.91639E-04 + -4.58783E-04 -3.76100E-04 -2.75356E-04 -1.81748E-04 -1.08795E-04 -5.92983E-05 + -2.95112E-05 -1.34376E-05 -5.60669E-06 -2.14611E-06 -7.54320E-07 -2.43633E-07 + -7.23525E-08 -1.97661E-08 -4.96952E-09 -1.15023E-09 + 1.55868E-09 6.73419E-09 2.67850E-08 9.80447E-08 3.30147E-07 1.02218E-06 + 2.90819E-06 7.59762E-06 1.82092E-05 3.99905E-05 8.03550E-05 1.47427E-04 + 2.46286E-04 3.73142E-04 5.09717E-04 6.22048E-04 6.67474E-04 6.09055E-04 + 4.31935E-04 1.56856E-04 -1.56856E-04 -4.31935E-04 -6.09055E-04 -6.67474E-04 + -6.22048E-04 -5.09717E-04 -3.73142E-04 -2.46286E-04 -1.47427E-04 -8.03550E-05 + -3.99905E-05 -1.82092E-05 -7.59762E-06 -2.90819E-06 -1.02218E-06 -3.30147E-07 + -9.80447E-08 -2.67850E-08 -6.73419E-09 -1.55868E-09 + 1.59807E-09 6.90438E-09 2.74619E-08 1.00522E-07 3.38490E-07 1.04801E-06 + 2.98168E-06 7.78962E-06 1.86694E-05 4.10011E-05 8.23857E-05 1.51153E-04 + 2.52511E-04 3.82579E-04 5.22653E-04 6.38069E-04 6.85423E-04 6.26877E-04 + 4.45983E-04 1.62350E-04 -1.62350E-04 -4.45983E-04 -6.26877E-04 -6.85423E-04 + -6.38069E-04 -5.22653E-04 -3.82579E-04 -2.52511E-04 -1.51153E-04 -8.23857E-05 + -4.10011E-05 -1.86694E-05 -7.78962E-06 -2.98168E-06 -1.04801E-06 -3.38490E-07 + -1.00522E-07 -2.74619E-08 -6.90438E-09 -1.59807E-09 + 1.35381E-09 5.84905E-09 2.32644E-08 8.51578E-08 2.86752E-07 8.87823E-07 + 2.52594E-06 6.59899E-06 1.58158E-05 3.47342E-05 6.97932E-05 1.28050E-04 + 2.13915E-04 3.24100E-04 4.42755E-04 5.40481E-04 5.80449E-04 5.30601E-04 + 3.77229E-04 1.37250E-04 -1.37250E-04 -3.77229E-04 -5.30601E-04 -5.80449E-04 + -5.40481E-04 -4.42755E-04 -3.24100E-04 -2.13915E-04 -1.28050E-04 -6.97932E-05 + -3.47342E-05 -1.58158E-05 -6.59899E-06 -2.52594E-06 -8.87823E-07 -2.86752E-07 + -8.51578E-08 -2.32644E-08 -5.84905E-09 -1.35381E-09 + 9.79723E-10 4.23284E-09 1.68360E-08 6.16270E-08 2.07517E-07 6.42499E-07 + 1.82797E-06 4.77556E-06 1.14456E-05 2.51364E-05 5.05079E-05 9.26669E-05 + 1.54805E-04 2.34540E-04 3.20369E-04 3.90897E-04 4.19209E-04 3.82079E-04 + 2.70541E-04 9.81282E-05 -9.81282E-05 -2.70541E-04 -3.82079E-04 -4.19209E-04 + -3.90897E-04 -3.20369E-04 -2.34540E-04 -1.54805E-04 -9.26669E-05 -5.05079E-05 + -2.51364E-05 -1.14456E-05 -4.77556E-06 -1.82797E-06 -6.42499E-07 -2.07517E-07 + -6.16270E-08 -1.68360E-08 -4.23284E-09 -9.79723E-10 + 6.15362E-10 2.65864E-09 1.05746E-08 3.87077E-08 1.30341E-07 4.03552E-07 + 1.14814E-06 2.99951E-06 7.18894E-06 1.57881E-05 3.17239E-05 5.82038E-05 + 9.72327E-05 1.47311E-04 2.01198E-04 2.45384E-04 2.62813E-04 2.38882E-04 + 1.68508E-04 6.09419E-05 -6.09419E-05 -1.68508E-04 -2.38882E-04 -2.62813E-04 + -2.45384E-04 -2.01198E-04 -1.47311E-04 -9.72327E-05 -5.82038E-05 -3.17239E-05 + -1.57881E-05 -7.18894E-06 -2.99951E-06 -1.14814E-06 -4.03552E-07 -1.30341E-07 + -3.87077E-08 -1.05746E-08 -2.65864E-09 -6.15362E-10 + 3.38391E-10 1.46200E-09 5.81505E-09 2.12856E-08 7.16753E-08 2.21916E-07 + 6.31371E-07 1.64945E-06 3.95324E-06 8.68199E-06 1.74452E-05 3.20067E-05 + 5.34688E-05 8.10063E-05 1.10634E-04 1.34904E-04 1.44400E-04 1.31087E-04 + 9.23085E-05 3.33388E-05 -3.33388E-05 -9.23085E-05 -1.31087E-04 -1.44400E-04 + -1.34904E-04 -1.10634E-04 -8.10063E-05 -5.34688E-05 -3.20067E-05 -1.74452E-05 + -8.68199E-06 -3.95324E-06 -1.64945E-06 -6.31371E-07 -2.21916E-07 -7.16753E-08 + -2.12856E-08 -5.81505E-09 -1.46200E-09 -3.38391E-10 + 1.63793E-10 7.07657E-10 2.81468E-09 1.03029E-08 3.46932E-08 1.07415E-07 + 3.05605E-07 7.98389E-07 1.91350E-06 4.20237E-06 8.44404E-06 1.54923E-05 + 2.58807E-05 3.92096E-05 5.35496E-05 6.52936E-05 6.98789E-05 6.34158E-05 + 4.46361E-05 1.61154E-05 -1.61154E-05 -4.46361E-05 -6.34158E-05 -6.98789E-05 + -6.52936E-05 -5.35496E-05 -3.92096E-05 -2.58807E-05 -1.54923E-05 -8.44404E-06 + -4.20237E-06 -1.91350E-06 -7.98389E-07 -3.05605E-07 -1.07415E-07 -3.46932E-08 + -1.03029E-08 -2.81468E-09 -7.07657E-10 -1.63793E-10 + 7.00414E-11 3.02610E-10 1.20362E-09 4.40578E-09 1.48356E-08 4.59330E-08 + 1.30684E-07 3.41409E-07 8.18257E-07 1.79703E-06 3.61087E-06 6.62485E-06 + 1.10672E-05 1.67669E-05 2.28990E-05 2.79208E-05 2.98808E-05 2.71158E-05 + 1.90845E-05 6.88993E-06 -6.88993E-06 -1.90845E-05 -2.71158E-05 -2.98808E-05 + -2.79208E-05 -2.28990E-05 -1.67669E-05 -1.10672E-05 -6.62485E-06 -3.61087E-06 + -1.79703E-06 -8.18257E-07 -3.41409E-07 -1.30684E-07 -4.59330E-08 -1.48356E-08 + -4.40578E-09 -1.20362E-09 -3.02610E-10 -7.00414E-11 + 2.65359E-11 1.14647E-10 4.56004E-10 1.66918E-09 5.62063E-09 1.74022E-08 + 4.95108E-08 1.29347E-07 3.10005E-07 6.80823E-07 1.36801E-06 2.50990E-06 + 4.19291E-06 6.35233E-06 8.67552E-06 1.05781E-05 1.13206E-05 1.02730E-05 + 7.23028E-06 2.61027E-06 -2.61027E-06 -7.23028E-06 -1.02730E-05 -1.13206E-05 + -1.05781E-05 -8.67552E-06 -6.35233E-06 -4.19291E-06 -2.50990E-06 -1.36801E-06 + -6.80823E-07 -3.10005E-07 -1.29347E-07 -4.95108E-08 -1.74022E-08 -5.62063E-09 + -1.66918E-09 -4.56004E-10 -1.14647E-10 -2.65359E-11 + 8.92839E-12 3.85746E-11 1.53429E-10 5.61617E-10 1.89114E-09 5.85521E-09 + 1.66586E-08 4.35205E-08 1.04306E-07 2.29073E-07 4.60288E-07 8.44490E-07 + 1.41076E-06 2.13733E-06 2.91900E-06 3.55914E-06 3.80898E-06 3.45651E-06 + 2.43273E-06 8.78262E-07 -8.78262E-07 -2.43273E-06 -3.45651E-06 -3.80898E-06 + -3.55914E-06 -2.91900E-06 -2.13733E-06 -1.41076E-06 -8.44490E-07 -4.60288E-07 + -2.29073E-07 -1.04306E-07 -4.35205E-08 -1.66586E-08 -5.85521E-09 -1.89114E-09 + -5.61617E-10 -1.53429E-10 -3.85746E-11 -8.92839E-12 + 2.67361E-12 1.15512E-11 4.59444E-11 1.68177E-10 5.66302E-10 1.75334E-09 + 4.98843E-09 1.30322E-08 3.12343E-08 6.85959E-08 1.37833E-07 2.52883E-07 + 4.22454E-07 6.40024E-07 8.74095E-07 1.06579E-06 1.14060E-06 1.03505E-06 + 7.28481E-07 2.62996E-07 -2.62996E-07 -7.28481E-07 -1.03505E-06 -1.14060E-06 + -1.06579E-06 -8.74095E-07 -6.40024E-07 -4.22454E-07 -2.52883E-07 -1.37833E-07 + -6.85959E-08 -3.12343E-08 -1.30322E-08 -4.98843E-09 -1.75334E-09 -5.66302E-10 + -1.68177E-10 -4.59444E-11 -1.15512E-11 -2.67361E-12 + 7.13901E-13 3.08437E-12 1.22680E-11 4.49061E-11 1.51213E-10 4.68174E-10 + 1.33200E-09 3.47983E-09 8.34012E-09 1.83163E-08 3.68039E-08 6.75242E-08 + 1.12803E-07 1.70898E-07 2.33399E-07 2.84584E-07 3.04561E-07 2.76377E-07 + 1.94517E-07 7.02246E-08 -7.02246E-08 -1.94517E-07 -2.76377E-07 -3.04561E-07 + -2.84584E-07 -2.33399E-07 -1.70898E-07 -1.12803E-07 -6.75242E-08 -3.68039E-08 + -1.83163E-08 -8.34012E-09 -3.47983E-09 -1.33200E-09 -4.68174E-10 -1.51213E-10 + -4.49061E-11 -1.22680E-11 -3.08437E-12 -7.13901E-13 + 1.70256E-13 7.35583E-13 2.92575E-12 1.07095E-11 3.60623E-11 1.11654E-10 + 3.17665E-10 8.29896E-10 1.98901E-09 4.36821E-09 8.77727E-09 1.61037E-08 + 2.69020E-08 4.07569E-08 5.56627E-08 6.78695E-08 7.26339E-08 6.59125E-08 + 4.63899E-08 1.67477E-08 -1.67477E-08 -4.63899E-08 -6.59125E-08 -7.26339E-08 + -6.78695E-08 -5.56627E-08 -4.07569E-08 -2.69020E-08 -1.61037E-08 -8.77727E-09 + -4.36821E-09 -1.98901E-09 -8.29896E-10 -3.17665E-10 -1.11654E-10 -3.60623E-11 + -1.07095E-11 -2.92575E-12 -7.35583E-13 -1.70256E-13 + 3.63113E-14 1.56881E-13 6.23987E-13 2.28407E-12 7.69115E-12 2.38128E-11 + 6.77497E-11 1.76995E-10 4.24205E-10 9.31626E-10 1.87196E-09 3.43449E-09 + 5.73750E-09 8.69240E-09 1.18714E-08 1.44748E-08 1.54909E-08 1.40574E-08 + 9.89376E-09 3.57184E-09 -3.57184E-09 -9.89376E-09 -1.40574E-08 -1.54909E-08 + -1.44748E-08 -1.18714E-08 -8.69240E-09 -5.73750E-09 -3.43449E-09 -1.87196E-09 + -9.31626E-10 -4.24205E-10 -1.76995E-10 -6.77497E-11 -2.38128E-11 -7.69115E-12 + -2.28407E-12 -6.23987E-13 -1.56881E-13 -3.63113E-14 + 6.93097E-15 2.99449E-14 1.19105E-13 4.35975E-13 1.46806E-12 4.54531E-12 + 1.29318E-11 3.37843E-11 8.09709E-11 1.77826E-10 3.57314E-10 6.55565E-10 + 1.09515E-09 1.65918E-09 2.26598E-09 2.76291E-09 2.95686E-09 2.68324E-09 + 1.88849E-09 6.81782E-10 -6.81782E-10 -1.88849E-09 -2.68324E-09 -2.95686E-09 + -2.76291E-09 -2.26598E-09 -1.65918E-09 -1.09515E-09 -6.55565E-10 -3.57314E-10 + -1.77826E-10 -8.09709E-11 -3.37843E-11 -1.29318E-11 -4.54531E-12 -1.46806E-12 + -4.35975E-13 -1.19105E-13 -2.99449E-14 -6.93097E-15 + 1.18431E-15 5.11674E-15 2.03516E-14 7.44959E-14 2.50851E-13 7.76666E-13 + 2.20969E-12 5.77279E-12 1.38357E-11 3.03854E-11 6.10550E-11 1.12018E-10 + 1.87131E-10 2.83507E-10 3.87192E-10 4.72103E-10 5.05244E-10 4.58490E-10 + 3.22690E-10 1.16497E-10 -1.16497E-10 -3.22690E-10 -4.58490E-10 -5.05244E-10 + -4.72103E-10 -3.87192E-10 -2.83507E-10 -1.87131E-10 -1.12018E-10 -6.10550E-11 + -3.03854E-11 -1.38357E-11 -5.77279E-12 -2.20969E-12 -7.76666E-13 -2.50851E-13 + -7.44959E-14 -2.03516E-14 -5.11674E-15 -1.18431E-15 + 1.81097E-16 7.82419E-16 3.11204E-15 1.13914E-14 3.83584E-14 1.18763E-13 + 3.37891E-13 8.82736E-13 2.11566E-12 4.64634E-12 9.33613E-12 1.71290E-11 + 2.86149E-11 4.33520E-11 5.92068E-11 7.21909E-11 7.72586E-11 7.01092E-11 + 4.93436E-11 1.78140E-11 -1.78140E-11 -4.93436E-11 -7.01092E-11 -7.72586E-11 + -7.21909E-11 -5.92068E-11 -4.33520E-11 -2.86149E-11 -1.71290E-11 -9.33613E-12 + -4.64634E-12 -2.11566E-12 -8.82736E-13 -3.37891E-13 -1.18763E-13 -3.83584E-14 + -1.13914E-14 -3.11204E-15 -7.82419E-16 -1.81097E-16 + 2.47607E-17 1.06977E-16 4.25498E-16 1.55751E-15 5.24462E-15 1.62380E-14 + 4.61987E-14 1.20694E-13 2.89266E-13 6.35278E-13 1.27650E-12 2.34199E-12 + 3.91241E-12 5.92737E-12 8.09514E-12 9.87041E-12 1.05633E-11 9.58579E-12 + 6.74658E-12 2.43565E-12 -2.43565E-12 -6.74658E-12 -9.58579E-12 -1.05633E-11 + -9.87041E-12 -8.09514E-12 -5.92737E-12 -3.91241E-12 -2.34199E-12 -1.27650E-12 + -6.35278E-13 -2.89266E-13 -1.20694E-13 -4.61987E-14 -1.62380E-14 -5.24462E-15 + -1.55751E-15 -4.25498E-16 -1.06977E-16 -2.47607E-17 + -6.12729E-18 -2.64726E-17 -1.05294E-16 -3.85421E-16 -1.29783E-15 -4.01826E-15 + -1.14323E-14 -2.98668E-14 -7.15818E-14 -1.57206E-13 -3.15882E-13 -5.79548E-13 + -9.68165E-13 -1.46679E-12 -2.00322E-12 -2.44253E-12 -2.61399E-12 -2.37210E-12 + -1.66951E-12 -6.02725E-13 6.02725E-13 1.66951E-12 2.37210E-12 2.61399E-12 + 2.44253E-12 2.00322E-12 1.46679E-12 9.68165E-13 5.79548E-13 3.15882E-13 + 1.57206E-13 7.15818E-14 2.98668E-14 1.14323E-14 4.01826E-15 1.29783E-15 + 3.85421E-16 1.05294E-16 2.64726E-17 6.12729E-18 + -4.62146E-17 -1.99668E-16 -7.94170E-16 -2.90701E-15 -9.78880E-15 -3.03074E-14 + -8.62274E-14 -2.25268E-13 -5.39901E-13 -1.18571E-12 -2.38251E-12 -4.37120E-12 + -7.30231E-12 -1.10631E-11 -1.51092E-11 -1.84226E-11 -1.97158E-11 -1.78914E-11 + -1.25921E-11 -4.54601E-12 4.54601E-12 1.25921E-11 1.78914E-11 1.97158E-11 + 1.84226E-11 1.51092E-11 1.10631E-11 7.30231E-12 4.37120E-12 2.38251E-12 + 1.18571E-12 5.39901E-13 2.25268E-13 8.62274E-14 3.03074E-14 9.78880E-15 + 2.90701E-15 7.94170E-16 1.99668E-16 4.62146E-17 + -3.12044E-16 -1.34817E-15 -5.36229E-15 -1.96283E-14 -6.60947E-14 -2.04638E-13 + -5.82213E-13 -1.52103E-12 -3.64545E-12 -8.00601E-12 -1.60869E-11 -2.95146E-11 + -4.93057E-11 -7.46990E-11 -1.02018E-10 -1.24391E-10 -1.33123E-10 -1.20804E-10 + -8.50230E-11 -3.06950E-11 3.06950E-11 8.50230E-11 1.20804E-10 1.33123E-10 + 1.24391E-10 1.02018E-10 7.46990E-11 4.93057E-11 2.95146E-11 1.60869E-11 + 8.00601E-12 3.64545E-12 1.52103E-12 5.82213E-13 2.04638E-13 6.60947E-14 + 1.96283E-14 5.36229E-15 1.34817E-15 3.12044E-16 + -1.88583E-15 -8.14763E-15 -3.24068E-14 -1.18623E-13 -3.99441E-13 -1.23672E-12 + -3.51859E-12 -9.19227E-12 -2.20311E-11 -4.83841E-11 -9.72207E-11 -1.78371E-10 + -2.97978E-10 -4.51441E-10 -6.16543E-10 -7.51751E-10 -8.04523E-10 -7.30074E-10 + -5.13834E-10 -1.85504E-10 1.85504E-10 5.13834E-10 7.30074E-10 8.04523E-10 + 7.51751E-10 6.16543E-10 4.51441E-10 2.97978E-10 1.78371E-10 9.72207E-11 + 4.83841E-11 2.20311E-11 9.19227E-12 3.51859E-12 1.23672E-12 3.99441E-13 + 1.18623E-13 3.24068E-14 8.14763E-15 1.88583E-15 + -1.01936E-14 -4.40408E-14 -1.75171E-13 -6.41201E-13 -2.15912E-12 -6.68492E-12 + -1.90192E-11 -4.96875E-11 -1.19086E-10 -2.61533E-10 -5.25513E-10 -9.64158E-10 + -1.61068E-09 -2.44020E-09 -3.33264E-09 -4.06349E-09 -4.34874E-09 -3.94631E-09 + -2.77746E-09 -1.00272E-09 1.00272E-09 2.77746E-09 3.94631E-09 4.34874E-09 + 4.06349E-09 3.33264E-09 2.44020E-09 1.61068E-09 9.64158E-10 5.25513E-10 + 2.61533E-10 1.19086E-10 4.96875E-11 1.90192E-11 6.68492E-12 2.15912E-12 + 6.41201E-13 1.75171E-13 4.40408E-14 1.01936E-14 + -4.92244E-14 -2.12671E-13 -8.45892E-13 -3.09633E-12 -1.04263E-11 -3.22812E-11 + -9.18430E-11 -2.39939E-10 -5.75062E-10 -1.26293E-09 -2.53768E-09 -4.65588E-09 + -7.77789E-09 -1.17836E-08 -1.60932E-08 -1.96224E-08 -2.09999E-08 -1.90566E-08 + -1.34122E-08 -4.84208E-09 4.84208E-09 1.34122E-08 1.90566E-08 2.09999E-08 + 1.96224E-08 1.60932E-08 1.17836E-08 7.77789E-09 4.65588E-09 2.53768E-09 + 1.26293E-09 5.75062E-10 2.39939E-10 9.18430E-11 3.22812E-11 1.04263E-11 + 3.09633E-12 8.45892E-13 2.12671E-13 4.92244E-14 + -2.12034E-13 -9.16083E-13 -3.64368E-12 -1.33375E-11 -4.49114E-11 -1.39051E-10 + -3.95614E-10 -1.03354E-09 -2.47708E-09 -5.44009E-09 -1.09311E-08 -2.00552E-08 + -3.35033E-08 -5.07580E-08 -6.93214E-08 -8.45236E-08 -9.04570E-08 -8.20863E-08 + -5.77732E-08 -2.08573E-08 2.08573E-08 5.77732E-08 8.20863E-08 9.04570E-08 + 8.45236E-08 6.93214E-08 5.07580E-08 3.35033E-08 2.00552E-08 1.09311E-08 + 5.44009E-09 2.47708E-09 1.03354E-09 3.95614E-10 1.39051E-10 4.49114E-11 + 1.33375E-11 3.64368E-12 9.16083E-13 2.12034E-13 + -8.13309E-13 -3.51386E-12 -1.39762E-11 -5.11591E-11 -1.72269E-10 -5.33366E-10 + -1.51748E-09 -3.96439E-09 -9.50146E-09 -2.08668E-08 -4.19288E-08 -7.69267E-08 + -1.28510E-07 -1.94695E-07 -2.65899E-07 -3.24211E-07 -3.46970E-07 -3.14862E-07 + -2.21603E-07 -8.00031E-08 8.00031E-08 2.21603E-07 3.14862E-07 3.46970E-07 + 3.24211E-07 2.65899E-07 1.94695E-07 1.28510E-07 7.69267E-08 4.19288E-08 + 2.08668E-08 9.50146E-09 3.96439E-09 1.51748E-09 5.33366E-10 1.72269E-10 + 5.11591E-11 1.39762E-11 3.51386E-12 8.13309E-13 + -2.77291E-12 -1.19802E-11 -4.76507E-11 -1.74423E-10 -5.87335E-10 -1.81846E-09 + -5.17370E-09 -1.35162E-08 -3.23944E-08 -7.11435E-08 -1.42952E-07 -2.62275E-07 + -4.38144E-07 -6.63795E-07 -9.06559E-07 -1.10537E-06 -1.18296E-06 -1.07349E-06 + -7.55537E-07 -2.72764E-07 2.72764E-07 7.55537E-07 1.07349E-06 1.18296E-06 + 1.10537E-06 9.06559E-07 6.63795E-07 4.38144E-07 2.62275E-07 1.42952E-07 + 7.11435E-08 3.23944E-08 1.35162E-08 5.17370E-09 1.81846E-09 5.87335E-10 + 1.74423E-10 4.76507E-11 1.19802E-11 2.77291E-12 + -8.38743E-12 -3.62374E-11 -1.44133E-10 -5.27590E-10 -1.77656E-09 -5.50045E-09 + -1.56493E-08 -4.08836E-08 -9.79858E-08 -2.15193E-07 -4.32399E-07 -7.93323E-07 + -1.32529E-06 -2.00783E-06 -2.74214E-06 -3.34349E-06 -3.57820E-06 -3.24708E-06 + -2.28533E-06 -8.25049E-07 8.25049E-07 2.28533E-06 3.24708E-06 3.57820E-06 + 3.34349E-06 2.74214E-06 2.00783E-06 1.32529E-06 7.93323E-07 4.32399E-07 + 2.15193E-07 9.79858E-08 4.08836E-08 1.56493E-08 5.50045E-09 1.77656E-09 + 5.27590E-10 1.44133E-10 3.62374E-11 8.38743E-12 + -2.24644E-11 -9.70561E-11 -3.86037E-10 -1.41306E-09 -4.75822E-09 -1.47321E-08 + -4.19141E-08 -1.09500E-07 -2.62439E-07 -5.76360E-07 -1.15811E-06 -2.12479E-06 + -3.54957E-06 -5.37765E-06 -7.34438E-06 -8.95500E-06 -9.58363E-06 -8.69679E-06 + -6.12090E-06 -2.20977E-06 2.20977E-06 6.12090E-06 8.69679E-06 9.58363E-06 + 8.95500E-06 7.34438E-06 5.37765E-06 3.54957E-06 2.12479E-06 1.15811E-06 + 5.76360E-07 2.62439E-07 1.09500E-07 4.19141E-08 1.47321E-08 4.75822E-09 + 1.41306E-09 3.86037E-10 9.70561E-11 2.24644E-11 + -5.31640E-11 -2.29692E-10 -9.13592E-10 -3.34415E-09 -1.12608E-08 -3.48648E-08 + -9.91936E-08 -2.59142E-07 -6.21087E-07 -1.36401E-06 -2.74078E-06 -5.02851E-06 + -8.40038E-06 -1.27267E-05 -1.73812E-05 -2.11929E-05 -2.26807E-05 -2.05820E-05 + -1.44859E-05 -5.22974E-06 5.22974E-06 1.44859E-05 2.05820E-05 2.26807E-05 + 2.11929E-05 1.73812E-05 1.27267E-05 8.40038E-06 5.02851E-06 2.74078E-06 + 1.36401E-06 6.21087E-07 2.59142E-07 9.91936E-08 3.48648E-08 1.12608E-08 + 3.34415E-09 9.13592E-10 2.29692E-10 5.31640E-11 + -1.10896E-10 -4.79119E-10 -1.90568E-09 -6.97561E-09 -2.34890E-08 -7.27251E-08 + -2.06910E-07 -5.40550E-07 -1.29554E-06 -2.84522E-06 -5.71704E-06 -1.04891E-05 + -1.75225E-05 -2.65469E-05 -3.62557E-05 -4.42069E-05 -4.73111E-05 -4.29349E-05 + -3.02198E-05 -1.09104E-05 1.09104E-05 3.02198E-05 4.29349E-05 4.73111E-05 + 4.42069E-05 3.62557E-05 2.65469E-05 1.75225E-05 1.04891E-05 5.71704E-06 + 2.84522E-06 1.29554E-06 5.40550E-07 2.06910E-07 7.27251E-08 2.34890E-08 + 6.97561E-09 1.90568E-09 4.79119E-10 1.10896E-10 + -2.03204E-10 -8.77934E-10 -3.49195E-09 -1.27821E-08 -4.30411E-08 -1.33261E-07 + -3.79139E-07 -9.90498E-07 -2.37393E-06 -5.21355E-06 -1.04759E-05 -1.92201E-05 + -3.21081E-05 -4.86443E-05 -6.64351E-05 -8.10067E-05 -8.67007E-05 -7.86919E-05 + -5.53982E-05 -2.00038E-05 2.00038E-05 5.53982E-05 7.86919E-05 8.67007E-05 + 8.10067E-05 6.64351E-05 4.86443E-05 3.21081E-05 1.92201E-05 1.04759E-05 + 5.21355E-06 2.37393E-06 9.90498E-07 3.79139E-07 1.33261E-07 4.30411E-08 + 1.27821E-08 3.49195E-09 8.77934E-10 2.03204E-10 + -3.25451E-10 -1.40609E-09 -5.59268E-09 -2.04716E-08 -6.89343E-08 -2.13430E-07 + -6.07227E-07 -1.58637E-06 -3.80207E-06 -8.34998E-06 -1.67781E-05 -3.07827E-05 + -5.14241E-05 -7.79086E-05 -1.06403E-04 -1.29748E-04 -1.38888E-04 -1.26096E-04 + -8.88079E-05 -3.20782E-05 3.20782E-05 8.88079E-05 1.26096E-04 1.38888E-04 + 1.29748E-04 1.06403E-04 7.79086E-05 5.14241E-05 3.07827E-05 1.67781E-05 + 8.34998E-06 3.80207E-06 1.58637E-06 6.07227E-07 2.13430E-07 6.89343E-08 + 2.04716E-08 5.59268E-09 1.40609E-09 3.25451E-10 + -4.51762E-10 -1.95181E-09 -7.76325E-09 -2.84169E-08 -9.56884E-08 -2.96264E-07 + -8.42898E-07 -2.20206E-06 -5.27769E-06 -1.15907E-05 -2.32898E-05 -4.27298E-05 + -7.13823E-05 -1.08146E-04 -1.47702E-04 -1.80116E-04 -1.92834E-04 -1.75131E-04 + -1.23398E-04 -4.45883E-05 4.45883E-05 1.23398E-04 1.75131E-04 1.92834E-04 + 1.80116E-04 1.47702E-04 1.08146E-04 7.13823E-05 4.27298E-05 2.32898E-05 + 1.15907E-05 5.27769E-06 2.20206E-06 8.42898E-07 2.96264E-07 9.56884E-08 + 2.84169E-08 7.76325E-09 1.95181E-09 4.51762E-10 + -5.35068E-10 -2.31173E-09 -9.19483E-09 -3.36571E-08 -1.13334E-07 -3.50896E-07 + -9.98332E-07 -2.60813E-06 -6.25092E-06 -1.37281E-05 -2.75845E-05 -5.06093E-05 + -8.45456E-05 -1.28089E-04 -1.74939E-04 -2.13333E-04 -2.28402E-04 -2.07445E-04 + -1.46177E-04 -5.28220E-05 5.28220E-05 1.46177E-04 2.07445E-04 2.28402E-04 + 2.13333E-04 1.74939E-04 1.28089E-04 8.45456E-05 5.06093E-05 2.75845E-05 + 1.37281E-05 6.25092E-06 2.60813E-06 9.98332E-07 3.50896E-07 1.13334E-07 + 3.36571E-08 9.19483E-09 2.31173E-09 5.35068E-10 + -5.23118E-10 -2.26011E-09 -8.98948E-09 -3.29054E-08 -1.10803E-07 -3.43059E-07 + -9.76036E-07 -2.54988E-06 -6.11131E-06 -1.34215E-05 -2.69685E-05 -4.94790E-05 + -8.26573E-05 -1.25228E-04 -1.71030E-04 -2.08557E-04 -2.23261E-04 -2.02723E-04 + -1.42799E-04 -5.15868E-05 5.15868E-05 1.42799E-04 2.02723E-04 2.23261E-04 + 2.08557E-04 1.71030E-04 1.25228E-04 8.26573E-05 4.94790E-05 2.69685E-05 + 1.34215E-05 6.11131E-06 2.54988E-06 9.76036E-07 3.43059E-07 1.10803E-07 + 3.29054E-08 8.98948E-09 2.26011E-09 5.23118E-10 + -3.86620E-10 -1.67037E-09 -6.64384E-09 -2.43194E-08 -8.18908E-08 -2.53544E-07 + -7.21357E-07 -1.88454E-06 -4.51668E-06 -9.91939E-06 -1.99315E-05 -3.65684E-05 + -6.10894E-05 -9.25517E-05 -1.26401E-04 -1.54128E-04 -1.64971E-04 -1.49750E-04 + -1.05440E-04 -3.80783E-05 3.80783E-05 1.05440E-04 1.49750E-04 1.64971E-04 + 1.54128E-04 1.26401E-04 9.25517E-05 6.10894E-05 3.65684E-05 1.99315E-05 + 9.91939E-06 4.51668E-06 1.88454E-06 7.21357E-07 2.53544E-07 8.18908E-08 + 2.43194E-08 6.64384E-09 1.67037E-09 3.86620E-10 + -1.42995E-10 -6.17801E-10 -2.45728E-09 -8.99472E-09 -3.02880E-08 -9.37755E-08 + -2.66800E-07 -6.97012E-07 -1.67053E-06 -3.66877E-06 -7.37185E-06 -1.35251E-05 + -2.25944E-05 -3.42310E-05 -4.67502E-05 -5.70038E-05 -6.10095E-05 -5.53717E-05 + -3.89790E-05 -1.40744E-05 1.40744E-05 3.89790E-05 5.53717E-05 6.10095E-05 + 5.70038E-05 4.67502E-05 3.42310E-05 2.25944E-05 1.35251E-05 7.37185E-06 + 3.66877E-06 1.67053E-06 6.97012E-07 2.66800E-07 9.37755E-08 3.02880E-08 + 8.99472E-09 2.45728E-09 6.17801E-10 1.42995E-10 + 1.42995E-10 6.17801E-10 2.45728E-09 8.99472E-09 3.02880E-08 9.37755E-08 + 2.66800E-07 6.97012E-07 1.67053E-06 3.66877E-06 7.37185E-06 1.35251E-05 + 2.25944E-05 3.42310E-05 4.67502E-05 5.70038E-05 6.10095E-05 5.53717E-05 + 3.89790E-05 1.40744E-05 -1.40744E-05 -3.89790E-05 -5.53717E-05 -6.10095E-05 + -5.70038E-05 -4.67502E-05 -3.42310E-05 -2.25944E-05 -1.35251E-05 -7.37185E-06 + -3.66877E-06 -1.67053E-06 -6.97012E-07 -2.66800E-07 -9.37755E-08 -3.02880E-08 + -8.99472E-09 -2.45728E-09 -6.17801E-10 -1.42995E-10 + 3.86620E-10 1.67037E-09 6.64384E-09 2.43194E-08 8.18908E-08 2.53544E-07 + 7.21357E-07 1.88454E-06 4.51668E-06 9.91939E-06 1.99315E-05 3.65684E-05 + 6.10894E-05 9.25517E-05 1.26401E-04 1.54128E-04 1.64971E-04 1.49750E-04 + 1.05440E-04 3.80783E-05 -3.80783E-05 -1.05440E-04 -1.49750E-04 -1.64971E-04 + -1.54128E-04 -1.26401E-04 -9.25517E-05 -6.10894E-05 -3.65684E-05 -1.99315E-05 + -9.91939E-06 -4.51668E-06 -1.88454E-06 -7.21357E-07 -2.53544E-07 -8.18908E-08 + -2.43194E-08 -6.64384E-09 -1.67037E-09 -3.86620E-10 + 5.23118E-10 2.26011E-09 8.98948E-09 3.29054E-08 1.10803E-07 3.43059E-07 + 9.76036E-07 2.54988E-06 6.11131E-06 1.34215E-05 2.69685E-05 4.94790E-05 + 8.26573E-05 1.25228E-04 1.71030E-04 2.08557E-04 2.23261E-04 2.02723E-04 + 1.42799E-04 5.15868E-05 -5.15868E-05 -1.42799E-04 -2.02723E-04 -2.23261E-04 + -2.08557E-04 -1.71030E-04 -1.25228E-04 -8.26573E-05 -4.94790E-05 -2.69685E-05 + -1.34215E-05 -6.11131E-06 -2.54988E-06 -9.76036E-07 -3.43059E-07 -1.10803E-07 + -3.29054E-08 -8.98948E-09 -2.26011E-09 -5.23118E-10 + 5.35068E-10 2.31173E-09 9.19483E-09 3.36571E-08 1.13334E-07 3.50896E-07 + 9.98332E-07 2.60813E-06 6.25092E-06 1.37281E-05 2.75845E-05 5.06093E-05 + 8.45456E-05 1.28089E-04 1.74939E-04 2.13333E-04 2.28402E-04 2.07445E-04 + 1.46177E-04 5.28220E-05 -5.28220E-05 -1.46177E-04 -2.07445E-04 -2.28402E-04 + -2.13333E-04 -1.74939E-04 -1.28089E-04 -8.45456E-05 -5.06093E-05 -2.75845E-05 + -1.37281E-05 -6.25092E-06 -2.60813E-06 -9.98332E-07 -3.50896E-07 -1.13334E-07 + -3.36571E-08 -9.19483E-09 -2.31173E-09 -5.35068E-10 + 4.51762E-10 1.95181E-09 7.76325E-09 2.84169E-08 9.56884E-08 2.96264E-07 + 8.42898E-07 2.20206E-06 5.27769E-06 1.15907E-05 2.32898E-05 4.27298E-05 + 7.13823E-05 1.08146E-04 1.47702E-04 1.80116E-04 1.92834E-04 1.75131E-04 + 1.23398E-04 4.45883E-05 -4.45883E-05 -1.23398E-04 -1.75131E-04 -1.92834E-04 + -1.80116E-04 -1.47702E-04 -1.08146E-04 -7.13823E-05 -4.27298E-05 -2.32898E-05 + -1.15907E-05 -5.27769E-06 -2.20206E-06 -8.42898E-07 -2.96264E-07 -9.56884E-08 + -2.84169E-08 -7.76325E-09 -1.95181E-09 -4.51762E-10 + 3.25451E-10 1.40609E-09 5.59268E-09 2.04716E-08 6.89343E-08 2.13430E-07 + 6.07227E-07 1.58637E-06 3.80207E-06 8.34998E-06 1.67781E-05 3.07827E-05 + 5.14241E-05 7.79086E-05 1.06403E-04 1.29748E-04 1.38888E-04 1.26096E-04 + 8.88079E-05 3.20782E-05 -3.20782E-05 -8.88079E-05 -1.26096E-04 -1.38888E-04 + -1.29748E-04 -1.06403E-04 -7.79086E-05 -5.14241E-05 -3.07827E-05 -1.67781E-05 + -8.34998E-06 -3.80207E-06 -1.58637E-06 -6.07227E-07 -2.13430E-07 -6.89343E-08 + -2.04716E-08 -5.59268E-09 -1.40609E-09 -3.25451E-10 + 2.03204E-10 8.77934E-10 3.49195E-09 1.27821E-08 4.30411E-08 1.33261E-07 + 3.79139E-07 9.90498E-07 2.37393E-06 5.21355E-06 1.04759E-05 1.92201E-05 + 3.21081E-05 4.86443E-05 6.64351E-05 8.10067E-05 8.67007E-05 7.86919E-05 + 5.53982E-05 2.00038E-05 -2.00038E-05 -5.53982E-05 -7.86919E-05 -8.67007E-05 + -8.10067E-05 -6.64351E-05 -4.86443E-05 -3.21081E-05 -1.92201E-05 -1.04759E-05 + -5.21355E-06 -2.37393E-06 -9.90498E-07 -3.79139E-07 -1.33261E-07 -4.30411E-08 + -1.27821E-08 -3.49195E-09 -8.77934E-10 -2.03204E-10 + 1.10896E-10 4.79119E-10 1.90568E-09 6.97561E-09 2.34890E-08 7.27251E-08 + 2.06910E-07 5.40550E-07 1.29554E-06 2.84522E-06 5.71704E-06 1.04891E-05 + 1.75225E-05 2.65469E-05 3.62557E-05 4.42069E-05 4.73111E-05 4.29349E-05 + 3.02198E-05 1.09104E-05 -1.09104E-05 -3.02198E-05 -4.29349E-05 -4.73111E-05 + -4.42069E-05 -3.62557E-05 -2.65469E-05 -1.75225E-05 -1.04891E-05 -5.71704E-06 + -2.84522E-06 -1.29554E-06 -5.40550E-07 -2.06910E-07 -7.27251E-08 -2.34890E-08 + -6.97561E-09 -1.90568E-09 -4.79119E-10 -1.10896E-10 + 5.31640E-11 2.29692E-10 9.13592E-10 3.34415E-09 1.12608E-08 3.48648E-08 + 9.91936E-08 2.59142E-07 6.21087E-07 1.36401E-06 2.74078E-06 5.02851E-06 + 8.40038E-06 1.27267E-05 1.73812E-05 2.11929E-05 2.26807E-05 2.05820E-05 + 1.44859E-05 5.22974E-06 -5.22974E-06 -1.44859E-05 -2.05820E-05 -2.26807E-05 + -2.11929E-05 -1.73812E-05 -1.27267E-05 -8.40038E-06 -5.02851E-06 -2.74078E-06 + -1.36401E-06 -6.21087E-07 -2.59142E-07 -9.91936E-08 -3.48648E-08 -1.12608E-08 + -3.34415E-09 -9.13592E-10 -2.29692E-10 -5.31640E-11 + 2.24644E-11 9.70561E-11 3.86037E-10 1.41306E-09 4.75822E-09 1.47321E-08 + 4.19141E-08 1.09500E-07 2.62439E-07 5.76360E-07 1.15811E-06 2.12479E-06 + 3.54957E-06 5.37765E-06 7.34438E-06 8.95500E-06 9.58363E-06 8.69679E-06 + 6.12090E-06 2.20977E-06 -2.20977E-06 -6.12090E-06 -8.69679E-06 -9.58363E-06 + -8.95500E-06 -7.34438E-06 -5.37765E-06 -3.54957E-06 -2.12479E-06 -1.15811E-06 + -5.76360E-07 -2.62439E-07 -1.09500E-07 -4.19141E-08 -1.47321E-08 -4.75822E-09 + -1.41306E-09 -3.86037E-10 -9.70561E-11 -2.24644E-11 + 8.38743E-12 3.62374E-11 1.44133E-10 5.27590E-10 1.77656E-09 5.50045E-09 + 1.56493E-08 4.08836E-08 9.79858E-08 2.15193E-07 4.32399E-07 7.93323E-07 + 1.32529E-06 2.00783E-06 2.74214E-06 3.34349E-06 3.57820E-06 3.24708E-06 + 2.28533E-06 8.25049E-07 -8.25049E-07 -2.28533E-06 -3.24708E-06 -3.57820E-06 + -3.34349E-06 -2.74214E-06 -2.00783E-06 -1.32529E-06 -7.93323E-07 -4.32399E-07 + -2.15193E-07 -9.79858E-08 -4.08836E-08 -1.56493E-08 -5.50045E-09 -1.77656E-09 + -5.27590E-10 -1.44133E-10 -3.62374E-11 -8.38743E-12 + 2.77291E-12 1.19802E-11 4.76507E-11 1.74423E-10 5.87335E-10 1.81846E-09 + 5.17370E-09 1.35162E-08 3.23944E-08 7.11435E-08 1.42952E-07 2.62275E-07 + 4.38144E-07 6.63795E-07 9.06559E-07 1.10537E-06 1.18296E-06 1.07349E-06 + 7.55537E-07 2.72764E-07 -2.72764E-07 -7.55537E-07 -1.07349E-06 -1.18296E-06 + -1.10537E-06 -9.06559E-07 -6.63795E-07 -4.38144E-07 -2.62275E-07 -1.42952E-07 + -7.11435E-08 -3.23944E-08 -1.35162E-08 -5.17370E-09 -1.81846E-09 -5.87335E-10 + -1.74423E-10 -4.76507E-11 -1.19802E-11 -2.77291E-12 + 8.13309E-13 3.51386E-12 1.39762E-11 5.11591E-11 1.72269E-10 5.33366E-10 + 1.51748E-09 3.96439E-09 9.50146E-09 2.08668E-08 4.19288E-08 7.69267E-08 + 1.28510E-07 1.94695E-07 2.65899E-07 3.24211E-07 3.46970E-07 3.14862E-07 + 2.21603E-07 8.00031E-08 -8.00031E-08 -2.21603E-07 -3.14862E-07 -3.46970E-07 + -3.24211E-07 -2.65899E-07 -1.94695E-07 -1.28510E-07 -7.69267E-08 -4.19288E-08 + -2.08668E-08 -9.50146E-09 -3.96439E-09 -1.51748E-09 -5.33366E-10 -1.72269E-10 + -5.11591E-11 -1.39762E-11 -3.51386E-12 -8.13309E-13 + 2.12034E-13 9.16083E-13 3.64368E-12 1.33375E-11 4.49114E-11 1.39051E-10 + 3.95614E-10 1.03354E-09 2.47708E-09 5.44009E-09 1.09311E-08 2.00552E-08 + 3.35033E-08 5.07580E-08 6.93214E-08 8.45236E-08 9.04570E-08 8.20863E-08 + 5.77732E-08 2.08573E-08 -2.08573E-08 -5.77732E-08 -8.20863E-08 -9.04570E-08 + -8.45236E-08 -6.93214E-08 -5.07580E-08 -3.35033E-08 -2.00552E-08 -1.09311E-08 + -5.44009E-09 -2.47708E-09 -1.03354E-09 -3.95614E-10 -1.39051E-10 -4.49114E-11 + -1.33375E-11 -3.64368E-12 -9.16083E-13 -2.12034E-13 + 4.92244E-14 2.12671E-13 8.45892E-13 3.09633E-12 1.04263E-11 3.22812E-11 + 9.18430E-11 2.39939E-10 5.75062E-10 1.26293E-09 2.53768E-09 4.65588E-09 + 7.77789E-09 1.17836E-08 1.60932E-08 1.96224E-08 2.09999E-08 1.90566E-08 + 1.34122E-08 4.84208E-09 -4.84208E-09 -1.34122E-08 -1.90566E-08 -2.09999E-08 + -1.96224E-08 -1.60932E-08 -1.17836E-08 -7.77789E-09 -4.65588E-09 -2.53768E-09 + -1.26293E-09 -5.75062E-10 -2.39939E-10 -9.18430E-11 -3.22812E-11 -1.04263E-11 + -3.09633E-12 -8.45892E-13 -2.12671E-13 -4.92244E-14 + 1.01936E-14 4.40408E-14 1.75171E-13 6.41201E-13 2.15912E-12 6.68492E-12 + 1.90192E-11 4.96875E-11 1.19086E-10 2.61533E-10 5.25513E-10 9.64158E-10 + 1.61068E-09 2.44020E-09 3.33264E-09 4.06349E-09 4.34874E-09 3.94631E-09 + 2.77746E-09 1.00272E-09 -1.00272E-09 -2.77746E-09 -3.94631E-09 -4.34874E-09 + -4.06349E-09 -3.33264E-09 -2.44020E-09 -1.61068E-09 -9.64158E-10 -5.25513E-10 + -2.61533E-10 -1.19086E-10 -4.96875E-11 -1.90192E-11 -6.68492E-12 -2.15912E-12 + -6.41201E-13 -1.75171E-13 -4.40408E-14 -1.01936E-14 + 1.88583E-15 8.14763E-15 3.24068E-14 1.18623E-13 3.99441E-13 1.23672E-12 + 3.51859E-12 9.19227E-12 2.20311E-11 4.83841E-11 9.72207E-11 1.78371E-10 + 2.97978E-10 4.51441E-10 6.16543E-10 7.51751E-10 8.04523E-10 7.30074E-10 + 5.13834E-10 1.85504E-10 -1.85504E-10 -5.13834E-10 -7.30074E-10 -8.04523E-10 + -7.51751E-10 -6.16543E-10 -4.51441E-10 -2.97978E-10 -1.78371E-10 -9.72207E-11 + -4.83841E-11 -2.20311E-11 -9.19227E-12 -3.51859E-12 -1.23672E-12 -3.99441E-13 + -1.18623E-13 -3.24068E-14 -8.14763E-15 -1.88583E-15 + 3.12044E-16 1.34817E-15 5.36229E-15 1.96283E-14 6.60947E-14 2.04638E-13 + 5.82213E-13 1.52103E-12 3.64545E-12 8.00601E-12 1.60869E-11 2.95146E-11 + 4.93057E-11 7.46990E-11 1.02018E-10 1.24391E-10 1.33123E-10 1.20804E-10 + 8.50230E-11 3.06950E-11 -3.06950E-11 -8.50230E-11 -1.20804E-10 -1.33123E-10 + -1.24391E-10 -1.02018E-10 -7.46990E-11 -4.93057E-11 -2.95146E-11 -1.60869E-11 + -8.00601E-12 -3.64545E-12 -1.52103E-12 -5.82213E-13 -2.04638E-13 -6.60947E-14 + -1.96283E-14 -5.36229E-15 -1.34817E-15 -3.12044E-16 + 4.62146E-17 1.99668E-16 7.94170E-16 2.90701E-15 9.78880E-15 3.03074E-14 + 8.62274E-14 2.25268E-13 5.39901E-13 1.18571E-12 2.38251E-12 4.37120E-12 + 7.30231E-12 1.10631E-11 1.51092E-11 1.84226E-11 1.97158E-11 1.78914E-11 + 1.25921E-11 4.54601E-12 -4.54601E-12 -1.25921E-11 -1.78914E-11 -1.97158E-11 + -1.84226E-11 -1.51092E-11 -1.10631E-11 -7.30231E-12 -4.37120E-12 -2.38251E-12 + -1.18571E-12 -5.39901E-13 -2.25268E-13 -8.62274E-14 -3.03074E-14 -9.78880E-15 + -2.90701E-15 -7.94170E-16 -1.99668E-16 -4.62146E-17 + 6.12729E-18 2.64726E-17 1.05294E-16 3.85421E-16 1.29783E-15 4.01826E-15 + 1.14323E-14 2.98668E-14 7.15818E-14 1.57206E-13 3.15882E-13 5.79548E-13 + 9.68165E-13 1.46679E-12 2.00322E-12 2.44253E-12 2.61399E-12 2.37210E-12 + 1.66951E-12 6.02725E-13 -6.02725E-13 -1.66951E-12 -2.37210E-12 -2.61399E-12 + -2.44253E-12 -2.00322E-12 -1.46679E-12 -9.68165E-13 -5.79548E-13 -3.15882E-13 + -1.57206E-13 -7.15818E-14 -2.98668E-14 -1.14323E-14 -4.01826E-15 -1.29783E-15 + -3.85421E-16 -1.05294E-16 -2.64726E-17 -6.12729E-18 + -1.37552E-18 -5.94288E-18 -2.36376E-17 -8.65239E-17 -2.91352E-16 -9.02065E-16 + -2.56646E-15 -6.70485E-15 -1.60695E-14 -3.52914E-14 -7.09128E-14 -1.30104E-13 + -2.17345E-13 -3.29281E-13 -4.49707E-13 -5.48328E-13 -5.86819E-13 -5.32516E-13 + -3.74791E-13 -1.35307E-13 1.35307E-13 3.74791E-13 5.32516E-13 5.86819E-13 + 5.48328E-13 4.49707E-13 3.29281E-13 2.17345E-13 1.30104E-13 7.09128E-14 + 3.52914E-14 1.60695E-14 6.70485E-15 2.56646E-15 9.02065E-16 2.91352E-16 + 8.65239E-17 2.36376E-17 5.94288E-18 1.37552E-18 + -1.07140E-17 -4.62891E-17 -1.84113E-16 -6.73934E-16 -2.26934E-15 -7.02618E-15 + -1.99901E-14 -5.22240E-14 -1.25165E-13 -2.74884E-13 -5.52339E-13 -1.01338E-12 + -1.69290E-12 -2.56477E-12 -3.50276E-12 -4.27092E-12 -4.57073E-12 -4.14777E-12 + -2.91924E-12 -1.05390E-12 1.05390E-12 2.91924E-12 4.14777E-12 4.57073E-12 + 4.27092E-12 3.50276E-12 2.56477E-12 1.69290E-12 1.01338E-12 5.52339E-13 + 2.74884E-13 1.25165E-13 5.22240E-14 1.99901E-14 7.02618E-15 2.26934E-15 + 6.73934E-16 1.84113E-16 4.62891E-17 1.07140E-17 + -7.46467E-17 -3.22507E-16 -1.28276E-15 -4.69546E-15 -1.58111E-14 -4.89531E-14 + -1.39276E-13 -3.63857E-13 -8.72058E-13 -1.91519E-12 -3.84828E-12 -7.06045E-12 + -1.17948E-11 -1.78694E-11 -2.44046E-11 -2.97565E-11 -3.18454E-11 -2.88985E-11 + -2.03391E-11 -7.34280E-12 7.34280E-12 2.03391E-11 2.88985E-11 3.18454E-11 + 2.97565E-11 2.44046E-11 1.78694E-11 1.17948E-11 7.06045E-12 3.84828E-12 + 1.91519E-12 8.72058E-13 3.63857E-13 1.39276E-13 4.89531E-14 1.58111E-14 + 4.69546E-15 1.28276E-15 3.22507E-16 7.46467E-17 + -4.64690E-16 -2.00767E-15 -7.98543E-15 -2.92302E-14 -9.84269E-14 -3.04743E-13 + -8.67021E-13 -2.26508E-12 -5.42873E-12 -1.19224E-11 -2.39563E-11 -4.39526E-11 + -7.34252E-11 -1.11240E-10 -1.51923E-10 -1.85240E-10 -1.98244E-10 -1.79899E-10 + -1.26615E-10 -4.57104E-11 4.57104E-11 1.26615E-10 1.79899E-10 1.98244E-10 + 1.85240E-10 1.51923E-10 1.11240E-10 7.34252E-11 4.39526E-11 2.39563E-11 + 1.19224E-11 5.42873E-12 2.26508E-12 8.67021E-13 3.04743E-13 9.84269E-14 + 2.92302E-14 7.98543E-15 2.00767E-15 4.64690E-16 + -2.58093E-15 -1.11508E-14 -4.43517E-14 -1.62347E-13 -5.46671E-13 -1.69256E-12 + -4.81550E-12 -1.25805E-11 -3.01516E-11 -6.62180E-11 -1.33055E-10 -2.44116E-10 + -4.07809E-10 -6.17838E-10 -8.43795E-10 -1.02884E-09 -1.10106E-09 -9.99172E-10 + -7.03228E-10 -2.53879E-10 2.53879E-10 7.03228E-10 9.99172E-10 1.10106E-09 + 1.02884E-09 8.43795E-10 6.17838E-10 4.07809E-10 2.44116E-10 1.33055E-10 + 6.62180E-11 3.01516E-11 1.25805E-11 4.81550E-12 1.69256E-12 5.46671E-13 + 1.62347E-13 4.43517E-14 1.11508E-14 2.58093E-15 + -1.27682E-14 -5.51643E-14 -2.19414E-13 -8.03150E-13 -2.70445E-12 -8.37334E-12 + -2.38229E-11 -6.22372E-11 -1.49164E-10 -3.27589E-10 -6.58242E-10 -1.20768E-09 + -2.01749E-09 -3.05652E-09 -4.17436E-09 -5.08980E-09 -5.44710E-09 -4.94304E-09 + -3.47896E-09 -1.25597E-09 1.25597E-09 3.47896E-09 4.94304E-09 5.44710E-09 + 5.08980E-09 4.17436E-09 3.05652E-09 2.01749E-09 1.20768E-09 6.58242E-10 + 3.27589E-10 1.49164E-10 6.22372E-11 2.38229E-11 8.37334E-12 2.70445E-12 + 8.03150E-13 2.19414E-13 5.51643E-14 1.27682E-14 + -5.61664E-14 -2.42664E-13 -9.65185E-13 -3.53300E-12 -1.18967E-11 -3.68337E-11 + -1.04795E-10 -2.73777E-10 -6.56162E-10 -1.44104E-09 -2.89556E-09 -5.31248E-09 + -8.87478E-09 -1.34454E-08 -1.83627E-08 -2.23897E-08 -2.39614E-08 -2.17441E-08 + -1.53037E-08 -5.52494E-09 5.52494E-09 1.53037E-08 2.17441E-08 2.39614E-08 + 2.23897E-08 1.83627E-08 1.34454E-08 8.87478E-09 5.31248E-09 2.89556E-09 + 1.44104E-09 6.56162E-10 2.73777E-10 1.04795E-10 3.68337E-11 1.18967E-11 + 3.53300E-12 9.65185E-13 2.42664E-13 5.61664E-14 + -2.19319E-13 -9.47557E-13 -3.76887E-12 -1.37957E-11 -4.64544E-11 -1.43829E-10 + -4.09206E-10 -1.06905E-09 -2.56219E-09 -5.62700E-09 -1.13066E-08 -2.07443E-08 + -3.46544E-08 -5.25019E-08 -7.17031E-08 -8.74276E-08 -9.35649E-08 -8.49066E-08 + -5.97581E-08 -2.15739E-08 2.15739E-08 5.97581E-08 8.49066E-08 9.35649E-08 + 8.74276E-08 7.17031E-08 5.25019E-08 3.46544E-08 2.07443E-08 1.13066E-08 + 5.62700E-09 2.56219E-09 1.06905E-09 4.09206E-10 1.43829E-10 4.64544E-11 + 1.37957E-11 3.76887E-12 9.47557E-13 2.19319E-13 + -7.58959E-13 -3.27904E-12 -1.30423E-11 -4.77404E-11 -1.60757E-10 -4.97723E-10 + -1.41607E-09 -3.69946E-09 -8.86651E-09 -1.94724E-08 -3.91268E-08 -7.17860E-08 + -1.19922E-07 -1.81684E-07 -2.48130E-07 -3.02545E-07 -3.23783E-07 -2.93821E-07 + -2.06794E-07 -7.46568E-08 7.46568E-08 2.06794E-07 2.93821E-07 3.23783E-07 + 3.02545E-07 2.48130E-07 1.81684E-07 1.19922E-07 7.17860E-08 3.91268E-08 + 1.94724E-08 8.86651E-09 3.69946E-09 1.41607E-09 4.97723E-10 1.60757E-10 + 4.77404E-11 1.30423E-11 3.27904E-12 7.58959E-13 + -2.32388E-12 -1.00402E-11 -3.99344E-11 -1.46178E-10 -4.92225E-10 -1.52399E-09 + -4.33590E-09 -1.13275E-08 -2.71486E-08 -5.96229E-08 -1.19803E-07 -2.19803E-07 + -3.67193E-07 -5.56303E-07 -7.59756E-07 -9.26371E-07 -9.91401E-07 -8.99658E-07 + -6.33189E-07 -2.28594E-07 2.28594E-07 6.33189E-07 8.99658E-07 9.91401E-07 + 9.26371E-07 7.59756E-07 5.56303E-07 3.67193E-07 2.19803E-07 1.19803E-07 + 5.96229E-08 2.71486E-08 1.13275E-08 4.33590E-09 1.52399E-09 4.92225E-10 + 1.46178E-10 3.99344E-11 1.00402E-11 2.32388E-12 + -6.28590E-12 -2.71579E-11 -1.08019E-10 -3.95398E-10 -1.33143E-09 -4.12227E-09 + -1.17282E-08 -3.06399E-08 -7.34348E-08 -1.61275E-07 -3.24059E-07 -5.94550E-07 + -9.93227E-07 -1.50476E-06 -2.05508E-06 -2.50576E-06 -2.68166E-06 -2.43350E-06 + -1.71272E-06 -6.18327E-07 6.18327E-07 1.71272E-06 2.43350E-06 2.68166E-06 + 2.50576E-06 2.05508E-06 1.50476E-06 9.93227E-07 5.94550E-07 3.24059E-07 + 1.61275E-07 7.34348E-08 3.06399E-08 1.17282E-08 4.12227E-09 1.33143E-09 + 3.95398E-10 1.08019E-10 2.71579E-11 6.28590E-12 + -1.49941E-11 -6.47811E-11 -2.57664E-10 -9.43163E-10 -3.17592E-09 -9.83306E-09 + -2.79760E-08 -7.30869E-08 -1.75168E-07 -3.84698E-07 -7.72993E-07 -1.41821E-06 + -2.36919E-06 -3.58937E-06 -4.90208E-06 -5.97711E-06 -6.39669E-06 -5.80476E-06 + -4.08545E-06 -1.47493E-06 1.47493E-06 4.08545E-06 5.80476E-06 6.39669E-06 + 5.97711E-06 4.90208E-06 3.58937E-06 2.36919E-06 1.41821E-06 7.72993E-07 + 3.84698E-07 1.75168E-07 7.30869E-08 2.79760E-08 9.83306E-09 3.17592E-09 + 9.43163E-10 2.57664E-10 6.47811E-11 1.49941E-11 + -3.14721E-11 -1.35974E-10 -5.40830E-10 -1.97967E-09 -6.66617E-09 -2.06393E-08 + -5.87208E-08 -1.53408E-07 -3.67672E-07 -8.07470E-07 -1.62249E-06 -2.97679E-06 + -4.97287E-06 -7.53398E-06 -1.02893E-05 -1.25458E-05 -1.34265E-05 -1.21841E-05 + -8.57531E-06 -3.09586E-06 3.09586E-06 8.57531E-06 1.21841E-05 1.34265E-05 + 1.25458E-05 1.02893E-05 7.53398E-06 4.97287E-06 2.97679E-06 1.62249E-06 + 8.07470E-07 3.67672E-07 1.53408E-07 5.87208E-08 2.06393E-08 6.66617E-09 + 1.97967E-09 5.40830E-10 1.35974E-10 3.14721E-11 + -5.79512E-11 -2.50375E-10 -9.95856E-10 -3.64527E-09 -1.22747E-08 -3.80042E-08 + -1.08125E-07 -2.82477E-07 -6.77012E-07 -1.48683E-06 -2.98757E-06 -5.48130E-06 + -9.15679E-06 -1.38727E-05 -1.89463E-05 -2.31012E-05 -2.47230E-05 -2.24354E-05 + -1.57905E-05 -5.70076E-06 5.70076E-06 1.57905E-05 2.24354E-05 2.47230E-05 + 2.31012E-05 1.89463E-05 1.38727E-05 9.15679E-06 5.48130E-06 2.98757E-06 + 1.48683E-06 6.77012E-07 2.82477E-07 1.08125E-07 3.80042E-08 1.22747E-08 + 3.64527E-09 9.95856E-10 2.50375E-10 5.79512E-11 + -9.31638E-11 -4.02509E-10 -1.60096E-09 -5.86023E-09 -1.97332E-08 -6.10966E-08 + -1.73825E-07 -4.54117E-07 -1.08838E-06 -2.39027E-06 -4.80290E-06 -8.81188E-06 + -1.47207E-05 -2.23021E-05 -3.04585E-05 -3.71383E-05 -3.97459E-05 -3.60689E-05 + -2.53867E-05 -9.16540E-06 9.16540E-06 2.53867E-05 3.60689E-05 3.97459E-05 + 3.71383E-05 3.04585E-05 2.23021E-05 1.47207E-05 8.81188E-06 4.80290E-06 + 2.39027E-06 1.08838E-06 4.54117E-07 1.73825E-07 6.10966E-08 1.97332E-08 + 5.86023E-09 1.60096E-09 4.02509E-10 9.31638E-11 + -1.29691E-10 -5.60322E-10 -2.22866E-09 -8.15786E-09 -2.74700E-08 -8.50507E-08 + -2.41977E-07 -6.32163E-07 -1.51511E-06 -3.32743E-06 -6.68598E-06 -1.22668E-05 + -2.04923E-05 -3.10461E-05 -4.24005E-05 -5.16993E-05 -5.53298E-05 -5.02121E-05 + -3.53422E-05 -1.27599E-05 1.27599E-05 3.53422E-05 5.02121E-05 5.53298E-05 + 5.16993E-05 4.24005E-05 3.10461E-05 2.04923E-05 1.22668E-05 6.68598E-06 + 3.32743E-06 1.51511E-06 6.32163E-07 2.41977E-07 8.50507E-08 2.74700E-08 + 8.15786E-09 2.22866E-09 5.60322E-10 1.29691E-10 + -1.53929E-10 -6.65042E-10 -2.64518E-09 -9.68251E-09 -3.26040E-08 -1.00946E-07 + -2.87201E-07 -7.50310E-07 -1.79827E-06 -3.94930E-06 -7.93554E-06 -1.45593E-05 + -2.43221E-05 -3.68484E-05 -5.03248E-05 -6.13616E-05 -6.56707E-05 -5.95967E-05 + -4.19478E-05 -1.51448E-05 1.51448E-05 4.19478E-05 5.95967E-05 6.56707E-05 + 6.13616E-05 5.03248E-05 3.68484E-05 2.43221E-05 1.45593E-05 7.93554E-06 + 3.94930E-06 1.79827E-06 7.50310E-07 2.87201E-07 1.00946E-07 3.26040E-08 + 9.68251E-09 2.64518E-09 6.65042E-10 1.53929E-10 + -1.50713E-10 -6.51147E-10 -2.58991E-09 -9.48021E-09 -3.19228E-08 -9.88370E-08 + -2.81201E-07 -7.34634E-07 -1.76070E-06 -3.86679E-06 -7.76974E-06 -1.42551E-05 + -2.38140E-05 -3.60785E-05 -4.92734E-05 -6.00794E-05 -6.42979E-05 -5.83501E-05 + -4.10694E-05 -1.48275E-05 1.48275E-05 4.10694E-05 5.83501E-05 6.42979E-05 + 6.00794E-05 4.92734E-05 3.60785E-05 2.38140E-05 1.42551E-05 7.76974E-06 + 3.86679E-06 1.76070E-06 7.34634E-07 2.81201E-07 9.88370E-08 3.19228E-08 + 9.48021E-09 2.58991E-09 6.51147E-10 1.50713E-10 + -1.11491E-10 -4.81692E-10 -1.91591E-09 -7.01307E-09 -2.36152E-08 -7.31156E-08 + -2.08021E-07 -5.43452E-07 -1.30249E-06 -2.86049E-06 -5.74774E-06 -1.05454E-05 + -1.76166E-05 -2.66894E-05 -3.64504E-05 -4.44441E-05 -4.75644E-05 -4.31637E-05 + -3.03798E-05 -1.09679E-05 1.09679E-05 3.03798E-05 4.31637E-05 4.75644E-05 + 4.44441E-05 3.64504E-05 2.66894E-05 1.76166E-05 1.05454E-05 5.74774E-06 + 2.86049E-06 1.30249E-06 5.43452E-07 2.08021E-07 7.31156E-08 2.36152E-08 + 7.01307E-09 1.91591E-09 4.81692E-10 1.11491E-10 + -4.12546E-11 -1.78238E-10 -7.08936E-10 -2.59502E-09 -8.73822E-09 -2.70547E-08 + -7.69730E-08 -2.01091E-07 -4.81956E-07 -1.05846E-06 -2.12681E-06 -3.90206E-06 + -6.51859E-06 -9.87578E-06 -1.34876E-05 -1.64454E-05 -1.75999E-05 -1.59714E-05 + -1.12410E-05 -4.05826E-06 4.05826E-06 1.12410E-05 1.59714E-05 1.75999E-05 + 1.64454E-05 1.34876E-05 9.87578E-06 6.51859E-06 3.90206E-06 2.12681E-06 + 1.05846E-06 4.81956E-07 2.01091E-07 7.69730E-08 2.70547E-08 8.73822E-09 + 2.59502E-09 7.08936E-10 1.78238E-10 4.12546E-11 + 4.12546E-11 1.78238E-10 7.08936E-10 2.59502E-09 8.73822E-09 2.70547E-08 + 7.69730E-08 2.01091E-07 4.81956E-07 1.05846E-06 2.12681E-06 3.90206E-06 + 6.51859E-06 9.87578E-06 1.34876E-05 1.64454E-05 1.75999E-05 1.59714E-05 + 1.12410E-05 4.05826E-06 -4.05826E-06 -1.12410E-05 -1.59714E-05 -1.75999E-05 + -1.64454E-05 -1.34876E-05 -9.87578E-06 -6.51859E-06 -3.90206E-06 -2.12681E-06 + -1.05846E-06 -4.81956E-07 -2.01091E-07 -7.69730E-08 -2.70547E-08 -8.73822E-09 + -2.59502E-09 -7.08936E-10 -1.78238E-10 -4.12546E-11 + 1.11491E-10 4.81692E-10 1.91591E-09 7.01307E-09 2.36152E-08 7.31156E-08 + 2.08021E-07 5.43452E-07 1.30249E-06 2.86049E-06 5.74774E-06 1.05454E-05 + 1.76166E-05 2.66894E-05 3.64504E-05 4.44441E-05 4.75644E-05 4.31637E-05 + 3.03798E-05 1.09679E-05 -1.09679E-05 -3.03798E-05 -4.31637E-05 -4.75644E-05 + -4.44441E-05 -3.64504E-05 -2.66894E-05 -1.76166E-05 -1.05454E-05 -5.74774E-06 + -2.86049E-06 -1.30249E-06 -5.43452E-07 -2.08021E-07 -7.31156E-08 -2.36152E-08 + -7.01307E-09 -1.91591E-09 -4.81692E-10 -1.11491E-10 + 1.50713E-10 6.51147E-10 2.58991E-09 9.48021E-09 3.19228E-08 9.88370E-08 + 2.81201E-07 7.34634E-07 1.76070E-06 3.86679E-06 7.76974E-06 1.42551E-05 + 2.38140E-05 3.60785E-05 4.92734E-05 6.00794E-05 6.42979E-05 5.83501E-05 + 4.10694E-05 1.48275E-05 -1.48275E-05 -4.10694E-05 -5.83501E-05 -6.42979E-05 + -6.00794E-05 -4.92734E-05 -3.60785E-05 -2.38140E-05 -1.42551E-05 -7.76974E-06 + -3.86679E-06 -1.76070E-06 -7.34634E-07 -2.81201E-07 -9.88370E-08 -3.19228E-08 + -9.48021E-09 -2.58991E-09 -6.51147E-10 -1.50713E-10 + 1.53929E-10 6.65042E-10 2.64518E-09 9.68251E-09 3.26040E-08 1.00946E-07 + 2.87201E-07 7.50310E-07 1.79827E-06 3.94930E-06 7.93554E-06 1.45593E-05 + 2.43221E-05 3.68484E-05 5.03248E-05 6.13616E-05 6.56707E-05 5.95967E-05 + 4.19478E-05 1.51448E-05 -1.51448E-05 -4.19478E-05 -5.95967E-05 -6.56707E-05 + -6.13616E-05 -5.03248E-05 -3.68484E-05 -2.43221E-05 -1.45593E-05 -7.93554E-06 + -3.94930E-06 -1.79827E-06 -7.50310E-07 -2.87201E-07 -1.00946E-07 -3.26040E-08 + -9.68251E-09 -2.64518E-09 -6.65042E-10 -1.53929E-10 + 1.29691E-10 5.60322E-10 2.22866E-09 8.15786E-09 2.74700E-08 8.50507E-08 + 2.41977E-07 6.32163E-07 1.51511E-06 3.32743E-06 6.68598E-06 1.22668E-05 + 2.04923E-05 3.10461E-05 4.24005E-05 5.16993E-05 5.53298E-05 5.02121E-05 + 3.53422E-05 1.27599E-05 -1.27599E-05 -3.53422E-05 -5.02121E-05 -5.53298E-05 + -5.16993E-05 -4.24005E-05 -3.10461E-05 -2.04923E-05 -1.22668E-05 -6.68598E-06 + -3.32743E-06 -1.51511E-06 -6.32163E-07 -2.41977E-07 -8.50507E-08 -2.74700E-08 + -8.15786E-09 -2.22866E-09 -5.60322E-10 -1.29691E-10 + 9.31638E-11 4.02509E-10 1.60096E-09 5.86023E-09 1.97332E-08 6.10966E-08 + 1.73825E-07 4.54117E-07 1.08838E-06 2.39027E-06 4.80290E-06 8.81188E-06 + 1.47207E-05 2.23021E-05 3.04585E-05 3.71383E-05 3.97459E-05 3.60689E-05 + 2.53867E-05 9.16540E-06 -9.16540E-06 -2.53867E-05 -3.60689E-05 -3.97459E-05 + -3.71383E-05 -3.04585E-05 -2.23021E-05 -1.47207E-05 -8.81188E-06 -4.80290E-06 + -2.39027E-06 -1.08838E-06 -4.54117E-07 -1.73825E-07 -6.10966E-08 -1.97332E-08 + -5.86023E-09 -1.60096E-09 -4.02509E-10 -9.31638E-11 + 5.79512E-11 2.50375E-10 9.95856E-10 3.64527E-09 1.22747E-08 3.80042E-08 + 1.08125E-07 2.82477E-07 6.77012E-07 1.48683E-06 2.98757E-06 5.48130E-06 + 9.15679E-06 1.38727E-05 1.89463E-05 2.31012E-05 2.47230E-05 2.24354E-05 + 1.57905E-05 5.70076E-06 -5.70076E-06 -1.57905E-05 -2.24354E-05 -2.47230E-05 + -2.31012E-05 -1.89463E-05 -1.38727E-05 -9.15679E-06 -5.48130E-06 -2.98757E-06 + -1.48683E-06 -6.77012E-07 -2.82477E-07 -1.08125E-07 -3.80042E-08 -1.22747E-08 + -3.64527E-09 -9.95856E-10 -2.50375E-10 -5.79512E-11 + 3.14721E-11 1.35974E-10 5.40830E-10 1.97967E-09 6.66617E-09 2.06393E-08 + 5.87208E-08 1.53408E-07 3.67672E-07 8.07470E-07 1.62249E-06 2.97679E-06 + 4.97287E-06 7.53398E-06 1.02893E-05 1.25458E-05 1.34265E-05 1.21841E-05 + 8.57531E-06 3.09586E-06 -3.09586E-06 -8.57531E-06 -1.21841E-05 -1.34265E-05 + -1.25458E-05 -1.02893E-05 -7.53398E-06 -4.97287E-06 -2.97679E-06 -1.62249E-06 + -8.07470E-07 -3.67672E-07 -1.53408E-07 -5.87208E-08 -2.06393E-08 -6.66617E-09 + -1.97967E-09 -5.40830E-10 -1.35974E-10 -3.14721E-11 + 1.49941E-11 6.47811E-11 2.57664E-10 9.43163E-10 3.17592E-09 9.83306E-09 + 2.79760E-08 7.30869E-08 1.75168E-07 3.84698E-07 7.72993E-07 1.41821E-06 + 2.36919E-06 3.58937E-06 4.90208E-06 5.97711E-06 6.39669E-06 5.80476E-06 + 4.08545E-06 1.47493E-06 -1.47493E-06 -4.08545E-06 -5.80476E-06 -6.39669E-06 + -5.97711E-06 -4.90208E-06 -3.58937E-06 -2.36919E-06 -1.41821E-06 -7.72993E-07 + -3.84698E-07 -1.75168E-07 -7.30869E-08 -2.79760E-08 -9.83306E-09 -3.17592E-09 + -9.43163E-10 -2.57664E-10 -6.47811E-11 -1.49941E-11 + 6.28590E-12 2.71579E-11 1.08019E-10 3.95398E-10 1.33143E-09 4.12227E-09 + 1.17282E-08 3.06399E-08 7.34348E-08 1.61275E-07 3.24059E-07 5.94550E-07 + 9.93227E-07 1.50476E-06 2.05508E-06 2.50576E-06 2.68166E-06 2.43350E-06 + 1.71272E-06 6.18327E-07 -6.18327E-07 -1.71272E-06 -2.43350E-06 -2.68166E-06 + -2.50576E-06 -2.05508E-06 -1.50476E-06 -9.93227E-07 -5.94550E-07 -3.24059E-07 + -1.61275E-07 -7.34348E-08 -3.06399E-08 -1.17282E-08 -4.12227E-09 -1.33143E-09 + -3.95398E-10 -1.08019E-10 -2.71579E-11 -6.28590E-12 + 2.32388E-12 1.00402E-11 3.99344E-11 1.46178E-10 4.92225E-10 1.52399E-09 + 4.33590E-09 1.13275E-08 2.71486E-08 5.96229E-08 1.19803E-07 2.19803E-07 + 3.67193E-07 5.56303E-07 7.59756E-07 9.26371E-07 9.91401E-07 8.99658E-07 + 6.33189E-07 2.28594E-07 -2.28594E-07 -6.33189E-07 -8.99658E-07 -9.91401E-07 + -9.26371E-07 -7.59756E-07 -5.56303E-07 -3.67193E-07 -2.19803E-07 -1.19803E-07 + -5.96229E-08 -2.71486E-08 -1.13275E-08 -4.33590E-09 -1.52399E-09 -4.92225E-10 + -1.46178E-10 -3.99344E-11 -1.00402E-11 -2.32388E-12 + 7.58959E-13 3.27904E-12 1.30423E-11 4.77404E-11 1.60757E-10 4.97723E-10 + 1.41607E-09 3.69946E-09 8.86651E-09 1.94724E-08 3.91268E-08 7.17860E-08 + 1.19922E-07 1.81684E-07 2.48130E-07 3.02545E-07 3.23783E-07 2.93821E-07 + 2.06794E-07 7.46568E-08 -7.46568E-08 -2.06794E-07 -2.93821E-07 -3.23783E-07 + -3.02545E-07 -2.48130E-07 -1.81684E-07 -1.19922E-07 -7.17860E-08 -3.91268E-08 + -1.94724E-08 -8.86651E-09 -3.69946E-09 -1.41607E-09 -4.97723E-10 -1.60757E-10 + -4.77404E-11 -1.30423E-11 -3.27904E-12 -7.58959E-13 + 2.19319E-13 9.47557E-13 3.76887E-12 1.37957E-11 4.64544E-11 1.43829E-10 + 4.09206E-10 1.06905E-09 2.56219E-09 5.62700E-09 1.13066E-08 2.07443E-08 + 3.46544E-08 5.25019E-08 7.17031E-08 8.74276E-08 9.35649E-08 8.49066E-08 + 5.97581E-08 2.15739E-08 -2.15739E-08 -5.97581E-08 -8.49066E-08 -9.35649E-08 + -8.74276E-08 -7.17031E-08 -5.25019E-08 -3.46544E-08 -2.07443E-08 -1.13066E-08 + -5.62700E-09 -2.56219E-09 -1.06905E-09 -4.09206E-10 -1.43829E-10 -4.64544E-11 + -1.37957E-11 -3.76887E-12 -9.47557E-13 -2.19319E-13 + 5.61664E-14 2.42664E-13 9.65185E-13 3.53300E-12 1.18967E-11 3.68337E-11 + 1.04795E-10 2.73777E-10 6.56162E-10 1.44104E-09 2.89556E-09 5.31248E-09 + 8.87478E-09 1.34454E-08 1.83627E-08 2.23897E-08 2.39614E-08 2.17441E-08 + 1.53037E-08 5.52494E-09 -5.52494E-09 -1.53037E-08 -2.17441E-08 -2.39614E-08 + -2.23897E-08 -1.83627E-08 -1.34454E-08 -8.87478E-09 -5.31248E-09 -2.89556E-09 + -1.44104E-09 -6.56162E-10 -2.73777E-10 -1.04795E-10 -3.68337E-11 -1.18967E-11 + -3.53300E-12 -9.65185E-13 -2.42664E-13 -5.61664E-14 + 1.27682E-14 5.51643E-14 2.19414E-13 8.03150E-13 2.70445E-12 8.37334E-12 + 2.38229E-11 6.22372E-11 1.49164E-10 3.27589E-10 6.58242E-10 1.20768E-09 + 2.01749E-09 3.05652E-09 4.17436E-09 5.08980E-09 5.44710E-09 4.94304E-09 + 3.47896E-09 1.25597E-09 -1.25597E-09 -3.47896E-09 -4.94304E-09 -5.44710E-09 + -5.08980E-09 -4.17436E-09 -3.05652E-09 -2.01749E-09 -1.20768E-09 -6.58242E-10 + -3.27589E-10 -1.49164E-10 -6.22372E-11 -2.38229E-11 -8.37334E-12 -2.70445E-12 + -8.03150E-13 -2.19414E-13 -5.51643E-14 -1.27682E-14 + 2.58093E-15 1.11508E-14 4.43517E-14 1.62347E-13 5.46671E-13 1.69256E-12 + 4.81550E-12 1.25805E-11 3.01516E-11 6.62180E-11 1.33055E-10 2.44116E-10 + 4.07809E-10 6.17838E-10 8.43795E-10 1.02884E-09 1.10106E-09 9.99172E-10 + 7.03228E-10 2.53879E-10 -2.53879E-10 -7.03228E-10 -9.99172E-10 -1.10106E-09 + -1.02884E-09 -8.43795E-10 -6.17838E-10 -4.07809E-10 -2.44116E-10 -1.33055E-10 + -6.62180E-11 -3.01516E-11 -1.25805E-11 -4.81550E-12 -1.69256E-12 -5.46671E-13 + -1.62347E-13 -4.43517E-14 -1.11508E-14 -2.58093E-15 + 4.64690E-16 2.00767E-15 7.98543E-15 2.92302E-14 9.84269E-14 3.04743E-13 + 8.67021E-13 2.26508E-12 5.42873E-12 1.19224E-11 2.39563E-11 4.39526E-11 + 7.34252E-11 1.11240E-10 1.51923E-10 1.85240E-10 1.98244E-10 1.79899E-10 + 1.26615E-10 4.57104E-11 -4.57104E-11 -1.26615E-10 -1.79899E-10 -1.98244E-10 + -1.85240E-10 -1.51923E-10 -1.11240E-10 -7.34252E-11 -4.39526E-11 -2.39563E-11 + -1.19224E-11 -5.42873E-12 -2.26508E-12 -8.67021E-13 -3.04743E-13 -9.84269E-14 + -2.92302E-14 -7.98543E-15 -2.00767E-15 -4.64690E-16 + 7.46467E-17 3.22507E-16 1.28276E-15 4.69546E-15 1.58111E-14 4.89531E-14 + 1.39276E-13 3.63857E-13 8.72058E-13 1.91519E-12 3.84828E-12 7.06045E-12 + 1.17948E-11 1.78694E-11 2.44046E-11 2.97565E-11 3.18454E-11 2.88985E-11 + 2.03391E-11 7.34280E-12 -7.34280E-12 -2.03391E-11 -2.88985E-11 -3.18454E-11 + -2.97565E-11 -2.44046E-11 -1.78694E-11 -1.17948E-11 -7.06045E-12 -3.84828E-12 + -1.91519E-12 -8.72058E-13 -3.63857E-13 -1.39276E-13 -4.89531E-14 -1.58111E-14 + -4.69546E-15 -1.28276E-15 -3.22507E-16 -7.46467E-17 + 1.07140E-17 4.62891E-17 1.84113E-16 6.73934E-16 2.26934E-15 7.02618E-15 + 1.99901E-14 5.22240E-14 1.25165E-13 2.74884E-13 5.52339E-13 1.01338E-12 + 1.69290E-12 2.56477E-12 3.50276E-12 4.27092E-12 4.57073E-12 4.14777E-12 + 2.91924E-12 1.05390E-12 -1.05390E-12 -2.91924E-12 -4.14777E-12 -4.57073E-12 + -4.27092E-12 -3.50276E-12 -2.56477E-12 -1.69290E-12 -1.01338E-12 -5.52339E-13 + -2.74884E-13 -1.25165E-13 -5.22240E-14 -1.99901E-14 -7.02618E-15 -2.26934E-15 + -6.73934E-16 -1.84113E-16 -4.62891E-17 -1.07140E-17 + 1.37552E-18 5.94288E-18 2.36376E-17 8.65239E-17 2.91352E-16 9.02065E-16 + 2.56646E-15 6.70485E-15 1.60695E-14 3.52914E-14 7.09128E-14 1.30104E-13 + 2.17345E-13 3.29281E-13 4.49707E-13 5.48328E-13 5.86819E-13 5.32516E-13 + 3.74791E-13 1.35307E-13 -1.35307E-13 -3.74791E-13 -5.32516E-13 -5.86819E-13 + -5.48328E-13 -4.49707E-13 -3.29281E-13 -2.17345E-13 -1.30104E-13 -7.09128E-14 + -3.52914E-14 -1.60695E-14 -6.70485E-15 -2.56646E-15 -9.02065E-16 -2.91352E-16 + -8.65239E-17 -2.36376E-17 -5.94288E-18 -1.37552E-18 + -2.80386E-19 -1.21139E-18 -4.81827E-18 -1.76370E-17 -5.93892E-17 -1.83877E-16 + -5.23146E-16 -1.36671E-15 -3.27560E-15 -7.19378E-15 -1.44548E-14 -2.65203E-14 + -4.43035E-14 -6.71205E-14 -9.16680E-14 -1.11771E-13 -1.19617E-13 -1.08548E-13 + -7.63971E-14 -2.75809E-14 2.75809E-14 7.63971E-14 1.08548E-13 1.19617E-13 + 1.11771E-13 9.16680E-14 6.71205E-14 4.43035E-14 2.65203E-14 1.44548E-14 + 7.19378E-15 3.27560E-15 1.36671E-15 5.23146E-16 1.83877E-16 5.93892E-17 + 1.76370E-17 4.81827E-18 1.21139E-18 2.80386E-19 + -2.24996E-18 -9.72082E-18 -3.86642E-17 -1.41528E-16 -4.76567E-16 -1.47551E-15 + -4.19798E-15 -1.09672E-14 -2.62850E-14 -5.77264E-14 -1.15993E-13 -2.12812E-13 + -3.55513E-13 -5.38608E-13 -7.35589E-13 -8.96904E-13 -9.59865E-13 -8.71041E-13 + -6.13048E-13 -2.21322E-13 2.21322E-13 6.13048E-13 8.71041E-13 9.59865E-13 + 8.96904E-13 7.35589E-13 5.38608E-13 3.55513E-13 2.12812E-13 1.15993E-13 + 5.77264E-14 2.62850E-14 1.09672E-14 4.19798E-15 1.47551E-15 4.76567E-16 + 1.41528E-16 3.86642E-17 9.72082E-18 2.24996E-18 + -1.61106E-17 -6.96051E-17 -2.76851E-16 -1.01340E-15 -3.41242E-15 -1.05653E-14 + -3.00592E-14 -7.85295E-14 -1.88212E-13 -4.13345E-13 -8.30555E-13 -1.52382E-12 + -2.54562E-12 -3.85666E-12 -5.26712E-12 -6.42220E-12 -6.87303E-12 -6.23702E-12 + -4.38968E-12 -1.58476E-12 1.58476E-12 4.38968E-12 6.23702E-12 6.87303E-12 + 6.42220E-12 5.26712E-12 3.85666E-12 2.54562E-12 1.52382E-12 8.30555E-13 + 4.13345E-13 1.88212E-13 7.85295E-14 3.00592E-14 1.05653E-14 3.41242E-15 + 1.01340E-15 2.76851E-16 6.96051E-17 1.61106E-17 + -1.02770E-16 -4.44013E-16 -1.76604E-15 -6.46450E-15 -2.17679E-14 -6.73964E-14 + -1.91749E-13 -5.00942E-13 -1.20061E-12 -2.63674E-12 -5.29814E-12 -9.72050E-12 + -1.62386E-11 -2.46017E-11 -3.35991E-11 -4.09674E-11 -4.38433E-11 -3.97861E-11 + -2.80019E-11 -1.01092E-11 1.01092E-11 2.80019E-11 3.97861E-11 4.38433E-11 + 4.09674E-11 3.35991E-11 2.46017E-11 1.62386E-11 9.72050E-12 5.29814E-12 + 2.63674E-12 1.20061E-12 5.00942E-13 1.91749E-13 6.73964E-14 2.17679E-14 + 6.46450E-15 1.76604E-15 4.44013E-16 1.02770E-16 + -5.83051E-16 -2.51904E-15 -1.00194E-14 -3.66753E-14 -1.23497E-13 -3.82363E-13 + -1.08786E-12 -2.84202E-12 -6.81148E-12 -1.49591E-11 -3.00582E-11 -5.51478E-11 + -9.21272E-11 -1.39574E-10 -1.90620E-10 -2.32423E-10 -2.48738E-10 -2.25721E-10 + -1.58865E-10 -5.73532E-11 5.73532E-11 1.58865E-10 2.25721E-10 2.48738E-10 + 2.32423E-10 1.90620E-10 1.39574E-10 9.21272E-11 5.51478E-11 3.00582E-11 + 1.49591E-11 6.81148E-12 2.84202E-12 1.08786E-12 3.82363E-13 1.23497E-13 + 3.66753E-14 1.00194E-14 2.51904E-15 5.83051E-16 + -2.93708E-15 -1.26895E-14 -5.04720E-14 -1.84749E-13 -6.22108E-13 -1.92613E-12 + -5.48001E-12 -1.43165E-11 -3.43123E-11 -7.53557E-11 -1.51416E-10 -2.77803E-10 + -4.64084E-10 -7.03096E-10 -9.60233E-10 -1.17081E-09 -1.25300E-09 -1.13705E-09 + -8.00269E-10 -2.88913E-10 2.88913E-10 8.00269E-10 1.13705E-09 1.25300E-09 + 1.17081E-09 9.60233E-10 7.03096E-10 4.64084E-10 2.77803E-10 1.51416E-10 + 7.53557E-11 3.43123E-11 1.43165E-11 5.48001E-12 1.92613E-12 6.22108E-13 + 1.84749E-13 5.04720E-14 1.26895E-14 2.93708E-15 + -1.31167E-14 -5.66700E-14 -2.25403E-13 -8.25072E-13 -2.77827E-12 -8.60189E-12 + -2.44732E-11 -6.39359E-11 -1.53235E-10 -3.36531E-10 -6.76209E-10 -1.24064E-09 + -2.07255E-09 -3.13995E-09 -4.28830E-09 -5.22873E-09 -5.59578E-09 -5.07796E-09 + -3.57392E-09 -1.29026E-09 1.29026E-09 3.57392E-09 5.07796E-09 5.59578E-09 + 5.22873E-09 4.28830E-09 3.13995E-09 2.07255E-09 1.24064E-09 6.76209E-10 + 3.36531E-10 1.53235E-10 6.39359E-11 2.44732E-11 8.60189E-12 2.77827E-12 + 8.25072E-13 2.25403E-13 5.66700E-14 1.31167E-14 + -5.18583E-14 -2.24051E-13 -8.91155E-13 -3.26202E-12 -1.09842E-11 -3.40085E-11 + -9.67574E-11 -2.52778E-10 -6.05833E-10 -1.33051E-09 -2.67347E-09 -4.90501E-09 + -8.19407E-09 -1.24142E-08 -1.69543E-08 -2.06724E-08 -2.21235E-08 -2.00763E-08 + -1.41299E-08 -5.10117E-09 5.10117E-09 1.41299E-08 2.00763E-08 2.21235E-08 + 2.06724E-08 1.69543E-08 1.24142E-08 8.19407E-09 4.90501E-09 2.67347E-09 + 1.33051E-09 6.05833E-10 2.52778E-10 9.67574E-11 3.40085E-11 1.09842E-11 + 3.26202E-12 8.91155E-13 2.24051E-13 5.18583E-14 + -1.81274E-13 -7.83184E-13 -3.11508E-12 -1.14026E-11 -3.83959E-11 -1.18879E-10 + -3.38221E-10 -8.83599E-10 -2.11772E-09 -4.65088E-09 -9.34526E-09 -1.71457E-08 + -2.86428E-08 -4.33944E-08 -5.92647E-08 -7.22614E-08 -7.73341E-08 -7.01778E-08 + -4.93918E-08 -1.78314E-08 1.78314E-08 4.93918E-08 7.01778E-08 7.73341E-08 + 7.22614E-08 5.92647E-08 4.33944E-08 2.86428E-08 1.71457E-08 9.34526E-09 + 4.65088E-09 2.11772E-09 8.83599E-10 3.38221E-10 1.18879E-10 3.83959E-11 + 1.14026E-11 3.11508E-12 7.83184E-13 1.81274E-13 + -5.59549E-13 -2.41750E-12 -9.61551E-12 -3.51970E-11 -1.18519E-10 -3.66950E-10 + -1.04401E-09 -2.72746E-09 -6.53691E-09 -1.43562E-08 -2.88466E-08 -5.29248E-08 + -8.84136E-08 -1.33948E-07 -1.82936E-07 -2.23054E-07 -2.38712E-07 -2.16622E-07 + -1.52461E-07 -5.50414E-08 5.50414E-08 1.52461E-07 2.16622E-07 2.38712E-07 + 2.23054E-07 1.82936E-07 1.33948E-07 8.84136E-08 5.29248E-08 2.88466E-08 + 1.43562E-08 6.53691E-09 2.72746E-09 1.04401E-09 3.66950E-10 1.18519E-10 + 3.51970E-11 9.61551E-12 2.41750E-12 5.59549E-13 + -1.52328E-12 -6.58124E-12 -2.61766E-11 -9.58179E-11 -3.22648E-10 -9.98961E-10 + -2.84214E-09 -7.42506E-09 -1.77956E-08 -3.90822E-08 -7.85300E-08 -1.44079E-07 + -2.40691E-07 -3.64651E-07 -4.98012E-07 -6.07227E-07 -6.49853E-07 -5.89717E-07 + -4.15049E-07 -1.49841E-07 1.49841E-07 4.15049E-07 5.89717E-07 6.49853E-07 + 6.07227E-07 4.98012E-07 3.64651E-07 2.40691E-07 1.44079E-07 7.85300E-08 + 3.90822E-08 1.77956E-08 7.42506E-09 2.84214E-09 9.98961E-10 3.22648E-10 + 9.58179E-11 2.61766E-11 6.58124E-12 1.52328E-12 + -3.65197E-12 -1.57781E-11 -6.27568E-11 -2.29718E-10 -7.73530E-10 -2.39495E-09 + -6.81385E-09 -1.78011E-08 -4.26640E-08 -9.36972E-08 -1.88271E-07 -3.45420E-07 + -5.77042E-07 -8.74229E-07 -1.19395E-06 -1.45579E-06 -1.55798E-06 -1.41381E-06 + -9.95054E-07 -3.59234E-07 3.59234E-07 9.95054E-07 1.41381E-06 1.55798E-06 + 1.45579E-06 1.19395E-06 8.74229E-07 5.77042E-07 3.45420E-07 1.88271E-07 + 9.36972E-08 4.26640E-08 1.78011E-08 6.81385E-09 2.39495E-09 7.73530E-10 + 2.29718E-10 6.27568E-11 1.57781E-11 3.65197E-12 + -7.69571E-12 -3.32489E-11 -1.32246E-10 -4.84079E-10 -1.63004E-09 -5.04682E-09 + -1.43587E-08 -3.75119E-08 -8.99049E-08 -1.97446E-07 -3.96739E-07 -7.27897E-07 + -1.21599E-06 -1.84224E-06 -2.51600E-06 -3.06775E-06 -3.28311E-06 -2.97929E-06 + -2.09686E-06 -7.57007E-07 7.57007E-07 2.09686E-06 2.97929E-06 3.28311E-06 + 3.06775E-06 2.51600E-06 1.84224E-06 1.21599E-06 7.27897E-07 3.96739E-07 + 1.97446E-07 8.99049E-08 3.75119E-08 1.43587E-08 5.04682E-09 1.63004E-09 + 4.84079E-10 1.32246E-10 3.32489E-11 7.69571E-12 + -1.42139E-11 -6.14104E-11 -2.44257E-10 -8.94089E-10 -3.01067E-09 -9.32143E-09 + -2.65203E-08 -6.92841E-08 -1.66053E-07 -3.64681E-07 -7.32773E-07 -1.34442E-06 + -2.24592E-06 -3.40261E-06 -4.64702E-06 -5.66611E-06 -6.06386E-06 -5.50273E-06 + -3.87288E-06 -1.39819E-06 1.39819E-06 3.87288E-06 5.50273E-06 6.06386E-06 + 5.66611E-06 4.64702E-06 3.40261E-06 2.24592E-06 1.34442E-06 7.32773E-07 + 3.64681E-07 1.66053E-07 6.92841E-08 2.65203E-08 9.32143E-09 3.01067E-09 + 8.94089E-10 2.44257E-10 6.14104E-11 1.42139E-11 + -2.29042E-11 -9.89565E-11 -3.93596E-10 -1.44073E-09 -4.85139E-09 -1.50205E-08 + -4.27348E-08 -1.11644E-07 -2.67578E-07 -5.87646E-07 -1.18079E-06 -2.16639E-06 + -3.61907E-06 -5.48295E-06 -7.48819E-06 -9.13035E-06 -9.77129E-06 -8.86709E-06 + -6.24076E-06 -2.25304E-06 2.25304E-06 6.24076E-06 8.86709E-06 9.77129E-06 + 9.13035E-06 7.48819E-06 5.48295E-06 3.61907E-06 2.16639E-06 1.18079E-06 + 5.87646E-07 2.67578E-07 1.11644E-07 4.27348E-08 1.50205E-08 4.85139E-09 + 1.44073E-09 3.93596E-10 9.89565E-11 2.29042E-11 + -3.19406E-11 -1.37998E-10 -5.48881E-10 -2.00914E-09 -6.76541E-09 -2.09466E-08 + -5.95949E-08 -1.55691E-07 -3.73146E-07 -8.19490E-07 -1.64664E-06 -3.02110E-06 + -5.04690E-06 -7.64614E-06 -1.04425E-05 -1.27326E-05 -1.36264E-05 -1.23654E-05 + -8.70294E-06 -3.14194E-06 3.14194E-06 8.70294E-06 1.23654E-05 1.36264E-05 + 1.27326E-05 1.04425E-05 7.64614E-06 5.04690E-06 3.02110E-06 1.64664E-06 + 8.19490E-07 3.73146E-07 1.55691E-07 5.95949E-08 2.09466E-08 6.76541E-09 + 2.00914E-09 5.48881E-10 1.37998E-10 3.19406E-11 + -3.79593E-11 -1.64001E-10 -6.52307E-10 -2.38773E-09 -8.04022E-09 -2.48936E-08 + -7.08245E-08 -1.85028E-07 -4.43458E-07 -9.73908E-07 -1.95692E-06 -3.59037E-06 + -5.99790E-06 -9.08691E-06 -1.24102E-05 -1.51318E-05 -1.61940E-05 -1.46955E-05 + -1.03429E-05 -3.73398E-06 3.73398E-06 1.03429E-05 1.46955E-05 1.61940E-05 + 1.51318E-05 1.24102E-05 9.08691E-06 5.99790E-06 3.59037E-06 1.95692E-06 + 9.73908E-07 4.43458E-07 1.85028E-07 7.08245E-08 2.48936E-08 8.04022E-09 + 2.38773E-09 6.52307E-10 1.64001E-10 3.79593E-11 + -3.71999E-11 -1.60720E-10 -6.39257E-10 -2.33996E-09 -7.87937E-09 -2.43956E-08 + -6.94076E-08 -1.81327E-07 -4.34586E-07 -9.54424E-07 -1.91777E-06 -3.51854E-06 + -5.87790E-06 -8.90512E-06 -1.21619E-05 -1.48290E-05 -1.58700E-05 -1.44015E-05 + -1.01359E-05 -3.65927E-06 3.65927E-06 1.01359E-05 1.44015E-05 1.58700E-05 + 1.48290E-05 1.21619E-05 8.90512E-06 5.87790E-06 3.51854E-06 1.91777E-06 + 9.54424E-07 4.34586E-07 1.81327E-07 6.94076E-08 2.43956E-08 7.87937E-09 + 2.33996E-09 6.39257E-10 1.60720E-10 3.71999E-11 + -2.75347E-11 -1.18962E-10 -4.73168E-10 -1.73200E-09 -5.83218E-09 -1.80572E-08 + -5.13744E-08 -1.34215E-07 -3.21674E-07 -7.06449E-07 -1.41951E-06 -2.60437E-06 + -4.35073E-06 -6.59143E-06 -9.00206E-06 -1.09762E-05 -1.17467E-05 -1.06597E-05 + -7.50243E-06 -2.70853E-06 2.70853E-06 7.50243E-06 1.06597E-05 1.17467E-05 + 1.09762E-05 9.00206E-06 6.59143E-06 4.35073E-06 2.60437E-06 1.41951E-06 + 7.06449E-07 3.21674E-07 1.34215E-07 5.13744E-08 1.80572E-08 5.83218E-09 + 1.73200E-09 4.73168E-10 1.18962E-10 2.75347E-11 + -1.01914E-11 -4.40314E-11 -1.75133E-10 -6.41064E-10 -2.15866E-09 -6.68349E-09 + -1.90151E-08 -4.96769E-08 -1.19061E-07 -2.61477E-07 -5.25400E-07 -9.63951E-07 + -1.61033E-06 -2.43968E-06 -3.33192E-06 -4.06261E-06 -4.34780E-06 -3.94547E-06 + -2.77686E-06 -1.00250E-06 1.00250E-06 2.77686E-06 3.94547E-06 4.34780E-06 + 4.06261E-06 3.33192E-06 2.43968E-06 1.61033E-06 9.63951E-07 5.25400E-07 + 2.61477E-07 1.19061E-07 4.96769E-08 1.90151E-08 6.68349E-09 2.15866E-09 + 6.41064E-10 1.75133E-10 4.40314E-11 1.01914E-11 + 1.01914E-11 4.40314E-11 1.75133E-10 6.41064E-10 2.15866E-09 6.68349E-09 + 1.90151E-08 4.96769E-08 1.19061E-07 2.61477E-07 5.25400E-07 9.63951E-07 + 1.61033E-06 2.43968E-06 3.33192E-06 4.06261E-06 4.34780E-06 3.94547E-06 + 2.77686E-06 1.00250E-06 -1.00250E-06 -2.77686E-06 -3.94547E-06 -4.34780E-06 + -4.06261E-06 -3.33192E-06 -2.43968E-06 -1.61033E-06 -9.63951E-07 -5.25400E-07 + -2.61477E-07 -1.19061E-07 -4.96769E-08 -1.90151E-08 -6.68349E-09 -2.15866E-09 + -6.41064E-10 -1.75133E-10 -4.40314E-11 -1.01914E-11 + 2.75347E-11 1.18962E-10 4.73168E-10 1.73200E-09 5.83218E-09 1.80572E-08 + 5.13744E-08 1.34215E-07 3.21674E-07 7.06449E-07 1.41951E-06 2.60437E-06 + 4.35073E-06 6.59143E-06 9.00206E-06 1.09762E-05 1.17467E-05 1.06597E-05 + 7.50243E-06 2.70853E-06 -2.70853E-06 -7.50243E-06 -1.06597E-05 -1.17467E-05 + -1.09762E-05 -9.00206E-06 -6.59143E-06 -4.35073E-06 -2.60437E-06 -1.41951E-06 + -7.06449E-07 -3.21674E-07 -1.34215E-07 -5.13744E-08 -1.80572E-08 -5.83218E-09 + -1.73200E-09 -4.73168E-10 -1.18962E-10 -2.75347E-11 + 3.71999E-11 1.60720E-10 6.39257E-10 2.33996E-09 7.87937E-09 2.43956E-08 + 6.94076E-08 1.81327E-07 4.34586E-07 9.54424E-07 1.91777E-06 3.51854E-06 + 5.87790E-06 8.90512E-06 1.21619E-05 1.48290E-05 1.58700E-05 1.44015E-05 + 1.01359E-05 3.65927E-06 -3.65927E-06 -1.01359E-05 -1.44015E-05 -1.58700E-05 + -1.48290E-05 -1.21619E-05 -8.90512E-06 -5.87790E-06 -3.51854E-06 -1.91777E-06 + -9.54424E-07 -4.34586E-07 -1.81327E-07 -6.94076E-08 -2.43956E-08 -7.87937E-09 + -2.33996E-09 -6.39257E-10 -1.60720E-10 -3.71999E-11 + 3.79593E-11 1.64001E-10 6.52307E-10 2.38773E-09 8.04022E-09 2.48936E-08 + 7.08245E-08 1.85028E-07 4.43458E-07 9.73908E-07 1.95692E-06 3.59037E-06 + 5.99790E-06 9.08691E-06 1.24102E-05 1.51318E-05 1.61940E-05 1.46955E-05 + 1.03429E-05 3.73398E-06 -3.73398E-06 -1.03429E-05 -1.46955E-05 -1.61940E-05 + -1.51318E-05 -1.24102E-05 -9.08691E-06 -5.99790E-06 -3.59037E-06 -1.95692E-06 + -9.73908E-07 -4.43458E-07 -1.85028E-07 -7.08245E-08 -2.48936E-08 -8.04022E-09 + -2.38773E-09 -6.52307E-10 -1.64001E-10 -3.79593E-11 + 3.19406E-11 1.37998E-10 5.48881E-10 2.00914E-09 6.76541E-09 2.09466E-08 + 5.95949E-08 1.55691E-07 3.73146E-07 8.19490E-07 1.64664E-06 3.02110E-06 + 5.04690E-06 7.64614E-06 1.04425E-05 1.27326E-05 1.36264E-05 1.23654E-05 + 8.70294E-06 3.14194E-06 -3.14194E-06 -8.70294E-06 -1.23654E-05 -1.36264E-05 + -1.27326E-05 -1.04425E-05 -7.64614E-06 -5.04690E-06 -3.02110E-06 -1.64664E-06 + -8.19490E-07 -3.73146E-07 -1.55691E-07 -5.95949E-08 -2.09466E-08 -6.76541E-09 + -2.00914E-09 -5.48881E-10 -1.37998E-10 -3.19406E-11 + 2.29042E-11 9.89565E-11 3.93596E-10 1.44073E-09 4.85139E-09 1.50205E-08 + 4.27348E-08 1.11644E-07 2.67578E-07 5.87646E-07 1.18079E-06 2.16639E-06 + 3.61907E-06 5.48295E-06 7.48819E-06 9.13035E-06 9.77129E-06 8.86709E-06 + 6.24076E-06 2.25304E-06 -2.25304E-06 -6.24076E-06 -8.86709E-06 -9.77129E-06 + -9.13035E-06 -7.48819E-06 -5.48295E-06 -3.61907E-06 -2.16639E-06 -1.18079E-06 + -5.87646E-07 -2.67578E-07 -1.11644E-07 -4.27348E-08 -1.50205E-08 -4.85139E-09 + -1.44073E-09 -3.93596E-10 -9.89565E-11 -2.29042E-11 + 1.42139E-11 6.14104E-11 2.44257E-10 8.94089E-10 3.01067E-09 9.32143E-09 + 2.65203E-08 6.92841E-08 1.66053E-07 3.64681E-07 7.32773E-07 1.34442E-06 + 2.24592E-06 3.40261E-06 4.64702E-06 5.66611E-06 6.06386E-06 5.50273E-06 + 3.87288E-06 1.39819E-06 -1.39819E-06 -3.87288E-06 -5.50273E-06 -6.06386E-06 + -5.66611E-06 -4.64702E-06 -3.40261E-06 -2.24592E-06 -1.34442E-06 -7.32773E-07 + -3.64681E-07 -1.66053E-07 -6.92841E-08 -2.65203E-08 -9.32143E-09 -3.01067E-09 + -8.94089E-10 -2.44257E-10 -6.14104E-11 -1.42139E-11 + 7.69571E-12 3.32489E-11 1.32246E-10 4.84079E-10 1.63004E-09 5.04682E-09 + 1.43587E-08 3.75119E-08 8.99049E-08 1.97446E-07 3.96739E-07 7.27897E-07 + 1.21599E-06 1.84224E-06 2.51600E-06 3.06775E-06 3.28311E-06 2.97929E-06 + 2.09686E-06 7.57007E-07 -7.57007E-07 -2.09686E-06 -2.97929E-06 -3.28311E-06 + -3.06775E-06 -2.51600E-06 -1.84224E-06 -1.21599E-06 -7.27897E-07 -3.96739E-07 + -1.97446E-07 -8.99049E-08 -3.75119E-08 -1.43587E-08 -5.04682E-09 -1.63004E-09 + -4.84079E-10 -1.32246E-10 -3.32489E-11 -7.69571E-12 + 3.65197E-12 1.57781E-11 6.27568E-11 2.29718E-10 7.73530E-10 2.39495E-09 + 6.81385E-09 1.78011E-08 4.26640E-08 9.36972E-08 1.88271E-07 3.45420E-07 + 5.77042E-07 8.74229E-07 1.19395E-06 1.45579E-06 1.55798E-06 1.41381E-06 + 9.95054E-07 3.59234E-07 -3.59234E-07 -9.95054E-07 -1.41381E-06 -1.55798E-06 + -1.45579E-06 -1.19395E-06 -8.74229E-07 -5.77042E-07 -3.45420E-07 -1.88271E-07 + -9.36972E-08 -4.26640E-08 -1.78011E-08 -6.81385E-09 -2.39495E-09 -7.73530E-10 + -2.29718E-10 -6.27568E-11 -1.57781E-11 -3.65197E-12 + 1.52328E-12 6.58124E-12 2.61766E-11 9.58179E-11 3.22648E-10 9.98961E-10 + 2.84214E-09 7.42506E-09 1.77956E-08 3.90822E-08 7.85300E-08 1.44079E-07 + 2.40691E-07 3.64651E-07 4.98012E-07 6.07227E-07 6.49853E-07 5.89717E-07 + 4.15049E-07 1.49841E-07 -1.49841E-07 -4.15049E-07 -5.89717E-07 -6.49853E-07 + -6.07227E-07 -4.98012E-07 -3.64651E-07 -2.40691E-07 -1.44079E-07 -7.85300E-08 + -3.90822E-08 -1.77956E-08 -7.42506E-09 -2.84214E-09 -9.98961E-10 -3.22648E-10 + -9.58179E-11 -2.61766E-11 -6.58124E-12 -1.52328E-12 + 5.59549E-13 2.41750E-12 9.61551E-12 3.51970E-11 1.18519E-10 3.66950E-10 + 1.04401E-09 2.72746E-09 6.53691E-09 1.43562E-08 2.88466E-08 5.29248E-08 + 8.84136E-08 1.33948E-07 1.82936E-07 2.23054E-07 2.38712E-07 2.16622E-07 + 1.52461E-07 5.50414E-08 -5.50414E-08 -1.52461E-07 -2.16622E-07 -2.38712E-07 + -2.23054E-07 -1.82936E-07 -1.33948E-07 -8.84136E-08 -5.29248E-08 -2.88466E-08 + -1.43562E-08 -6.53691E-09 -2.72746E-09 -1.04401E-09 -3.66950E-10 -1.18519E-10 + -3.51970E-11 -9.61551E-12 -2.41750E-12 -5.59549E-13 + 1.81274E-13 7.83184E-13 3.11508E-12 1.14026E-11 3.83959E-11 1.18879E-10 + 3.38221E-10 8.83599E-10 2.11772E-09 4.65088E-09 9.34526E-09 1.71457E-08 + 2.86428E-08 4.33944E-08 5.92647E-08 7.22614E-08 7.73341E-08 7.01778E-08 + 4.93918E-08 1.78314E-08 -1.78314E-08 -4.93918E-08 -7.01778E-08 -7.73341E-08 + -7.22614E-08 -5.92647E-08 -4.33944E-08 -2.86428E-08 -1.71457E-08 -9.34526E-09 + -4.65088E-09 -2.11772E-09 -8.83599E-10 -3.38221E-10 -1.18879E-10 -3.83959E-11 + -1.14026E-11 -3.11508E-12 -7.83184E-13 -1.81274E-13 + 5.18583E-14 2.24051E-13 8.91155E-13 3.26202E-12 1.09842E-11 3.40085E-11 + 9.67574E-11 2.52778E-10 6.05833E-10 1.33051E-09 2.67347E-09 4.90501E-09 + 8.19407E-09 1.24142E-08 1.69543E-08 2.06724E-08 2.21235E-08 2.00763E-08 + 1.41299E-08 5.10117E-09 -5.10117E-09 -1.41299E-08 -2.00763E-08 -2.21235E-08 + -2.06724E-08 -1.69543E-08 -1.24142E-08 -8.19407E-09 -4.90501E-09 -2.67347E-09 + -1.33051E-09 -6.05833E-10 -2.52778E-10 -9.67574E-11 -3.40085E-11 -1.09842E-11 + -3.26202E-12 -8.91155E-13 -2.24051E-13 -5.18583E-14 + 1.31167E-14 5.66700E-14 2.25403E-13 8.25072E-13 2.77827E-12 8.60189E-12 + 2.44732E-11 6.39359E-11 1.53235E-10 3.36531E-10 6.76209E-10 1.24064E-09 + 2.07255E-09 3.13995E-09 4.28830E-09 5.22873E-09 5.59578E-09 5.07796E-09 + 3.57392E-09 1.29026E-09 -1.29026E-09 -3.57392E-09 -5.07796E-09 -5.59578E-09 + -5.22873E-09 -4.28830E-09 -3.13995E-09 -2.07255E-09 -1.24064E-09 -6.76209E-10 + -3.36531E-10 -1.53235E-10 -6.39359E-11 -2.44732E-11 -8.60189E-12 -2.77827E-12 + -8.25072E-13 -2.25403E-13 -5.66700E-14 -1.31167E-14 + 2.93708E-15 1.26895E-14 5.04720E-14 1.84749E-13 6.22108E-13 1.92613E-12 + 5.48001E-12 1.43165E-11 3.43123E-11 7.53557E-11 1.51416E-10 2.77803E-10 + 4.64084E-10 7.03096E-10 9.60233E-10 1.17081E-09 1.25300E-09 1.13705E-09 + 8.00269E-10 2.88913E-10 -2.88913E-10 -8.00269E-10 -1.13705E-09 -1.25300E-09 + -1.17081E-09 -9.60233E-10 -7.03096E-10 -4.64084E-10 -2.77803E-10 -1.51416E-10 + -7.53557E-11 -3.43123E-11 -1.43165E-11 -5.48001E-12 -1.92613E-12 -6.22108E-13 + -1.84749E-13 -5.04720E-14 -1.26895E-14 -2.93708E-15 + 5.83051E-16 2.51904E-15 1.00194E-14 3.66753E-14 1.23497E-13 3.82363E-13 + 1.08786E-12 2.84202E-12 6.81148E-12 1.49591E-11 3.00582E-11 5.51478E-11 + 9.21272E-11 1.39574E-10 1.90620E-10 2.32423E-10 2.48738E-10 2.25721E-10 + 1.58865E-10 5.73532E-11 -5.73532E-11 -1.58865E-10 -2.25721E-10 -2.48738E-10 + -2.32423E-10 -1.90620E-10 -1.39574E-10 -9.21272E-11 -5.51478E-11 -3.00582E-11 + -1.49591E-11 -6.81148E-12 -2.84202E-12 -1.08786E-12 -3.82363E-13 -1.23497E-13 + -3.66753E-14 -1.00194E-14 -2.51904E-15 -5.83051E-16 + 1.02770E-16 4.44013E-16 1.76604E-15 6.46450E-15 2.17679E-14 6.73964E-14 + 1.91749E-13 5.00942E-13 1.20061E-12 2.63674E-12 5.29814E-12 9.72050E-12 + 1.62386E-11 2.46017E-11 3.35991E-11 4.09674E-11 4.38433E-11 3.97861E-11 + 2.80019E-11 1.01092E-11 -1.01092E-11 -2.80019E-11 -3.97861E-11 -4.38433E-11 + -4.09674E-11 -3.35991E-11 -2.46017E-11 -1.62386E-11 -9.72050E-12 -5.29814E-12 + -2.63674E-12 -1.20061E-12 -5.00942E-13 -1.91749E-13 -6.73964E-14 -2.17679E-14 + -6.46450E-15 -1.76604E-15 -4.44013E-16 -1.02770E-16 + 1.61106E-17 6.96051E-17 2.76851E-16 1.01340E-15 3.41242E-15 1.05653E-14 + 3.00592E-14 7.85295E-14 1.88212E-13 4.13345E-13 8.30555E-13 1.52382E-12 + 2.54562E-12 3.85666E-12 5.26712E-12 6.42220E-12 6.87303E-12 6.23702E-12 + 4.38968E-12 1.58476E-12 -1.58476E-12 -4.38968E-12 -6.23702E-12 -6.87303E-12 + -6.42220E-12 -5.26712E-12 -3.85666E-12 -2.54562E-12 -1.52382E-12 -8.30555E-13 + -4.13345E-13 -1.88212E-13 -7.85295E-14 -3.00592E-14 -1.05653E-14 -3.41242E-15 + -1.01340E-15 -2.76851E-16 -6.96051E-17 -1.61106E-17 + 2.24996E-18 9.72082E-18 3.86642E-17 1.41528E-16 4.76567E-16 1.47551E-15 + 4.19798E-15 1.09672E-14 2.62850E-14 5.77264E-14 1.15993E-13 2.12812E-13 + 3.55513E-13 5.38608E-13 7.35589E-13 8.96904E-13 9.59865E-13 8.71041E-13 + 6.13048E-13 2.21322E-13 -2.21322E-13 -6.13048E-13 -8.71041E-13 -9.59865E-13 + -8.96904E-13 -7.35589E-13 -5.38608E-13 -3.55513E-13 -2.12812E-13 -1.15993E-13 + -5.77264E-14 -2.62850E-14 -1.09672E-14 -4.19798E-15 -1.47551E-15 -4.76567E-16 + -1.41528E-16 -3.86642E-17 -9.72082E-18 -2.24996E-18 + 2.80386E-19 1.21139E-18 4.81827E-18 1.76370E-17 5.93892E-17 1.83877E-16 + 5.23146E-16 1.36671E-15 3.27560E-15 7.19378E-15 1.44548E-14 2.65203E-14 + 4.43035E-14 6.71205E-14 9.16680E-14 1.11771E-13 1.19617E-13 1.08548E-13 + 7.63971E-14 2.75809E-14 -2.75809E-14 -7.63971E-14 -1.08548E-13 -1.19617E-13 + -1.11771E-13 -9.16680E-14 -6.71205E-14 -4.43035E-14 -2.65203E-14 -1.44548E-14 + -7.19378E-15 -3.27560E-15 -1.36671E-15 -5.23146E-16 -1.83877E-16 -5.93892E-17 + -1.76370E-17 -4.81827E-18 -1.21139E-18 -2.80386E-19 + -5.15818E-20 -2.22857E-19 -8.86403E-19 -3.24462E-18 -1.09256E-17 -3.38272E-17 + -9.62416E-17 -2.51430E-16 -6.02603E-16 -1.32342E-15 -2.65921E-15 -4.87886E-15 + -8.15038E-15 -1.23480E-14 -1.68639E-14 -2.05622E-14 -2.20056E-14 -1.99692E-14 + -1.40546E-14 -5.07397E-15 5.07397E-15 1.40546E-14 1.99692E-14 2.20056E-14 + 2.05622E-14 1.68639E-14 1.23480E-14 8.15038E-15 4.87886E-15 2.65921E-15 + 1.32342E-15 6.02603E-16 2.51430E-16 9.62416E-17 3.38272E-17 1.09256E-17 + 3.24462E-18 8.86403E-19 2.22857E-19 5.15818E-20 + -4.24243E-19 -1.83292E-18 -7.29036E-18 -2.66859E-17 -8.98596E-17 -2.78217E-16 + -7.91553E-16 -2.06793E-15 -4.95620E-15 -1.08846E-14 -2.18711E-14 -4.01269E-14 + -6.70341E-14 -1.01558E-13 -1.38700E-13 -1.69117E-13 -1.80988E-13 -1.64240E-13 + -1.15594E-13 -4.17316E-14 4.17316E-14 1.15594E-13 1.64240E-13 1.80988E-13 + 1.69117E-13 1.38700E-13 1.01558E-13 6.70341E-14 4.01269E-14 2.18711E-14 + 1.08846E-14 4.95620E-15 2.06793E-15 7.91553E-16 2.78217E-16 8.98596E-17 + 2.66859E-17 7.29036E-18 1.83292E-18 4.24243E-19 + -3.10372E-18 -1.34095E-17 -5.33356E-17 -1.95232E-16 -6.57404E-16 -2.03541E-15 + -5.79093E-15 -1.51287E-14 -3.62591E-14 -7.96311E-14 -1.60007E-13 -2.93565E-13 + -4.90415E-13 -7.42987E-13 -1.01471E-12 -1.23724E-12 -1.32409E-12 -1.20156E-12 + -8.45673E-13 -3.05305E-13 3.05305E-13 8.45673E-13 1.20156E-12 1.32409E-12 + 1.23724E-12 1.01471E-12 7.42987E-13 4.90415E-13 2.93565E-13 1.60007E-13 + 7.96311E-14 3.62591E-14 1.51287E-14 5.79093E-15 2.03541E-15 6.57404E-16 + 1.95232E-16 5.33356E-17 1.34095E-17 3.10372E-18 + -2.01648E-17 -8.71207E-17 -3.46519E-16 -1.26841E-15 -4.27113E-15 -1.32240E-14 + -3.76235E-14 -9.82909E-14 -2.35574E-13 -5.17360E-13 -1.03956E-12 -1.90728E-12 + -3.18621E-12 -4.82716E-12 -6.59256E-12 -8.03831E-12 -8.60258E-12 -7.80652E-12 + -5.49431E-12 -1.98355E-12 1.98355E-12 5.49431E-12 7.80652E-12 8.60258E-12 + 8.03831E-12 6.59256E-12 4.82716E-12 3.18621E-12 1.90728E-12 1.03956E-12 + 5.17360E-13 2.35574E-13 9.82909E-14 3.76235E-14 1.32240E-14 4.27113E-15 + 1.26841E-15 3.46519E-16 8.71207E-17 2.01648E-17 + -1.16168E-16 -5.01899E-16 -1.99628E-15 -7.30727E-15 -2.46058E-14 -7.61828E-14 + -2.16747E-13 -5.66250E-13 -1.35713E-12 -2.98049E-12 -5.98885E-12 -1.09878E-11 + -1.83556E-11 -2.78090E-11 -3.79794E-11 -4.63083E-11 -4.95591E-11 -4.49730E-11 + -3.16525E-11 -1.14272E-11 1.14272E-11 3.16525E-11 4.49730E-11 4.95591E-11 + 4.63083E-11 3.79794E-11 2.78090E-11 1.83556E-11 1.09878E-11 5.98885E-12 + 2.98049E-12 1.35713E-12 5.66250E-13 2.16747E-13 7.61828E-14 2.46058E-14 + 7.30727E-15 1.99628E-15 5.01899E-16 1.16168E-16 + -5.92618E-16 -2.56037E-15 -1.01838E-14 -3.72771E-14 -1.25523E-13 -3.88637E-13 + -1.10571E-12 -2.88865E-12 -6.92324E-12 -1.52046E-11 -3.05514E-11 -5.60526E-11 + -9.36388E-11 -1.41864E-10 -1.93747E-10 -2.36236E-10 -2.52820E-10 -2.29424E-10 + -1.61471E-10 -5.82943E-11 5.82943E-11 1.61471E-10 2.29424E-10 2.52820E-10 + 2.36236E-10 1.93747E-10 1.41864E-10 9.36388E-11 5.60526E-11 3.05514E-11 + 1.52046E-11 6.92324E-12 2.88865E-12 1.10571E-12 3.88637E-13 1.25523E-13 + 3.72771E-14 1.01838E-14 2.56037E-15 5.92618E-16 + -2.67382E-15 -1.15521E-14 -4.59481E-14 -1.68190E-13 -5.66348E-13 -1.75349E-12 + -4.98883E-12 -1.30333E-11 -3.12369E-11 -6.86014E-11 -1.37844E-10 -2.52903E-10 + -4.22488E-10 -6.40076E-10 -8.74166E-10 -1.06587E-09 -1.14069E-09 -1.03514E-09 + -7.28539E-10 -2.63017E-10 2.63017E-10 7.28539E-10 1.03514E-09 1.14069E-09 + 1.06587E-09 8.74166E-10 6.40076E-10 4.22488E-10 2.52903E-10 1.37844E-10 + 6.86014E-11 3.12369E-11 1.30333E-11 4.98883E-12 1.75349E-12 5.66348E-13 + 1.68190E-13 4.59481E-14 1.15521E-14 2.67382E-15 + -1.06586E-14 -4.60500E-14 -1.83162E-13 -6.70454E-13 -2.25762E-12 -6.98990E-12 + -1.98869E-11 -5.19543E-11 -1.24519E-10 -2.73465E-10 -5.49487E-10 -1.00814E-09 + -1.68416E-09 -2.55153E-09 -3.48468E-09 -4.24887E-09 -4.54713E-09 -4.12635E-09 + -2.90417E-09 -1.04846E-09 1.04846E-09 2.90417E-09 4.12635E-09 4.54713E-09 + 4.24887E-09 3.48468E-09 2.55153E-09 1.68416E-09 1.00814E-09 5.49487E-10 + 2.73465E-10 1.24519E-10 5.19543E-11 1.98869E-11 6.98990E-12 2.25762E-12 + 6.70454E-13 1.83162E-13 4.60500E-14 1.06586E-14 + -3.75027E-14 -1.62029E-13 -6.44462E-13 -2.35901E-12 -7.94352E-12 -2.45942E-11 + -6.99727E-11 -1.82803E-10 -4.38124E-10 -9.62195E-10 -1.93339E-09 -3.54719E-09 + -5.92576E-09 -8.97763E-09 -1.22609E-08 -1.49498E-08 -1.59992E-08 -1.45187E-08 + -1.02184E-08 -3.68905E-09 3.68905E-09 1.02184E-08 1.45187E-08 1.59992E-08 + 1.49498E-08 1.22609E-08 8.97763E-09 5.92576E-09 3.54719E-09 1.93339E-09 + 9.62195E-10 4.38124E-10 1.82803E-10 6.99727E-11 2.45942E-11 7.94352E-12 + 2.35901E-12 6.44462E-13 1.62029E-13 3.75027E-14 + -1.16363E-13 -5.02739E-13 -1.99963E-12 -7.31950E-12 -2.46470E-11 -7.63104E-11 + -2.17110E-10 -5.67198E-10 -1.35940E-09 -2.98548E-09 -5.99888E-09 -1.10062E-08 + -1.83863E-08 -2.78556E-08 -3.80430E-08 -4.63859E-08 -4.96421E-08 -4.50483E-08 + -3.17055E-08 -1.14463E-08 1.14463E-08 3.17055E-08 4.50483E-08 4.96421E-08 + 4.63859E-08 3.80430E-08 2.78556E-08 1.83863E-08 1.10062E-08 5.99888E-09 + 2.98548E-09 1.35940E-09 5.67198E-10 2.17110E-10 7.63104E-11 2.46470E-11 + 7.31950E-12 1.99963E-12 5.02739E-13 1.16363E-13 + -3.18068E-13 -1.37420E-12 -5.46581E-12 -2.00073E-11 -6.73706E-11 -2.08588E-10 + -5.93453E-10 -1.55039E-09 -3.71582E-09 -8.16057E-09 -1.63975E-08 -3.00844E-08 + -5.02576E-08 -7.61410E-08 -1.03988E-07 -1.26792E-07 -1.35693E-07 -1.23136E-07 + -8.66643E-08 -3.12875E-08 3.12875E-08 8.66643E-08 1.23136E-07 1.35693E-07 + 1.26792E-07 1.03988E-07 7.61410E-08 5.02576E-08 3.00844E-08 1.63975E-08 + 8.16057E-09 3.71582E-09 1.55039E-09 5.93453E-10 2.08588E-10 6.73706E-11 + 2.00073E-11 5.46581E-12 1.37420E-12 3.18068E-13 + -7.64971E-13 -3.30502E-12 -1.31456E-11 -4.81185E-11 -1.62030E-10 -5.01666E-10 + -1.42728E-09 -3.72877E-09 -8.93675E-09 -1.96266E-08 -3.94368E-08 -7.23546E-08 + -1.20872E-07 -1.83123E-07 -2.50095E-07 -3.04942E-07 -3.26348E-07 -2.96148E-07 + -2.08432E-07 -7.52482E-08 7.52482E-08 2.08432E-07 2.96148E-07 3.26348E-07 + 3.04942E-07 2.50095E-07 1.83123E-07 1.20872E-07 7.23546E-08 3.94368E-08 + 1.96266E-08 8.93675E-09 3.72877E-09 1.42728E-09 5.01666E-10 1.62030E-10 + 4.81185E-11 1.31456E-11 3.30502E-12 7.64971E-13 + -1.61598E-12 -6.98174E-12 -2.77696E-11 -1.01649E-10 -3.42283E-10 -1.05975E-09 + -3.01509E-09 -7.87691E-09 -1.88786E-08 -4.14606E-08 -8.33089E-08 -1.52847E-07 + -2.55339E-07 -3.86842E-07 -5.28319E-07 -6.44180E-07 -6.89400E-07 -6.25604E-07 + -4.40307E-07 -1.58959E-07 1.58959E-07 4.40307E-07 6.25604E-07 6.89400E-07 + 6.44180E-07 5.28319E-07 3.86842E-07 2.55339E-07 1.52847E-07 8.33089E-08 + 4.14606E-08 1.88786E-08 7.87691E-09 3.01509E-09 1.05975E-09 3.42283E-10 + 1.01649E-10 2.77696E-11 6.98174E-12 1.61598E-12 + -2.99035E-12 -1.29197E-11 -5.13874E-11 -1.88100E-10 -6.33392E-10 -1.96106E-09 + -5.57940E-09 -1.45761E-08 -3.49347E-08 -7.67224E-08 -1.54162E-07 -2.82842E-07 + -4.72502E-07 -7.15848E-07 -9.77649E-07 -1.19205E-06 -1.27573E-06 -1.15768E-06 + -8.14784E-07 -2.94153E-07 2.94153E-07 8.14784E-07 1.15768E-06 1.27573E-06 + 1.19205E-06 9.77649E-07 7.15848E-07 4.72502E-07 2.82842E-07 1.54162E-07 + 7.67224E-08 3.49347E-08 1.45761E-08 5.57940E-09 1.96106E-09 6.33392E-10 + 1.88100E-10 5.13874E-11 1.29197E-11 2.99035E-12 + -4.82561E-12 -2.08488E-11 -8.29252E-11 -3.03543E-10 -1.02212E-09 -3.16462E-09 + -9.00363E-09 -2.35219E-08 -5.63750E-08 -1.23809E-07 -2.48776E-07 -4.56429E-07 + -7.62488E-07 -1.15518E-06 -1.57766E-06 -1.92364E-06 -2.05868E-06 -1.86817E-06 + -1.31484E-06 -4.74683E-07 4.74683E-07 1.31484E-06 1.86817E-06 2.05868E-06 + 1.92364E-06 1.57766E-06 1.15518E-06 7.62488E-07 4.56429E-07 2.48776E-07 + 1.23809E-07 5.63750E-08 2.35219E-08 9.00363E-09 3.16462E-09 1.02212E-09 + 3.03543E-10 8.29252E-11 2.08488E-11 4.82561E-12 + -6.73676E-12 -2.91058E-11 -1.15767E-10 -4.23759E-10 -1.42693E-09 -4.41795E-09 + -1.25695E-08 -3.28376E-08 -7.87020E-08 -1.72843E-07 -3.47302E-07 -6.37195E-07 + -1.06447E-06 -1.61269E-06 -2.20248E-06 -2.68549E-06 -2.87400E-06 -2.60805E-06 + -1.83557E-06 -6.62678E-07 6.62678E-07 1.83557E-06 2.60805E-06 2.87400E-06 + 2.68549E-06 2.20248E-06 1.61269E-06 1.06447E-06 6.37195E-07 3.47302E-07 + 1.72843E-07 7.87020E-08 3.28376E-08 1.25695E-08 4.41795E-09 1.42693E-09 + 4.23759E-10 1.15767E-10 2.91058E-11 6.73676E-12 + -8.01254E-12 -3.46177E-11 -1.37691E-10 -5.04008E-10 -1.69715E-09 -5.25460E-09 + -1.49498E-08 -3.90562E-08 -9.36062E-08 -2.05575E-07 -4.13073E-07 -7.57864E-07 + -1.26605E-06 -1.91809E-06 -2.61958E-06 -3.19405E-06 -3.41827E-06 -3.10195E-06 + -2.18318E-06 -7.88172E-07 7.88172E-07 2.18318E-06 3.10195E-06 3.41827E-06 + 3.19405E-06 2.61958E-06 1.91809E-06 1.26605E-06 7.57864E-07 4.13073E-07 + 2.05575E-07 9.36062E-08 3.90562E-08 1.49498E-08 5.25460E-09 1.69715E-09 + 5.04008E-10 1.37691E-10 3.46177E-11 8.01254E-12 + -7.85659E-12 -3.39440E-11 -1.35011E-10 -4.94199E-10 -1.66412E-09 -5.15233E-09 + -1.46589E-08 -3.82961E-08 -9.17844E-08 -2.01574E-07 -4.05033E-07 -7.43114E-07 + -1.24141E-06 -1.88076E-06 -2.56859E-06 -3.13189E-06 -3.35174E-06 -3.04158E-06 + -2.14069E-06 -7.72833E-07 7.72833E-07 2.14069E-06 3.04158E-06 3.35174E-06 + 3.13189E-06 2.56859E-06 1.88076E-06 1.24141E-06 7.43114E-07 4.05033E-07 + 2.01574E-07 9.17844E-08 3.82961E-08 1.46589E-08 5.15233E-09 1.66412E-09 + 4.94199E-10 1.35011E-10 3.39440E-11 7.85659E-12 + -5.81736E-12 -2.51336E-11 -9.99679E-11 -3.65926E-10 -1.23219E-09 -3.81501E-09 + -1.08540E-08 -2.83561E-08 -6.79611E-08 -1.49254E-07 -2.99904E-07 -5.50234E-07 + -9.19194E-07 -1.39259E-06 -1.90190E-06 -2.31898E-06 -2.48177E-06 -2.25212E-06 + -1.58506E-06 -5.72239E-07 5.72239E-07 1.58506E-06 2.25212E-06 2.48177E-06 + 2.31898E-06 1.90190E-06 1.39259E-06 9.19194E-07 5.50234E-07 2.99904E-07 + 1.49254E-07 6.79611E-08 2.83561E-08 1.08540E-08 3.81501E-09 1.23219E-09 + 3.65926E-10 9.99679E-11 2.51336E-11 5.81736E-12 + -2.15354E-12 -9.30425E-12 -3.70073E-11 -1.35463E-10 -4.56145E-10 -1.41228E-09 + -4.01808E-09 -1.04972E-08 -2.51586E-08 -5.52526E-08 -1.11022E-07 -2.03692E-07 + -3.40278E-07 -5.15527E-07 -7.04066E-07 -8.58468E-07 -9.18731E-07 -8.33714E-07 + -5.86777E-07 -2.11838E-07 2.11838E-07 5.86777E-07 8.33714E-07 9.18731E-07 + 8.58468E-07 7.04066E-07 5.15527E-07 3.40278E-07 2.03692E-07 1.11022E-07 + 5.52526E-08 2.51586E-08 1.04972E-08 4.01808E-09 1.41228E-09 4.56145E-10 + 1.35463E-10 3.70073E-11 9.30425E-12 2.15354E-12 + 2.15354E-12 9.30425E-12 3.70073E-11 1.35463E-10 4.56145E-10 1.41228E-09 + 4.01808E-09 1.04972E-08 2.51586E-08 5.52526E-08 1.11022E-07 2.03692E-07 + 3.40278E-07 5.15527E-07 7.04066E-07 8.58468E-07 9.18731E-07 8.33714E-07 + 5.86777E-07 2.11838E-07 -2.11838E-07 -5.86777E-07 -8.33714E-07 -9.18731E-07 + -8.58468E-07 -7.04066E-07 -5.15527E-07 -3.40278E-07 -2.03692E-07 -1.11022E-07 + -5.52526E-08 -2.51586E-08 -1.04972E-08 -4.01808E-09 -1.41228E-09 -4.56145E-10 + -1.35463E-10 -3.70073E-11 -9.30425E-12 -2.15354E-12 + 5.81736E-12 2.51336E-11 9.99679E-11 3.65926E-10 1.23219E-09 3.81501E-09 + 1.08540E-08 2.83561E-08 6.79611E-08 1.49254E-07 2.99904E-07 5.50234E-07 + 9.19194E-07 1.39259E-06 1.90190E-06 2.31898E-06 2.48177E-06 2.25212E-06 + 1.58506E-06 5.72239E-07 -5.72239E-07 -1.58506E-06 -2.25212E-06 -2.48177E-06 + -2.31898E-06 -1.90190E-06 -1.39259E-06 -9.19194E-07 -5.50234E-07 -2.99904E-07 + -1.49254E-07 -6.79611E-08 -2.83561E-08 -1.08540E-08 -3.81501E-09 -1.23219E-09 + -3.65926E-10 -9.99679E-11 -2.51336E-11 -5.81736E-12 + 7.85659E-12 3.39440E-11 1.35011E-10 4.94199E-10 1.66412E-09 5.15233E-09 + 1.46589E-08 3.82961E-08 9.17844E-08 2.01574E-07 4.05033E-07 7.43114E-07 + 1.24141E-06 1.88076E-06 2.56859E-06 3.13189E-06 3.35174E-06 3.04158E-06 + 2.14069E-06 7.72833E-07 -7.72833E-07 -2.14069E-06 -3.04158E-06 -3.35174E-06 + -3.13189E-06 -2.56859E-06 -1.88076E-06 -1.24141E-06 -7.43114E-07 -4.05033E-07 + -2.01574E-07 -9.17844E-08 -3.82961E-08 -1.46589E-08 -5.15233E-09 -1.66412E-09 + -4.94199E-10 -1.35011E-10 -3.39440E-11 -7.85659E-12 + 8.01254E-12 3.46177E-11 1.37691E-10 5.04008E-10 1.69715E-09 5.25460E-09 + 1.49498E-08 3.90562E-08 9.36062E-08 2.05575E-07 4.13073E-07 7.57864E-07 + 1.26605E-06 1.91809E-06 2.61958E-06 3.19405E-06 3.41827E-06 3.10195E-06 + 2.18318E-06 7.88172E-07 -7.88172E-07 -2.18318E-06 -3.10195E-06 -3.41827E-06 + -3.19405E-06 -2.61958E-06 -1.91809E-06 -1.26605E-06 -7.57864E-07 -4.13073E-07 + -2.05575E-07 -9.36062E-08 -3.90562E-08 -1.49498E-08 -5.25460E-09 -1.69715E-09 + -5.04008E-10 -1.37691E-10 -3.46177E-11 -8.01254E-12 + 6.73676E-12 2.91058E-11 1.15767E-10 4.23759E-10 1.42693E-09 4.41795E-09 + 1.25695E-08 3.28376E-08 7.87020E-08 1.72843E-07 3.47302E-07 6.37195E-07 + 1.06447E-06 1.61269E-06 2.20248E-06 2.68549E-06 2.87400E-06 2.60805E-06 + 1.83557E-06 6.62678E-07 -6.62678E-07 -1.83557E-06 -2.60805E-06 -2.87400E-06 + -2.68549E-06 -2.20248E-06 -1.61269E-06 -1.06447E-06 -6.37195E-07 -3.47302E-07 + -1.72843E-07 -7.87020E-08 -3.28376E-08 -1.25695E-08 -4.41795E-09 -1.42693E-09 + -4.23759E-10 -1.15767E-10 -2.91058E-11 -6.73676E-12 + 4.82561E-12 2.08488E-11 8.29252E-11 3.03543E-10 1.02212E-09 3.16462E-09 + 9.00363E-09 2.35219E-08 5.63750E-08 1.23809E-07 2.48776E-07 4.56429E-07 + 7.62488E-07 1.15518E-06 1.57766E-06 1.92364E-06 2.05868E-06 1.86817E-06 + 1.31484E-06 4.74683E-07 -4.74683E-07 -1.31484E-06 -1.86817E-06 -2.05868E-06 + -1.92364E-06 -1.57766E-06 -1.15518E-06 -7.62488E-07 -4.56429E-07 -2.48776E-07 + -1.23809E-07 -5.63750E-08 -2.35219E-08 -9.00363E-09 -3.16462E-09 -1.02212E-09 + -3.03543E-10 -8.29252E-11 -2.08488E-11 -4.82561E-12 + 2.99035E-12 1.29197E-11 5.13874E-11 1.88100E-10 6.33392E-10 1.96106E-09 + 5.57940E-09 1.45761E-08 3.49347E-08 7.67224E-08 1.54162E-07 2.82842E-07 + 4.72502E-07 7.15848E-07 9.77649E-07 1.19205E-06 1.27573E-06 1.15768E-06 + 8.14784E-07 2.94153E-07 -2.94153E-07 -8.14784E-07 -1.15768E-06 -1.27573E-06 + -1.19205E-06 -9.77649E-07 -7.15848E-07 -4.72502E-07 -2.82842E-07 -1.54162E-07 + -7.67224E-08 -3.49347E-08 -1.45761E-08 -5.57940E-09 -1.96106E-09 -6.33392E-10 + -1.88100E-10 -5.13874E-11 -1.29197E-11 -2.99035E-12 + 1.61598E-12 6.98174E-12 2.77696E-11 1.01649E-10 3.42283E-10 1.05975E-09 + 3.01509E-09 7.87691E-09 1.88786E-08 4.14606E-08 8.33089E-08 1.52847E-07 + 2.55339E-07 3.86842E-07 5.28319E-07 6.44180E-07 6.89400E-07 6.25604E-07 + 4.40307E-07 1.58959E-07 -1.58959E-07 -4.40307E-07 -6.25604E-07 -6.89400E-07 + -6.44180E-07 -5.28319E-07 -3.86842E-07 -2.55339E-07 -1.52847E-07 -8.33089E-08 + -4.14606E-08 -1.88786E-08 -7.87691E-09 -3.01509E-09 -1.05975E-09 -3.42283E-10 + -1.01649E-10 -2.77696E-11 -6.98174E-12 -1.61598E-12 + 7.64971E-13 3.30502E-12 1.31456E-11 4.81185E-11 1.62030E-10 5.01666E-10 + 1.42728E-09 3.72877E-09 8.93675E-09 1.96266E-08 3.94368E-08 7.23546E-08 + 1.20872E-07 1.83123E-07 2.50095E-07 3.04942E-07 3.26348E-07 2.96148E-07 + 2.08432E-07 7.52482E-08 -7.52482E-08 -2.08432E-07 -2.96148E-07 -3.26348E-07 + -3.04942E-07 -2.50095E-07 -1.83123E-07 -1.20872E-07 -7.23546E-08 -3.94368E-08 + -1.96266E-08 -8.93675E-09 -3.72877E-09 -1.42728E-09 -5.01666E-10 -1.62030E-10 + -4.81185E-11 -1.31456E-11 -3.30502E-12 -7.64971E-13 + 3.18068E-13 1.37420E-12 5.46581E-12 2.00073E-11 6.73706E-11 2.08588E-10 + 5.93453E-10 1.55039E-09 3.71582E-09 8.16057E-09 1.63975E-08 3.00844E-08 + 5.02576E-08 7.61410E-08 1.03988E-07 1.26792E-07 1.35693E-07 1.23136E-07 + 8.66643E-08 3.12875E-08 -3.12875E-08 -8.66643E-08 -1.23136E-07 -1.35693E-07 + -1.26792E-07 -1.03988E-07 -7.61410E-08 -5.02576E-08 -3.00844E-08 -1.63975E-08 + -8.16057E-09 -3.71582E-09 -1.55039E-09 -5.93453E-10 -2.08588E-10 -6.73706E-11 + -2.00073E-11 -5.46581E-12 -1.37420E-12 -3.18068E-13 + 1.16363E-13 5.02739E-13 1.99963E-12 7.31950E-12 2.46470E-11 7.63104E-11 + 2.17110E-10 5.67198E-10 1.35940E-09 2.98548E-09 5.99888E-09 1.10062E-08 + 1.83863E-08 2.78556E-08 3.80430E-08 4.63859E-08 4.96421E-08 4.50483E-08 + 3.17055E-08 1.14463E-08 -1.14463E-08 -3.17055E-08 -4.50483E-08 -4.96421E-08 + -4.63859E-08 -3.80430E-08 -2.78556E-08 -1.83863E-08 -1.10062E-08 -5.99888E-09 + -2.98548E-09 -1.35940E-09 -5.67198E-10 -2.17110E-10 -7.63104E-11 -2.46470E-11 + -7.31950E-12 -1.99963E-12 -5.02739E-13 -1.16363E-13 + 3.75027E-14 1.62029E-13 6.44462E-13 2.35901E-12 7.94352E-12 2.45942E-11 + 6.99727E-11 1.82803E-10 4.38124E-10 9.62195E-10 1.93339E-09 3.54719E-09 + 5.92576E-09 8.97763E-09 1.22609E-08 1.49498E-08 1.59992E-08 1.45187E-08 + 1.02184E-08 3.68905E-09 -3.68905E-09 -1.02184E-08 -1.45187E-08 -1.59992E-08 + -1.49498E-08 -1.22609E-08 -8.97763E-09 -5.92576E-09 -3.54719E-09 -1.93339E-09 + -9.62195E-10 -4.38124E-10 -1.82803E-10 -6.99727E-11 -2.45942E-11 -7.94352E-12 + -2.35901E-12 -6.44462E-13 -1.62029E-13 -3.75027E-14 + 1.06586E-14 4.60500E-14 1.83162E-13 6.70454E-13 2.25762E-12 6.98990E-12 + 1.98869E-11 5.19543E-11 1.24519E-10 2.73465E-10 5.49487E-10 1.00814E-09 + 1.68416E-09 2.55153E-09 3.48468E-09 4.24887E-09 4.54713E-09 4.12635E-09 + 2.90417E-09 1.04846E-09 -1.04846E-09 -2.90417E-09 -4.12635E-09 -4.54713E-09 + -4.24887E-09 -3.48468E-09 -2.55153E-09 -1.68416E-09 -1.00814E-09 -5.49487E-10 + -2.73465E-10 -1.24519E-10 -5.19543E-11 -1.98869E-11 -6.98990E-12 -2.25762E-12 + -6.70454E-13 -1.83162E-13 -4.60500E-14 -1.06586E-14 + 2.67382E-15 1.15521E-14 4.59481E-14 1.68190E-13 5.66348E-13 1.75349E-12 + 4.98883E-12 1.30333E-11 3.12369E-11 6.86014E-11 1.37844E-10 2.52903E-10 + 4.22488E-10 6.40076E-10 8.74166E-10 1.06587E-09 1.14069E-09 1.03514E-09 + 7.28539E-10 2.63017E-10 -2.63017E-10 -7.28539E-10 -1.03514E-09 -1.14069E-09 + -1.06587E-09 -8.74166E-10 -6.40076E-10 -4.22488E-10 -2.52903E-10 -1.37844E-10 + -6.86014E-11 -3.12369E-11 -1.30333E-11 -4.98883E-12 -1.75349E-12 -5.66348E-13 + -1.68190E-13 -4.59481E-14 -1.15521E-14 -2.67382E-15 + 5.92618E-16 2.56037E-15 1.01838E-14 3.72771E-14 1.25523E-13 3.88637E-13 + 1.10571E-12 2.88865E-12 6.92324E-12 1.52046E-11 3.05514E-11 5.60526E-11 + 9.36388E-11 1.41864E-10 1.93747E-10 2.36236E-10 2.52820E-10 2.29424E-10 + 1.61471E-10 5.82943E-11 -5.82943E-11 -1.61471E-10 -2.29424E-10 -2.52820E-10 + -2.36236E-10 -1.93747E-10 -1.41864E-10 -9.36388E-11 -5.60526E-11 -3.05514E-11 + -1.52046E-11 -6.92324E-12 -2.88865E-12 -1.10571E-12 -3.88637E-13 -1.25523E-13 + -3.72771E-14 -1.01838E-14 -2.56037E-15 -5.92618E-16 + 1.16168E-16 5.01899E-16 1.99628E-15 7.30727E-15 2.46058E-14 7.61828E-14 + 2.16747E-13 5.66250E-13 1.35713E-12 2.98049E-12 5.98885E-12 1.09878E-11 + 1.83556E-11 2.78090E-11 3.79794E-11 4.63083E-11 4.95591E-11 4.49730E-11 + 3.16525E-11 1.14272E-11 -1.14272E-11 -3.16525E-11 -4.49730E-11 -4.95591E-11 + -4.63083E-11 -3.79794E-11 -2.78090E-11 -1.83556E-11 -1.09878E-11 -5.98885E-12 + -2.98049E-12 -1.35713E-12 -5.66250E-13 -2.16747E-13 -7.61828E-14 -2.46058E-14 + -7.30727E-15 -1.99628E-15 -5.01899E-16 -1.16168E-16 + 2.01648E-17 8.71207E-17 3.46519E-16 1.26841E-15 4.27113E-15 1.32240E-14 + 3.76235E-14 9.82909E-14 2.35574E-13 5.17360E-13 1.03956E-12 1.90728E-12 + 3.18621E-12 4.82716E-12 6.59256E-12 8.03831E-12 8.60258E-12 7.80652E-12 + 5.49431E-12 1.98355E-12 -1.98355E-12 -5.49431E-12 -7.80652E-12 -8.60258E-12 + -8.03831E-12 -6.59256E-12 -4.82716E-12 -3.18621E-12 -1.90728E-12 -1.03956E-12 + -5.17360E-13 -2.35574E-13 -9.82909E-14 -3.76235E-14 -1.32240E-14 -4.27113E-15 + -1.26841E-15 -3.46519E-16 -8.71207E-17 -2.01648E-17 + 3.10372E-18 1.34095E-17 5.33356E-17 1.95232E-16 6.57404E-16 2.03541E-15 + 5.79093E-15 1.51287E-14 3.62591E-14 7.96311E-14 1.60007E-13 2.93565E-13 + 4.90415E-13 7.42987E-13 1.01471E-12 1.23724E-12 1.32409E-12 1.20156E-12 + 8.45673E-13 3.05305E-13 -3.05305E-13 -8.45673E-13 -1.20156E-12 -1.32409E-12 + -1.23724E-12 -1.01471E-12 -7.42987E-13 -4.90415E-13 -2.93565E-13 -1.60007E-13 + -7.96311E-14 -3.62591E-14 -1.51287E-14 -5.79093E-15 -2.03541E-15 -6.57404E-16 + -1.95232E-16 -5.33356E-17 -1.34095E-17 -3.10372E-18 + 4.24243E-19 1.83292E-18 7.29036E-18 2.66859E-17 8.98596E-17 2.78217E-16 + 7.91553E-16 2.06793E-15 4.95620E-15 1.08846E-14 2.18711E-14 4.01269E-14 + 6.70341E-14 1.01558E-13 1.38700E-13 1.69117E-13 1.80988E-13 1.64240E-13 + 1.15594E-13 4.17316E-14 -4.17316E-14 -1.15594E-13 -1.64240E-13 -1.80988E-13 + -1.69117E-13 -1.38700E-13 -1.01558E-13 -6.70341E-14 -4.01269E-14 -2.18711E-14 + -1.08846E-14 -4.95620E-15 -2.06793E-15 -7.91553E-16 -2.78217E-16 -8.98596E-17 + -2.66859E-17 -7.29036E-18 -1.83292E-18 -4.24243E-19 + 5.15818E-20 2.22857E-19 8.86403E-19 3.24462E-18 1.09256E-17 3.38272E-17 + 9.62416E-17 2.51430E-16 6.02603E-16 1.32342E-15 2.65921E-15 4.87886E-15 + 8.15038E-15 1.23480E-14 1.68639E-14 2.05622E-14 2.20056E-14 1.99692E-14 + 1.40546E-14 5.07397E-15 -5.07397E-15 -1.40546E-14 -1.99692E-14 -2.20056E-14 + -2.05622E-14 -1.68639E-14 -1.23480E-14 -8.15038E-15 -4.87886E-15 -2.65921E-15 + -1.32342E-15 -6.02603E-16 -2.51430E-16 -9.62416E-17 -3.38272E-17 -1.09256E-17 + -3.24462E-18 -8.86403E-19 -2.22857E-19 -5.15818E-20 + -8.47410E-21 -3.66119E-20 -1.45622E-19 -5.33042E-19 -1.79492E-18 -5.55729E-18 + -1.58110E-17 -4.13061E-17 -9.89984E-17 -2.17417E-16 -4.36868E-16 -8.01521E-16 + -1.33898E-15 -2.02858E-15 -2.77048E-15 -3.37805E-15 -3.61518E-15 -3.28064E-15 + -2.30895E-15 -8.33575E-16 8.33575E-16 2.30895E-15 3.28064E-15 3.61518E-15 + 3.37805E-15 2.77048E-15 2.02858E-15 1.33898E-15 8.01521E-16 4.36868E-16 + 2.17417E-16 9.89984E-17 4.13061E-17 1.58110E-17 5.55729E-18 1.79492E-18 + 5.33042E-19 1.45622E-19 3.66119E-20 8.47410E-21 + -7.10012E-20 -3.06757E-19 -1.22011E-18 -4.46615E-18 -1.50389E-17 -4.65623E-17 + -1.32474E-16 -3.46088E-16 -8.29469E-16 -1.82165E-15 -3.66034E-15 -6.71563E-15 + -1.12188E-14 -1.69967E-14 -2.32127E-14 -2.83033E-14 -3.02902E-14 -2.74872E-14 + -1.93458E-14 -6.98420E-15 6.98420E-15 1.93458E-14 2.74872E-14 3.02902E-14 + 2.83033E-14 2.32127E-14 1.69967E-14 1.12188E-14 6.71563E-15 3.66034E-15 + 1.82165E-15 8.29469E-16 3.46088E-16 1.32474E-16 4.65623E-17 1.50389E-17 + 4.46615E-18 1.22011E-18 3.06757E-19 7.10012E-20 + -5.27570E-19 -2.27934E-18 -9.06598E-18 -3.31855E-17 -1.11746E-16 -3.45979E-16 + -9.84342E-16 -2.57158E-15 -6.16332E-15 -1.35357E-14 -2.71980E-14 -4.99001E-14 + -8.33607E-14 -1.26293E-13 -1.72481E-13 -2.10306E-13 -2.25069E-13 -2.04242E-13 + -1.43748E-13 -5.18957E-14 5.18957E-14 1.43748E-13 2.04242E-13 2.25069E-13 + 2.10306E-13 1.72481E-13 1.26293E-13 8.33607E-14 4.99001E-14 2.71980E-14 + 1.35357E-14 6.16332E-15 2.57158E-15 9.84342E-16 3.45979E-16 1.11746E-16 + 3.31855E-17 9.06598E-18 2.27934E-18 5.27570E-19 + -3.47177E-18 -1.49996E-17 -5.96603E-17 -2.18383E-16 -7.35362E-16 -2.27678E-15 + -6.47764E-15 -1.69228E-14 -4.05588E-14 -8.90740E-14 -1.78981E-13 -3.28377E-13 + -5.48570E-13 -8.31093E-13 -1.13504E-12 -1.38396E-12 -1.48111E-12 -1.34405E-12 + -9.45956E-13 -3.41509E-13 3.41509E-13 9.45956E-13 1.34405E-12 1.48111E-12 + 1.38396E-12 1.13504E-12 8.31093E-13 5.48570E-13 3.28377E-13 1.78981E-13 + 8.90740E-14 4.05588E-14 1.69228E-14 6.47764E-15 2.27678E-15 7.35362E-16 + 2.18383E-16 5.96603E-17 1.49996E-17 3.47177E-18 + -2.02100E-17 -8.73162E-17 -3.47297E-16 -1.27126E-15 -4.28072E-15 -1.32537E-14 + -3.77079E-14 -9.85115E-14 -2.36103E-13 -5.18521E-13 -1.04189E-12 -1.91156E-12 + -3.19336E-12 -4.83799E-12 -6.60735E-12 -8.05635E-12 -8.62189E-12 -7.82404E-12 + -5.50664E-12 -1.98801E-12 1.98801E-12 5.50664E-12 7.82404E-12 8.62189E-12 + 8.05635E-12 6.60735E-12 4.83799E-12 3.19336E-12 1.91156E-12 1.04189E-12 + 5.18521E-13 2.36103E-13 9.85115E-14 3.77079E-14 1.32537E-14 4.28072E-15 + 1.27126E-15 3.47297E-16 8.73162E-17 2.02100E-17 + -1.03965E-16 -4.49177E-16 -1.78658E-15 -6.53968E-15 -2.20211E-14 -6.81802E-14 + -1.93979E-13 -5.06768E-13 -1.21457E-12 -2.66741E-12 -5.35976E-12 -9.83355E-12 + -1.64275E-11 -2.48879E-11 -3.39899E-11 -4.14439E-11 -4.43532E-11 -4.02489E-11 + -2.83276E-11 -1.02268E-11 1.02268E-11 2.83276E-11 4.02489E-11 4.43532E-11 + 4.14439E-11 3.39899E-11 2.48879E-11 1.64275E-11 9.83355E-12 5.35976E-12 + 2.66741E-12 1.21457E-12 5.06768E-13 1.93979E-13 6.81802E-14 2.20211E-14 + 6.53968E-15 1.78658E-15 4.49177E-16 1.03965E-16 + -4.72220E-16 -2.04020E-15 -8.11482E-15 -2.97038E-14 -1.00022E-13 -3.09680E-13 + -8.81070E-13 -2.30179E-12 -5.51670E-12 -1.21156E-11 -2.43445E-11 -4.46648E-11 + -7.46149E-11 -1.13043E-10 -1.54385E-10 -1.88242E-10 -2.01456E-10 -1.82814E-10 + -1.28666E-10 -4.64511E-11 4.64511E-11 1.28666E-10 1.82814E-10 2.01456E-10 + 1.88242E-10 1.54385E-10 1.13043E-10 7.46149E-11 4.46648E-11 2.43445E-11 + 1.21156E-11 5.51670E-12 2.30179E-12 8.81070E-13 3.09680E-13 1.00022E-13 + 2.97038E-14 8.11482E-15 2.04020E-15 4.72220E-16 + -1.89237E-15 -8.17587E-15 -3.25192E-14 -1.19034E-13 -4.00826E-13 -1.24101E-12 + -3.53078E-12 -9.22414E-12 -2.21075E-11 -4.85518E-11 -9.75577E-11 -1.78989E-10 + -2.99010E-10 -4.53006E-10 -6.18680E-10 -7.54357E-10 -8.07312E-10 -7.32605E-10 + -5.15615E-10 -1.86147E-10 1.86147E-10 5.15615E-10 7.32605E-10 8.07312E-10 + 7.54357E-10 6.18680E-10 4.53006E-10 2.99010E-10 1.78989E-10 9.75577E-11 + 4.85518E-11 2.21075E-11 9.22414E-12 3.53078E-12 1.24101E-12 4.00826E-13 + 1.19034E-13 3.25192E-14 8.17587E-15 1.89237E-15 + -6.68605E-15 -2.88867E-14 -1.14896E-13 -4.20569E-13 -1.41619E-12 -4.38469E-12 + -1.24749E-11 -3.25904E-11 -7.81096E-11 -1.71542E-10 -3.44688E-10 -6.32399E-10 + -1.05645E-09 -1.60055E-09 -2.18590E-09 -2.66527E-09 -2.85237E-09 -2.58842E-09 + -1.82176E-09 -6.57690E-10 6.57690E-10 1.82176E-09 2.58842E-09 2.85237E-09 + 2.66527E-09 2.18590E-09 1.60055E-09 1.05645E-09 6.32399E-10 3.44688E-10 + 1.71542E-10 7.81096E-11 3.25904E-11 1.24749E-11 4.38469E-12 1.41619E-12 + 4.20569E-13 1.14896E-13 2.88867E-14 6.68605E-15 + -2.08129E-14 -8.99209E-14 -3.57657E-13 -1.30918E-12 -4.40841E-12 -1.36490E-11 + -3.88327E-11 -1.01450E-10 -2.43146E-10 -5.33989E-10 -1.07297E-09 -1.96858E-09 + -3.28862E-09 -4.98231E-09 -6.80445E-09 -8.29667E-09 -8.87908E-09 -8.05743E-09 + -5.67090E-09 -2.04731E-09 2.04731E-09 5.67090E-09 8.05743E-09 8.87908E-09 + 8.29667E-09 6.80445E-09 4.98231E-09 3.28862E-09 1.96858E-09 1.07297E-09 + 5.33989E-10 2.43146E-10 1.01450E-10 3.88327E-11 1.36490E-11 4.40841E-12 + 1.30918E-12 3.57657E-13 8.99209E-14 2.08129E-14 + -5.70344E-14 -2.46414E-13 -9.80103E-13 -3.58761E-12 -1.20806E-11 -3.74030E-11 + -1.06415E-10 -2.78008E-10 -6.66303E-10 -1.46331E-09 -2.94031E-09 -5.39459E-09 + -9.01194E-09 -1.36532E-08 -1.86465E-08 -2.27357E-08 -2.43317E-08 -2.20801E-08 + -1.55402E-08 -5.61033E-09 5.61033E-09 1.55402E-08 2.20801E-08 2.43317E-08 + 2.27357E-08 1.86465E-08 1.36532E-08 9.01194E-09 5.39459E-09 2.94031E-09 + 1.46331E-09 6.66303E-10 2.78008E-10 1.06415E-10 3.74030E-11 1.20806E-11 + 3.58761E-12 9.80103E-13 2.46414E-13 5.70344E-14 + -1.37440E-13 -5.93804E-13 -2.36183E-12 -8.64534E-12 -2.91115E-11 -9.01331E-11 + -2.56437E-10 -6.69939E-10 -1.60564E-09 -3.52626E-09 -7.08551E-09 -1.29998E-08 + -2.17168E-08 -3.29013E-08 -4.49341E-08 -5.47881E-08 -5.86342E-08 -5.32083E-08 + -3.74485E-08 -1.35197E-08 1.35197E-08 3.74485E-08 5.32083E-08 5.86342E-08 + 5.47881E-08 4.49341E-08 3.29013E-08 2.17168E-08 1.29998E-08 7.08551E-09 + 3.52626E-09 1.60564E-09 6.69939E-10 2.56437E-10 9.01331E-11 2.91115E-11 + 8.64534E-12 2.36183E-12 5.93804E-13 1.37440E-13 + -2.90779E-13 -1.25630E-12 -4.99687E-12 -1.82907E-11 -6.15905E-11 -1.90692E-10 + -5.42537E-10 -1.41737E-09 -3.39702E-09 -7.46043E-09 -1.49906E-08 -2.75033E-08 + -4.59457E-08 -6.96085E-08 -9.50658E-08 -1.15914E-07 -1.24051E-07 -1.12571E-07 + -7.92289E-08 -2.86032E-08 2.86032E-08 7.92289E-08 1.12571E-07 1.24051E-07 + 1.15914E-07 9.50658E-08 6.96085E-08 4.59457E-08 2.75033E-08 1.49906E-08 + 7.46043E-09 3.39702E-09 1.41737E-09 5.42537E-10 1.90692E-10 6.15905E-11 + 1.82907E-11 4.99687E-12 1.25630E-12 2.90779E-13 + -5.38711E-13 -2.32747E-12 -9.25742E-12 -3.38862E-11 -1.14105E-10 -3.53285E-10 + -1.00513E-09 -2.62589E-09 -6.29347E-09 -1.38215E-08 -2.77723E-08 -5.09539E-08 + -8.51210E-08 -1.28960E-07 -1.76123E-07 -2.14747E-07 -2.29822E-07 -2.08555E-07 + -1.46783E-07 -5.29916E-08 5.29916E-08 1.46783E-07 2.08555E-07 2.29822E-07 + 2.14747E-07 1.76123E-07 1.28960E-07 8.51210E-08 5.09539E-08 2.77723E-08 + 1.38215E-08 6.29347E-09 2.62589E-09 1.00513E-09 3.53285E-10 1.14105E-10 + 3.38862E-11 9.25742E-12 2.32747E-12 5.38711E-13 + -8.70101E-13 -3.75923E-12 -1.49522E-11 -5.47315E-11 -1.84298E-10 -5.70610E-10 + -1.62344E-09 -4.24122E-09 -1.01649E-08 -2.23239E-08 -4.48566E-08 -8.22984E-08 + -1.37484E-07 -2.08290E-07 -2.84466E-07 -3.46850E-07 -3.71198E-07 -3.36848E-07 + -2.37077E-07 -8.55896E-08 8.55896E-08 2.37077E-07 3.36848E-07 3.71198E-07 + 3.46850E-07 2.84466E-07 2.08290E-07 1.37484E-07 8.22984E-08 4.48566E-08 + 2.23239E-08 1.01649E-08 4.24122E-09 1.62344E-09 5.70610E-10 1.84298E-10 + 5.47315E-11 1.49522E-11 3.75923E-12 8.70101E-13 + -1.21551E-12 -5.25153E-12 -2.08877E-11 -7.64583E-11 -2.57458E-10 -7.97125E-10 + -2.26789E-09 -5.92485E-09 -1.42001E-08 -3.11858E-08 -6.26633E-08 -1.14968E-07 + -1.92060E-07 -2.90975E-07 -3.97391E-07 -4.84539E-07 -5.18553E-07 -4.70567E-07 + -3.31190E-07 -1.19566E-07 1.19566E-07 3.31190E-07 4.70567E-07 5.18553E-07 + 4.84539E-07 3.97391E-07 2.90975E-07 1.92060E-07 1.14968E-07 6.26633E-08 + 3.11858E-08 1.42001E-08 5.92485E-09 2.26789E-09 7.97125E-10 2.57458E-10 + 7.64583E-11 2.08877E-11 5.25153E-12 1.21551E-12 + -1.44639E-12 -6.24907E-12 -2.48554E-11 -9.09817E-11 -3.06363E-10 -9.48540E-10 + -2.69868E-09 -7.05029E-09 -1.68974E-08 -3.71096E-08 -7.45663E-08 -1.36807E-07 + -2.28543E-07 -3.46246E-07 -4.72876E-07 -5.76578E-07 -6.17053E-07 -5.59952E-07 + -3.94100E-07 -1.42278E-07 1.42278E-07 3.94100E-07 5.59952E-07 6.17053E-07 + 5.76578E-07 4.72876E-07 3.46246E-07 2.28543E-07 1.36807E-07 7.45663E-08 + 3.71096E-08 1.68974E-08 7.05029E-09 2.69868E-09 9.48540E-10 3.06363E-10 + 9.09817E-11 2.48554E-11 6.24907E-12 1.44639E-12 + -1.41872E-12 -6.12952E-12 -2.43799E-11 -8.92411E-11 -3.00502E-10 -9.30394E-10 + -2.64706E-09 -6.91541E-09 -1.65742E-08 -3.63997E-08 -7.31398E-08 -1.34190E-07 + -2.24171E-07 -3.39622E-07 -4.63830E-07 -5.65548E-07 -6.05248E-07 -5.49240E-07 + -3.86561E-07 -1.39556E-07 1.39556E-07 3.86561E-07 5.49240E-07 6.05248E-07 + 5.65548E-07 4.63830E-07 3.39622E-07 2.24171E-07 1.34190E-07 7.31398E-08 + 3.63997E-08 1.65742E-08 6.91541E-09 2.64706E-09 9.30394E-10 3.00502E-10 + 8.92411E-11 2.43799E-11 6.12952E-12 1.41872E-12 + -1.05071E-12 -4.53953E-12 -1.80558E-11 -6.60921E-11 -2.22552E-10 -6.89051E-10 + -1.96041E-09 -5.12156E-09 -1.22749E-08 -2.69577E-08 -5.41674E-08 -9.93810E-08 + -1.66021E-07 -2.51525E-07 -3.43513E-07 -4.18845E-07 -4.48248E-07 -4.06768E-07 + -2.86287E-07 -1.03355E-07 1.03355E-07 2.86287E-07 4.06768E-07 4.48248E-07 + 4.18845E-07 3.43513E-07 2.51525E-07 1.66021E-07 9.93810E-08 5.41674E-08 + 2.69577E-08 1.22749E-08 5.12156E-09 1.96041E-09 6.89051E-10 2.22552E-10 + 6.60921E-11 1.80558E-11 4.53953E-12 1.05071E-12 + -3.89003E-13 -1.68067E-12 -6.68479E-12 -2.44693E-11 -8.23955E-11 -2.55107E-10 + -7.25804E-10 -1.89616E-09 -4.54452E-09 -9.98053E-09 -2.00544E-08 -3.67938E-08 + -6.14659E-08 -9.31219E-08 -1.27179E-07 -1.55069E-07 -1.65955E-07 -1.50598E-07 + -1.05992E-07 -3.82652E-08 3.82652E-08 1.05992E-07 1.50598E-07 1.65955E-07 + 1.55069E-07 1.27179E-07 9.31219E-08 6.14659E-08 3.67938E-08 2.00544E-08 + 9.98053E-09 4.54452E-09 1.89616E-09 7.25804E-10 2.55107E-10 8.23955E-11 + 2.44693E-11 6.68479E-12 1.68067E-12 3.89003E-13 + 3.89003E-13 1.68067E-12 6.68479E-12 2.44693E-11 8.23955E-11 2.55107E-10 + 7.25804E-10 1.89616E-09 4.54452E-09 9.98053E-09 2.00544E-08 3.67938E-08 + 6.14659E-08 9.31219E-08 1.27179E-07 1.55069E-07 1.65955E-07 1.50598E-07 + 1.05992E-07 3.82652E-08 -3.82652E-08 -1.05992E-07 -1.50598E-07 -1.65955E-07 + -1.55069E-07 -1.27179E-07 -9.31219E-08 -6.14659E-08 -3.67938E-08 -2.00544E-08 + -9.98053E-09 -4.54452E-09 -1.89616E-09 -7.25804E-10 -2.55107E-10 -8.23955E-11 + -2.44693E-11 -6.68479E-12 -1.68067E-12 -3.89003E-13 + 1.05071E-12 4.53953E-12 1.80558E-11 6.60921E-11 2.22552E-10 6.89051E-10 + 1.96041E-09 5.12156E-09 1.22749E-08 2.69577E-08 5.41674E-08 9.93810E-08 + 1.66021E-07 2.51525E-07 3.43513E-07 4.18845E-07 4.48248E-07 4.06768E-07 + 2.86287E-07 1.03355E-07 -1.03355E-07 -2.86287E-07 -4.06768E-07 -4.48248E-07 + -4.18845E-07 -3.43513E-07 -2.51525E-07 -1.66021E-07 -9.93810E-08 -5.41674E-08 + -2.69577E-08 -1.22749E-08 -5.12156E-09 -1.96041E-09 -6.89051E-10 -2.22552E-10 + -6.60921E-11 -1.80558E-11 -4.53953E-12 -1.05071E-12 + 1.41872E-12 6.12952E-12 2.43799E-11 8.92411E-11 3.00502E-10 9.30394E-10 + 2.64706E-09 6.91541E-09 1.65742E-08 3.63997E-08 7.31398E-08 1.34190E-07 + 2.24171E-07 3.39622E-07 4.63830E-07 5.65548E-07 6.05248E-07 5.49240E-07 + 3.86561E-07 1.39556E-07 -1.39556E-07 -3.86561E-07 -5.49240E-07 -6.05248E-07 + -5.65548E-07 -4.63830E-07 -3.39622E-07 -2.24171E-07 -1.34190E-07 -7.31398E-08 + -3.63997E-08 -1.65742E-08 -6.91541E-09 -2.64706E-09 -9.30394E-10 -3.00502E-10 + -8.92411E-11 -2.43799E-11 -6.12952E-12 -1.41872E-12 + 1.44639E-12 6.24907E-12 2.48554E-11 9.09817E-11 3.06363E-10 9.48540E-10 + 2.69868E-09 7.05029E-09 1.68974E-08 3.71096E-08 7.45663E-08 1.36807E-07 + 2.28543E-07 3.46246E-07 4.72876E-07 5.76578E-07 6.17053E-07 5.59952E-07 + 3.94100E-07 1.42278E-07 -1.42278E-07 -3.94100E-07 -5.59952E-07 -6.17053E-07 + -5.76578E-07 -4.72876E-07 -3.46246E-07 -2.28543E-07 -1.36807E-07 -7.45663E-08 + -3.71096E-08 -1.68974E-08 -7.05029E-09 -2.69868E-09 -9.48540E-10 -3.06363E-10 + -9.09817E-11 -2.48554E-11 -6.24907E-12 -1.44639E-12 + 1.21551E-12 5.25153E-12 2.08877E-11 7.64583E-11 2.57458E-10 7.97125E-10 + 2.26789E-09 5.92485E-09 1.42001E-08 3.11858E-08 6.26633E-08 1.14968E-07 + 1.92060E-07 2.90975E-07 3.97391E-07 4.84539E-07 5.18553E-07 4.70567E-07 + 3.31190E-07 1.19566E-07 -1.19566E-07 -3.31190E-07 -4.70567E-07 -5.18553E-07 + -4.84539E-07 -3.97391E-07 -2.90975E-07 -1.92060E-07 -1.14968E-07 -6.26633E-08 + -3.11858E-08 -1.42001E-08 -5.92485E-09 -2.26789E-09 -7.97125E-10 -2.57458E-10 + -7.64583E-11 -2.08877E-11 -5.25153E-12 -1.21551E-12 + 8.70101E-13 3.75923E-12 1.49522E-11 5.47315E-11 1.84298E-10 5.70610E-10 + 1.62344E-09 4.24122E-09 1.01649E-08 2.23239E-08 4.48566E-08 8.22984E-08 + 1.37484E-07 2.08290E-07 2.84466E-07 3.46850E-07 3.71198E-07 3.36848E-07 + 2.37077E-07 8.55896E-08 -8.55896E-08 -2.37077E-07 -3.36848E-07 -3.71198E-07 + -3.46850E-07 -2.84466E-07 -2.08290E-07 -1.37484E-07 -8.22984E-08 -4.48566E-08 + -2.23239E-08 -1.01649E-08 -4.24122E-09 -1.62344E-09 -5.70610E-10 -1.84298E-10 + -5.47315E-11 -1.49522E-11 -3.75923E-12 -8.70101E-13 + 5.38711E-13 2.32747E-12 9.25742E-12 3.38862E-11 1.14105E-10 3.53285E-10 + 1.00513E-09 2.62589E-09 6.29347E-09 1.38215E-08 2.77723E-08 5.09539E-08 + 8.51210E-08 1.28960E-07 1.76123E-07 2.14747E-07 2.29822E-07 2.08555E-07 + 1.46783E-07 5.29916E-08 -5.29916E-08 -1.46783E-07 -2.08555E-07 -2.29822E-07 + -2.14747E-07 -1.76123E-07 -1.28960E-07 -8.51210E-08 -5.09539E-08 -2.77723E-08 + -1.38215E-08 -6.29347E-09 -2.62589E-09 -1.00513E-09 -3.53285E-10 -1.14105E-10 + -3.38862E-11 -9.25742E-12 -2.32747E-12 -5.38711E-13 + 2.90779E-13 1.25630E-12 4.99687E-12 1.82907E-11 6.15905E-11 1.90692E-10 + 5.42537E-10 1.41737E-09 3.39702E-09 7.46043E-09 1.49906E-08 2.75033E-08 + 4.59457E-08 6.96085E-08 9.50658E-08 1.15914E-07 1.24051E-07 1.12571E-07 + 7.92289E-08 2.86032E-08 -2.86032E-08 -7.92289E-08 -1.12571E-07 -1.24051E-07 + -1.15914E-07 -9.50658E-08 -6.96085E-08 -4.59457E-08 -2.75033E-08 -1.49906E-08 + -7.46043E-09 -3.39702E-09 -1.41737E-09 -5.42537E-10 -1.90692E-10 -6.15905E-11 + -1.82907E-11 -4.99687E-12 -1.25630E-12 -2.90779E-13 + 1.37440E-13 5.93804E-13 2.36183E-12 8.64534E-12 2.91115E-11 9.01331E-11 + 2.56437E-10 6.69939E-10 1.60564E-09 3.52626E-09 7.08551E-09 1.29998E-08 + 2.17168E-08 3.29013E-08 4.49341E-08 5.47881E-08 5.86342E-08 5.32083E-08 + 3.74485E-08 1.35197E-08 -1.35197E-08 -3.74485E-08 -5.32083E-08 -5.86342E-08 + -5.47881E-08 -4.49341E-08 -3.29013E-08 -2.17168E-08 -1.29998E-08 -7.08551E-09 + -3.52626E-09 -1.60564E-09 -6.69939E-10 -2.56437E-10 -9.01331E-11 -2.91115E-11 + -8.64534E-12 -2.36183E-12 -5.93804E-13 -1.37440E-13 + 5.70344E-14 2.46414E-13 9.80103E-13 3.58761E-12 1.20806E-11 3.74030E-11 + 1.06415E-10 2.78008E-10 6.66303E-10 1.46331E-09 2.94031E-09 5.39459E-09 + 9.01194E-09 1.36532E-08 1.86465E-08 2.27357E-08 2.43317E-08 2.20801E-08 + 1.55402E-08 5.61033E-09 -5.61033E-09 -1.55402E-08 -2.20801E-08 -2.43317E-08 + -2.27357E-08 -1.86465E-08 -1.36532E-08 -9.01194E-09 -5.39459E-09 -2.94031E-09 + -1.46331E-09 -6.66303E-10 -2.78008E-10 -1.06415E-10 -3.74030E-11 -1.20806E-11 + -3.58761E-12 -9.80103E-13 -2.46414E-13 -5.70344E-14 + 2.08129E-14 8.99209E-14 3.57657E-13 1.30918E-12 4.40841E-12 1.36490E-11 + 3.88327E-11 1.01450E-10 2.43146E-10 5.33989E-10 1.07297E-09 1.96858E-09 + 3.28862E-09 4.98231E-09 6.80445E-09 8.29667E-09 8.87908E-09 8.05743E-09 + 5.67090E-09 2.04731E-09 -2.04731E-09 -5.67090E-09 -8.05743E-09 -8.87908E-09 + -8.29667E-09 -6.80445E-09 -4.98231E-09 -3.28862E-09 -1.96858E-09 -1.07297E-09 + -5.33989E-10 -2.43146E-10 -1.01450E-10 -3.88327E-11 -1.36490E-11 -4.40841E-12 + -1.30918E-12 -3.57657E-13 -8.99209E-14 -2.08129E-14 + 6.68605E-15 2.88867E-14 1.14896E-13 4.20569E-13 1.41619E-12 4.38469E-12 + 1.24749E-11 3.25904E-11 7.81096E-11 1.71542E-10 3.44688E-10 6.32399E-10 + 1.05645E-09 1.60055E-09 2.18590E-09 2.66527E-09 2.85237E-09 2.58842E-09 + 1.82176E-09 6.57690E-10 -6.57690E-10 -1.82176E-09 -2.58842E-09 -2.85237E-09 + -2.66527E-09 -2.18590E-09 -1.60055E-09 -1.05645E-09 -6.32399E-10 -3.44688E-10 + -1.71542E-10 -7.81096E-11 -3.25904E-11 -1.24749E-11 -4.38469E-12 -1.41619E-12 + -4.20569E-13 -1.14896E-13 -2.88867E-14 -6.68605E-15 + 1.89237E-15 8.17587E-15 3.25192E-14 1.19034E-13 4.00826E-13 1.24101E-12 + 3.53078E-12 9.22414E-12 2.21075E-11 4.85518E-11 9.75577E-11 1.78989E-10 + 2.99010E-10 4.53006E-10 6.18680E-10 7.54357E-10 8.07312E-10 7.32605E-10 + 5.15615E-10 1.86147E-10 -1.86147E-10 -5.15615E-10 -7.32605E-10 -8.07312E-10 + -7.54357E-10 -6.18680E-10 -4.53006E-10 -2.99010E-10 -1.78989E-10 -9.75577E-11 + -4.85518E-11 -2.21075E-11 -9.22414E-12 -3.53078E-12 -1.24101E-12 -4.00826E-13 + -1.19034E-13 -3.25192E-14 -8.17587E-15 -1.89237E-15 + 4.72220E-16 2.04020E-15 8.11482E-15 2.97038E-14 1.00022E-13 3.09680E-13 + 8.81070E-13 2.30179E-12 5.51670E-12 1.21156E-11 2.43445E-11 4.46648E-11 + 7.46149E-11 1.13043E-10 1.54385E-10 1.88242E-10 2.01456E-10 1.82814E-10 + 1.28666E-10 4.64511E-11 -4.64511E-11 -1.28666E-10 -1.82814E-10 -2.01456E-10 + -1.88242E-10 -1.54385E-10 -1.13043E-10 -7.46149E-11 -4.46648E-11 -2.43445E-11 + -1.21156E-11 -5.51670E-12 -2.30179E-12 -8.81070E-13 -3.09680E-13 -1.00022E-13 + -2.97038E-14 -8.11482E-15 -2.04020E-15 -4.72220E-16 + 1.03965E-16 4.49177E-16 1.78658E-15 6.53968E-15 2.20211E-14 6.81802E-14 + 1.93979E-13 5.06768E-13 1.21457E-12 2.66741E-12 5.35976E-12 9.83355E-12 + 1.64275E-11 2.48879E-11 3.39899E-11 4.14439E-11 4.43532E-11 4.02489E-11 + 2.83276E-11 1.02268E-11 -1.02268E-11 -2.83276E-11 -4.02489E-11 -4.43532E-11 + -4.14439E-11 -3.39899E-11 -2.48879E-11 -1.64275E-11 -9.83355E-12 -5.35976E-12 + -2.66741E-12 -1.21457E-12 -5.06768E-13 -1.93979E-13 -6.81802E-14 -2.20211E-14 + -6.53968E-15 -1.78658E-15 -4.49177E-16 -1.03965E-16 + 2.02100E-17 8.73162E-17 3.47297E-16 1.27126E-15 4.28072E-15 1.32537E-14 + 3.77079E-14 9.85115E-14 2.36103E-13 5.18521E-13 1.04189E-12 1.91156E-12 + 3.19336E-12 4.83799E-12 6.60735E-12 8.05635E-12 8.62189E-12 7.82404E-12 + 5.50664E-12 1.98801E-12 -1.98801E-12 -5.50664E-12 -7.82404E-12 -8.62189E-12 + -8.05635E-12 -6.60735E-12 -4.83799E-12 -3.19336E-12 -1.91156E-12 -1.04189E-12 + -5.18521E-13 -2.36103E-13 -9.85115E-14 -3.77079E-14 -1.32537E-14 -4.28072E-15 + -1.27126E-15 -3.47297E-16 -8.73162E-17 -2.02100E-17 + 3.47177E-18 1.49996E-17 5.96603E-17 2.18383E-16 7.35362E-16 2.27678E-15 + 6.47764E-15 1.69228E-14 4.05588E-14 8.90740E-14 1.78981E-13 3.28377E-13 + 5.48570E-13 8.31093E-13 1.13504E-12 1.38396E-12 1.48111E-12 1.34405E-12 + 9.45956E-13 3.41509E-13 -3.41509E-13 -9.45956E-13 -1.34405E-12 -1.48111E-12 + -1.38396E-12 -1.13504E-12 -8.31093E-13 -5.48570E-13 -3.28377E-13 -1.78981E-13 + -8.90740E-14 -4.05588E-14 -1.69228E-14 -6.47764E-15 -2.27678E-15 -7.35362E-16 + -2.18383E-16 -5.96603E-17 -1.49996E-17 -3.47177E-18 + 5.27570E-19 2.27934E-18 9.06598E-18 3.31855E-17 1.11746E-16 3.45979E-16 + 9.84342E-16 2.57158E-15 6.16332E-15 1.35357E-14 2.71980E-14 4.99001E-14 + 8.33607E-14 1.26293E-13 1.72481E-13 2.10306E-13 2.25069E-13 2.04242E-13 + 1.43748E-13 5.18957E-14 -5.18957E-14 -1.43748E-13 -2.04242E-13 -2.25069E-13 + -2.10306E-13 -1.72481E-13 -1.26293E-13 -8.33607E-14 -4.99001E-14 -2.71980E-14 + -1.35357E-14 -6.16332E-15 -2.57158E-15 -9.84342E-16 -3.45979E-16 -1.11746E-16 + -3.31855E-17 -9.06598E-18 -2.27934E-18 -5.27570E-19 + 7.10012E-20 3.06757E-19 1.22011E-18 4.46615E-18 1.50389E-17 4.65623E-17 + 1.32474E-16 3.46088E-16 8.29469E-16 1.82165E-15 3.66034E-15 6.71563E-15 + 1.12188E-14 1.69967E-14 2.32127E-14 2.83033E-14 3.02902E-14 2.74872E-14 + 1.93458E-14 6.98420E-15 -6.98420E-15 -1.93458E-14 -2.74872E-14 -3.02902E-14 + -2.83033E-14 -2.32127E-14 -1.69967E-14 -1.12188E-14 -6.71563E-15 -3.66034E-15 + -1.82165E-15 -8.29469E-16 -3.46088E-16 -1.32474E-16 -4.65623E-17 -1.50389E-17 + -4.46615E-18 -1.22011E-18 -3.06757E-19 -7.10012E-20 + 8.47410E-21 3.66119E-20 1.45622E-19 5.33042E-19 1.79492E-18 5.55729E-18 + 1.58110E-17 4.13061E-17 9.89984E-17 2.17417E-16 4.36868E-16 8.01521E-16 + 1.33898E-15 2.02858E-15 2.77048E-15 3.37805E-15 3.61518E-15 3.28064E-15 + 2.30895E-15 8.33575E-16 -8.33575E-16 -2.30895E-15 -3.28064E-15 -3.61518E-15 + -3.37805E-15 -2.77048E-15 -2.02858E-15 -1.33898E-15 -8.01521E-16 -4.36868E-16 + -2.17417E-16 -9.89984E-17 -4.13061E-17 -1.58110E-17 -5.55729E-18 -1.79492E-18 + -5.33042E-19 -1.45622E-19 -3.66119E-20 -8.47410E-21 + -1.22885E-21 -5.30918E-21 -2.11171E-20 -7.72977E-20 -2.60285E-19 -8.05876E-19 + -2.29279E-18 -5.98990E-18 -1.43560E-17 -3.15282E-17 -6.33513E-17 -1.16231E-16 + -1.94169E-16 -2.94169E-16 -4.01754E-16 -4.89859E-16 -5.24246E-16 -4.75733E-16 + -3.34826E-16 -1.20879E-16 1.20879E-16 3.34826E-16 4.75733E-16 5.24246E-16 + 4.89859E-16 4.01754E-16 2.94169E-16 1.94169E-16 1.16231E-16 6.33513E-17 + 3.15282E-17 1.43560E-17 5.98990E-18 2.29279E-18 8.05876E-19 2.60285E-19 + 7.72977E-20 2.11171E-20 5.30918E-21 1.22885E-21 + -1.04307E-20 -4.50652E-20 -1.79245E-19 -6.56115E-19 -2.20934E-18 -6.84040E-18 + -1.94616E-17 -5.08432E-17 -1.21856E-16 -2.67616E-16 -5.37735E-16 -9.86583E-16 + -1.64814E-15 -2.49696E-15 -3.41015E-15 -4.15800E-15 -4.44988E-15 -4.03810E-15 + -2.84206E-15 -1.02604E-15 1.02604E-15 2.84206E-15 4.03810E-15 4.44988E-15 + 4.15800E-15 3.41015E-15 2.49696E-15 1.64814E-15 9.86583E-16 5.37735E-16 + 2.67616E-16 1.21856E-16 5.08432E-17 1.94616E-17 6.84040E-18 2.20934E-18 + 6.56115E-19 1.79245E-19 4.50652E-20 1.04307E-20 + -7.83283E-20 -3.38413E-19 -1.34603E-18 -4.92704E-18 -1.65909E-17 -5.13675E-17 + -1.46145E-16 -3.81803E-16 -9.15068E-16 -2.00964E-15 -4.03808E-15 -7.40867E-15 + -1.23766E-14 -1.87507E-14 -2.56082E-14 -3.12241E-14 -3.34160E-14 -3.03238E-14 + -2.13422E-14 -7.70495E-15 7.70495E-15 2.13422E-14 3.03238E-14 3.34160E-14 + 3.12241E-14 2.56082E-14 1.87507E-14 1.23766E-14 7.40867E-15 4.03808E-15 + 2.00964E-15 9.15068E-16 3.81803E-16 1.46145E-16 5.13675E-17 1.65909E-17 + 4.92704E-18 1.34603E-18 3.38413E-19 7.83283E-20 + -5.19858E-19 -2.24602E-18 -8.93345E-18 -3.27003E-17 -1.10112E-16 -3.40921E-16 + -9.69953E-16 -2.53399E-15 -6.07323E-15 -1.33378E-14 -2.68004E-14 -4.91707E-14 + -8.21421E-14 -1.24447E-13 -1.69960E-13 -2.07232E-13 -2.21779E-13 -2.01256E-13 + -1.41646E-13 -5.11371E-14 5.11371E-14 1.41646E-13 2.01256E-13 2.21779E-13 + 2.07232E-13 1.69960E-13 1.24447E-13 8.21421E-14 4.91707E-14 2.68004E-14 + 1.33378E-14 6.07323E-15 2.53399E-15 9.69953E-16 3.40921E-16 1.10112E-16 + 3.27003E-17 8.93345E-18 2.24602E-18 5.19858E-19 + -3.04683E-18 -1.31637E-17 -5.23579E-17 -1.91653E-16 -6.45354E-16 -1.99810E-15 + -5.68478E-15 -1.48514E-14 -3.55945E-14 -7.81714E-14 -1.57074E-13 -2.88183E-13 + -4.81425E-13 -7.29367E-13 -9.96113E-13 -1.21456E-12 -1.29982E-12 -1.17954E-12 + -8.30172E-13 -2.99708E-13 2.99708E-13 8.30172E-13 1.17954E-12 1.29982E-12 + 1.21456E-12 9.96113E-13 7.29367E-13 4.81425E-13 2.88183E-13 1.57074E-13 + 7.81714E-14 3.55945E-14 1.48514E-14 5.68478E-15 1.99810E-15 6.45354E-16 + 1.91653E-16 5.23579E-17 1.31637E-17 3.04683E-18 + -1.57581E-17 -6.80821E-17 -2.70794E-16 -9.91224E-16 -3.33776E-15 -1.03341E-14 + -2.94015E-14 -7.68112E-14 -1.84094E-13 -4.04301E-13 -8.12382E-13 -1.49048E-12 + -2.48992E-12 -3.77227E-12 -5.15187E-12 -6.28168E-12 -6.72265E-12 -6.10055E-12 + -4.29363E-12 -1.55008E-12 1.55008E-12 4.29363E-12 6.10055E-12 6.72265E-12 + 6.28168E-12 5.15187E-12 3.77227E-12 2.48992E-12 1.49048E-12 8.12382E-13 + 4.04301E-13 1.84094E-13 7.68112E-14 2.94015E-14 1.03341E-14 3.33776E-15 + 9.91224E-16 2.70794E-16 6.80821E-17 1.57581E-17 + -7.18781E-17 -3.10546E-16 -1.23518E-15 -4.52131E-15 -1.52246E-14 -4.71375E-14 + -1.34110E-13 -3.50362E-13 -8.39714E-13 -1.84415E-12 -3.70555E-12 -6.79858E-12 + -1.13574E-11 -1.72066E-11 -2.34995E-11 -2.86529E-11 -3.06643E-11 -2.78267E-11 + -1.95847E-11 -7.07046E-12 7.07046E-12 1.95847E-11 2.78267E-11 3.06643E-11 + 2.86529E-11 2.34995E-11 1.72066E-11 1.13574E-11 6.79858E-12 3.70555E-12 + 1.84415E-12 8.39714E-13 3.50362E-13 1.34110E-13 4.71375E-14 1.52246E-14 + 4.52131E-15 1.23518E-15 3.10546E-16 7.18781E-17 + -2.88999E-16 -1.24861E-15 -4.96628E-15 -1.81788E-14 -6.12135E-14 -1.89525E-13 + -5.39216E-13 -1.40870E-12 -3.37623E-12 -7.41476E-12 -1.48989E-11 -2.73349E-11 + -4.56644E-11 -6.91824E-11 -9.44839E-11 -1.15204E-10 -1.23291E-10 -1.11882E-10 + -7.87439E-11 -2.84281E-11 2.84281E-11 7.87439E-11 1.11882E-10 1.23291E-10 + 1.15204E-10 9.44839E-11 6.91824E-11 4.56644E-11 2.73349E-11 1.48989E-11 + 7.41476E-12 3.37623E-12 1.40870E-12 5.39216E-13 1.89525E-13 6.12135E-14 + 1.81788E-14 4.96628E-15 1.24861E-15 2.88999E-16 + -1.02373E-15 -4.42297E-15 -1.75922E-14 -6.43950E-14 -2.16838E-13 -6.71358E-13 + -1.91008E-12 -4.99006E-12 -1.19597E-11 -2.62655E-11 -5.27766E-11 -9.68292E-11 + -1.61758E-10 -2.45066E-10 -3.34692E-10 -4.08091E-10 -4.36738E-10 -3.96323E-10 + -2.78936E-10 -1.00702E-10 1.00702E-10 2.78936E-10 3.96323E-10 4.36738E-10 + 4.08091E-10 3.34692E-10 2.45066E-10 1.61758E-10 9.68292E-11 5.27766E-11 + 2.62655E-11 1.19597E-11 4.99006E-12 1.91008E-12 6.71358E-13 2.16838E-13 + 6.43950E-14 1.75922E-14 4.42297E-15 1.02373E-15 + -3.19316E-15 -1.37959E-14 -5.48726E-14 -2.00858E-13 -6.76350E-13 -2.09407E-12 + -5.95781E-12 -1.55647E-11 -3.73040E-11 -8.19259E-11 -1.64618E-10 -3.02025E-10 + -5.04548E-10 -7.64398E-10 -1.04396E-09 -1.27290E-09 -1.36225E-09 -1.23619E-09 + -8.70044E-10 -3.14103E-10 3.14103E-10 8.70044E-10 1.23619E-09 1.36225E-09 + 1.27290E-09 1.04396E-09 7.64398E-10 5.04548E-10 3.02025E-10 1.64618E-10 + 8.19259E-11 3.73040E-11 1.55647E-11 5.95781E-12 2.09407E-12 6.76350E-13 + 2.00858E-13 5.48726E-14 1.37959E-14 3.19316E-15 + -8.76403E-15 -3.78645E-14 -1.50605E-13 -5.51279E-13 -1.85633E-12 -5.74743E-12 + -1.63520E-11 -4.27193E-11 -1.02386E-10 -2.24856E-10 -4.51815E-10 -8.28944E-10 + -1.38479E-09 -2.09799E-09 -2.86527E-09 -3.49362E-09 -3.73887E-09 -3.39288E-09 + -2.38794E-09 -8.62095E-10 8.62095E-10 2.38794E-09 3.39288E-09 3.73887E-09 + 3.49362E-09 2.86527E-09 2.09799E-09 1.38479E-09 8.28944E-10 4.51815E-10 + 2.24856E-10 1.02386E-10 4.27193E-11 1.63520E-11 5.74743E-12 1.85633E-12 + 5.51279E-13 1.50605E-13 3.78645E-14 8.76403E-15 + -2.11449E-14 -9.13554E-14 -3.63362E-13 -1.33006E-12 -4.47874E-12 -1.38668E-11 + -3.94522E-11 -1.03068E-10 -2.47024E-10 -5.42507E-10 -1.09009E-09 -1.99998E-09 + -3.34108E-09 -5.06179E-09 -6.91300E-09 -8.42902E-09 -9.02072E-09 -8.18597E-09 + -5.76137E-09 -2.07997E-09 2.07997E-09 5.76137E-09 8.18597E-09 9.02072E-09 + 8.42902E-09 6.91300E-09 5.06179E-09 3.34108E-09 1.99998E-09 1.09009E-09 + 5.42507E-10 2.47024E-10 1.03068E-10 3.94522E-11 1.38668E-11 4.47874E-12 + 1.33006E-12 3.63362E-13 9.13554E-14 2.11449E-14 + -4.47773E-14 -1.93458E-13 -7.69470E-13 -2.81660E-12 -9.48435E-12 -2.93648E-11 + -8.35455E-11 -2.18262E-10 -5.23109E-10 -1.14883E-09 -2.30841E-09 -4.23525E-09 + -7.07520E-09 -1.07190E-08 -1.46392E-08 -1.78496E-08 -1.91026E-08 -1.73349E-08 + -1.22005E-08 -4.40462E-09 4.40462E-09 1.22005E-08 1.73349E-08 1.91026E-08 + 1.78496E-08 1.46392E-08 1.07190E-08 7.07520E-09 4.23525E-09 2.30841E-09 + 1.14883E-09 5.23109E-10 2.18262E-10 8.35455E-11 2.93648E-11 9.48435E-12 + 2.81660E-12 7.69470E-13 1.93458E-13 4.47773E-14 + -8.30154E-14 -3.58664E-13 -1.42657E-12 -5.22187E-12 -1.75836E-11 -5.44412E-11 + -1.54890E-10 -4.04650E-10 -9.69825E-10 -2.12990E-09 -4.27972E-09 -7.85199E-09 + -1.31172E-08 -1.98727E-08 -2.71406E-08 -3.30926E-08 -3.54156E-08 -3.21383E-08 + -2.26193E-08 -8.16601E-09 8.16601E-09 2.26193E-08 3.21383E-08 3.54156E-08 + 3.30926E-08 2.71406E-08 1.98727E-08 1.31172E-08 7.85199E-09 4.27972E-09 + 2.12990E-09 9.69825E-10 4.04650E-10 1.54890E-10 5.44412E-11 1.75836E-11 + 5.22187E-12 1.42657E-12 3.58664E-13 8.30154E-14 + -1.34155E-13 -5.79610E-13 -2.30538E-12 -8.43869E-12 -2.84156E-11 -8.79785E-11 + -2.50307E-10 -6.53925E-10 -1.56726E-09 -3.44197E-09 -6.91614E-09 -1.26890E-08 + -2.11977E-08 -3.21148E-08 -4.38600E-08 -5.34785E-08 -5.72326E-08 -5.19364E-08 + -3.65534E-08 -1.31965E-08 1.31965E-08 3.65534E-08 5.19364E-08 5.72326E-08 + 5.34785E-08 4.38600E-08 3.21148E-08 2.11977E-08 1.26890E-08 6.91614E-09 + 3.44197E-09 1.56726E-09 6.53925E-10 2.50307E-10 8.79785E-11 2.84156E-11 + 8.43869E-12 2.30538E-12 5.79610E-13 1.34155E-13 + -1.87486E-13 -8.10025E-13 -3.22184E-12 -1.17934E-11 -3.97118E-11 -1.22953E-10 + -3.49813E-10 -9.13882E-10 -2.19030E-09 -4.81027E-09 -9.66554E-09 -1.77334E-08 + -2.96245E-08 -4.48816E-08 -6.12958E-08 -7.47380E-08 -7.99845E-08 -7.25829E-08 + -5.10846E-08 -1.84425E-08 1.84425E-08 5.10846E-08 7.25829E-08 7.99845E-08 + 7.47380E-08 6.12958E-08 4.48816E-08 2.96245E-08 1.77334E-08 9.66554E-09 + 4.81027E-09 2.19030E-09 9.13882E-10 3.49813E-10 1.22953E-10 3.97118E-11 + 1.17934E-11 3.22184E-12 8.10025E-13 1.87486E-13 + -2.23166E-13 -9.64176E-13 -3.83497E-12 -1.40377E-11 -4.72691E-11 -1.46351E-10 + -4.16383E-10 -1.08780E-09 -2.60713E-09 -5.72569E-09 -1.15049E-08 -2.11081E-08 + -3.52621E-08 -5.34227E-08 -7.29606E-08 -8.89609E-08 -9.52058E-08 -8.63957E-08 + -6.08062E-08 -2.19522E-08 2.19522E-08 6.08062E-08 8.63957E-08 9.52058E-08 + 8.89609E-08 7.29606E-08 5.34227E-08 3.52621E-08 2.11081E-08 1.15049E-08 + 5.72569E-09 2.60713E-09 1.08780E-09 4.16383E-10 1.46351E-10 4.72691E-11 + 1.40377E-11 3.83497E-12 9.64176E-13 2.23166E-13 + -2.18941E-13 -9.45925E-13 -3.76238E-12 -1.37719E-11 -4.63744E-11 -1.43581E-10 + -4.08501E-10 -1.06721E-09 -2.55778E-09 -5.61730E-09 -1.12871E-08 -2.07085E-08 + -3.45947E-08 -5.24115E-08 -7.15795E-08 -8.72770E-08 -9.34037E-08 -8.47603E-08 + -5.96552E-08 -2.15367E-08 2.15367E-08 5.96552E-08 8.47603E-08 9.34037E-08 + 8.72770E-08 7.15795E-08 5.24115E-08 3.45947E-08 2.07085E-08 1.12871E-08 + 5.61730E-09 2.55778E-09 1.06721E-09 4.08501E-10 1.43581E-10 4.63744E-11 + 1.37719E-11 3.76238E-12 9.45925E-13 2.18941E-13 + -1.62169E-13 -7.00644E-13 -2.78678E-12 -1.02008E-11 -3.43494E-11 -1.06350E-10 + -3.02576E-10 -7.90477E-10 -1.89454E-09 -4.16072E-09 -8.36036E-09 -1.53388E-08 + -2.56242E-08 -3.88211E-08 -5.30188E-08 -6.46458E-08 -6.91839E-08 -6.27817E-08 + -4.41864E-08 -1.59522E-08 1.59522E-08 4.41864E-08 6.27817E-08 6.91839E-08 + 6.46458E-08 5.30188E-08 3.88211E-08 2.56242E-08 1.53388E-08 8.36036E-09 + 4.16072E-09 1.89454E-09 7.90477E-10 3.02576E-10 1.06350E-10 3.43494E-11 + 1.02008E-11 2.78678E-12 7.00644E-13 1.62169E-13 + -6.00437E-14 -2.59416E-13 -1.03182E-12 -3.77690E-12 -1.27180E-11 -3.93765E-11 + -1.12030E-10 -2.92677E-10 -7.01459E-10 -1.54052E-09 -3.09545E-09 -5.67922E-09 + -9.48743E-09 -1.43736E-08 -1.96304E-08 -2.39353E-08 -2.56155E-08 -2.32451E-08 + -1.63602E-08 -5.90634E-09 5.90634E-09 1.63602E-08 2.32451E-08 2.56155E-08 + 2.39353E-08 1.96304E-08 1.43736E-08 9.48743E-09 5.67922E-09 3.09545E-09 + 1.54052E-09 7.01459E-10 2.92677E-10 1.12030E-10 3.93765E-11 1.27180E-11 + 3.77690E-12 1.03182E-12 2.59416E-13 6.00437E-14 + 6.00437E-14 2.59416E-13 1.03182E-12 3.77690E-12 1.27180E-11 3.93765E-11 + 1.12030E-10 2.92677E-10 7.01459E-10 1.54052E-09 3.09545E-09 5.67922E-09 + 9.48743E-09 1.43736E-08 1.96304E-08 2.39353E-08 2.56155E-08 2.32451E-08 + 1.63602E-08 5.90634E-09 -5.90634E-09 -1.63602E-08 -2.32451E-08 -2.56155E-08 + -2.39353E-08 -1.96304E-08 -1.43736E-08 -9.48743E-09 -5.67922E-09 -3.09545E-09 + -1.54052E-09 -7.01459E-10 -2.92677E-10 -1.12030E-10 -3.93765E-11 -1.27180E-11 + -3.77690E-12 -1.03182E-12 -2.59416E-13 -6.00437E-14 + 1.62169E-13 7.00644E-13 2.78678E-12 1.02008E-11 3.43494E-11 1.06350E-10 + 3.02576E-10 7.90477E-10 1.89454E-09 4.16072E-09 8.36036E-09 1.53388E-08 + 2.56242E-08 3.88211E-08 5.30188E-08 6.46458E-08 6.91839E-08 6.27817E-08 + 4.41864E-08 1.59522E-08 -1.59522E-08 -4.41864E-08 -6.27817E-08 -6.91839E-08 + -6.46458E-08 -5.30188E-08 -3.88211E-08 -2.56242E-08 -1.53388E-08 -8.36036E-09 + -4.16072E-09 -1.89454E-09 -7.90477E-10 -3.02576E-10 -1.06350E-10 -3.43494E-11 + -1.02008E-11 -2.78678E-12 -7.00644E-13 -1.62169E-13 + 2.18941E-13 9.45925E-13 3.76238E-12 1.37719E-11 4.63744E-11 1.43581E-10 + 4.08501E-10 1.06721E-09 2.55778E-09 5.61730E-09 1.12871E-08 2.07085E-08 + 3.45947E-08 5.24115E-08 7.15795E-08 8.72770E-08 9.34037E-08 8.47603E-08 + 5.96552E-08 2.15367E-08 -2.15367E-08 -5.96552E-08 -8.47603E-08 -9.34037E-08 + -8.72770E-08 -7.15795E-08 -5.24115E-08 -3.45947E-08 -2.07085E-08 -1.12871E-08 + -5.61730E-09 -2.55778E-09 -1.06721E-09 -4.08501E-10 -1.43581E-10 -4.63744E-11 + -1.37719E-11 -3.76238E-12 -9.45925E-13 -2.18941E-13 + 2.23166E-13 9.64176E-13 3.83497E-12 1.40377E-11 4.72691E-11 1.46351E-10 + 4.16383E-10 1.08780E-09 2.60713E-09 5.72569E-09 1.15049E-08 2.11081E-08 + 3.52621E-08 5.34227E-08 7.29606E-08 8.89609E-08 9.52058E-08 8.63957E-08 + 6.08062E-08 2.19522E-08 -2.19522E-08 -6.08062E-08 -8.63957E-08 -9.52058E-08 + -8.89609E-08 -7.29606E-08 -5.34227E-08 -3.52621E-08 -2.11081E-08 -1.15049E-08 + -5.72569E-09 -2.60713E-09 -1.08780E-09 -4.16383E-10 -1.46351E-10 -4.72691E-11 + -1.40377E-11 -3.83497E-12 -9.64176E-13 -2.23166E-13 + 1.87486E-13 8.10025E-13 3.22184E-12 1.17934E-11 3.97118E-11 1.22953E-10 + 3.49813E-10 9.13882E-10 2.19030E-09 4.81027E-09 9.66554E-09 1.77334E-08 + 2.96245E-08 4.48816E-08 6.12958E-08 7.47380E-08 7.99845E-08 7.25829E-08 + 5.10846E-08 1.84425E-08 -1.84425E-08 -5.10846E-08 -7.25829E-08 -7.99845E-08 + -7.47380E-08 -6.12958E-08 -4.48816E-08 -2.96245E-08 -1.77334E-08 -9.66554E-09 + -4.81027E-09 -2.19030E-09 -9.13882E-10 -3.49813E-10 -1.22953E-10 -3.97118E-11 + -1.17934E-11 -3.22184E-12 -8.10025E-13 -1.87486E-13 + 1.34155E-13 5.79610E-13 2.30538E-12 8.43869E-12 2.84156E-11 8.79785E-11 + 2.50307E-10 6.53925E-10 1.56726E-09 3.44197E-09 6.91614E-09 1.26890E-08 + 2.11977E-08 3.21148E-08 4.38600E-08 5.34785E-08 5.72326E-08 5.19364E-08 + 3.65534E-08 1.31965E-08 -1.31965E-08 -3.65534E-08 -5.19364E-08 -5.72326E-08 + -5.34785E-08 -4.38600E-08 -3.21148E-08 -2.11977E-08 -1.26890E-08 -6.91614E-09 + -3.44197E-09 -1.56726E-09 -6.53925E-10 -2.50307E-10 -8.79785E-11 -2.84156E-11 + -8.43869E-12 -2.30538E-12 -5.79610E-13 -1.34155E-13 + 8.30154E-14 3.58664E-13 1.42657E-12 5.22187E-12 1.75836E-11 5.44412E-11 + 1.54890E-10 4.04650E-10 9.69825E-10 2.12990E-09 4.27972E-09 7.85199E-09 + 1.31172E-08 1.98727E-08 2.71406E-08 3.30926E-08 3.54156E-08 3.21383E-08 + 2.26193E-08 8.16601E-09 -8.16601E-09 -2.26193E-08 -3.21383E-08 -3.54156E-08 + -3.30926E-08 -2.71406E-08 -1.98727E-08 -1.31172E-08 -7.85199E-09 -4.27972E-09 + -2.12990E-09 -9.69825E-10 -4.04650E-10 -1.54890E-10 -5.44412E-11 -1.75836E-11 + -5.22187E-12 -1.42657E-12 -3.58664E-13 -8.30154E-14 + 4.47773E-14 1.93458E-13 7.69470E-13 2.81660E-12 9.48435E-12 2.93648E-11 + 8.35455E-11 2.18262E-10 5.23109E-10 1.14883E-09 2.30841E-09 4.23525E-09 + 7.07520E-09 1.07190E-08 1.46392E-08 1.78496E-08 1.91026E-08 1.73349E-08 + 1.22005E-08 4.40462E-09 -4.40462E-09 -1.22005E-08 -1.73349E-08 -1.91026E-08 + -1.78496E-08 -1.46392E-08 -1.07190E-08 -7.07520E-09 -4.23525E-09 -2.30841E-09 + -1.14883E-09 -5.23109E-10 -2.18262E-10 -8.35455E-11 -2.93648E-11 -9.48435E-12 + -2.81660E-12 -7.69470E-13 -1.93458E-13 -4.47773E-14 + 2.11449E-14 9.13554E-14 3.63362E-13 1.33006E-12 4.47874E-12 1.38668E-11 + 3.94522E-11 1.03068E-10 2.47024E-10 5.42507E-10 1.09009E-09 1.99998E-09 + 3.34108E-09 5.06179E-09 6.91300E-09 8.42902E-09 9.02072E-09 8.18597E-09 + 5.76137E-09 2.07997E-09 -2.07997E-09 -5.76137E-09 -8.18597E-09 -9.02072E-09 + -8.42902E-09 -6.91300E-09 -5.06179E-09 -3.34108E-09 -1.99998E-09 -1.09009E-09 + -5.42507E-10 -2.47024E-10 -1.03068E-10 -3.94522E-11 -1.38668E-11 -4.47874E-12 + -1.33006E-12 -3.63362E-13 -9.13554E-14 -2.11449E-14 + 8.76403E-15 3.78645E-14 1.50605E-13 5.51279E-13 1.85633E-12 5.74743E-12 + 1.63520E-11 4.27193E-11 1.02386E-10 2.24856E-10 4.51815E-10 8.28944E-10 + 1.38479E-09 2.09799E-09 2.86527E-09 3.49362E-09 3.73887E-09 3.39288E-09 + 2.38794E-09 8.62095E-10 -8.62095E-10 -2.38794E-09 -3.39288E-09 -3.73887E-09 + -3.49362E-09 -2.86527E-09 -2.09799E-09 -1.38479E-09 -8.28944E-10 -4.51815E-10 + -2.24856E-10 -1.02386E-10 -4.27193E-11 -1.63520E-11 -5.74743E-12 -1.85633E-12 + -5.51279E-13 -1.50605E-13 -3.78645E-14 -8.76403E-15 + 3.19316E-15 1.37959E-14 5.48726E-14 2.00858E-13 6.76350E-13 2.09407E-12 + 5.95781E-12 1.55647E-11 3.73040E-11 8.19259E-11 1.64618E-10 3.02025E-10 + 5.04548E-10 7.64398E-10 1.04396E-09 1.27290E-09 1.36225E-09 1.23619E-09 + 8.70044E-10 3.14103E-10 -3.14103E-10 -8.70044E-10 -1.23619E-09 -1.36225E-09 + -1.27290E-09 -1.04396E-09 -7.64398E-10 -5.04548E-10 -3.02025E-10 -1.64618E-10 + -8.19259E-11 -3.73040E-11 -1.55647E-11 -5.95781E-12 -2.09407E-12 -6.76350E-13 + -2.00858E-13 -5.48726E-14 -1.37959E-14 -3.19316E-15 + 1.02373E-15 4.42297E-15 1.75922E-14 6.43950E-14 2.16838E-13 6.71358E-13 + 1.91008E-12 4.99006E-12 1.19597E-11 2.62655E-11 5.27766E-11 9.68292E-11 + 1.61758E-10 2.45066E-10 3.34692E-10 4.08091E-10 4.36738E-10 3.96323E-10 + 2.78936E-10 1.00702E-10 -1.00702E-10 -2.78936E-10 -3.96323E-10 -4.36738E-10 + -4.08091E-10 -3.34692E-10 -2.45066E-10 -1.61758E-10 -9.68292E-11 -5.27766E-11 + -2.62655E-11 -1.19597E-11 -4.99006E-12 -1.91008E-12 -6.71358E-13 -2.16838E-13 + -6.43950E-14 -1.75922E-14 -4.42297E-15 -1.02373E-15 + 2.88999E-16 1.24861E-15 4.96628E-15 1.81788E-14 6.12135E-14 1.89525E-13 + 5.39216E-13 1.40870E-12 3.37623E-12 7.41476E-12 1.48989E-11 2.73349E-11 + 4.56644E-11 6.91824E-11 9.44839E-11 1.15204E-10 1.23291E-10 1.11882E-10 + 7.87439E-11 2.84281E-11 -2.84281E-11 -7.87439E-11 -1.11882E-10 -1.23291E-10 + -1.15204E-10 -9.44839E-11 -6.91824E-11 -4.56644E-11 -2.73349E-11 -1.48989E-11 + -7.41476E-12 -3.37623E-12 -1.40870E-12 -5.39216E-13 -1.89525E-13 -6.12135E-14 + -1.81788E-14 -4.96628E-15 -1.24861E-15 -2.88999E-16 + 7.18781E-17 3.10546E-16 1.23518E-15 4.52131E-15 1.52246E-14 4.71375E-14 + 1.34110E-13 3.50362E-13 8.39714E-13 1.84415E-12 3.70555E-12 6.79858E-12 + 1.13574E-11 1.72066E-11 2.34995E-11 2.86529E-11 3.06643E-11 2.78267E-11 + 1.95847E-11 7.07046E-12 -7.07046E-12 -1.95847E-11 -2.78267E-11 -3.06643E-11 + -2.86529E-11 -2.34995E-11 -1.72066E-11 -1.13574E-11 -6.79858E-12 -3.70555E-12 + -1.84415E-12 -8.39714E-13 -3.50362E-13 -1.34110E-13 -4.71375E-14 -1.52246E-14 + -4.52131E-15 -1.23518E-15 -3.10546E-16 -7.18781E-17 + 1.57581E-17 6.80821E-17 2.70794E-16 9.91224E-16 3.33776E-15 1.03341E-14 + 2.94015E-14 7.68112E-14 1.84094E-13 4.04301E-13 8.12382E-13 1.49048E-12 + 2.48992E-12 3.77227E-12 5.15187E-12 6.28168E-12 6.72265E-12 6.10055E-12 + 4.29363E-12 1.55008E-12 -1.55008E-12 -4.29363E-12 -6.10055E-12 -6.72265E-12 + -6.28168E-12 -5.15187E-12 -3.77227E-12 -2.48992E-12 -1.49048E-12 -8.12382E-13 + -4.04301E-13 -1.84094E-13 -7.68112E-14 -2.94015E-14 -1.03341E-14 -3.33776E-15 + -9.91224E-16 -2.70794E-16 -6.80821E-17 -1.57581E-17 + 3.04683E-18 1.31637E-17 5.23579E-17 1.91653E-16 6.45354E-16 1.99810E-15 + 5.68478E-15 1.48514E-14 3.55945E-14 7.81714E-14 1.57074E-13 2.88183E-13 + 4.81425E-13 7.29367E-13 9.96113E-13 1.21456E-12 1.29982E-12 1.17954E-12 + 8.30172E-13 2.99708E-13 -2.99708E-13 -8.30172E-13 -1.17954E-12 -1.29982E-12 + -1.21456E-12 -9.96113E-13 -7.29367E-13 -4.81425E-13 -2.88183E-13 -1.57074E-13 + -7.81714E-14 -3.55945E-14 -1.48514E-14 -5.68478E-15 -1.99810E-15 -6.45354E-16 + -1.91653E-16 -5.23579E-17 -1.31637E-17 -3.04683E-18 + 5.19858E-19 2.24602E-18 8.93345E-18 3.27003E-17 1.10112E-16 3.40921E-16 + 9.69953E-16 2.53399E-15 6.07323E-15 1.33378E-14 2.68004E-14 4.91707E-14 + 8.21421E-14 1.24447E-13 1.69960E-13 2.07232E-13 2.21779E-13 2.01256E-13 + 1.41646E-13 5.11371E-14 -5.11371E-14 -1.41646E-13 -2.01256E-13 -2.21779E-13 + -2.07232E-13 -1.69960E-13 -1.24447E-13 -8.21421E-14 -4.91707E-14 -2.68004E-14 + -1.33378E-14 -6.07323E-15 -2.53399E-15 -9.69953E-16 -3.40921E-16 -1.10112E-16 + -3.27003E-17 -8.93345E-18 -2.24602E-18 -5.19858E-19 + 7.83283E-20 3.38413E-19 1.34603E-18 4.92704E-18 1.65909E-17 5.13675E-17 + 1.46145E-16 3.81803E-16 9.15068E-16 2.00964E-15 4.03808E-15 7.40867E-15 + 1.23766E-14 1.87507E-14 2.56082E-14 3.12241E-14 3.34160E-14 3.03238E-14 + 2.13422E-14 7.70495E-15 -7.70495E-15 -2.13422E-14 -3.03238E-14 -3.34160E-14 + -3.12241E-14 -2.56082E-14 -1.87507E-14 -1.23766E-14 -7.40867E-15 -4.03808E-15 + -2.00964E-15 -9.15068E-16 -3.81803E-16 -1.46145E-16 -5.13675E-17 -1.65909E-17 + -4.92704E-18 -1.34603E-18 -3.38413E-19 -7.83283E-20 + 1.04307E-20 4.50652E-20 1.79245E-19 6.56115E-19 2.20934E-18 6.84040E-18 + 1.94616E-17 5.08432E-17 1.21856E-16 2.67616E-16 5.37735E-16 9.86583E-16 + 1.64814E-15 2.49696E-15 3.41015E-15 4.15800E-15 4.44988E-15 4.03810E-15 + 2.84206E-15 1.02604E-15 -1.02604E-15 -2.84206E-15 -4.03810E-15 -4.44988E-15 + -4.15800E-15 -3.41015E-15 -2.49696E-15 -1.64814E-15 -9.86583E-16 -5.37735E-16 + -2.67616E-16 -1.21856E-16 -5.08432E-17 -1.94616E-17 -6.84040E-18 -2.20934E-18 + -6.56115E-19 -1.79245E-19 -4.50652E-20 -1.04307E-20 + 1.22885E-21 5.30918E-21 2.11171E-20 7.72977E-20 2.60285E-19 8.05876E-19 + 2.29279E-18 5.98990E-18 1.43560E-17 3.15282E-17 6.33513E-17 1.16231E-16 + 1.94169E-16 2.94169E-16 4.01754E-16 4.89859E-16 5.24246E-16 4.75733E-16 + 3.34826E-16 1.20879E-16 -1.20879E-16 -3.34826E-16 -4.75733E-16 -5.24246E-16 + -4.89859E-16 -4.01754E-16 -2.94169E-16 -1.94169E-16 -1.16231E-16 -6.33513E-17 + -3.15282E-17 -1.43560E-17 -5.98990E-18 -2.29279E-18 -8.05876E-19 -2.60285E-19 + -7.72977E-20 -2.11171E-20 -5.30918E-21 -1.22885E-21 + -1.55701E-22 -6.72696E-22 -2.67562E-21 -9.79395E-21 -3.29792E-20 -1.02108E-19 + -2.90507E-19 -7.58946E-19 -1.81897E-18 -3.99476E-18 -8.02688E-18 -1.47269E-17 + -2.46021E-17 -3.72725E-17 -5.09039E-17 -6.20672E-17 -6.64242E-17 -6.02775E-17 + -4.24239E-17 -1.53159E-17 1.53159E-17 4.24239E-17 6.02775E-17 6.64242E-17 + 6.20672E-17 5.09039E-17 3.72725E-17 2.46021E-17 1.47269E-17 8.02688E-18 + 3.99476E-18 1.81897E-18 7.58946E-19 2.90507E-19 1.02108E-19 3.29792E-20 + 9.79395E-21 2.67562E-21 6.72696E-22 1.55701E-22 + -1.33309E-21 -5.75954E-21 -2.29083E-20 -8.38546E-20 -2.82364E-19 -8.74236E-19 + -2.48728E-18 -6.49800E-18 -1.55738E-17 -3.42026E-17 -6.87251E-17 -1.26090E-16 + -2.10640E-16 -3.19123E-16 -4.35833E-16 -5.31412E-16 -5.68716E-16 -5.16088E-16 + -3.63228E-16 -1.31133E-16 1.31133E-16 3.63228E-16 5.16088E-16 5.68716E-16 + 5.31412E-16 4.35833E-16 3.19123E-16 2.10640E-16 1.26090E-16 6.87251E-17 + 3.42026E-17 1.55738E-17 6.49800E-18 2.48728E-18 8.74236E-19 2.82364E-19 + 8.38546E-20 2.29083E-20 5.75954E-21 1.33309E-21 + -1.00801E-20 -4.35504E-20 -1.73220E-19 -6.34060E-19 -2.13508E-18 -6.61047E-18 + -1.88074E-17 -4.91342E-17 -1.17760E-16 -2.58621E-16 -5.19660E-16 -9.53420E-16 + -1.59274E-15 -2.41302E-15 -3.29552E-15 -4.01823E-15 -4.30030E-15 -3.90236E-15 + -2.74652E-15 -9.91549E-16 9.91549E-16 2.74652E-15 3.90236E-15 4.30030E-15 + 4.01823E-15 3.29552E-15 2.41302E-15 1.59274E-15 9.53420E-16 5.19660E-16 + 2.58621E-16 1.17760E-16 4.91342E-17 1.88074E-17 6.61047E-18 2.13508E-18 + 6.34060E-19 1.73220E-19 4.35504E-20 1.00801E-20 + -6.72672E-20 -2.90625E-19 -1.15595E-18 -4.23127E-18 -1.42480E-17 -4.41137E-17 + -1.25507E-16 -3.27887E-16 -7.85847E-16 -1.72585E-15 -3.46785E-15 -6.36246E-15 + -1.06288E-14 -1.61028E-14 -2.19920E-14 -2.68149E-14 -2.86972E-14 -2.60416E-14 + -1.83284E-14 -6.61690E-15 6.61690E-15 1.83284E-14 2.60416E-14 2.86972E-14 + 2.68149E-14 2.19920E-14 1.61028E-14 1.06288E-14 6.36246E-15 3.46785E-15 + 1.72585E-15 7.85847E-16 3.27887E-16 1.25507E-16 4.41137E-17 1.42480E-17 + 4.23127E-18 1.15595E-18 2.90625E-19 6.72672E-20 + -3.95947E-19 -1.71067E-18 -6.80411E-18 -2.49060E-17 -8.38662E-17 -2.59661E-16 + -7.38759E-16 -1.93000E-15 -4.62564E-15 -1.01587E-14 -2.04124E-14 -3.74505E-14 + -6.25631E-14 -9.47841E-14 -1.29449E-13 -1.57837E-13 -1.68917E-13 -1.53286E-13 + -1.07884E-13 -3.89483E-14 3.89483E-14 1.07884E-13 1.53286E-13 1.68917E-13 + 1.57837E-13 1.29449E-13 9.47841E-14 6.25631E-14 3.74505E-14 2.04124E-14 + 1.01587E-14 4.62564E-15 1.93000E-15 7.38759E-16 2.59661E-16 8.38662E-17 + 2.49060E-17 6.80411E-18 1.71067E-18 3.95947E-19 + -2.05475E-18 -8.87745E-18 -3.53097E-17 -1.29249E-16 -4.35221E-16 -1.34750E-15 + -3.83376E-15 -1.00157E-14 -2.40046E-14 -5.27181E-14 -1.05929E-13 -1.94348E-13 + -3.24669E-13 -4.91879E-13 -6.71770E-13 -8.19090E-13 -8.76588E-13 -7.95471E-13 + -5.59861E-13 -2.02121E-13 2.02121E-13 5.59861E-13 7.95471E-13 8.76588E-13 + 8.19090E-13 6.71770E-13 4.91879E-13 3.24669E-13 1.94348E-13 1.05929E-13 + 5.27181E-14 2.40046E-14 1.00157E-14 3.83376E-15 1.34750E-15 4.35221E-16 + 1.29249E-16 3.53097E-17 8.87745E-18 2.05475E-18 + -9.39718E-18 -4.06000E-17 -1.61485E-16 -5.91105E-16 -1.99043E-15 -6.16264E-15 + -1.75333E-14 -4.58055E-14 -1.09782E-13 -2.41100E-13 -4.84455E-13 -8.88830E-13 + -1.48484E-12 -2.24955E-12 -3.07226E-12 -3.74601E-12 -4.00898E-12 -3.63799E-12 + -2.56046E-12 -9.24376E-13 9.24376E-13 2.56046E-12 3.63799E-12 4.00898E-12 + 3.74601E-12 3.07226E-12 2.24955E-12 1.48484E-12 8.88830E-13 4.84455E-13 + 2.41100E-13 1.09782E-13 4.58055E-14 1.75333E-14 6.16264E-15 1.99043E-15 + 5.91105E-16 1.61485E-16 4.06000E-17 9.39718E-18 + -3.78608E-17 -1.63575E-16 -6.50615E-16 -2.38154E-15 -8.01936E-15 -2.48290E-14 + -7.06408E-14 -1.84548E-13 -4.42307E-13 -9.71381E-13 -1.95185E-12 -3.58105E-12 + -5.98233E-12 -9.06334E-12 -1.23780E-11 -1.50925E-11 -1.61520E-11 -1.46573E-11 + -1.03160E-11 -3.72427E-12 3.72427E-12 1.03160E-11 1.46573E-11 1.61520E-11 + 1.50925E-11 1.23780E-11 9.06334E-12 5.98233E-12 3.58105E-12 1.95185E-12 + 9.71381E-13 4.42307E-13 1.84548E-13 7.06408E-14 2.48290E-14 8.01936E-15 + 2.38154E-15 6.50615E-16 1.63575E-16 3.78608E-17 + -1.34329E-16 -5.80362E-16 -2.30837E-15 -8.44963E-15 -2.84525E-14 -8.80927E-14 + -2.50632E-13 -6.54773E-13 -1.56930E-12 -3.44644E-12 -6.92511E-12 -1.27055E-11 + -2.12252E-11 -3.21565E-11 -4.39169E-11 -5.35479E-11 -5.73068E-11 -5.20038E-11 + -3.66008E-11 -1.32136E-11 1.32136E-11 3.66008E-11 5.20038E-11 5.73068E-11 + 5.35479E-11 4.39169E-11 3.21565E-11 2.12252E-11 1.27055E-11 6.92511E-12 + 3.44644E-12 1.56930E-12 6.54773E-13 2.50632E-13 8.80927E-14 2.84525E-14 + 8.44963E-15 2.30837E-15 5.80362E-16 1.34329E-16 + -4.19511E-16 -1.81247E-15 -7.20904E-15 -2.63883E-14 -8.88574E-14 -2.75114E-13 + -7.82725E-13 -2.04486E-12 -4.90092E-12 -1.07632E-11 -2.16272E-11 -3.96794E-11 + -6.62864E-11 -1.00425E-10 -1.37153E-10 -1.67230E-10 -1.78970E-10 -1.62408E-10 + -1.14305E-10 -4.12662E-11 4.12662E-11 1.14305E-10 1.62408E-10 1.78970E-10 + 1.67230E-10 1.37153E-10 1.00425E-10 6.62864E-11 3.96794E-11 2.16272E-11 + 1.07632E-11 4.90092E-12 2.04486E-12 7.82725E-13 2.75114E-13 8.88574E-14 + 2.63883E-14 7.20904E-15 1.81247E-15 4.19511E-16 + -1.15250E-15 -4.97932E-15 -1.98050E-14 -7.24952E-14 -2.44113E-13 -7.55807E-13 + -2.15034E-12 -5.61774E-12 -1.34641E-11 -2.95693E-11 -5.94152E-11 -1.09009E-10 + -1.82105E-10 -2.75893E-10 -3.76793E-10 -4.59424E-10 -4.91674E-10 -4.46176E-10 + -3.14023E-10 -1.13369E-10 1.13369E-10 3.14023E-10 4.46176E-10 4.91674E-10 + 4.59424E-10 3.76793E-10 2.75893E-10 1.82105E-10 1.09009E-10 5.94152E-11 + 2.95693E-11 1.34641E-11 5.61774E-12 2.15034E-12 7.55807E-13 2.44113E-13 + 7.24952E-14 1.98050E-14 4.97932E-15 1.15250E-15 + -2.78268E-15 -1.20224E-14 -4.78187E-14 -1.75037E-13 -5.89404E-13 -1.82487E-12 + -5.19193E-12 -1.35639E-11 -3.25086E-11 -7.13942E-11 -1.43456E-10 -2.63199E-10 + -4.39688E-10 -6.66134E-10 -9.09754E-10 -1.10926E-09 -1.18713E-09 -1.07728E-09 + -7.58199E-10 -2.73725E-10 2.73725E-10 7.58199E-10 1.07728E-09 1.18713E-09 + 1.10926E-09 9.09754E-10 6.66134E-10 4.39688E-10 2.63199E-10 1.43456E-10 + 7.13942E-11 3.25086E-11 1.35639E-11 5.19193E-12 1.82487E-12 5.89404E-13 + 1.75037E-13 4.78187E-14 1.20224E-14 2.78268E-15 + -5.89605E-15 -2.54736E-14 -1.01320E-13 -3.70876E-13 -1.24885E-12 -3.86661E-12 + -1.10009E-11 -2.87397E-11 -6.88804E-11 -1.51273E-10 -3.03961E-10 -5.57677E-10 + -9.31628E-10 -1.41143E-09 -1.92762E-09 -2.35035E-09 -2.51534E-09 -2.28258E-09 + -1.60650E-09 -5.79979E-10 5.79979E-10 1.60650E-09 2.28258E-09 2.51534E-09 + 2.35035E-09 1.92762E-09 1.41143E-09 9.31628E-10 5.57677E-10 3.03961E-10 + 1.51273E-10 6.88804E-11 2.87397E-11 1.10009E-11 3.86661E-12 1.24885E-12 + 3.70876E-13 1.01320E-13 2.54736E-14 5.89605E-15 + -1.09358E-14 -4.72476E-14 -1.87925E-13 -6.87889E-13 -2.31633E-12 -7.17167E-12 + -2.04041E-11 -5.33054E-11 -1.27757E-10 -2.80576E-10 -5.63776E-10 -1.03436E-09 + -1.72795E-09 -2.61788E-09 -3.57529E-09 -4.35936E-09 -4.66538E-09 -4.23365E-09 + -2.97969E-09 -1.07573E-09 1.07573E-09 2.97969E-09 4.23365E-09 4.66538E-09 + 4.35936E-09 3.57529E-09 2.61788E-09 1.72795E-09 1.03436E-09 5.63776E-10 + 2.80576E-10 1.27757E-10 5.33054E-11 2.04041E-11 7.17167E-12 2.31633E-12 + 6.87889E-13 1.87925E-13 4.72476E-14 1.09358E-14 + -1.76784E-14 -7.63784E-14 -3.03792E-13 -1.11201E-12 -3.74449E-12 -1.15934E-11 + -3.29843E-11 -8.61713E-11 -2.06527E-10 -4.53568E-10 -9.11378E-10 -1.67210E-09 + -2.79334E-09 -4.23195E-09 -5.77967E-09 -7.04716E-09 -7.54186E-09 -6.84395E-09 + -4.81684E-09 -1.73897E-09 1.73897E-09 4.81684E-09 6.84395E-09 7.54186E-09 + 7.04716E-09 5.77967E-09 4.23195E-09 2.79334E-09 1.67210E-09 9.11378E-10 + 4.53568E-10 2.06527E-10 8.61713E-11 3.29843E-11 1.15934E-11 3.74449E-12 + 1.11201E-12 3.03792E-13 7.63784E-14 1.76784E-14 + -2.47122E-14 -1.06768E-13 -4.24664E-13 -1.55446E-12 -5.23434E-12 -1.62062E-11 + -4.61081E-11 -1.20457E-10 -2.88699E-10 -6.34032E-10 -1.27399E-09 -2.33740E-09 + -3.90474E-09 -5.91575E-09 -8.07928E-09 -9.85106E-09 -1.05426E-08 -9.56700E-09 + -6.73336E-09 -2.43087E-09 2.43087E-09 6.73336E-09 9.56700E-09 1.05426E-08 + 9.85106E-09 8.07928E-09 5.91575E-09 3.90474E-09 2.33740E-09 1.27399E-09 + 6.34032E-10 2.88699E-10 1.20457E-10 4.61081E-11 1.62062E-11 5.23434E-12 + 1.55446E-12 4.24664E-13 1.06768E-13 2.47122E-14 + -2.94203E-14 -1.27109E-13 -5.05570E-13 -1.85061E-12 -6.23157E-12 -1.92937E-11 + -5.48925E-11 -1.43406E-10 -3.43702E-10 -7.54826E-10 -1.51671E-09 -2.78271E-09 + -4.64866E-09 -7.04280E-09 -9.61851E-09 -1.17279E-08 -1.25511E-08 -1.13897E-08 + -8.01618E-09 -2.89400E-09 2.89400E-09 8.01618E-09 1.13897E-08 1.25511E-08 + 1.17279E-08 9.61851E-09 7.04280E-09 4.64866E-09 2.78271E-09 1.51671E-09 + 7.54826E-10 3.43702E-10 1.43406E-10 5.48925E-11 1.92937E-11 6.23157E-12 + 1.85061E-12 5.05570E-13 1.27109E-13 2.94203E-14 + -2.88670E-14 -1.24718E-13 -4.96062E-13 -1.81580E-12 -6.11437E-12 -1.89309E-11 + -5.38601E-11 -1.40709E-10 -3.37238E-10 -7.40631E-10 -1.48819E-09 -2.73038E-09 + -4.56124E-09 -6.91035E-09 -9.43762E-09 -1.15073E-08 -1.23151E-08 -1.11755E-08 + -7.86542E-09 -2.83957E-09 2.83957E-09 7.86542E-09 1.11755E-08 1.23151E-08 + 1.15073E-08 9.43762E-09 6.91035E-09 4.56124E-09 2.73038E-09 1.48819E-09 + 7.40631E-10 3.37238E-10 1.40709E-10 5.38601E-11 1.89309E-11 6.11437E-12 + 1.81580E-12 4.96062E-13 1.24718E-13 2.88670E-14 + -2.13834E-14 -9.23859E-14 -3.67461E-13 -1.34507E-12 -4.52926E-12 -1.40232E-11 + -3.98972E-11 -1.04231E-10 -2.49811E-10 -5.48627E-10 -1.10238E-09 -2.02255E-09 + -3.37877E-09 -5.11889E-09 -6.99098E-09 -8.52410E-09 -9.12248E-09 -8.27831E-09 + -5.82636E-09 -2.10343E-09 2.10343E-09 5.82636E-09 8.27831E-09 9.12248E-09 + 8.52410E-09 6.99098E-09 5.11889E-09 3.37877E-09 2.02255E-09 1.10238E-09 + 5.48627E-10 2.49811E-10 1.04231E-10 3.98972E-11 1.40232E-11 4.52926E-12 + 1.34507E-12 3.67461E-13 9.23859E-14 2.13834E-14 + -7.91758E-15 -3.42075E-14 -1.36059E-13 -4.98035E-13 -1.67704E-12 -5.19232E-12 + -1.47726E-11 -3.85934E-11 -9.24968E-11 -2.03139E-10 -4.08177E-10 -7.48882E-10 + -1.25105E-09 -1.89536E-09 -2.58853E-09 -3.15620E-09 -3.37776E-09 -3.06519E-09 + -2.15731E-09 -7.78831E-10 7.78831E-10 2.15731E-09 3.06519E-09 3.37776E-09 + 3.15620E-09 2.58853E-09 1.89536E-09 1.25105E-09 7.48882E-10 4.08177E-10 + 2.03139E-10 9.24968E-11 3.85934E-11 1.47726E-11 5.19232E-12 1.67704E-12 + 4.98035E-13 1.36059E-13 3.42075E-14 7.91758E-15 + 7.91758E-15 3.42075E-14 1.36059E-13 4.98035E-13 1.67704E-12 5.19232E-12 + 1.47726E-11 3.85934E-11 9.24968E-11 2.03139E-10 4.08177E-10 7.48882E-10 + 1.25105E-09 1.89536E-09 2.58853E-09 3.15620E-09 3.37776E-09 3.06519E-09 + 2.15731E-09 7.78831E-10 -7.78831E-10 -2.15731E-09 -3.06519E-09 -3.37776E-09 + -3.15620E-09 -2.58853E-09 -1.89536E-09 -1.25105E-09 -7.48882E-10 -4.08177E-10 + -2.03139E-10 -9.24968E-11 -3.85934E-11 -1.47726E-11 -5.19232E-12 -1.67704E-12 + -4.98035E-13 -1.36059E-13 -3.42075E-14 -7.91758E-15 + 2.13834E-14 9.23859E-14 3.67461E-13 1.34507E-12 4.52926E-12 1.40232E-11 + 3.98972E-11 1.04231E-10 2.49811E-10 5.48627E-10 1.10238E-09 2.02255E-09 + 3.37877E-09 5.11889E-09 6.99098E-09 8.52410E-09 9.12248E-09 8.27831E-09 + 5.82636E-09 2.10343E-09 -2.10343E-09 -5.82636E-09 -8.27831E-09 -9.12248E-09 + -8.52410E-09 -6.99098E-09 -5.11889E-09 -3.37877E-09 -2.02255E-09 -1.10238E-09 + -5.48627E-10 -2.49811E-10 -1.04231E-10 -3.98972E-11 -1.40232E-11 -4.52926E-12 + -1.34507E-12 -3.67461E-13 -9.23859E-14 -2.13834E-14 + 2.88670E-14 1.24718E-13 4.96062E-13 1.81580E-12 6.11437E-12 1.89309E-11 + 5.38601E-11 1.40709E-10 3.37238E-10 7.40631E-10 1.48819E-09 2.73038E-09 + 4.56124E-09 6.91035E-09 9.43762E-09 1.15073E-08 1.23151E-08 1.11755E-08 + 7.86542E-09 2.83957E-09 -2.83957E-09 -7.86542E-09 -1.11755E-08 -1.23151E-08 + -1.15073E-08 -9.43762E-09 -6.91035E-09 -4.56124E-09 -2.73038E-09 -1.48819E-09 + -7.40631E-10 -3.37238E-10 -1.40709E-10 -5.38601E-11 -1.89309E-11 -6.11437E-12 + -1.81580E-12 -4.96062E-13 -1.24718E-13 -2.88670E-14 + 2.94203E-14 1.27109E-13 5.05570E-13 1.85061E-12 6.23157E-12 1.92937E-11 + 5.48925E-11 1.43406E-10 3.43702E-10 7.54826E-10 1.51671E-09 2.78271E-09 + 4.64866E-09 7.04280E-09 9.61851E-09 1.17279E-08 1.25511E-08 1.13897E-08 + 8.01618E-09 2.89400E-09 -2.89400E-09 -8.01618E-09 -1.13897E-08 -1.25511E-08 + -1.17279E-08 -9.61851E-09 -7.04280E-09 -4.64866E-09 -2.78271E-09 -1.51671E-09 + -7.54826E-10 -3.43702E-10 -1.43406E-10 -5.48925E-11 -1.92937E-11 -6.23157E-12 + -1.85061E-12 -5.05570E-13 -1.27109E-13 -2.94203E-14 + 2.47122E-14 1.06768E-13 4.24664E-13 1.55446E-12 5.23434E-12 1.62062E-11 + 4.61081E-11 1.20457E-10 2.88699E-10 6.34032E-10 1.27399E-09 2.33740E-09 + 3.90474E-09 5.91575E-09 8.07928E-09 9.85106E-09 1.05426E-08 9.56700E-09 + 6.73336E-09 2.43087E-09 -2.43087E-09 -6.73336E-09 -9.56700E-09 -1.05426E-08 + -9.85106E-09 -8.07928E-09 -5.91575E-09 -3.90474E-09 -2.33740E-09 -1.27399E-09 + -6.34032E-10 -2.88699E-10 -1.20457E-10 -4.61081E-11 -1.62062E-11 -5.23434E-12 + -1.55446E-12 -4.24664E-13 -1.06768E-13 -2.47122E-14 + 1.76784E-14 7.63784E-14 3.03792E-13 1.11201E-12 3.74449E-12 1.15934E-11 + 3.29843E-11 8.61713E-11 2.06527E-10 4.53568E-10 9.11378E-10 1.67210E-09 + 2.79334E-09 4.23195E-09 5.77967E-09 7.04716E-09 7.54186E-09 6.84395E-09 + 4.81684E-09 1.73897E-09 -1.73897E-09 -4.81684E-09 -6.84395E-09 -7.54186E-09 + -7.04716E-09 -5.77967E-09 -4.23195E-09 -2.79334E-09 -1.67210E-09 -9.11378E-10 + -4.53568E-10 -2.06527E-10 -8.61713E-11 -3.29843E-11 -1.15934E-11 -3.74449E-12 + -1.11201E-12 -3.03792E-13 -7.63784E-14 -1.76784E-14 + 1.09358E-14 4.72476E-14 1.87925E-13 6.87889E-13 2.31633E-12 7.17167E-12 + 2.04041E-11 5.33054E-11 1.27757E-10 2.80576E-10 5.63776E-10 1.03436E-09 + 1.72795E-09 2.61788E-09 3.57529E-09 4.35936E-09 4.66538E-09 4.23365E-09 + 2.97969E-09 1.07573E-09 -1.07573E-09 -2.97969E-09 -4.23365E-09 -4.66538E-09 + -4.35936E-09 -3.57529E-09 -2.61788E-09 -1.72795E-09 -1.03436E-09 -5.63776E-10 + -2.80576E-10 -1.27757E-10 -5.33054E-11 -2.04041E-11 -7.17167E-12 -2.31633E-12 + -6.87889E-13 -1.87925E-13 -4.72476E-14 -1.09358E-14 + 5.89605E-15 2.54736E-14 1.01320E-13 3.70876E-13 1.24885E-12 3.86661E-12 + 1.10009E-11 2.87397E-11 6.88804E-11 1.51273E-10 3.03961E-10 5.57677E-10 + 9.31628E-10 1.41143E-09 1.92762E-09 2.35035E-09 2.51534E-09 2.28258E-09 + 1.60650E-09 5.79979E-10 -5.79979E-10 -1.60650E-09 -2.28258E-09 -2.51534E-09 + -2.35035E-09 -1.92762E-09 -1.41143E-09 -9.31628E-10 -5.57677E-10 -3.03961E-10 + -1.51273E-10 -6.88804E-11 -2.87397E-11 -1.10009E-11 -3.86661E-12 -1.24885E-12 + -3.70876E-13 -1.01320E-13 -2.54736E-14 -5.89605E-15 + 2.78268E-15 1.20224E-14 4.78187E-14 1.75037E-13 5.89404E-13 1.82487E-12 + 5.19193E-12 1.35639E-11 3.25086E-11 7.13942E-11 1.43456E-10 2.63199E-10 + 4.39688E-10 6.66134E-10 9.09754E-10 1.10926E-09 1.18713E-09 1.07728E-09 + 7.58199E-10 2.73725E-10 -2.73725E-10 -7.58199E-10 -1.07728E-09 -1.18713E-09 + -1.10926E-09 -9.09754E-10 -6.66134E-10 -4.39688E-10 -2.63199E-10 -1.43456E-10 + -7.13942E-11 -3.25086E-11 -1.35639E-11 -5.19193E-12 -1.82487E-12 -5.89404E-13 + -1.75037E-13 -4.78187E-14 -1.20224E-14 -2.78268E-15 + 1.15250E-15 4.97932E-15 1.98050E-14 7.24952E-14 2.44113E-13 7.55807E-13 + 2.15034E-12 5.61774E-12 1.34641E-11 2.95693E-11 5.94152E-11 1.09009E-10 + 1.82105E-10 2.75893E-10 3.76793E-10 4.59424E-10 4.91674E-10 4.46176E-10 + 3.14023E-10 1.13369E-10 -1.13369E-10 -3.14023E-10 -4.46176E-10 -4.91674E-10 + -4.59424E-10 -3.76793E-10 -2.75893E-10 -1.82105E-10 -1.09009E-10 -5.94152E-11 + -2.95693E-11 -1.34641E-11 -5.61774E-12 -2.15034E-12 -7.55807E-13 -2.44113E-13 + -7.24952E-14 -1.98050E-14 -4.97932E-15 -1.15250E-15 + 4.19511E-16 1.81247E-15 7.20904E-15 2.63883E-14 8.88574E-14 2.75114E-13 + 7.82725E-13 2.04486E-12 4.90092E-12 1.07632E-11 2.16272E-11 3.96794E-11 + 6.62864E-11 1.00425E-10 1.37153E-10 1.67230E-10 1.78970E-10 1.62408E-10 + 1.14305E-10 4.12662E-11 -4.12662E-11 -1.14305E-10 -1.62408E-10 -1.78970E-10 + -1.67230E-10 -1.37153E-10 -1.00425E-10 -6.62864E-11 -3.96794E-11 -2.16272E-11 + -1.07632E-11 -4.90092E-12 -2.04486E-12 -7.82725E-13 -2.75114E-13 -8.88574E-14 + -2.63883E-14 -7.20904E-15 -1.81247E-15 -4.19511E-16 + 1.34329E-16 5.80362E-16 2.30837E-15 8.44963E-15 2.84525E-14 8.80927E-14 + 2.50632E-13 6.54773E-13 1.56930E-12 3.44644E-12 6.92511E-12 1.27055E-11 + 2.12252E-11 3.21565E-11 4.39169E-11 5.35479E-11 5.73068E-11 5.20038E-11 + 3.66008E-11 1.32136E-11 -1.32136E-11 -3.66008E-11 -5.20038E-11 -5.73068E-11 + -5.35479E-11 -4.39169E-11 -3.21565E-11 -2.12252E-11 -1.27055E-11 -6.92511E-12 + -3.44644E-12 -1.56930E-12 -6.54773E-13 -2.50632E-13 -8.80927E-14 -2.84525E-14 + -8.44963E-15 -2.30837E-15 -5.80362E-16 -1.34329E-16 + 3.78608E-17 1.63575E-16 6.50615E-16 2.38154E-15 8.01936E-15 2.48290E-14 + 7.06408E-14 1.84548E-13 4.42307E-13 9.71381E-13 1.95185E-12 3.58105E-12 + 5.98233E-12 9.06334E-12 1.23780E-11 1.50925E-11 1.61520E-11 1.46573E-11 + 1.03160E-11 3.72427E-12 -3.72427E-12 -1.03160E-11 -1.46573E-11 -1.61520E-11 + -1.50925E-11 -1.23780E-11 -9.06334E-12 -5.98233E-12 -3.58105E-12 -1.95185E-12 + -9.71381E-13 -4.42307E-13 -1.84548E-13 -7.06408E-14 -2.48290E-14 -8.01936E-15 + -2.38154E-15 -6.50615E-16 -1.63575E-16 -3.78608E-17 + 9.39718E-18 4.06000E-17 1.61485E-16 5.91105E-16 1.99043E-15 6.16264E-15 + 1.75333E-14 4.58055E-14 1.09782E-13 2.41100E-13 4.84455E-13 8.88830E-13 + 1.48484E-12 2.24955E-12 3.07226E-12 3.74601E-12 4.00898E-12 3.63799E-12 + 2.56046E-12 9.24376E-13 -9.24376E-13 -2.56046E-12 -3.63799E-12 -4.00898E-12 + -3.74601E-12 -3.07226E-12 -2.24955E-12 -1.48484E-12 -8.88830E-13 -4.84455E-13 + -2.41100E-13 -1.09782E-13 -4.58055E-14 -1.75333E-14 -6.16264E-15 -1.99043E-15 + -5.91105E-16 -1.61485E-16 -4.06000E-17 -9.39718E-18 + 2.05475E-18 8.87745E-18 3.53097E-17 1.29249E-16 4.35221E-16 1.34750E-15 + 3.83376E-15 1.00157E-14 2.40046E-14 5.27181E-14 1.05929E-13 1.94348E-13 + 3.24669E-13 4.91879E-13 6.71770E-13 8.19090E-13 8.76588E-13 7.95471E-13 + 5.59861E-13 2.02121E-13 -2.02121E-13 -5.59861E-13 -7.95471E-13 -8.76588E-13 + -8.19090E-13 -6.71770E-13 -4.91879E-13 -3.24669E-13 -1.94348E-13 -1.05929E-13 + -5.27181E-14 -2.40046E-14 -1.00157E-14 -3.83376E-15 -1.34750E-15 -4.35221E-16 + -1.29249E-16 -3.53097E-17 -8.87745E-18 -2.05475E-18 + 3.95947E-19 1.71067E-18 6.80411E-18 2.49060E-17 8.38662E-17 2.59661E-16 + 7.38759E-16 1.93000E-15 4.62564E-15 1.01587E-14 2.04124E-14 3.74505E-14 + 6.25631E-14 9.47841E-14 1.29449E-13 1.57837E-13 1.68917E-13 1.53286E-13 + 1.07884E-13 3.89483E-14 -3.89483E-14 -1.07884E-13 -1.53286E-13 -1.68917E-13 + -1.57837E-13 -1.29449E-13 -9.47841E-14 -6.25631E-14 -3.74505E-14 -2.04124E-14 + -1.01587E-14 -4.62564E-15 -1.93000E-15 -7.38759E-16 -2.59661E-16 -8.38662E-17 + -2.49060E-17 -6.80411E-18 -1.71067E-18 -3.95947E-19 + 6.72672E-20 2.90625E-19 1.15595E-18 4.23127E-18 1.42480E-17 4.41137E-17 + 1.25507E-16 3.27887E-16 7.85847E-16 1.72585E-15 3.46785E-15 6.36246E-15 + 1.06288E-14 1.61028E-14 2.19920E-14 2.68149E-14 2.86972E-14 2.60416E-14 + 1.83284E-14 6.61690E-15 -6.61690E-15 -1.83284E-14 -2.60416E-14 -2.86972E-14 + -2.68149E-14 -2.19920E-14 -1.61028E-14 -1.06288E-14 -6.36246E-15 -3.46785E-15 + -1.72585E-15 -7.85847E-16 -3.27887E-16 -1.25507E-16 -4.41137E-17 -1.42480E-17 + -4.23127E-18 -1.15595E-18 -2.90625E-19 -6.72672E-20 + 1.00801E-20 4.35504E-20 1.73220E-19 6.34060E-19 2.13508E-18 6.61047E-18 + 1.88074E-17 4.91342E-17 1.17760E-16 2.58621E-16 5.19660E-16 9.53420E-16 + 1.59274E-15 2.41302E-15 3.29552E-15 4.01823E-15 4.30030E-15 3.90236E-15 + 2.74652E-15 9.91549E-16 -9.91549E-16 -2.74652E-15 -3.90236E-15 -4.30030E-15 + -4.01823E-15 -3.29552E-15 -2.41302E-15 -1.59274E-15 -9.53420E-16 -5.19660E-16 + -2.58621E-16 -1.17760E-16 -4.91342E-17 -1.88074E-17 -6.61047E-18 -2.13508E-18 + -6.34060E-19 -1.73220E-19 -4.35504E-20 -1.00801E-20 + 1.33309E-21 5.75954E-21 2.29083E-20 8.38546E-20 2.82364E-19 8.74236E-19 + 2.48728E-18 6.49800E-18 1.55738E-17 3.42026E-17 6.87251E-17 1.26090E-16 + 2.10640E-16 3.19123E-16 4.35833E-16 5.31412E-16 5.68716E-16 5.16088E-16 + 3.63228E-16 1.31133E-16 -1.31133E-16 -3.63228E-16 -5.16088E-16 -5.68716E-16 + -5.31412E-16 -4.35833E-16 -3.19123E-16 -2.10640E-16 -1.26090E-16 -6.87251E-17 + -3.42026E-17 -1.55738E-17 -6.49800E-18 -2.48728E-18 -8.74236E-19 -2.82364E-19 + -8.38546E-20 -2.29083E-20 -5.75954E-21 -1.33309E-21 + 1.55701E-22 6.72696E-22 2.67562E-21 9.79395E-21 3.29792E-20 1.02108E-19 + 2.90507E-19 7.58946E-19 1.81897E-18 3.99476E-18 8.02688E-18 1.47269E-17 + 2.46021E-17 3.72725E-17 5.09039E-17 6.20672E-17 6.64242E-17 6.02775E-17 + 4.24239E-17 1.53159E-17 -1.53159E-17 -4.24239E-17 -6.02775E-17 -6.64242E-17 + -6.20672E-17 -5.09039E-17 -3.72725E-17 -2.46021E-17 -1.47269E-17 -8.02688E-18 + -3.99476E-18 -1.81897E-18 -7.58946E-19 -2.90507E-19 -1.02108E-19 -3.29792E-20 + -9.79395E-21 -2.67562E-21 -6.72696E-22 -1.55701E-22 + -1.71038E-23 -7.38961E-23 -2.93919E-22 -1.07587E-21 -3.62279E-21 -1.12166E-20 + -3.19123E-20 -8.33706E-20 -1.99815E-19 -4.38826E-19 -8.81757E-19 -1.61776E-18 + -2.70255E-18 -4.09441E-18 -5.59183E-18 -6.81812E-18 -7.29674E-18 -6.62151E-18 + -4.66029E-18 -1.68246E-18 1.68246E-18 4.66029E-18 6.62151E-18 7.29674E-18 + 6.81812E-18 5.59183E-18 4.09441E-18 2.70255E-18 1.61776E-18 8.81757E-19 + 4.38826E-19 1.99815E-19 8.33707E-20 3.19123E-20 1.12166E-20 3.62279E-21 + 1.07587E-21 2.93919E-22 7.38961E-23 1.71038E-23 + -1.47257E-22 -6.36218E-22 -2.53053E-21 -9.26285E-21 -3.11909E-20 -9.65710E-20 + -2.74753E-19 -7.17791E-19 -1.72033E-18 -3.77813E-18 -7.59160E-18 -1.39283E-17 + -2.32680E-17 -3.52514E-17 -4.81436E-17 -5.87015E-17 -6.28222E-17 -5.70088E-17 + -4.01234E-17 -1.44853E-17 1.44853E-17 4.01234E-17 5.70088E-17 6.28222E-17 + 5.87015E-17 4.81436E-17 3.52514E-17 2.32680E-17 1.39283E-17 7.59160E-18 + 3.77813E-18 1.72033E-18 7.17791E-19 2.74753E-19 9.65710E-20 3.11909E-20 + 9.26285E-21 2.53053E-21 6.36218E-22 1.47257E-22 + -1.11837E-21 -4.83185E-21 -1.92185E-20 -7.03480E-20 -2.36883E-19 -7.33422E-19 + -2.08665E-18 -5.45136E-18 -1.30653E-17 -2.86936E-17 -5.76555E-17 -1.05781E-16 + -1.76712E-16 -2.67721E-16 -3.65633E-16 -4.45817E-16 -4.77112E-16 -4.32961E-16 + -3.04723E-16 -1.10011E-16 1.10011E-16 3.04723E-16 4.32961E-16 4.77112E-16 + 4.45817E-16 3.65633E-16 2.67721E-16 1.76712E-16 1.05781E-16 5.76555E-17 + 2.86936E-17 1.30653E-17 5.45136E-18 2.08665E-18 7.33422E-19 2.36883E-19 + 7.03480E-20 1.92185E-20 4.83185E-21 1.11837E-21 + -7.48890E-21 -3.23554E-20 -1.28692E-19 -4.71070E-19 -1.58624E-18 -4.91120E-18 + -1.39728E-17 -3.65038E-17 -8.74888E-17 -1.92140E-16 -3.86077E-16 -7.08336E-16 + -1.18331E-15 -1.79274E-15 -2.44838E-15 -2.98531E-15 -3.19488E-15 -2.89923E-15 + -2.04051E-15 -7.36663E-16 7.36664E-16 2.04051E-15 2.89923E-15 3.19488E-15 + 2.98531E-15 2.44838E-15 1.79274E-15 1.18331E-15 7.08336E-16 3.86077E-16 + 1.92140E-16 8.74888E-17 3.65038E-17 1.39728E-17 4.91120E-18 1.58624E-18 + 4.71070E-19 1.28692E-19 3.23554E-20 7.48890E-21 + -4.41995E-20 -1.90962E-19 -7.59543E-19 -2.78026E-18 -9.36199E-18 -2.89859E-17 + -8.24676E-17 -2.15446E-16 -5.16360E-16 -1.13401E-15 -2.27863E-15 -4.18060E-15 + -6.98392E-15 -1.05807E-14 -1.44504E-14 -1.76193E-14 -1.88562E-14 -1.71113E-14 + -1.20431E-14 -4.34779E-15 4.34779E-15 1.20431E-14 1.71113E-14 1.88562E-14 + 1.76193E-14 1.44504E-14 1.05807E-14 6.98392E-15 4.18060E-15 2.27863E-15 + 1.13401E-15 5.16360E-16 2.15446E-16 8.24676E-17 2.89859E-17 9.36199E-18 + 2.78026E-18 7.59543E-19 1.90962E-19 4.41995E-20 + -2.29853E-19 -9.93066E-19 -3.94988E-18 -1.44583E-17 -4.86855E-17 -1.50737E-16 + -4.28860E-16 -1.12039E-15 -2.68525E-15 -5.89725E-15 -1.18497E-14 -2.17406E-14 + -3.63187E-14 -5.50235E-14 -7.51468E-14 -9.16265E-14 -9.80586E-14 -8.89844E-14 + -6.26282E-14 -2.26100E-14 2.26100E-14 6.26282E-14 8.89844E-14 9.80586E-14 + 9.16265E-14 7.51468E-14 5.50235E-14 3.63187E-14 2.17406E-14 1.18497E-14 + 5.89725E-15 2.68525E-15 1.12039E-15 4.28860E-16 1.50737E-16 4.86855E-17 + 1.44583E-17 3.94988E-18 9.93066E-19 2.29853E-19 + -1.05292E-18 -4.54907E-18 -1.80937E-17 -6.62310E-17 -2.23020E-16 -6.90499E-16 + -1.96453E-15 -5.13233E-15 -1.23007E-14 -2.70143E-14 -5.42813E-14 -9.95899E-14 + -1.66370E-13 -2.52053E-13 -3.44235E-13 -4.19726E-13 -4.49190E-13 -4.07623E-13 + -2.86889E-13 -1.03573E-13 1.03573E-13 2.86889E-13 4.07623E-13 4.49190E-13 + 4.19726E-13 3.44235E-13 2.52053E-13 1.66370E-13 9.95899E-14 5.42813E-14 + 2.70143E-14 1.23007E-14 5.13233E-15 1.96453E-15 6.90499E-16 2.23020E-16 + 6.62310E-17 1.80937E-17 4.54907E-18 1.05292E-18 + -4.24751E-18 -1.83511E-17 -7.29908E-17 -2.67178E-16 -8.99672E-16 -2.78550E-15 + -7.92501E-15 -2.07040E-14 -4.96213E-14 -1.08977E-13 -2.18973E-13 -4.01749E-13 + -6.71143E-13 -1.01679E-12 -1.38866E-12 -1.69319E-12 -1.81205E-12 -1.64437E-12 + -1.15732E-12 -4.17816E-13 4.17816E-13 1.15732E-12 1.64437E-12 1.81205E-12 + 1.69319E-12 1.38866E-12 1.01679E-12 6.71143E-13 4.01749E-13 2.18973E-13 + 1.08977E-13 4.96213E-14 2.07040E-14 7.92501E-15 2.78550E-15 8.99672E-16 + 2.67178E-16 7.29908E-17 1.83511E-17 4.24751E-18 + -1.50848E-17 -6.51730E-17 -2.59223E-16 -9.48870E-16 -3.19514E-15 -9.89256E-15 + -2.81452E-14 -7.35292E-14 -1.76228E-13 -3.87025E-13 -7.77670E-13 -1.42679E-12 + -2.38353E-12 -3.61109E-12 -4.93174E-12 -6.01327E-12 -6.43540E-12 -5.83988E-12 + -4.11017E-12 -1.48385E-12 1.48385E-12 4.11017E-12 5.83988E-12 6.43540E-12 + 6.01327E-12 4.93174E-12 3.61109E-12 2.38353E-12 1.42679E-12 7.77670E-13 + 3.87025E-13 1.76228E-13 7.35292E-14 2.81452E-14 9.89256E-15 3.19514E-15 + 9.48870E-16 2.59223E-16 6.51730E-17 1.50848E-17 + -4.71455E-17 -2.03690E-16 -8.10167E-16 -2.96557E-15 -9.98598E-15 -3.09179E-14 + -8.79642E-14 -2.29806E-13 -5.50776E-13 -1.20960E-12 -2.43051E-12 -4.45925E-12 + -7.44940E-12 -1.12860E-11 -1.54135E-11 -1.87937E-11 -2.01130E-11 -1.82518E-11 + -1.28458E-11 -4.63758E-12 4.63758E-12 1.28458E-11 1.82518E-11 2.01130E-11 + 1.87937E-11 1.54135E-11 1.12860E-11 7.44940E-12 4.45925E-12 2.43051E-12 + 1.20960E-12 5.50776E-13 2.29806E-13 8.79642E-14 3.09179E-14 9.98598E-15 + 2.96557E-15 8.10167E-16 2.03690E-16 4.71455E-17 + -1.29596E-16 -5.59913E-16 -2.22703E-15 -8.15191E-15 -2.74500E-14 -8.49887E-14 + -2.41801E-13 -6.31702E-13 -1.51400E-12 -3.32500E-12 -6.68110E-12 -1.22578E-11 + -2.04773E-11 -3.10235E-11 -4.23695E-11 -5.16611E-11 -5.52876E-11 -5.01714E-11 + -3.53112E-11 -1.27480E-11 1.27480E-11 3.53112E-11 5.01714E-11 5.52876E-11 + 5.16611E-11 4.23695E-11 3.10235E-11 2.04773E-11 1.22578E-11 6.68110E-12 + 3.32500E-12 1.51400E-12 6.31702E-13 2.41801E-13 8.49887E-14 2.74500E-14 + 8.15191E-15 2.22703E-15 5.59913E-16 1.29596E-16 + -3.13046E-16 -1.35250E-15 -5.37951E-15 -1.96914E-14 -6.63069E-14 -2.05295E-13 + -5.84083E-13 -1.52591E-12 -3.65715E-12 -8.03172E-12 -1.61386E-11 -2.96094E-11 + -4.94641E-11 -7.49389E-11 -1.02346E-10 -1.24790E-10 -1.33550E-10 -1.21192E-10 + -8.52960E-11 -3.07936E-11 3.07936E-11 8.52960E-11 1.21192E-10 1.33550E-10 + 1.24790E-10 1.02346E-10 7.49389E-11 4.94641E-11 2.96094E-11 1.61386E-11 + 8.03172E-12 3.65715E-12 1.52591E-12 5.84083E-13 2.05295E-13 6.63069E-14 + 1.96914E-14 5.37951E-15 1.35250E-15 3.13046E-16 + -6.63524E-16 -2.86672E-15 -1.14023E-14 -4.17373E-14 -1.40542E-13 -4.35137E-13 + -1.23801E-12 -3.23428E-12 -7.75160E-12 -1.70238E-11 -3.42069E-11 -6.27593E-11 + -1.04843E-10 -1.58838E-10 -2.16929E-10 -2.64502E-10 -2.83069E-10 -2.56875E-10 + -1.80791E-10 -6.52692E-11 6.52692E-11 1.80791E-10 2.56875E-10 2.83069E-10 + 2.64502E-10 2.16929E-10 1.58838E-10 1.04843E-10 6.27593E-11 3.42069E-11 + 1.70238E-11 7.75160E-12 3.23428E-12 1.23801E-12 4.35137E-13 1.40542E-13 + 4.17373E-14 1.14023E-14 2.86672E-15 6.63524E-16 + -1.23101E-15 -5.31850E-15 -2.11541E-14 -7.74334E-14 -2.60742E-13 -8.07291E-13 + -2.29682E-12 -6.00041E-12 -1.43812E-11 -3.15835E-11 -6.34625E-11 -1.16435E-10 + -1.94510E-10 -2.94686E-10 -4.02459E-10 -4.90718E-10 -5.25166E-10 -4.76568E-10 + -3.35414E-10 -1.21091E-10 1.21091E-10 3.35414E-10 4.76568E-10 5.25166E-10 + 4.90718E-10 4.02459E-10 2.94686E-10 1.94510E-10 1.16435E-10 6.34625E-11 + 3.15835E-11 1.43812E-11 6.00041E-12 2.29682E-12 8.07291E-13 2.60742E-13 + 7.74334E-14 2.11541E-14 5.31850E-15 1.23101E-15 + -1.99039E-15 -8.59939E-15 -3.42037E-14 -1.25201E-13 -4.21589E-13 -1.30529E-12 + -3.71368E-12 -9.70196E-12 -2.32527E-11 -5.10668E-11 -1.02611E-10 -1.88261E-10 + -3.14499E-10 -4.76472E-10 -6.50728E-10 -7.93434E-10 -8.49131E-10 -7.70555E-10 + -5.42324E-10 -1.95790E-10 1.95790E-10 5.42324E-10 7.70555E-10 8.49131E-10 + 7.93434E-10 6.50728E-10 4.76472E-10 3.14499E-10 1.88261E-10 1.02611E-10 + 5.10668E-11 2.32527E-11 9.70196E-12 3.71368E-12 1.30529E-12 4.21589E-13 + 1.25201E-13 3.42037E-14 8.59939E-15 1.99039E-15 + -2.78274E-15 -1.20227E-14 -4.78198E-14 -1.75041E-13 -5.89418E-13 -1.82491E-12 + -5.19205E-12 -1.35642E-11 -3.25093E-11 -7.13959E-11 -1.43459E-10 -2.63205E-10 + -4.39698E-10 -6.66149E-10 -9.09775E-10 -1.10929E-09 -1.18716E-09 -1.07730E-09 + -7.58216E-10 -2.73731E-10 2.73731E-10 7.58216E-10 1.07730E-09 1.18716E-09 + 1.10929E-09 9.09775E-10 6.66149E-10 4.39698E-10 2.63205E-10 1.43459E-10 + 7.13959E-11 3.25093E-11 1.35642E-11 5.19205E-12 1.82491E-12 5.89418E-13 + 1.75041E-13 4.78198E-14 1.20227E-14 2.78274E-15 + -3.31326E-15 -1.43148E-14 -5.69364E-14 -2.08412E-13 -7.01788E-13 -2.17283E-12 + -6.18190E-12 -1.61501E-11 -3.87071E-11 -8.50073E-11 -1.70810E-10 -3.13384E-10 + -5.23525E-10 -7.93148E-10 -1.08322E-09 -1.32077E-09 -1.41349E-09 -1.28269E-09 + -9.02768E-10 -3.25917E-10 3.25917E-10 9.02768E-10 1.28269E-09 1.41349E-09 + 1.32077E-09 1.08322E-09 7.93148E-10 5.23525E-10 3.13384E-10 1.70810E-10 + 8.50073E-11 3.87071E-11 1.61501E-11 6.18190E-12 2.17283E-12 7.01788E-13 + 2.08412E-13 5.69364E-14 1.43148E-14 3.31326E-15 + -3.25120E-15 -1.40466E-14 -5.58699E-14 -2.04508E-13 -6.88642E-13 -2.13213E-12 + -6.06610E-12 -1.58476E-11 -3.79820E-11 -8.34149E-11 -1.67610E-10 -3.07514E-10 + -5.13718E-10 -7.78291E-10 -1.06293E-09 -1.29603E-09 -1.38701E-09 -1.25866E-09 + -8.85857E-10 -3.19812E-10 3.19812E-10 8.85857E-10 1.25866E-09 1.38701E-09 + 1.29603E-09 1.06293E-09 7.78291E-10 5.13718E-10 3.07514E-10 1.67610E-10 + 8.34149E-11 3.79820E-11 1.58476E-11 6.06610E-12 2.13213E-12 6.88642E-13 + 2.04508E-13 5.58699E-14 1.40466E-14 3.25120E-15 + -2.40846E-15 -1.04056E-14 -4.13880E-14 -1.51498E-13 -5.10141E-13 -1.57946E-12 + -4.49371E-12 -1.17398E-11 -2.81368E-11 -6.17931E-11 -1.24164E-10 -2.27804E-10 + -3.80558E-10 -5.76552E-10 -7.87409E-10 -9.60089E-10 -1.02749E-09 -9.32404E-10 + -6.56236E-10 -2.36914E-10 2.36914E-10 6.56236E-10 9.32404E-10 1.02749E-09 + 9.60089E-10 7.87409E-10 5.76552E-10 3.80558E-10 2.27804E-10 1.24164E-10 + 6.17931E-11 2.81368E-11 1.17398E-11 4.49371E-12 1.57946E-12 5.10141E-13 + 1.51498E-13 4.13880E-14 1.04056E-14 2.40846E-15 + -8.91795E-16 -3.85295E-15 -1.53250E-14 -5.60961E-14 -1.88893E-13 -5.84836E-13 + -1.66391E-12 -4.34696E-12 -1.04184E-11 -2.28805E-11 -4.59749E-11 -8.43502E-11 + -1.40911E-10 -2.13483E-10 -2.91559E-10 -3.55498E-10 -3.80453E-10 -3.45247E-10 + -2.42988E-10 -8.77235E-11 8.77235E-11 2.42988E-10 3.45247E-10 3.80453E-10 + 3.55498E-10 2.91559E-10 2.13483E-10 1.40911E-10 8.43502E-11 4.59749E-11 + 2.28805E-11 1.04184E-11 4.34696E-12 1.66391E-12 5.84836E-13 1.88893E-13 + 5.60961E-14 1.53250E-14 3.85295E-15 8.91795E-16 + 8.91795E-16 3.85295E-15 1.53250E-14 5.60961E-14 1.88893E-13 5.84836E-13 + 1.66391E-12 4.34696E-12 1.04184E-11 2.28805E-11 4.59749E-11 8.43502E-11 + 1.40911E-10 2.13483E-10 2.91559E-10 3.55498E-10 3.80453E-10 3.45247E-10 + 2.42988E-10 8.77235E-11 -8.77235E-11 -2.42988E-10 -3.45247E-10 -3.80453E-10 + -3.55498E-10 -2.91559E-10 -2.13483E-10 -1.40911E-10 -8.43502E-11 -4.59749E-11 + -2.28805E-11 -1.04184E-11 -4.34696E-12 -1.66391E-12 -5.84836E-13 -1.88893E-13 + -5.60961E-14 -1.53250E-14 -3.85295E-15 -8.91795E-16 + 2.40846E-15 1.04056E-14 4.13880E-14 1.51498E-13 5.10141E-13 1.57946E-12 + 4.49371E-12 1.17398E-11 2.81368E-11 6.17931E-11 1.24164E-10 2.27804E-10 + 3.80558E-10 5.76552E-10 7.87409E-10 9.60089E-10 1.02749E-09 9.32404E-10 + 6.56236E-10 2.36914E-10 -2.36914E-10 -6.56236E-10 -9.32404E-10 -1.02749E-09 + -9.60089E-10 -7.87409E-10 -5.76552E-10 -3.80558E-10 -2.27804E-10 -1.24164E-10 + -6.17931E-11 -2.81368E-11 -1.17398E-11 -4.49371E-12 -1.57946E-12 -5.10141E-13 + -1.51498E-13 -4.13880E-14 -1.04056E-14 -2.40846E-15 + 3.25120E-15 1.40466E-14 5.58699E-14 2.04508E-13 6.88642E-13 2.13213E-12 + 6.06610E-12 1.58476E-11 3.79820E-11 8.34149E-11 1.67610E-10 3.07514E-10 + 5.13718E-10 7.78291E-10 1.06293E-09 1.29603E-09 1.38701E-09 1.25866E-09 + 8.85857E-10 3.19812E-10 -3.19812E-10 -8.85857E-10 -1.25866E-09 -1.38701E-09 + -1.29603E-09 -1.06293E-09 -7.78291E-10 -5.13718E-10 -3.07514E-10 -1.67610E-10 + -8.34149E-11 -3.79820E-11 -1.58476E-11 -6.06610E-12 -2.13213E-12 -6.88642E-13 + -2.04508E-13 -5.58699E-14 -1.40466E-14 -3.25120E-15 + 3.31326E-15 1.43148E-14 5.69364E-14 2.08412E-13 7.01788E-13 2.17283E-12 + 6.18190E-12 1.61501E-11 3.87071E-11 8.50073E-11 1.70810E-10 3.13384E-10 + 5.23525E-10 7.93148E-10 1.08322E-09 1.32077E-09 1.41349E-09 1.28269E-09 + 9.02768E-10 3.25917E-10 -3.25917E-10 -9.02768E-10 -1.28269E-09 -1.41349E-09 + -1.32077E-09 -1.08322E-09 -7.93148E-10 -5.23525E-10 -3.13384E-10 -1.70810E-10 + -8.50073E-11 -3.87071E-11 -1.61501E-11 -6.18190E-12 -2.17283E-12 -7.01788E-13 + -2.08412E-13 -5.69364E-14 -1.43148E-14 -3.31326E-15 + 2.78274E-15 1.20227E-14 4.78198E-14 1.75041E-13 5.89418E-13 1.82491E-12 + 5.19205E-12 1.35642E-11 3.25093E-11 7.13959E-11 1.43459E-10 2.63205E-10 + 4.39698E-10 6.66149E-10 9.09775E-10 1.10929E-09 1.18716E-09 1.07730E-09 + 7.58216E-10 2.73731E-10 -2.73731E-10 -7.58216E-10 -1.07730E-09 -1.18716E-09 + -1.10929E-09 -9.09775E-10 -6.66149E-10 -4.39698E-10 -2.63205E-10 -1.43459E-10 + -7.13959E-11 -3.25093E-11 -1.35642E-11 -5.19205E-12 -1.82491E-12 -5.89418E-13 + -1.75041E-13 -4.78198E-14 -1.20227E-14 -2.78274E-15 + 1.99039E-15 8.59939E-15 3.42037E-14 1.25201E-13 4.21589E-13 1.30529E-12 + 3.71368E-12 9.70196E-12 2.32527E-11 5.10668E-11 1.02611E-10 1.88261E-10 + 3.14499E-10 4.76472E-10 6.50728E-10 7.93434E-10 8.49131E-10 7.70555E-10 + 5.42324E-10 1.95790E-10 -1.95790E-10 -5.42324E-10 -7.70555E-10 -8.49131E-10 + -7.93434E-10 -6.50728E-10 -4.76472E-10 -3.14499E-10 -1.88261E-10 -1.02611E-10 + -5.10668E-11 -2.32527E-11 -9.70196E-12 -3.71368E-12 -1.30529E-12 -4.21589E-13 + -1.25201E-13 -3.42037E-14 -8.59939E-15 -1.99039E-15 + 1.23101E-15 5.31850E-15 2.11541E-14 7.74334E-14 2.60742E-13 8.07291E-13 + 2.29682E-12 6.00041E-12 1.43812E-11 3.15835E-11 6.34625E-11 1.16435E-10 + 1.94510E-10 2.94686E-10 4.02459E-10 4.90718E-10 5.25166E-10 4.76568E-10 + 3.35414E-10 1.21091E-10 -1.21091E-10 -3.35414E-10 -4.76568E-10 -5.25166E-10 + -4.90718E-10 -4.02459E-10 -2.94686E-10 -1.94510E-10 -1.16435E-10 -6.34625E-11 + -3.15835E-11 -1.43812E-11 -6.00041E-12 -2.29682E-12 -8.07291E-13 -2.60742E-13 + -7.74334E-14 -2.11541E-14 -5.31850E-15 -1.23101E-15 + 6.63524E-16 2.86672E-15 1.14023E-14 4.17373E-14 1.40542E-13 4.35137E-13 + 1.23801E-12 3.23428E-12 7.75160E-12 1.70238E-11 3.42069E-11 6.27593E-11 + 1.04843E-10 1.58838E-10 2.16929E-10 2.64502E-10 2.83069E-10 2.56875E-10 + 1.80791E-10 6.52692E-11 -6.52692E-11 -1.80791E-10 -2.56875E-10 -2.83069E-10 + -2.64502E-10 -2.16929E-10 -1.58838E-10 -1.04843E-10 -6.27593E-11 -3.42069E-11 + -1.70238E-11 -7.75160E-12 -3.23428E-12 -1.23801E-12 -4.35137E-13 -1.40542E-13 + -4.17373E-14 -1.14023E-14 -2.86672E-15 -6.63524E-16 + 3.13046E-16 1.35250E-15 5.37951E-15 1.96914E-14 6.63069E-14 2.05295E-13 + 5.84083E-13 1.52591E-12 3.65715E-12 8.03172E-12 1.61386E-11 2.96094E-11 + 4.94641E-11 7.49389E-11 1.02346E-10 1.24790E-10 1.33550E-10 1.21192E-10 + 8.52960E-11 3.07936E-11 -3.07936E-11 -8.52960E-11 -1.21192E-10 -1.33550E-10 + -1.24790E-10 -1.02346E-10 -7.49389E-11 -4.94641E-11 -2.96094E-11 -1.61386E-11 + -8.03172E-12 -3.65715E-12 -1.52591E-12 -5.84083E-13 -2.05295E-13 -6.63069E-14 + -1.96914E-14 -5.37951E-15 -1.35250E-15 -3.13046E-16 + 1.29596E-16 5.59913E-16 2.22703E-15 8.15191E-15 2.74500E-14 8.49887E-14 + 2.41801E-13 6.31702E-13 1.51400E-12 3.32500E-12 6.68110E-12 1.22578E-11 + 2.04773E-11 3.10235E-11 4.23695E-11 5.16611E-11 5.52876E-11 5.01714E-11 + 3.53112E-11 1.27480E-11 -1.27480E-11 -3.53112E-11 -5.01714E-11 -5.52876E-11 + -5.16611E-11 -4.23695E-11 -3.10235E-11 -2.04773E-11 -1.22578E-11 -6.68110E-12 + -3.32500E-12 -1.51400E-12 -6.31702E-13 -2.41801E-13 -8.49887E-14 -2.74500E-14 + -8.15191E-15 -2.22703E-15 -5.59913E-16 -1.29596E-16 + 4.71455E-17 2.03690E-16 8.10167E-16 2.96557E-15 9.98598E-15 3.09179E-14 + 8.79642E-14 2.29806E-13 5.50776E-13 1.20960E-12 2.43051E-12 4.45925E-12 + 7.44940E-12 1.12860E-11 1.54135E-11 1.87937E-11 2.01130E-11 1.82518E-11 + 1.28458E-11 4.63758E-12 -4.63758E-12 -1.28458E-11 -1.82518E-11 -2.01130E-11 + -1.87937E-11 -1.54135E-11 -1.12860E-11 -7.44940E-12 -4.45925E-12 -2.43051E-12 + -1.20960E-12 -5.50776E-13 -2.29806E-13 -8.79642E-14 -3.09179E-14 -9.98598E-15 + -2.96557E-15 -8.10167E-16 -2.03690E-16 -4.71455E-17 + 1.50848E-17 6.51730E-17 2.59223E-16 9.48870E-16 3.19514E-15 9.89256E-15 + 2.81452E-14 7.35292E-14 1.76228E-13 3.87025E-13 7.77670E-13 1.42679E-12 + 2.38353E-12 3.61109E-12 4.93174E-12 6.01327E-12 6.43540E-12 5.83988E-12 + 4.11017E-12 1.48385E-12 -1.48385E-12 -4.11017E-12 -5.83988E-12 -6.43540E-12 + -6.01327E-12 -4.93174E-12 -3.61109E-12 -2.38353E-12 -1.42679E-12 -7.77670E-13 + -3.87025E-13 -1.76228E-13 -7.35292E-14 -2.81452E-14 -9.89256E-15 -3.19514E-15 + -9.48870E-16 -2.59223E-16 -6.51730E-17 -1.50848E-17 + 4.24751E-18 1.83511E-17 7.29908E-17 2.67178E-16 8.99672E-16 2.78550E-15 + 7.92501E-15 2.07040E-14 4.96213E-14 1.08977E-13 2.18973E-13 4.01749E-13 + 6.71143E-13 1.01679E-12 1.38866E-12 1.69319E-12 1.81205E-12 1.64437E-12 + 1.15732E-12 4.17816E-13 -4.17816E-13 -1.15732E-12 -1.64437E-12 -1.81205E-12 + -1.69319E-12 -1.38866E-12 -1.01679E-12 -6.71143E-13 -4.01749E-13 -2.18973E-13 + -1.08977E-13 -4.96213E-14 -2.07040E-14 -7.92501E-15 -2.78550E-15 -8.99672E-16 + -2.67178E-16 -7.29908E-17 -1.83511E-17 -4.24751E-18 + 1.05292E-18 4.54907E-18 1.80937E-17 6.62310E-17 2.23020E-16 6.90499E-16 + 1.96453E-15 5.13233E-15 1.23007E-14 2.70143E-14 5.42813E-14 9.95899E-14 + 1.66370E-13 2.52053E-13 3.44235E-13 4.19726E-13 4.49190E-13 4.07623E-13 + 2.86889E-13 1.03573E-13 -1.03573E-13 -2.86889E-13 -4.07623E-13 -4.49190E-13 + -4.19726E-13 -3.44235E-13 -2.52053E-13 -1.66370E-13 -9.95899E-14 -5.42813E-14 + -2.70143E-14 -1.23007E-14 -5.13233E-15 -1.96453E-15 -6.90499E-16 -2.23020E-16 + -6.62310E-17 -1.80937E-17 -4.54907E-18 -1.05292E-18 + 2.29853E-19 9.93066E-19 3.94988E-18 1.44583E-17 4.86855E-17 1.50737E-16 + 4.28860E-16 1.12039E-15 2.68525E-15 5.89725E-15 1.18497E-14 2.17406E-14 + 3.63187E-14 5.50235E-14 7.51468E-14 9.16265E-14 9.80586E-14 8.89844E-14 + 6.26282E-14 2.26100E-14 -2.26100E-14 -6.26282E-14 -8.89844E-14 -9.80586E-14 + -9.16265E-14 -7.51468E-14 -5.50235E-14 -3.63187E-14 -2.17406E-14 -1.18497E-14 + -5.89725E-15 -2.68525E-15 -1.12039E-15 -4.28860E-16 -1.50737E-16 -4.86855E-17 + -1.44583E-17 -3.94988E-18 -9.93066E-19 -2.29853E-19 + 4.41995E-20 1.90962E-19 7.59543E-19 2.78026E-18 9.36199E-18 2.89859E-17 + 8.24676E-17 2.15446E-16 5.16360E-16 1.13401E-15 2.27863E-15 4.18060E-15 + 6.98392E-15 1.05807E-14 1.44504E-14 1.76193E-14 1.88562E-14 1.71113E-14 + 1.20431E-14 4.34779E-15 -4.34779E-15 -1.20431E-14 -1.71113E-14 -1.88562E-14 + -1.76193E-14 -1.44504E-14 -1.05807E-14 -6.98392E-15 -4.18060E-15 -2.27863E-15 + -1.13401E-15 -5.16360E-16 -2.15446E-16 -8.24676E-17 -2.89859E-17 -9.36199E-18 + -2.78026E-18 -7.59543E-19 -1.90962E-19 -4.41995E-20 + 7.48890E-21 3.23554E-20 1.28692E-19 4.71070E-19 1.58624E-18 4.91120E-18 + 1.39728E-17 3.65038E-17 8.74888E-17 1.92140E-16 3.86077E-16 7.08336E-16 + 1.18331E-15 1.79274E-15 2.44838E-15 2.98531E-15 3.19488E-15 2.89923E-15 + 2.04051E-15 7.36663E-16 -7.36664E-16 -2.04051E-15 -2.89923E-15 -3.19488E-15 + -2.98531E-15 -2.44838E-15 -1.79274E-15 -1.18331E-15 -7.08336E-16 -3.86077E-16 + -1.92140E-16 -8.74888E-17 -3.65038E-17 -1.39728E-17 -4.91120E-18 -1.58624E-18 + -4.71070E-19 -1.28692E-19 -3.23554E-20 -7.48890E-21 + 1.11837E-21 4.83185E-21 1.92185E-20 7.03480E-20 2.36883E-19 7.33422E-19 + 2.08665E-18 5.45136E-18 1.30653E-17 2.86936E-17 5.76555E-17 1.05781E-16 + 1.76712E-16 2.67721E-16 3.65633E-16 4.45817E-16 4.77112E-16 4.32961E-16 + 3.04723E-16 1.10011E-16 -1.10011E-16 -3.04723E-16 -4.32961E-16 -4.77112E-16 + -4.45817E-16 -3.65633E-16 -2.67721E-16 -1.76712E-16 -1.05781E-16 -5.76555E-17 + -2.86936E-17 -1.30653E-17 -5.45136E-18 -2.08665E-18 -7.33422E-19 -2.36883E-19 + -7.03480E-20 -1.92185E-20 -4.83185E-21 -1.11837E-21 + 1.47257E-22 6.36218E-22 2.53053E-21 9.26285E-21 3.11909E-20 9.65710E-20 + 2.74753E-19 7.17791E-19 1.72033E-18 3.77813E-18 7.59160E-18 1.39283E-17 + 2.32680E-17 3.52514E-17 4.81436E-17 5.87015E-17 6.28222E-17 5.70088E-17 + 4.01234E-17 1.44853E-17 -1.44853E-17 -4.01234E-17 -5.70088E-17 -6.28222E-17 + -5.87015E-17 -4.81436E-17 -3.52514E-17 -2.32680E-17 -1.39283E-17 -7.59160E-18 + -3.77813E-18 -1.72033E-18 -7.17791E-19 -2.74753E-19 -9.65710E-20 -3.11909E-20 + -9.26285E-21 -2.53053E-21 -6.36218E-22 -1.47257E-22 + 1.71038E-23 7.38961E-23 2.93919E-22 1.07587E-21 3.62279E-21 1.12166E-20 + 3.19123E-20 8.33706E-20 1.99815E-19 4.38826E-19 8.81757E-19 1.61776E-18 + 2.70255E-18 4.09441E-18 5.59183E-18 6.81812E-18 7.29674E-18 6.62151E-18 + 4.66029E-18 1.68246E-18 -1.68246E-18 -4.66029E-18 -6.62151E-18 -7.29674E-18 + -6.81812E-18 -5.59183E-18 -4.09441E-18 -2.70255E-18 -1.61776E-18 -8.81757E-19 + -4.38826E-19 -1.99815E-19 -8.33707E-20 -3.19123E-20 -1.12166E-20 -3.62279E-21 + -1.07587E-21 -2.93919E-22 -7.38961E-23 -1.71038E-23 + -1.62011E-24 -6.99958E-24 -2.78406E-23 -1.01909E-22 -3.43158E-22 -1.06246E-21 + -3.02280E-21 -7.89703E-21 -1.89268E-20 -4.15665E-20 -8.35218E-20 -1.53237E-19 + -2.55991E-19 -3.87831E-19 -5.29669E-19 -6.45826E-19 -6.91161E-19 -6.27203E-19 + -4.41432E-19 -1.59366E-19 1.59366E-19 4.41432E-19 6.27203E-19 6.91162E-19 + 6.45826E-19 5.29669E-19 3.87831E-19 2.55991E-19 1.53237E-19 8.35218E-20 + 4.15665E-20 1.89268E-20 7.89703E-21 3.02280E-21 1.06246E-21 3.43158E-22 + 1.01909E-22 2.78406E-23 6.99958E-24 1.62011E-24 + -1.39974E-23 -6.04751E-23 -2.40537E-22 -8.80471E-22 -2.96482E-21 -9.17946E-21 + -2.61164E-20 -6.82289E-20 -1.63524E-19 -3.59127E-19 -7.21613E-19 -1.32394E-18 + -2.21171E-18 -3.35078E-18 -4.57624E-18 -5.57981E-18 -5.97151E-18 -5.41892E-18 + -3.81389E-18 -1.37689E-18 1.37689E-18 3.81389E-18 5.41892E-18 5.97151E-18 + 5.57981E-18 4.57624E-18 3.35078E-18 2.21171E-18 1.32394E-18 7.21613E-19 + 3.59127E-19 1.63524E-19 6.82289E-20 2.61164E-20 9.17946E-21 2.96482E-21 + 8.80472E-22 2.40537E-22 6.04751E-23 1.39974E-23 + -1.06596E-22 -4.60544E-22 -1.83180E-21 -6.70518E-21 -2.25784E-20 -6.99056E-20 + -1.98888E-19 -5.19593E-19 -1.24531E-18 -2.73491E-18 -5.49540E-18 -1.00824E-17 + -1.68432E-17 -2.55177E-17 -3.48501E-17 -4.24927E-17 -4.54756E-17 -4.12674E-17 + -2.90444E-17 -1.04856E-17 1.04856E-17 2.90444E-17 4.12674E-17 4.54756E-17 + 4.24927E-17 3.48501E-17 2.55177E-17 1.68432E-17 1.00824E-17 5.49540E-18 + 2.73491E-18 1.24531E-18 5.19593E-19 1.98888E-19 6.99056E-20 2.25784E-20 + 6.70518E-21 1.83180E-21 4.60544E-22 1.06596E-22 + -7.15323E-22 -3.09051E-21 -1.22924E-20 -4.49956E-20 -1.51514E-19 -4.69107E-19 + -1.33465E-18 -3.48676E-18 -8.35674E-18 -1.83528E-17 -3.68772E-17 -6.76587E-17 + -1.13027E-16 -1.71238E-16 -2.33864E-16 -2.85150E-16 -3.05167E-16 -2.76928E-16 + -1.94905E-16 -7.03644E-17 7.03645E-17 1.94905E-16 2.76928E-16 3.05167E-16 + 2.85150E-16 2.33864E-16 1.71238E-16 1.13027E-16 6.76587E-17 3.68772E-17 + 1.83528E-17 8.35674E-18 3.48676E-18 1.33465E-18 4.69107E-19 1.51514E-19 + 4.49956E-20 1.22924E-20 3.09051E-21 7.15323E-22 + -4.22884E-21 -1.82705E-20 -7.26702E-20 -2.66005E-19 -8.95720E-19 -2.77326E-18 + -7.89019E-18 -2.06130E-17 -4.94033E-17 -1.08498E-16 -2.18011E-16 -3.99984E-16 + -6.68195E-16 -1.01233E-15 -1.38256E-15 -1.68575E-15 -1.80409E-15 -1.63714E-15 + -1.15224E-15 -4.15980E-16 4.15980E-16 1.15224E-15 1.63714E-15 1.80409E-15 + 1.68575E-15 1.38256E-15 1.01233E-15 6.68195E-16 3.99984E-16 2.18011E-16 + 1.08498E-16 4.94033E-17 2.06131E-17 7.89019E-18 2.77326E-18 8.95720E-19 + 2.66005E-19 7.26702E-20 1.82705E-20 4.22885E-21 + -2.20197E-20 -9.51351E-20 -3.78396E-19 -1.38510E-18 -4.66404E-18 -1.44405E-17 + -4.10845E-17 -1.07333E-16 -2.57245E-16 -5.64953E-16 -1.13519E-15 -2.08273E-15 + -3.47931E-15 -5.27121E-15 -7.19902E-15 -8.77776E-15 -9.39395E-15 -8.52465E-15 + -5.99974E-15 -2.16602E-15 2.16602E-15 5.99974E-15 8.52465E-15 9.39395E-15 + 8.77776E-15 7.19902E-15 5.27121E-15 3.47931E-15 2.08273E-15 1.13519E-15 + 5.64953E-16 2.57245E-16 1.07333E-16 4.10845E-17 1.44405E-17 4.66404E-18 + 1.38510E-18 3.78396E-19 9.51351E-20 2.20197E-20 + -1.00969E-19 -4.36233E-19 -1.73510E-18 -6.35122E-18 -2.13865E-17 -6.62154E-17 + -1.88389E-16 -4.92164E-16 -1.17957E-15 -2.59053E-15 -5.20530E-15 -9.55016E-15 + -1.59540E-14 -2.41706E-14 -3.30104E-14 -4.02496E-14 -4.30750E-14 -3.90889E-14 + -2.75112E-14 -9.93209E-15 9.93209E-15 2.75112E-14 3.90889E-14 4.30750E-14 + 4.02496E-14 3.30104E-14 2.41706E-14 1.59540E-14 9.55016E-15 5.20530E-15 + 2.59053E-15 1.17957E-15 4.92164E-16 1.88389E-16 6.62154E-17 2.13865E-17 + 6.35122E-18 1.73510E-18 4.36233E-19 1.00969E-19 + -4.07629E-19 -1.76114E-18 -7.00485E-18 -2.56408E-17 -8.63406E-17 -2.67322E-16 + -7.60555E-16 -1.98694E-15 -4.76211E-15 -1.04584E-14 -2.10146E-14 -3.85555E-14 + -6.44089E-14 -9.75805E-14 -1.33268E-13 -1.62494E-13 -1.73900E-13 -1.57808E-13 + -1.11067E-13 -4.00974E-14 4.00974E-14 1.11067E-13 1.57808E-13 1.73900E-13 + 1.62494E-13 1.33268E-13 9.75805E-14 6.44089E-14 3.85555E-14 2.10146E-14 + 1.04584E-14 4.76211E-15 1.98694E-15 7.60555E-16 2.67322E-16 8.63406E-17 + 2.56408E-17 7.00485E-18 1.76114E-18 4.07629E-19 + -1.44853E-18 -6.25832E-18 -2.48922E-17 -9.11164E-17 -3.06817E-16 -9.49945E-16 + -2.70268E-15 -7.06073E-15 -1.69225E-14 -3.71646E-14 -7.46767E-14 -1.37009E-13 + -2.28881E-13 -3.46759E-13 -4.73576E-13 -5.77432E-13 -6.17966E-13 -5.60781E-13 + -3.94684E-13 -1.42489E-13 1.42489E-13 3.94684E-13 5.60781E-13 6.17966E-13 + 5.77432E-13 4.73576E-13 3.46759E-13 2.28881E-13 1.37009E-13 7.46767E-14 + 3.71646E-14 1.69225E-14 7.06073E-15 2.70268E-15 9.49945E-16 3.06817E-16 + 9.11164E-17 2.48922E-17 6.25832E-18 1.44853E-18 + -4.52929E-18 -1.95686E-17 -7.78331E-17 -2.84903E-16 -9.59357E-16 -2.97029E-15 + -8.45076E-15 -2.20775E-14 -5.29133E-14 -1.16206E-13 -2.33500E-13 -4.28402E-13 + -7.15667E-13 -1.08425E-12 -1.48078E-12 -1.80552E-12 -1.93226E-12 -1.75346E-12 + -1.23410E-12 -4.45534E-13 4.45534E-13 1.23410E-12 1.75346E-12 1.93226E-12 + 1.80552E-12 1.48078E-12 1.08425E-12 7.15667E-13 4.28402E-13 2.33500E-13 + 1.16206E-13 5.29133E-14 2.20775E-14 8.45076E-15 2.97029E-15 9.59357E-16 + 2.84903E-16 7.78331E-17 1.95686E-17 4.52929E-18 + -1.24548E-17 -5.38102E-17 -2.14028E-16 -7.83436E-16 -2.63807E-15 -8.16780E-15 + -2.32382E-14 -6.07095E-14 -1.45503E-13 -3.19548E-13 -6.42085E-13 -1.17803E-12 + -1.96796E-12 -2.98150E-12 -4.07190E-12 -4.96487E-12 -5.31339E-12 -4.82170E-12 + -3.39356E-12 -1.22514E-12 1.22514E-12 3.39356E-12 4.82170E-12 5.31339E-12 + 4.96487E-12 4.07190E-12 2.98150E-12 1.96796E-12 1.17803E-12 6.42085E-13 + 3.19548E-13 1.45503E-13 6.07095E-14 2.32382E-14 8.16780E-15 2.63807E-15 + 7.83436E-16 2.14028E-16 5.38102E-17 1.24548E-17 + -3.00934E-17 -1.30017E-16 -5.17137E-16 -1.89295E-15 -6.37414E-15 -1.97352E-14 + -5.61484E-14 -1.46687E-13 -3.51565E-13 -7.72096E-13 -1.55141E-12 -2.84638E-12 + -4.75502E-12 -7.20394E-12 -9.83858E-12 -1.19962E-11 -1.28383E-11 -1.16503E-11 + -8.19958E-12 -2.96021E-12 2.96021E-12 8.19958E-12 1.16503E-11 1.28383E-11 + 1.19962E-11 9.83858E-12 7.20394E-12 4.75502E-12 2.84638E-12 1.55141E-12 + 7.72096E-13 3.51565E-13 1.46687E-13 5.61484E-14 1.97352E-14 6.37414E-15 + 1.89295E-15 5.17137E-16 1.30017E-16 3.00934E-17 + -6.37985E-17 -2.75638E-16 -1.09634E-15 -4.01308E-15 -1.35133E-14 -4.18389E-14 + -1.19035E-13 -3.10979E-13 -7.45324E-13 -1.63686E-12 -3.28902E-12 -6.03437E-12 + -1.00807E-11 -1.52725E-11 -2.08579E-11 -2.54321E-11 -2.72174E-11 -2.46988E-11 + -1.73832E-11 -6.27569E-12 6.27569E-12 1.73832E-11 2.46988E-11 2.72174E-11 + 2.54321E-11 2.08579E-11 1.52725E-11 1.00807E-11 6.03437E-12 3.28902E-12 + 1.63686E-12 7.45324E-13 3.10979E-13 1.19035E-13 4.18389E-14 1.35133E-14 + 4.01308E-15 1.09634E-15 2.75638E-16 6.37985E-17 + -1.18382E-16 -5.11461E-16 -2.03432E-15 -7.44649E-15 -2.50746E-14 -7.76342E-14 + -2.20877E-13 -5.77038E-13 -1.38299E-12 -3.03727E-12 -6.10295E-12 -1.11971E-11 + -1.87053E-11 -2.83389E-11 -3.87030E-11 -4.71906E-11 -5.05033E-11 -4.58299E-11 + -3.22555E-11 -1.16449E-11 1.16449E-11 3.22555E-11 4.58299E-11 5.05033E-11 + 4.71906E-11 3.87030E-11 2.83389E-11 1.87053E-11 1.11971E-11 6.10295E-12 + 3.03727E-12 1.38299E-12 5.77038E-13 2.20877E-13 7.76342E-14 2.50746E-14 + 7.44649E-15 2.03432E-15 5.11461E-16 1.18382E-16 + -1.91432E-16 -8.27072E-16 -3.28965E-15 -1.20415E-14 -4.05476E-14 -1.25541E-13 + -3.57175E-13 -9.33115E-13 -2.23640E-12 -4.91151E-12 -9.86895E-12 -1.81066E-11 + -3.02479E-11 -4.58261E-11 -6.25858E-11 -7.63109E-11 -8.16678E-11 -7.41104E-11 + -5.21597E-11 -1.88307E-11 1.88307E-11 5.21597E-11 7.41104E-11 8.16678E-11 + 7.63109E-11 6.25858E-11 4.58261E-11 3.02479E-11 1.81066E-11 9.86895E-12 + 4.91151E-12 2.23640E-12 9.33115E-13 3.57175E-13 1.25541E-13 4.05476E-14 + 1.20415E-14 3.28965E-15 8.27072E-16 1.91432E-16 + -2.67663E-16 -1.15642E-15 -4.59963E-15 -1.68367E-14 -5.66942E-14 -1.75533E-13 + -4.99406E-13 -1.30469E-12 -3.12696E-12 -6.86734E-12 -1.37989E-11 -2.53168E-11 + -4.22931E-11 -6.40747E-11 -8.75083E-11 -1.06699E-10 -1.14189E-10 -1.03622E-10 + -7.29304E-11 -2.63293E-11 2.63293E-11 7.29304E-11 1.03622E-10 1.14189E-10 + 1.06699E-10 8.75083E-11 6.40747E-11 4.22931E-11 2.53168E-11 1.37989E-11 + 6.86734E-12 3.12696E-12 1.30469E-12 4.99406E-13 1.75533E-13 5.66942E-14 + 1.68367E-14 4.59963E-15 1.15642E-15 2.67663E-16 + -3.18713E-16 -1.37698E-15 -5.47689E-15 -2.00478E-14 -6.75072E-14 -2.09011E-13 + -5.94656E-13 -1.55353E-12 -3.72336E-12 -8.17711E-12 -1.64307E-11 -3.01454E-11 + -5.03595E-11 -7.62954E-11 -1.04198E-10 -1.27049E-10 -1.35968E-10 -1.23386E-10 + -8.68401E-11 -3.13510E-11 3.13510E-11 8.68401E-11 1.23386E-10 1.35968E-10 + 1.27049E-10 1.04198E-10 7.62954E-11 5.03595E-11 3.01454E-11 1.64307E-11 + 8.17711E-12 3.72336E-12 1.55353E-12 5.94656E-13 2.09011E-13 6.75072E-14 + 2.00478E-14 5.47689E-15 1.37698E-15 3.18713E-16 + -3.12757E-16 -1.35125E-15 -5.37455E-15 -1.96732E-14 -6.62457E-14 -2.05105E-13 + -5.83544E-13 -1.52450E-12 -3.65378E-12 -8.02431E-12 -1.61237E-11 -2.95821E-11 + -4.94184E-11 -7.48697E-11 -1.02251E-10 -1.24675E-10 -1.33427E-10 -1.21080E-10 + -8.52173E-11 -3.07651E-11 3.07651E-11 8.52173E-11 1.21080E-10 1.33427E-10 + 1.24675E-10 1.02251E-10 7.48697E-11 4.94184E-11 2.95821E-11 1.61237E-11 + 8.02431E-12 3.65378E-12 1.52450E-12 5.83544E-13 2.05105E-13 6.62457E-14 + 1.96732E-14 5.37455E-15 1.35125E-15 3.12757E-16 + -2.31695E-16 -1.00103E-15 -3.98154E-15 -1.45742E-14 -4.90757E-14 -1.51945E-13 + -4.32297E-13 -1.12937E-12 -2.70677E-12 -5.94452E-12 -1.19446E-11 -2.19148E-11 + -3.66098E-11 -5.54645E-11 -7.57491E-11 -9.23609E-11 -9.88445E-11 -8.96976E-11 + -6.31301E-11 -2.27912E-11 2.27912E-11 6.31301E-11 8.96976E-11 9.88445E-11 + 9.23609E-11 7.57491E-11 5.54645E-11 3.66098E-11 2.19148E-11 1.19446E-11 + 5.94452E-12 2.70677E-12 1.12937E-12 4.32297E-13 1.51945E-13 4.90757E-14 + 1.45742E-14 3.98154E-15 1.00103E-15 2.31695E-16 + -8.57922E-17 -3.70661E-16 -1.47429E-15 -5.39654E-15 -1.81718E-14 -5.62623E-14 + -1.60071E-13 -4.18185E-13 -1.00226E-12 -2.20114E-12 -4.42287E-12 -8.11464E-12 + -1.35559E-11 -2.05374E-11 -2.80484E-11 -3.41995E-11 -3.66002E-11 -3.32133E-11 + -2.33759E-11 -8.43916E-12 8.43916E-12 2.33759E-11 3.32133E-11 3.66002E-11 + 3.41995E-11 2.80484E-11 2.05374E-11 1.35559E-11 8.11464E-12 4.42287E-12 + 2.20114E-12 1.00226E-12 4.18185E-13 1.60071E-13 5.62623E-14 1.81718E-14 + 5.39654E-15 1.47429E-15 3.70661E-16 8.57922E-17 + 8.57922E-17 3.70661E-16 1.47429E-15 5.39654E-15 1.81718E-14 5.62623E-14 + 1.60071E-13 4.18185E-13 1.00226E-12 2.20114E-12 4.42287E-12 8.11464E-12 + 1.35559E-11 2.05374E-11 2.80484E-11 3.41995E-11 3.66002E-11 3.32133E-11 + 2.33759E-11 8.43916E-12 -8.43916E-12 -2.33759E-11 -3.32133E-11 -3.66002E-11 + -3.41995E-11 -2.80484E-11 -2.05374E-11 -1.35559E-11 -8.11464E-12 -4.42287E-12 + -2.20114E-12 -1.00226E-12 -4.18185E-13 -1.60071E-13 -5.62623E-14 -1.81718E-14 + -5.39654E-15 -1.47429E-15 -3.70661E-16 -8.57922E-17 + 2.31695E-16 1.00103E-15 3.98154E-15 1.45742E-14 4.90757E-14 1.51945E-13 + 4.32297E-13 1.12937E-12 2.70677E-12 5.94452E-12 1.19446E-11 2.19148E-11 + 3.66098E-11 5.54645E-11 7.57491E-11 9.23609E-11 9.88445E-11 8.96976E-11 + 6.31301E-11 2.27912E-11 -2.27912E-11 -6.31301E-11 -8.96976E-11 -9.88445E-11 + -9.23609E-11 -7.57491E-11 -5.54645E-11 -3.66098E-11 -2.19148E-11 -1.19446E-11 + -5.94452E-12 -2.70677E-12 -1.12937E-12 -4.32297E-13 -1.51945E-13 -4.90757E-14 + -1.45742E-14 -3.98154E-15 -1.00103E-15 -2.31695E-16 + 3.12757E-16 1.35125E-15 5.37455E-15 1.96732E-14 6.62457E-14 2.05105E-13 + 5.83544E-13 1.52450E-12 3.65378E-12 8.02431E-12 1.61237E-11 2.95821E-11 + 4.94184E-11 7.48697E-11 1.02251E-10 1.24675E-10 1.33427E-10 1.21080E-10 + 8.52173E-11 3.07651E-11 -3.07651E-11 -8.52173E-11 -1.21080E-10 -1.33427E-10 + -1.24675E-10 -1.02251E-10 -7.48697E-11 -4.94184E-11 -2.95821E-11 -1.61237E-11 + -8.02431E-12 -3.65378E-12 -1.52450E-12 -5.83544E-13 -2.05105E-13 -6.62457E-14 + -1.96732E-14 -5.37455E-15 -1.35125E-15 -3.12757E-16 + 3.18713E-16 1.37698E-15 5.47689E-15 2.00478E-14 6.75072E-14 2.09011E-13 + 5.94656E-13 1.55353E-12 3.72336E-12 8.17711E-12 1.64307E-11 3.01454E-11 + 5.03595E-11 7.62954E-11 1.04198E-10 1.27049E-10 1.35968E-10 1.23386E-10 + 8.68401E-11 3.13510E-11 -3.13510E-11 -8.68401E-11 -1.23386E-10 -1.35968E-10 + -1.27049E-10 -1.04198E-10 -7.62954E-11 -5.03595E-11 -3.01454E-11 -1.64307E-11 + -8.17711E-12 -3.72336E-12 -1.55353E-12 -5.94656E-13 -2.09011E-13 -6.75072E-14 + -2.00478E-14 -5.47689E-15 -1.37698E-15 -3.18713E-16 + 2.67663E-16 1.15642E-15 4.59963E-15 1.68367E-14 5.66942E-14 1.75533E-13 + 4.99406E-13 1.30469E-12 3.12696E-12 6.86734E-12 1.37989E-11 2.53168E-11 + 4.22931E-11 6.40747E-11 8.75083E-11 1.06699E-10 1.14189E-10 1.03622E-10 + 7.29304E-11 2.63293E-11 -2.63293E-11 -7.29304E-11 -1.03622E-10 -1.14189E-10 + -1.06699E-10 -8.75083E-11 -6.40747E-11 -4.22931E-11 -2.53168E-11 -1.37989E-11 + -6.86734E-12 -3.12696E-12 -1.30469E-12 -4.99406E-13 -1.75533E-13 -5.66942E-14 + -1.68367E-14 -4.59963E-15 -1.15642E-15 -2.67663E-16 + 1.91432E-16 8.27072E-16 3.28965E-15 1.20415E-14 4.05476E-14 1.25541E-13 + 3.57175E-13 9.33115E-13 2.23640E-12 4.91151E-12 9.86895E-12 1.81066E-11 + 3.02479E-11 4.58261E-11 6.25858E-11 7.63109E-11 8.16678E-11 7.41104E-11 + 5.21597E-11 1.88307E-11 -1.88307E-11 -5.21597E-11 -7.41104E-11 -8.16678E-11 + -7.63109E-11 -6.25858E-11 -4.58261E-11 -3.02479E-11 -1.81066E-11 -9.86895E-12 + -4.91151E-12 -2.23640E-12 -9.33115E-13 -3.57175E-13 -1.25541E-13 -4.05476E-14 + -1.20415E-14 -3.28965E-15 -8.27072E-16 -1.91432E-16 + 1.18382E-16 5.11461E-16 2.03432E-15 7.44649E-15 2.50746E-14 7.76342E-14 + 2.20877E-13 5.77038E-13 1.38299E-12 3.03727E-12 6.10295E-12 1.11971E-11 + 1.87053E-11 2.83389E-11 3.87030E-11 4.71906E-11 5.05033E-11 4.58299E-11 + 3.22555E-11 1.16449E-11 -1.16449E-11 -3.22555E-11 -4.58299E-11 -5.05033E-11 + -4.71906E-11 -3.87030E-11 -2.83389E-11 -1.87053E-11 -1.11971E-11 -6.10295E-12 + -3.03727E-12 -1.38299E-12 -5.77038E-13 -2.20877E-13 -7.76342E-14 -2.50746E-14 + -7.44649E-15 -2.03432E-15 -5.11461E-16 -1.18382E-16 + 6.37985E-17 2.75638E-16 1.09634E-15 4.01308E-15 1.35133E-14 4.18389E-14 + 1.19035E-13 3.10979E-13 7.45324E-13 1.63686E-12 3.28902E-12 6.03437E-12 + 1.00807E-11 1.52725E-11 2.08579E-11 2.54321E-11 2.72174E-11 2.46988E-11 + 1.73832E-11 6.27569E-12 -6.27569E-12 -1.73832E-11 -2.46988E-11 -2.72174E-11 + -2.54321E-11 -2.08579E-11 -1.52725E-11 -1.00807E-11 -6.03437E-12 -3.28902E-12 + -1.63686E-12 -7.45324E-13 -3.10979E-13 -1.19035E-13 -4.18389E-14 -1.35133E-14 + -4.01308E-15 -1.09634E-15 -2.75638E-16 -6.37985E-17 + 3.00934E-17 1.30017E-16 5.17137E-16 1.89295E-15 6.37414E-15 1.97352E-14 + 5.61484E-14 1.46687E-13 3.51565E-13 7.72096E-13 1.55141E-12 2.84638E-12 + 4.75502E-12 7.20394E-12 9.83858E-12 1.19962E-11 1.28383E-11 1.16503E-11 + 8.19958E-12 2.96021E-12 -2.96021E-12 -8.19958E-12 -1.16503E-11 -1.28383E-11 + -1.19962E-11 -9.83858E-12 -7.20394E-12 -4.75502E-12 -2.84638E-12 -1.55141E-12 + -7.72096E-13 -3.51565E-13 -1.46687E-13 -5.61484E-14 -1.97352E-14 -6.37414E-15 + -1.89295E-15 -5.17137E-16 -1.30017E-16 -3.00934E-17 + 1.24548E-17 5.38102E-17 2.14028E-16 7.83436E-16 2.63807E-15 8.16780E-15 + 2.32382E-14 6.07095E-14 1.45503E-13 3.19548E-13 6.42085E-13 1.17803E-12 + 1.96796E-12 2.98150E-12 4.07190E-12 4.96487E-12 5.31339E-12 4.82170E-12 + 3.39356E-12 1.22514E-12 -1.22514E-12 -3.39356E-12 -4.82170E-12 -5.31339E-12 + -4.96487E-12 -4.07190E-12 -2.98150E-12 -1.96796E-12 -1.17803E-12 -6.42085E-13 + -3.19548E-13 -1.45503E-13 -6.07095E-14 -2.32382E-14 -8.16780E-15 -2.63807E-15 + -7.83436E-16 -2.14028E-16 -5.38102E-17 -1.24548E-17 + 4.52929E-18 1.95686E-17 7.78331E-17 2.84903E-16 9.59357E-16 2.97029E-15 + 8.45076E-15 2.20775E-14 5.29133E-14 1.16206E-13 2.33500E-13 4.28402E-13 + 7.15667E-13 1.08425E-12 1.48078E-12 1.80552E-12 1.93226E-12 1.75346E-12 + 1.23410E-12 4.45534E-13 -4.45534E-13 -1.23410E-12 -1.75346E-12 -1.93226E-12 + -1.80552E-12 -1.48078E-12 -1.08425E-12 -7.15667E-13 -4.28402E-13 -2.33500E-13 + -1.16206E-13 -5.29133E-14 -2.20775E-14 -8.45076E-15 -2.97029E-15 -9.59357E-16 + -2.84903E-16 -7.78331E-17 -1.95686E-17 -4.52929E-18 + 1.44853E-18 6.25832E-18 2.48922E-17 9.11164E-17 3.06817E-16 9.49945E-16 + 2.70268E-15 7.06073E-15 1.69225E-14 3.71646E-14 7.46767E-14 1.37009E-13 + 2.28881E-13 3.46759E-13 4.73576E-13 5.77432E-13 6.17966E-13 5.60781E-13 + 3.94684E-13 1.42489E-13 -1.42489E-13 -3.94684E-13 -5.60781E-13 -6.17966E-13 + -5.77432E-13 -4.73576E-13 -3.46759E-13 -2.28881E-13 -1.37009E-13 -7.46767E-14 + -3.71646E-14 -1.69225E-14 -7.06073E-15 -2.70268E-15 -9.49945E-16 -3.06817E-16 + -9.11164E-17 -2.48922E-17 -6.25832E-18 -1.44853E-18 + 4.07629E-19 1.76114E-18 7.00485E-18 2.56408E-17 8.63406E-17 2.67322E-16 + 7.60555E-16 1.98694E-15 4.76211E-15 1.04584E-14 2.10146E-14 3.85555E-14 + 6.44089E-14 9.75805E-14 1.33268E-13 1.62494E-13 1.73900E-13 1.57808E-13 + 1.11067E-13 4.00974E-14 -4.00974E-14 -1.11067E-13 -1.57808E-13 -1.73900E-13 + -1.62494E-13 -1.33268E-13 -9.75805E-14 -6.44089E-14 -3.85555E-14 -2.10146E-14 + -1.04584E-14 -4.76211E-15 -1.98694E-15 -7.60555E-16 -2.67322E-16 -8.63406E-17 + -2.56408E-17 -7.00485E-18 -1.76114E-18 -4.07629E-19 + 1.00969E-19 4.36233E-19 1.73510E-18 6.35122E-18 2.13865E-17 6.62154E-17 + 1.88389E-16 4.92164E-16 1.17957E-15 2.59053E-15 5.20530E-15 9.55016E-15 + 1.59540E-14 2.41706E-14 3.30104E-14 4.02496E-14 4.30750E-14 3.90889E-14 + 2.75112E-14 9.93209E-15 -9.93209E-15 -2.75112E-14 -3.90889E-14 -4.30750E-14 + -4.02496E-14 -3.30104E-14 -2.41706E-14 -1.59540E-14 -9.55016E-15 -5.20530E-15 + -2.59053E-15 -1.17957E-15 -4.92164E-16 -1.88389E-16 -6.62154E-17 -2.13865E-17 + -6.35122E-18 -1.73510E-18 -4.36233E-19 -1.00969E-19 + 2.20197E-20 9.51351E-20 3.78396E-19 1.38510E-18 4.66404E-18 1.44405E-17 + 4.10845E-17 1.07333E-16 2.57245E-16 5.64953E-16 1.13519E-15 2.08273E-15 + 3.47931E-15 5.27121E-15 7.19902E-15 8.77776E-15 9.39395E-15 8.52465E-15 + 5.99974E-15 2.16602E-15 -2.16602E-15 -5.99974E-15 -8.52465E-15 -9.39395E-15 + -8.77776E-15 -7.19902E-15 -5.27121E-15 -3.47931E-15 -2.08273E-15 -1.13519E-15 + -5.64953E-16 -2.57245E-16 -1.07333E-16 -4.10845E-17 -1.44405E-17 -4.66404E-18 + -1.38510E-18 -3.78396E-19 -9.51351E-20 -2.20197E-20 + 4.22884E-21 1.82705E-20 7.26702E-20 2.66005E-19 8.95720E-19 2.77326E-18 + 7.89019E-18 2.06130E-17 4.94033E-17 1.08498E-16 2.18011E-16 3.99984E-16 + 6.68195E-16 1.01233E-15 1.38256E-15 1.68575E-15 1.80409E-15 1.63714E-15 + 1.15224E-15 4.15980E-16 -4.15980E-16 -1.15224E-15 -1.63714E-15 -1.80409E-15 + -1.68575E-15 -1.38256E-15 -1.01233E-15 -6.68195E-16 -3.99984E-16 -2.18011E-16 + -1.08498E-16 -4.94033E-17 -2.06131E-17 -7.89019E-18 -2.77326E-18 -8.95720E-19 + -2.66005E-19 -7.26702E-20 -1.82705E-20 -4.22885E-21 + 7.15323E-22 3.09051E-21 1.22924E-20 4.49956E-20 1.51514E-19 4.69107E-19 + 1.33465E-18 3.48676E-18 8.35674E-18 1.83528E-17 3.68772E-17 6.76587E-17 + 1.13027E-16 1.71238E-16 2.33864E-16 2.85150E-16 3.05167E-16 2.76928E-16 + 1.94905E-16 7.03644E-17 -7.03645E-17 -1.94905E-16 -2.76928E-16 -3.05167E-16 + -2.85150E-16 -2.33864E-16 -1.71238E-16 -1.13027E-16 -6.76587E-17 -3.68772E-17 + -1.83528E-17 -8.35674E-18 -3.48676E-18 -1.33465E-18 -4.69107E-19 -1.51514E-19 + -4.49956E-20 -1.22924E-20 -3.09051E-21 -7.15323E-22 + 1.06596E-22 4.60544E-22 1.83180E-21 6.70518E-21 2.25784E-20 6.99056E-20 + 1.98888E-19 5.19593E-19 1.24531E-18 2.73491E-18 5.49540E-18 1.00824E-17 + 1.68432E-17 2.55177E-17 3.48501E-17 4.24927E-17 4.54756E-17 4.12674E-17 + 2.90444E-17 1.04856E-17 -1.04856E-17 -2.90444E-17 -4.12674E-17 -4.54756E-17 + -4.24927E-17 -3.48501E-17 -2.55177E-17 -1.68432E-17 -1.00824E-17 -5.49540E-18 + -2.73491E-18 -1.24531E-18 -5.19593E-19 -1.98888E-19 -6.99056E-20 -2.25784E-20 + -6.70518E-21 -1.83180E-21 -4.60544E-22 -1.06596E-22 + 1.39974E-23 6.04751E-23 2.40537E-22 8.80471E-22 2.96482E-21 9.17946E-21 + 2.61164E-20 6.82289E-20 1.63524E-19 3.59127E-19 7.21613E-19 1.32394E-18 + 2.21171E-18 3.35078E-18 4.57624E-18 5.57981E-18 5.97151E-18 5.41892E-18 + 3.81389E-18 1.37689E-18 -1.37689E-18 -3.81389E-18 -5.41892E-18 -5.97151E-18 + -5.57981E-18 -4.57624E-18 -3.35078E-18 -2.21171E-18 -1.32394E-18 -7.21613E-19 + -3.59127E-19 -1.63524E-19 -6.82289E-20 -2.61164E-20 -9.17946E-21 -2.96482E-21 + -8.80472E-22 -2.40537E-22 -6.04751E-23 -1.39974E-23 + 1.62011E-24 6.99958E-24 2.78406E-23 1.01909E-22 3.43158E-22 1.06246E-21 + 3.02280E-21 7.89703E-21 1.89268E-20 4.15665E-20 8.35218E-20 1.53237E-19 + 2.55991E-19 3.87831E-19 5.29669E-19 6.45826E-19 6.91161E-19 6.27203E-19 + 4.41432E-19 1.59366E-19 -1.59366E-19 -4.41432E-19 -6.27203E-19 -6.91162E-19 + -6.45826E-19 -5.29669E-19 -3.87831E-19 -2.55991E-19 -1.53237E-19 -8.35218E-20 + -4.15665E-20 -1.89268E-20 -7.89703E-21 -3.02280E-21 -1.06246E-21 -3.43158E-22 + -1.01909E-22 -2.78406E-23 -6.99958E-24 -1.62011E-24 + -1.31849E-25 -5.69647E-25 -2.26575E-24 -8.29363E-24 -2.79272E-23 -8.64663E-23 + -2.46005E-22 -6.42684E-22 -1.54032E-21 -3.38281E-21 -6.79726E-21 -1.24709E-20 + -2.08333E-20 -3.15628E-20 -4.31061E-20 -5.25592E-20 -5.62488E-20 -5.10437E-20 + -3.59251E-20 -1.29696E-20 1.29697E-20 3.59251E-20 5.10437E-20 5.62488E-20 + 5.25593E-20 4.31061E-20 3.15628E-20 2.08333E-20 1.24709E-20 6.79726E-21 + 3.38281E-21 1.54032E-21 6.42685E-22 2.46005E-22 8.64663E-23 2.79272E-23 + 8.29364E-24 2.26575E-24 5.69648E-25 1.31849E-25 + -1.14163E-24 -4.93234E-24 -1.96182E-23 -7.18111E-23 -2.41810E-22 -7.48676E-22 + -2.13005E-21 -5.56474E-21 -1.33370E-20 -2.92903E-20 -5.88546E-20 -1.07981E-19 + -1.80387E-19 -2.73290E-19 -3.73238E-19 -4.55089E-19 -4.87035E-19 -4.41966E-19 + -3.11060E-19 -1.12299E-19 1.12299E-19 3.11060E-19 4.41966E-19 4.87035E-19 + 4.55089E-19 3.73238E-19 2.73290E-19 1.80387E-19 1.07981E-19 5.88546E-20 + 2.92904E-20 1.33370E-20 5.56474E-21 2.13005E-21 7.48676E-22 2.41810E-22 + 7.18112E-23 1.96182E-23 4.93234E-24 1.14163E-24 + -8.70868E-24 -3.76254E-23 -1.49654E-22 -5.47798E-22 -1.84460E-21 -5.71113E-21 + -1.62487E-20 -4.24496E-20 -1.01739E-19 -2.23436E-19 -4.48961E-19 -8.23709E-19 + -1.37605E-18 -2.08474E-18 -2.84717E-18 -3.47156E-18 -3.71526E-18 -3.37145E-18 + -2.37286E-18 -8.56650E-19 8.56651E-19 2.37286E-18 3.37145E-18 3.71526E-18 + 3.47156E-18 2.84717E-18 2.08474E-18 1.37605E-18 8.23709E-19 4.48961E-19 + 2.23436E-19 1.01739E-19 4.24496E-20 1.62487E-20 5.71113E-21 1.84460E-21 + 5.47798E-22 1.49654E-22 3.76254E-23 8.70869E-24 + -5.85169E-23 -2.52819E-22 -1.00558E-21 -3.68085E-21 -1.23946E-20 -3.83752E-20 + -1.09181E-19 -2.85234E-19 -6.83621E-19 -1.50135E-18 -3.01674E-18 -5.53481E-18 + -9.24618E-18 -1.40081E-17 -1.91312E-17 -2.33267E-17 -2.49642E-17 -2.26540E-17 + -1.59441E-17 -5.75615E-18 5.75615E-18 1.59442E-17 2.26540E-17 2.49642E-17 + 2.33267E-17 1.91312E-17 1.40081E-17 9.24618E-18 5.53481E-18 3.01674E-18 + 1.50135E-18 6.83622E-19 2.85234E-19 1.09181E-19 3.83752E-20 1.23946E-20 + 3.68085E-21 1.00558E-21 2.52819E-22 5.85169E-23 + -3.46292E-22 -1.49613E-21 -5.95081E-21 -2.17826E-20 -7.33487E-20 -2.27097E-19 + -6.46112E-19 -1.68796E-18 -4.04554E-18 -8.88469E-18 -1.78525E-17 -3.27539E-17 + -5.47171E-17 -8.28973E-17 -1.13215E-16 -1.38043E-16 -1.47733E-16 -1.34062E-16 + -9.43544E-17 -3.40638E-17 3.40638E-17 9.43544E-17 1.34062E-16 1.47733E-16 + 1.38043E-16 1.13215E-16 8.28973E-17 5.47171E-17 3.27539E-17 1.78525E-17 + 8.88469E-18 4.04554E-18 1.68796E-18 6.46112E-19 2.27097E-19 7.33487E-20 + 2.17826E-20 5.95081E-21 1.49613E-21 3.46292E-22 + -1.80457E-21 -7.79655E-21 -3.10105E-20 -1.13512E-19 -3.82229E-19 -1.18343E-18 + -3.36697E-18 -8.79619E-18 -2.10818E-17 -4.62993E-17 -9.30315E-17 -1.70685E-16 + -2.85138E-16 -4.31989E-16 -5.89977E-16 -7.19359E-16 -7.69857E-16 -6.98616E-16 + -4.91693E-16 -1.77511E-16 1.77511E-16 4.91693E-16 6.98616E-16 7.69857E-16 + 7.19359E-16 5.89977E-16 4.31989E-16 2.85138E-16 1.70685E-16 9.30315E-17 + 4.62993E-17 2.10818E-17 8.79619E-18 3.36697E-18 1.18343E-18 3.82229E-19 + 1.13512E-19 3.10105E-20 7.79655E-21 1.80457E-21 + -8.27971E-21 -3.57721E-20 -1.42282E-19 -5.20814E-19 -1.75374E-18 -5.42981E-18 + -1.54483E-17 -4.03586E-17 -9.67275E-17 -2.12430E-16 -4.26846E-16 -7.83135E-16 + -1.30827E-15 -1.98205E-15 -2.70693E-15 -3.30056E-15 -3.53225E-15 -3.20538E-15 + -2.25598E-15 -8.14454E-16 8.14454E-16 2.25598E-15 3.20538E-15 3.53225E-15 + 3.30056E-15 2.70693E-15 1.98205E-15 1.30827E-15 7.83135E-16 4.26846E-16 + 2.12430E-16 9.67275E-17 4.03586E-17 1.54483E-17 5.42981E-18 1.75374E-18 + 5.20814E-19 1.42282E-19 3.57721E-20 8.27972E-21 + -3.34422E-20 -1.44485E-19 -5.74684E-19 -2.10360E-18 -7.08345E-18 -2.19313E-17 + -6.23966E-17 -1.63010E-16 -3.90687E-16 -8.58015E-16 -1.72406E-15 -3.16312E-15 + -5.28416E-15 -8.00559E-15 -1.09334E-14 -1.33311E-14 -1.42669E-14 -1.29467E-14 + -9.11203E-15 -3.28962E-15 3.28962E-15 9.11203E-15 1.29467E-14 1.42669E-14 + 1.33311E-14 1.09334E-14 8.00559E-15 5.28416E-15 3.16312E-15 1.72406E-15 + 8.58015E-16 3.90687E-16 1.63010E-16 6.23966E-17 2.19313E-17 7.08345E-18 + 2.10360E-18 5.74684E-19 1.44485E-19 3.34422E-20 + -1.18882E-19 -5.13624E-19 -2.04292E-18 -7.47798E-18 -2.51807E-17 -7.79626E-17 + -2.21811E-16 -5.79478E-16 -1.38884E-15 -3.05012E-15 -6.12877E-15 -1.12444E-14 + -1.87844E-14 -2.84587E-14 -3.88667E-14 -4.73902E-14 -5.07169E-14 -4.60237E-14 + -3.23919E-14 -1.16941E-14 1.16941E-14 3.23919E-14 4.60237E-14 5.07169E-14 + 4.73902E-14 3.88667E-14 2.84587E-14 1.87844E-14 1.12444E-14 6.12877E-15 + 3.05012E-15 1.38884E-15 5.79478E-16 2.21811E-16 7.79626E-17 2.51807E-17 + 7.47798E-18 2.04292E-18 5.13624E-19 1.18882E-19 + -3.71826E-19 -1.60645E-18 -6.38961E-18 -2.33888E-17 -7.87572E-17 -2.43842E-16 + -6.93754E-16 -1.81243E-15 -4.34384E-15 -9.53981E-15 -1.91688E-14 -3.51691E-14 + -5.87518E-14 -8.90099E-14 -1.21563E-13 -1.48222E-13 -1.58627E-13 -1.43948E-13 + -1.01312E-13 -3.65756E-14 3.65756E-14 1.01312E-13 1.43948E-13 1.58627E-13 + 1.48222E-13 1.21563E-13 8.90099E-14 5.87518E-14 3.51691E-14 1.91688E-14 + 9.53981E-15 4.34384E-15 1.81243E-15 6.93754E-16 2.43842E-16 7.87572E-17 + 2.33888E-17 6.38961E-18 1.60645E-18 3.71826E-19 + -1.02268E-18 -4.41843E-18 -1.75741E-17 -6.43290E-17 -2.16616E-16 -6.70670E-16 + -1.90812E-15 -4.98494E-15 -1.19474E-14 -2.62385E-14 -5.27225E-14 -9.67299E-14 + -1.61592E-13 -2.44815E-13 -3.34349E-13 -4.07672E-13 -4.36290E-13 -3.95917E-13 + -2.78650E-13 -1.00598E-13 1.00598E-13 2.78650E-13 3.95917E-13 4.36290E-13 + 4.07672E-13 3.34349E-13 2.44815E-13 1.61592E-13 9.67299E-14 5.27225E-14 + 2.62385E-14 1.19474E-14 4.98494E-15 1.90812E-15 6.70670E-16 2.16616E-16 + 6.43290E-17 1.75741E-17 4.41843E-18 1.02268E-18 + -2.47142E-18 -1.06776E-17 -4.24699E-17 -1.55458E-16 -5.23476E-16 -1.62075E-15 + -4.61119E-15 -1.20467E-14 -2.88723E-14 -6.34084E-14 -1.27410E-13 -2.33759E-13 + -3.90506E-13 -5.91623E-13 -8.07993E-13 -9.85187E-13 -1.05435E-12 -9.56779E-13 + -6.73391E-13 -2.43107E-13 2.43107E-13 6.73391E-13 9.56779E-13 1.05435E-12 + 9.85187E-13 8.07993E-13 5.91623E-13 3.90506E-13 2.33759E-13 1.27410E-13 + 6.34084E-14 2.88723E-14 1.20467E-14 4.61119E-15 1.62075E-15 5.23476E-16 + 1.55458E-16 4.24699E-17 1.06776E-17 2.47142E-18 + -5.24012E-18 -2.26397E-17 -9.00484E-17 -3.29616E-16 -1.10992E-15 -3.43646E-15 + -9.77704E-15 -2.55424E-14 -6.12176E-14 -1.34444E-13 -2.70145E-13 -4.95636E-13 + -8.27985E-13 -1.25441E-12 -1.71318E-12 -2.08888E-12 -2.23551E-12 -2.02864E-12 + -1.42778E-12 -5.15457E-13 5.15457E-13 1.42778E-12 2.02864E-12 2.23551E-12 + 2.08888E-12 1.71318E-12 1.25441E-12 8.27985E-13 4.95636E-13 2.70145E-13 + 1.34444E-13 6.12176E-14 2.55424E-14 9.77704E-15 3.43646E-15 1.10992E-15 + 3.29616E-16 9.00484E-17 2.26397E-17 5.24012E-18 + -9.72427E-18 -4.20132E-17 -1.67106E-16 -6.11680E-16 -2.05972E-15 -6.37715E-15 + -1.81436E-14 -4.73999E-14 -1.13603E-13 -2.49492E-13 -5.01318E-13 -9.19768E-13 + -1.53652E-12 -2.32785E-12 -3.17920E-12 -3.87640E-12 -4.14852E-12 -3.76462E-12 + -2.64958E-12 -9.56551E-13 9.56551E-13 2.64958E-12 3.76462E-12 4.14852E-12 + 3.87640E-12 3.17920E-12 2.32785E-12 1.53652E-12 9.19768E-13 5.01318E-13 + 2.49492E-13 1.13603E-13 4.73999E-14 1.81436E-14 6.37715E-15 2.05972E-15 + 6.11680E-16 1.67106E-16 4.20132E-17 9.72427E-18 + -1.57261E-17 -6.79436E-17 -2.70243E-16 -9.89207E-16 -3.33097E-15 -1.03131E-14 + -2.93417E-14 -7.66550E-14 -1.83719E-13 -4.03478E-13 -8.10730E-13 -1.48745E-12 + -2.48485E-12 -3.76460E-12 -5.14139E-12 -6.26890E-12 -6.70897E-12 -6.08814E-12 + -4.28489E-12 -1.54693E-12 1.54693E-12 4.28489E-12 6.08814E-12 6.70897E-12 + 6.26890E-12 5.14139E-12 3.76460E-12 2.48485E-12 1.48745E-12 8.10730E-13 + 4.03478E-13 1.83719E-13 7.66550E-14 2.93417E-14 1.03131E-14 3.33097E-15 + 9.89207E-16 2.70243E-16 6.79436E-17 1.57261E-17 + -2.19896E-17 -9.50049E-17 -3.77878E-16 -1.38320E-15 -4.65766E-15 -1.44207E-14 + -4.10283E-14 -1.07186E-13 -2.56893E-13 -5.64180E-13 -1.13364E-12 -2.07988E-12 + -3.47455E-12 -5.26400E-12 -7.18916E-12 -8.76575E-12 -9.38109E-12 -8.51299E-12 + -5.99153E-12 -2.16306E-12 2.16306E-12 5.99153E-12 8.51299E-12 9.38109E-12 + 8.76575E-12 7.18916E-12 5.26400E-12 3.47455E-12 2.07988E-12 1.13364E-12 + 5.64180E-13 2.56893E-13 1.07186E-13 4.10283E-14 1.44207E-14 4.65766E-15 + 1.38320E-15 3.77878E-16 9.50049E-17 2.19896E-17 + -2.61846E-17 -1.13129E-16 -4.49967E-16 -1.64708E-15 -5.54621E-15 -1.71718E-14 + -4.88554E-14 -1.27634E-13 -3.05901E-13 -6.71810E-13 -1.34990E-12 -2.47667E-12 + -4.13740E-12 -6.26823E-12 -8.56066E-12 -1.04380E-11 -1.11708E-11 -1.01370E-11 + -7.13455E-12 -2.57571E-12 2.57571E-12 7.13455E-12 1.01370E-11 1.11708E-11 + 1.04380E-11 8.56066E-12 6.26823E-12 4.13740E-12 2.47667E-12 1.34990E-12 + 6.71810E-13 3.05901E-13 1.27634E-13 4.88554E-14 1.71718E-14 5.54621E-15 + 1.64708E-15 4.49967E-16 1.13129E-16 2.61846E-17 + -2.56960E-17 -1.11018E-16 -4.41571E-16 -1.61634E-15 -5.44273E-15 -1.68514E-14 + -4.79438E-14 -1.25253E-13 -3.00193E-13 -6.59275E-13 -1.32472E-12 -2.43045E-12 + -4.06020E-12 -6.15127E-12 -8.40093E-12 -1.02433E-11 -1.09623E-11 -9.94789E-12 + -7.00143E-12 -2.52765E-12 2.52765E-12 7.00143E-12 9.94789E-12 1.09623E-11 + 1.02433E-11 8.40093E-12 6.15127E-12 4.06020E-12 2.43045E-12 1.32472E-12 + 6.59275E-13 3.00193E-13 1.25253E-13 4.79438E-14 1.68514E-14 5.44273E-15 + 1.61634E-15 4.41571E-16 1.11018E-16 2.56960E-17 + -1.90363E-17 -8.22453E-17 -3.27127E-16 -1.19743E-15 -4.03211E-15 -1.24839E-14 + -3.55180E-14 -9.27904E-14 -2.22391E-13 -4.88408E-13 -9.81384E-13 -1.80054E-12 + -3.00790E-12 -4.55702E-12 -6.22363E-12 -7.58847E-12 -8.12117E-12 -7.36966E-12 + -5.18684E-12 -1.87255E-12 1.87255E-12 5.18684E-12 7.36966E-12 8.12117E-12 + 7.58847E-12 6.22363E-12 4.55702E-12 3.00790E-12 1.80054E-12 9.81384E-13 + 4.88408E-13 2.22391E-13 9.27904E-14 3.55180E-14 1.24839E-14 4.03211E-15 + 1.19743E-15 3.27127E-16 8.22453E-17 1.90363E-17 + -7.04884E-18 -3.04541E-17 -1.21130E-16 -4.43389E-16 -1.49303E-15 -4.62261E-15 + -1.31518E-14 -3.43588E-14 -8.23479E-14 -1.80850E-13 -3.63391E-13 -6.66713E-13 + -1.11378E-12 -1.68739E-12 -2.30451E-12 -2.80989E-12 -3.00714E-12 -2.72887E-12 + -1.92060E-12 -6.93376E-13 6.93376E-13 1.92060E-12 2.72887E-12 3.00714E-12 + 2.80989E-12 2.30451E-12 1.68739E-12 1.11378E-12 6.66713E-13 3.63391E-13 + 1.80850E-13 8.23479E-14 3.43588E-14 1.31518E-14 4.62261E-15 1.49303E-15 + 4.43389E-16 1.21130E-16 3.04541E-17 7.04884E-18 + 7.04884E-18 3.04541E-17 1.21130E-16 4.43389E-16 1.49303E-15 4.62261E-15 + 1.31518E-14 3.43588E-14 8.23479E-14 1.80850E-13 3.63391E-13 6.66713E-13 + 1.11378E-12 1.68739E-12 2.30451E-12 2.80989E-12 3.00714E-12 2.72887E-12 + 1.92060E-12 6.93376E-13 -6.93376E-13 -1.92060E-12 -2.72887E-12 -3.00714E-12 + -2.80989E-12 -2.30451E-12 -1.68739E-12 -1.11378E-12 -6.66713E-13 -3.63391E-13 + -1.80850E-13 -8.23479E-14 -3.43588E-14 -1.31518E-14 -4.62261E-15 -1.49303E-15 + -4.43389E-16 -1.21130E-16 -3.04541E-17 -7.04884E-18 + 1.90363E-17 8.22453E-17 3.27127E-16 1.19743E-15 4.03211E-15 1.24839E-14 + 3.55180E-14 9.27904E-14 2.22391E-13 4.88408E-13 9.81384E-13 1.80054E-12 + 3.00790E-12 4.55702E-12 6.22363E-12 7.58847E-12 8.12117E-12 7.36966E-12 + 5.18684E-12 1.87255E-12 -1.87255E-12 -5.18684E-12 -7.36966E-12 -8.12117E-12 + -7.58847E-12 -6.22363E-12 -4.55702E-12 -3.00790E-12 -1.80054E-12 -9.81384E-13 + -4.88408E-13 -2.22391E-13 -9.27904E-14 -3.55180E-14 -1.24839E-14 -4.03211E-15 + -1.19743E-15 -3.27127E-16 -8.22453E-17 -1.90363E-17 + 2.56960E-17 1.11018E-16 4.41571E-16 1.61634E-15 5.44273E-15 1.68514E-14 + 4.79438E-14 1.25253E-13 3.00193E-13 6.59275E-13 1.32472E-12 2.43045E-12 + 4.06020E-12 6.15127E-12 8.40093E-12 1.02433E-11 1.09623E-11 9.94789E-12 + 7.00143E-12 2.52765E-12 -2.52765E-12 -7.00143E-12 -9.94789E-12 -1.09623E-11 + -1.02433E-11 -8.40093E-12 -6.15127E-12 -4.06020E-12 -2.43045E-12 -1.32472E-12 + -6.59275E-13 -3.00193E-13 -1.25253E-13 -4.79438E-14 -1.68514E-14 -5.44273E-15 + -1.61634E-15 -4.41571E-16 -1.11018E-16 -2.56960E-17 + 2.61846E-17 1.13129E-16 4.49967E-16 1.64708E-15 5.54621E-15 1.71718E-14 + 4.88554E-14 1.27634E-13 3.05901E-13 6.71810E-13 1.34990E-12 2.47667E-12 + 4.13740E-12 6.26823E-12 8.56066E-12 1.04380E-11 1.11708E-11 1.01370E-11 + 7.13455E-12 2.57571E-12 -2.57571E-12 -7.13455E-12 -1.01370E-11 -1.11708E-11 + -1.04380E-11 -8.56066E-12 -6.26823E-12 -4.13740E-12 -2.47667E-12 -1.34990E-12 + -6.71810E-13 -3.05901E-13 -1.27634E-13 -4.88554E-14 -1.71718E-14 -5.54621E-15 + -1.64708E-15 -4.49967E-16 -1.13129E-16 -2.61846E-17 + 2.19896E-17 9.50049E-17 3.77878E-16 1.38320E-15 4.65766E-15 1.44207E-14 + 4.10283E-14 1.07186E-13 2.56893E-13 5.64180E-13 1.13364E-12 2.07988E-12 + 3.47455E-12 5.26400E-12 7.18916E-12 8.76575E-12 9.38109E-12 8.51299E-12 + 5.99153E-12 2.16306E-12 -2.16306E-12 -5.99153E-12 -8.51299E-12 -9.38109E-12 + -8.76575E-12 -7.18916E-12 -5.26400E-12 -3.47455E-12 -2.07988E-12 -1.13364E-12 + -5.64180E-13 -2.56893E-13 -1.07186E-13 -4.10283E-14 -1.44207E-14 -4.65766E-15 + -1.38320E-15 -3.77878E-16 -9.50049E-17 -2.19896E-17 + 1.57261E-17 6.79436E-17 2.70243E-16 9.89207E-16 3.33097E-15 1.03131E-14 + 2.93417E-14 7.66550E-14 1.83719E-13 4.03478E-13 8.10730E-13 1.48745E-12 + 2.48485E-12 3.76460E-12 5.14139E-12 6.26890E-12 6.70897E-12 6.08814E-12 + 4.28489E-12 1.54693E-12 -1.54693E-12 -4.28489E-12 -6.08814E-12 -6.70897E-12 + -6.26890E-12 -5.14139E-12 -3.76460E-12 -2.48485E-12 -1.48745E-12 -8.10730E-13 + -4.03478E-13 -1.83719E-13 -7.66550E-14 -2.93417E-14 -1.03131E-14 -3.33097E-15 + -9.89207E-16 -2.70243E-16 -6.79436E-17 -1.57261E-17 + 9.72427E-18 4.20132E-17 1.67106E-16 6.11680E-16 2.05972E-15 6.37715E-15 + 1.81436E-14 4.73999E-14 1.13603E-13 2.49492E-13 5.01318E-13 9.19768E-13 + 1.53652E-12 2.32785E-12 3.17920E-12 3.87640E-12 4.14852E-12 3.76462E-12 + 2.64958E-12 9.56551E-13 -9.56551E-13 -2.64958E-12 -3.76462E-12 -4.14852E-12 + -3.87640E-12 -3.17920E-12 -2.32785E-12 -1.53652E-12 -9.19768E-13 -5.01318E-13 + -2.49492E-13 -1.13603E-13 -4.73999E-14 -1.81436E-14 -6.37715E-15 -2.05972E-15 + -6.11680E-16 -1.67106E-16 -4.20132E-17 -9.72427E-18 + 5.24012E-18 2.26397E-17 9.00484E-17 3.29616E-16 1.10992E-15 3.43646E-15 + 9.77704E-15 2.55424E-14 6.12176E-14 1.34444E-13 2.70145E-13 4.95636E-13 + 8.27985E-13 1.25441E-12 1.71318E-12 2.08888E-12 2.23551E-12 2.02864E-12 + 1.42778E-12 5.15457E-13 -5.15457E-13 -1.42778E-12 -2.02864E-12 -2.23551E-12 + -2.08888E-12 -1.71318E-12 -1.25441E-12 -8.27985E-13 -4.95636E-13 -2.70145E-13 + -1.34444E-13 -6.12176E-14 -2.55424E-14 -9.77704E-15 -3.43646E-15 -1.10992E-15 + -3.29616E-16 -9.00484E-17 -2.26397E-17 -5.24012E-18 + 2.47142E-18 1.06776E-17 4.24699E-17 1.55458E-16 5.23476E-16 1.62075E-15 + 4.61119E-15 1.20467E-14 2.88723E-14 6.34084E-14 1.27410E-13 2.33759E-13 + 3.90506E-13 5.91623E-13 8.07993E-13 9.85187E-13 1.05435E-12 9.56779E-13 + 6.73391E-13 2.43107E-13 -2.43107E-13 -6.73391E-13 -9.56779E-13 -1.05435E-12 + -9.85187E-13 -8.07993E-13 -5.91623E-13 -3.90506E-13 -2.33759E-13 -1.27410E-13 + -6.34084E-14 -2.88723E-14 -1.20467E-14 -4.61119E-15 -1.62075E-15 -5.23476E-16 + -1.55458E-16 -4.24699E-17 -1.06776E-17 -2.47142E-18 + 1.02268E-18 4.41843E-18 1.75741E-17 6.43290E-17 2.16616E-16 6.70670E-16 + 1.90812E-15 4.98494E-15 1.19474E-14 2.62385E-14 5.27225E-14 9.67299E-14 + 1.61592E-13 2.44815E-13 3.34349E-13 4.07672E-13 4.36290E-13 3.95917E-13 + 2.78650E-13 1.00598E-13 -1.00598E-13 -2.78650E-13 -3.95917E-13 -4.36290E-13 + -4.07672E-13 -3.34349E-13 -2.44815E-13 -1.61592E-13 -9.67299E-14 -5.27225E-14 + -2.62385E-14 -1.19474E-14 -4.98494E-15 -1.90812E-15 -6.70670E-16 -2.16616E-16 + -6.43290E-17 -1.75741E-17 -4.41843E-18 -1.02268E-18 + 3.71826E-19 1.60645E-18 6.38961E-18 2.33888E-17 7.87572E-17 2.43842E-16 + 6.93754E-16 1.81243E-15 4.34384E-15 9.53981E-15 1.91688E-14 3.51691E-14 + 5.87518E-14 8.90099E-14 1.21563E-13 1.48222E-13 1.58627E-13 1.43948E-13 + 1.01312E-13 3.65756E-14 -3.65756E-14 -1.01312E-13 -1.43948E-13 -1.58627E-13 + -1.48222E-13 -1.21563E-13 -8.90099E-14 -5.87518E-14 -3.51691E-14 -1.91688E-14 + -9.53981E-15 -4.34384E-15 -1.81243E-15 -6.93754E-16 -2.43842E-16 -7.87572E-17 + -2.33888E-17 -6.38961E-18 -1.60645E-18 -3.71826E-19 + 1.18882E-19 5.13624E-19 2.04292E-18 7.47798E-18 2.51807E-17 7.79626E-17 + 2.21811E-16 5.79478E-16 1.38884E-15 3.05012E-15 6.12877E-15 1.12444E-14 + 1.87844E-14 2.84587E-14 3.88667E-14 4.73902E-14 5.07169E-14 4.60237E-14 + 3.23919E-14 1.16941E-14 -1.16941E-14 -3.23919E-14 -4.60237E-14 -5.07169E-14 + -4.73902E-14 -3.88667E-14 -2.84587E-14 -1.87844E-14 -1.12444E-14 -6.12877E-15 + -3.05012E-15 -1.38884E-15 -5.79478E-16 -2.21811E-16 -7.79626E-17 -2.51807E-17 + -7.47798E-18 -2.04292E-18 -5.13624E-19 -1.18882E-19 + 3.34422E-20 1.44485E-19 5.74684E-19 2.10360E-18 7.08345E-18 2.19313E-17 + 6.23966E-17 1.63010E-16 3.90687E-16 8.58015E-16 1.72406E-15 3.16312E-15 + 5.28416E-15 8.00559E-15 1.09334E-14 1.33311E-14 1.42669E-14 1.29467E-14 + 9.11203E-15 3.28962E-15 -3.28962E-15 -9.11203E-15 -1.29467E-14 -1.42669E-14 + -1.33311E-14 -1.09334E-14 -8.00559E-15 -5.28416E-15 -3.16312E-15 -1.72406E-15 + -8.58015E-16 -3.90687E-16 -1.63010E-16 -6.23966E-17 -2.19313E-17 -7.08345E-18 + -2.10360E-18 -5.74684E-19 -1.44485E-19 -3.34422E-20 + 8.27971E-21 3.57721E-20 1.42282E-19 5.20814E-19 1.75374E-18 5.42981E-18 + 1.54483E-17 4.03586E-17 9.67275E-17 2.12430E-16 4.26846E-16 7.83135E-16 + 1.30827E-15 1.98205E-15 2.70693E-15 3.30056E-15 3.53225E-15 3.20538E-15 + 2.25598E-15 8.14454E-16 -8.14454E-16 -2.25598E-15 -3.20538E-15 -3.53225E-15 + -3.30056E-15 -2.70693E-15 -1.98205E-15 -1.30827E-15 -7.83135E-16 -4.26846E-16 + -2.12430E-16 -9.67275E-17 -4.03586E-17 -1.54483E-17 -5.42981E-18 -1.75374E-18 + -5.20814E-19 -1.42282E-19 -3.57721E-20 -8.27972E-21 + 1.80457E-21 7.79655E-21 3.10105E-20 1.13512E-19 3.82229E-19 1.18343E-18 + 3.36697E-18 8.79619E-18 2.10818E-17 4.62993E-17 9.30315E-17 1.70685E-16 + 2.85138E-16 4.31989E-16 5.89977E-16 7.19359E-16 7.69857E-16 6.98616E-16 + 4.91693E-16 1.77511E-16 -1.77511E-16 -4.91693E-16 -6.98616E-16 -7.69857E-16 + -7.19359E-16 -5.89977E-16 -4.31989E-16 -2.85138E-16 -1.70685E-16 -9.30315E-17 + -4.62993E-17 -2.10818E-17 -8.79619E-18 -3.36697E-18 -1.18343E-18 -3.82229E-19 + -1.13512E-19 -3.10105E-20 -7.79655E-21 -1.80457E-21 + 3.46292E-22 1.49613E-21 5.95081E-21 2.17826E-20 7.33487E-20 2.27097E-19 + 6.46112E-19 1.68796E-18 4.04554E-18 8.88469E-18 1.78525E-17 3.27539E-17 + 5.47171E-17 8.28973E-17 1.13215E-16 1.38043E-16 1.47733E-16 1.34062E-16 + 9.43544E-17 3.40638E-17 -3.40638E-17 -9.43544E-17 -1.34062E-16 -1.47733E-16 + -1.38043E-16 -1.13215E-16 -8.28973E-17 -5.47171E-17 -3.27539E-17 -1.78525E-17 + -8.88469E-18 -4.04554E-18 -1.68796E-18 -6.46112E-19 -2.27097E-19 -7.33487E-20 + -2.17826E-20 -5.95081E-21 -1.49613E-21 -3.46292E-22 + 5.85169E-23 2.52819E-22 1.00558E-21 3.68085E-21 1.23946E-20 3.83752E-20 + 1.09181E-19 2.85234E-19 6.83621E-19 1.50135E-18 3.01674E-18 5.53481E-18 + 9.24618E-18 1.40081E-17 1.91312E-17 2.33267E-17 2.49642E-17 2.26540E-17 + 1.59441E-17 5.75615E-18 -5.75615E-18 -1.59442E-17 -2.26540E-17 -2.49642E-17 + -2.33267E-17 -1.91312E-17 -1.40081E-17 -9.24618E-18 -5.53481E-18 -3.01674E-18 + -1.50135E-18 -6.83622E-19 -2.85234E-19 -1.09181E-19 -3.83752E-20 -1.23946E-20 + -3.68085E-21 -1.00558E-21 -2.52819E-22 -5.85169E-23 + 8.70868E-24 3.76254E-23 1.49654E-22 5.47798E-22 1.84460E-21 5.71113E-21 + 1.62487E-20 4.24496E-20 1.01739E-19 2.23436E-19 4.48961E-19 8.23709E-19 + 1.37605E-18 2.08474E-18 2.84717E-18 3.47156E-18 3.71526E-18 3.37145E-18 + 2.37286E-18 8.56650E-19 -8.56651E-19 -2.37286E-18 -3.37145E-18 -3.71526E-18 + -3.47156E-18 -2.84717E-18 -2.08474E-18 -1.37605E-18 -8.23709E-19 -4.48961E-19 + -2.23436E-19 -1.01739E-19 -4.24496E-20 -1.62487E-20 -5.71113E-21 -1.84460E-21 + -5.47798E-22 -1.49654E-22 -3.76254E-23 -8.70869E-24 + 1.14163E-24 4.93234E-24 1.96182E-23 7.18111E-23 2.41810E-22 7.48676E-22 + 2.13005E-21 5.56474E-21 1.33370E-20 2.92903E-20 5.88546E-20 1.07981E-19 + 1.80387E-19 2.73290E-19 3.73238E-19 4.55089E-19 4.87035E-19 4.41966E-19 + 3.11060E-19 1.12299E-19 -1.12299E-19 -3.11060E-19 -4.41966E-19 -4.87035E-19 + -4.55089E-19 -3.73238E-19 -2.73290E-19 -1.80387E-19 -1.07981E-19 -5.88546E-20 + -2.92904E-20 -1.33370E-20 -5.56474E-21 -2.13005E-21 -7.48676E-22 -2.41810E-22 + -7.18112E-23 -1.96182E-23 -4.93234E-24 -1.14163E-24 + 1.31849E-25 5.69647E-25 2.26575E-24 8.29363E-24 2.79272E-23 8.64663E-23 + 2.46005E-22 6.42684E-22 1.54032E-21 3.38281E-21 6.79726E-21 1.24709E-20 + 2.08333E-20 3.15628E-20 4.31061E-20 5.25592E-20 5.62488E-20 5.10437E-20 + 3.59251E-20 1.29696E-20 -1.29697E-20 -3.59251E-20 -5.10437E-20 -5.62488E-20 + -5.25593E-20 -4.31061E-20 -3.15628E-20 -2.08333E-20 -1.24709E-20 -6.79726E-21 + -3.38281E-21 -1.54032E-21 -6.42685E-22 -2.46005E-22 -8.64663E-23 -2.79272E-23 + -8.29364E-24 -2.26575E-24 -5.69648E-25 -1.31849E-25 diff --git a/samples/notebooks/benzene_molecule/benzene.ipynb b/samples/notebooks/benzene_molecule/benzene.ipynb new file mode 100644 index 0000000000..10184d92f0 --- /dev/null +++ b/samples/notebooks/benzene_molecule/benzene.ipynb @@ -0,0 +1,151 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "9fe051cd", + "metadata": {}, + "source": [ + "# Run OpenQASM Benzene simulation\n", + "\n", + "This sample shows using the QDK tools for visualizing a simulating an OpenQASM program for the Benzene molecule.\n", + "\n", + "First, we import the relevant tools and read the OpenQASM source from a file. We can use the QDK to compile this into a QIR program." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ad093c2b", + "metadata": {}, + "outputs": [], + "source": [ + "from qdk import init, TargetProfile\n", + "from qdk.openqasm import circuit, compile, run\n", + "from qdk.widgets import Circuit, Histogram\n", + "\n", + "from pathlib import Path\n", + "src = Path(\"benzene_diradical_injected_rotation_measurement_circuit_0.qasm\").read_text()\n", + "\n", + "init(target_profile=TargetProfile.Base)\n", + "qir = compile(src)" + ] + }, + { + "cell_type": "markdown", + "id": "e97d2017", + "metadata": {}, + "source": [ + "Next, we can visualize the program as a circuit using the `Circuit` widget." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eba22bee", + "metadata": {}, + "outputs": [], + "source": [ + "Circuit(circuit(src))" + ] + }, + { + "cell_type": "markdown", + "id": "993b5e29", + "metadata": {}, + "source": [ + "Using the sparse-state simulator, we can run the program without noise and confirm the results visually with the `Histogram` widget." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b4d0339e", + "metadata": {}, + "outputs": [], + "source": [ + "# Run using the default sparse simulator\n", + "sim_results = run(src, shots=1024)\n", + "Histogram(sim_results, labels=\"kets\")" + ] + }, + { + "cell_type": "markdown", + "id": "fc8bf1e9", + "metadata": {}, + "source": [ + "Let's see how this program might run when compiled and scheduled for a neutral atom device. We create a new instance of the `NeutralAtomDevice` class with default parameters and trace the QIR program to see what it looks like when compiled to the native gates and movements of such a device." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9737fbd1", + "metadata": {}, + "outputs": [], + "source": [ + "from qdk.simulation import NeutralAtomDevice, NoiseConfig\n", + "\n", + "device = NeutralAtomDevice()\n", + "device.show_trace(qir)" + ] + }, + { + "cell_type": "markdown", + "id": "c19a823d", + "metadata": {}, + "source": [ + "Next, we create a noise configuration for the native gates of this neutral atom device, including some probability of qubit loss on movement, and simulate the program targetted for the device using the GPU full-state simulator. You can try varying the noise levels to observe how the results change in the presence of different noise or loss probabilities." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8891c9cd", + "metadata": {}, + "outputs": [], + "source": [ + "noise = NoiseConfig()\n", + "noise.cz.set_depolarizing(0.05)\n", + "noise.sx.set_bitflip(0.01)\n", + "noise.mov.loss = 0.001\n", + "results = device.simulate(qir, shots=1000, noise=noise, type=\"gpu\")\n", + "Histogram(results, labels=\"kets\", items=\"top-25\")" + ] + }, + { + "cell_type": "markdown", + "id": "be4efd09", + "metadata": {}, + "source": [ + "Additionally, you can use the `MoleculeViewer` widget to visualize the structure of the Benzene molecule we've been experimenting with." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "446d333b", + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "from qdk.widgets import MoleculeViewer\n", + "\n", + "# TODO: This data should come from calling qdk-chemistry Python APIs.\n", + "molecule_data = Path(\"benzene_diradical.structure.xyz\").read_text()\n", + "cube_data = {\n", + " \"alpha_18\": Path(\"MO_alpha_18.cube\").read_text(),\n", + " \"alpha_19\": Path(\"MO_alpha_19.cube\").read_text(),\n", + "}\n", + "\n", + "MoleculeViewer(molecule_data=molecule_data, cube_data=cube_data, isoval=0.03)" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/samples/notebooks/benzene_molecule/benzene_diradical.structure.xyz b/samples/notebooks/benzene_molecule/benzene_diradical.structure.xyz new file mode 100644 index 0000000000..68c3734fb6 --- /dev/null +++ b/samples/notebooks/benzene_molecule/benzene_diradical.structure.xyz @@ -0,0 +1,12 @@ +10 +benzene radical +C 0.000000 1.396000 0.000000 +C 1.209077 0.698000 0.000000 +C 1.209077 -0.698000 0.000000 +C 0.000000 -1.396000 0.000000 +C -1.209077 -0.698000 0.000000 +C -1.209077 0.698000 0.000000 +H 2.151000 1.242000 0.000000 +H 2.151000 -1.242000 0.000000 +H -2.151000 -1.242000 0.000000 +H -2.151000 1.242000 0.000000 diff --git a/samples/notebooks/benzene_molecule/benzene_diradical_injected_rotation_measurement_circuit_0.qasm b/samples/notebooks/benzene_molecule/benzene_diradical_injected_rotation_measurement_circuit_0.qasm new file mode 100644 index 0000000000..e787163327 --- /dev/null +++ b/samples/notebooks/benzene_molecule/benzene_diradical_injected_rotation_measurement_circuit_0.qasm @@ -0,0 +1,14 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[4] q; +h q[0]; +rz(1.86) q[0]; +h q[0]; +sdg q[0]; +barrier q; +x q[1]; +cx q[0], q[1]; +cx q[0], q[2]; +cx q[1], q[3]; +h q; +bit[4] c = measure q; diff --git a/samples/notebooks/carbon_error_correction/carbon.ipynb b/samples/notebooks/carbon_error_correction/carbon.ipynb new file mode 100644 index 0000000000..815430a21d --- /dev/null +++ b/samples/notebooks/carbon_error_correction/carbon.ipynb @@ -0,0 +1,353 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "de73025f", + "metadata": {}, + "source": [ + "# Using QDK to explore the Carbon Error Correction Code.\n", + "\n", + "This notebook will show how you can use the QDK with the Neutral Atom Device to explore how the Carbon error correction code runs both with and without noise.\n", + "\n", + "For more information on the Carbon family of codes, see [Demonstration of logical qubits and repeated error correction with better-than-physical error rates](https://arxiv.org/abs/2404.02280).\n", + "\n", + "First, we import the required packages and utilities, initialize a `NeutralAtomDevice` and initialize the Q# environment with the project from the current folder. This includes a Python implementation of the Carbon (C12) decoder that can turn the raw physical qubit measurement results into corrected, logical qubit measurement results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1929d94c", + "metadata": {}, + "outputs": [], + "source": [ + "import decoder\n", + "from qdk import qsharp, code\n", + "from qdk.widgets import Histogram\n", + "from qdk.simulation import NeutralAtomDevice, NoiseConfig\n", + "\n", + "# Get an instance of the NeutralAtomDevice machine\n", + "device = NeutralAtomDevice()\n", + "\n", + "# Initialize Q# with the project and adaptive profile configured\n", + "qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF, project_root=\".\")" + ] + }, + { + "cell_type": "markdown", + "id": "f1d36f1f", + "metadata": {}, + "source": [ + "Next, this `%%qsharp` cell sets up the experiment we want to run, which is parametrized by the number of repetitions, which Pauli basis to prepare and measure with, and how many blocks of Carbon (C12) with ancillas should be used." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6177ed62", + "metadata": { + "vscode": { + "languageId": "qsharp" + } + }, + "outputs": [], + "source": [ + "%%qsharp\n", + "import Std.Diagnostics.Fact;\n", + "import Utils.TransversalCNOT;\n", + "import C12;\n", + "\n", + "operation PerformTeleportExperiment(ec_repetitions : Int, basis : Pauli, num_blocks : Int) : (Result[], (Result[], Result[])[], Result[])[] {\n", + " Fact(num_blocks > 0, \"need at least one block\");\n", + " let size = (12 + 16); // 12 data + 16 ancillas per block\n", + " use qubits = Qubit[size * num_blocks];\n", + " mutable results = [];\n", + " for i in 0..(num_blocks - 1) {\n", + " let logical_block = qubits[(0+(i*size))..(11+(i*size))];\n", + " let ancillas = qubits[(12+(i*size))..(27+(i*size))];\n", + "\n", + " results += [C12_Teleport(ec_repetitions, basis, logical_block, ancillas)];\n", + " }\n", + " return results;\n", + "}\n", + "\n", + "operation C12_Teleport(ec_repetitions : Int, basis : Pauli, logical_block : Qubit[], ancillas : Qubit[]) : (Result[], (Result[], Result[])[], Result[]) {\n", + " Fact(basis == PauliZ or basis == PauliX or basis == PauliI, \"only PauliZ and PauliX supported\");\n", + " Fact(Length(logical_block) == 12, \"logical block must be 12 qubits\");\n", + " Fact(Length(ancillas) == 16, \"16 ancillas are required\");\n", + "\n", + " // Prepare in the requested basis\n", + " mutable preselect = if basis == PauliX {\n", + " C12.PrepareXX(logical_block, ancillas[...3])\n", + " } else {\n", + " C12.PrepareZZ(logical_block, ancillas[...3])\n", + " };\n", + "\n", + " mutable syndromes = [];\n", + "\n", + " for _ in 1..(ec_repetitions) {\n", + " // Sequential teleport on..\n", + " // Prepare Z, Teleport X\n", + " set preselect += C12.PrepareZZ(ancillas[...11], ancillas[12...]);\n", + " TransversalCNOT(logical_block, ancillas[...11]);\n", + " ApplyToEach(H, logical_block);\n", + " let syndrome_x = MResetEachZ(logical_block);\n", + "\n", + " // Prepare X, Teleport Z\n", + " set preselect += C12.PrepareXX(logical_block, ancillas[12...]);\n", + " TransversalCNOT(logical_block, ancillas[...11]);\n", + " let syndrome_z = MResetEachZ(ancillas[...11]);\n", + " set syndromes += [(syndrome_x, syndrome_z)];\n", + " }\n", + "\n", + " // Final measurement\n", + " if basis == PauliX {\n", + " ApplyToEach(H, logical_block);\n", + " }\n", + " let final = MResetEachZ(logical_block);\n", + "\n", + " (preselect, syndromes, final)\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "21031218", + "metadata": {}, + "source": [ + "With the experiment set up, we first try running the Q# with the default, sparse state simulation and no noise. This `Histogram` should have one bar with all `[[Zero, Zero]]` results, indicating that the logical teleport was performed successfully for one Carbon (C12) block in all 100 shots." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a8d0c4cd", + "metadata": {}, + "outputs": [], + "source": [ + "results = qsharp.run(code.PerformTeleportExperiment, 100, 1, qsharp.Pauli.Z, 1)\n", + "corrected_logical_results = decoder.decode_results(results, \"Z\")\n", + "\n", + "# Use counter to make a simple histogram of the corrected logical results.\n", + "Histogram(map(str, corrected_logical_results))" + ] + }, + { + "cell_type": "markdown", + "id": "1f2ead22", + "metadata": {}, + "source": [ + "Next, we compile the program, this time with two Carbon (C12) blocks. To visualize and test larger programs, try increasing the number of blocks (the last property) to larger values." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "313cb353", + "metadata": {}, + "outputs": [], + "source": [ + "qir = qsharp.compile(code.PerformTeleportExperiment, 1, qsharp.Pauli.Z, 2)" + ] + }, + { + "cell_type": "markdown", + "id": "c18dcefe", + "metadata": {}, + "source": [ + "We can use the Neutral Atom Device we previously initialized to trace the compiled program. This will decompose the gates in the QIR and perform layout and scheduling for the device." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ce29c823", + "metadata": {}, + "outputs": [], + "source": [ + "device.show_trace(qir)" + ] + }, + { + "cell_type": "markdown", + "id": "5fbd6f5f", + "metadata": {}, + "source": [ + "We can also use the device to perform Clifford simulations of the experiment. Clifford simulation can scale to multiple Carbon (C12) blocks and multiple rounds of error correction. Here again, a noiseless simulation should produce a single bar in the histogram, this time with a number of logical result pairs equal to the number of blocks compiled into the program." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "8e05e0f8", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4410a84a0ec841a9a5daf7aa1e27c25b", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res = device.simulate(qir, shots=1000, type=\"clifford\")\n", + "corrected_logical_results = decoder.decode_results(res, \"Z\")\n", + "Histogram(map(str, corrected_logical_results))" + ] + }, + { + "cell_type": "markdown", + "id": "b97ffa2c", + "metadata": {}, + "source": [ + "Error correction is more interesting with noise configured, so now we can use the `NoiseConfig` class to specify what noise we'll use. These default values produce interesting results, showing some shots rejected as \"preselect\" and others corrected by the decoder. If we filter out those \"preselect\" results, we can see that the majority of the accepted results have been corrected into the expected `[[Zero, Zero], [Zero, Zero]]` result." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "b0f2063e", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f41032d29c7c4f31948d7089c786d40e", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "eca2be5fcf0f468ca6f28458fef98dd3", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "noise = NoiseConfig()\n", + "\n", + "def set_depolarizing_error(table, p: float):\n", + " \"\"\"One of three equally likely Pauli errors occurs with probability `p`.\"\"\"\n", + " table.x = p / 3\n", + " table.y = p / 3\n", + " table.z = p / 3\n", + "\n", + "# 1Q error\n", + "set_depolarizing_error(noise.sx, 0.00225)\n", + "\n", + "# Error per CZ\n", + "noise.cz.iz = 0.0105 / 3\n", + "noise.cz.zi = 0.0105 / 3\n", + "noise.cz.zz = 0.0105 / 3\n", + "\n", + "# Loss per CZ\n", + "noise.cz.loss = 0.0027\n", + "\n", + "# Error for moved atoms\n", + "noise.mov.z = 1e-3\n", + "\n", + "# Loss per moved atom\n", + "noise.mov.loss = 0.0005\n", + "\n", + "res = device.simulate(qir, shots=10000, noise=noise, type=\"clifford\")\n", + "corrected_logical_results = decoder.decode_results(res, \"Z\")\n", + "display(Histogram(map(str, corrected_logical_results)))\n", + "display(Histogram(map(str, filter(lambda res: not any(r == 'PREselect' for r in res), corrected_logical_results))))" + ] + }, + { + "cell_type": "markdown", + "id": "85cc8664", + "metadata": {}, + "source": [ + "To make it easier to see the results, this further processes them to treat each Carbon (C12) block as separate rather than plot the joint behavior of the blocks. This again shows both the full results in the first histogram and the filtered, non-preselect results in the second histogram." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "35e7dc3c", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d79a1d1efe2449f08aa22c870acc2def", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "af464fa55640435ca6362061162b0e60", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "flattened = [r for res in corrected_logical_results for r in res]\n", + "display(Histogram(map(str, flattened)))\n", + "display(Histogram(map(str, filter(lambda res: res != 'PREselect', flattened))))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/samples/notebooks/carbon_error_correction/decoder.py b/samples/notebooks/carbon_error_correction/decoder.py new file mode 100644 index 0000000000..87acc5ad3f --- /dev/null +++ b/samples/notebooks/carbon_error_correction/decoder.py @@ -0,0 +1,352 @@ +#!/usr/bin/env python3 + +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import qsharp + +table = { + frozenset(): "IIIIIIIIIIII", + frozenset({3, 8, 9}): "XIIIIIIIIIII", + frozenset({0, 3, 6, 7, 8, 9}): "YIIIIIIIIIII", + frozenset({0, 6, 7}): "ZIIIIIIIIIII", + frozenset({3}): "IXIIIIIIIIII", + frozenset({0, 3, 6}): "IYIIIIIIIIII", + frozenset({0, 6}): "IZIIIIIIIIII", + frozenset({3, 8}): "IIXIIIIIIIII", + frozenset({0, 3, 8}): "IIYIIIIIIIII", + frozenset({0}): "IIZIIIIIIIII", + frozenset({3, 9}): "IIIXIIIIIIII", + frozenset({0, 3, 7, 9}): "IIIYIIIIIIII", + frozenset({0, 7}): "IIIZIIIIIIII", + frozenset({4, 9}): "IIIIXIIIIIII", + frozenset({1, 4, 7, 9}): "IIIIYIIIIIII", + frozenset({1, 7}): "IIIIZIIIIIII", + frozenset({4}): "IIIIIXIIIIII", + frozenset({1, 4, 6, 7}): "IIIIIYIIIIII", + frozenset({1, 6, 7}): "IIIIIZIIIIII", + frozenset({4, 8, 9}): "IIIIIIXIIIII", + frozenset({1, 4, 8, 9}): "IIIIIIYIIIII", + frozenset({1}): "IIIIIIZIIIII", + frozenset({4, 8}): "IIIIIIIXIIII", + frozenset({1, 4, 6, 8}): "IIIIIIIYIIII", + frozenset({1, 6}): "IIIIIIIZIIII", + frozenset({5, 8}): "IIIIIIIIXIII", + frozenset({2, 5, 6, 8}): "IIIIIIIIYIII", + frozenset({2, 6}): "IIIIIIIIZIII", + frozenset({5}): "IIIIIIIIIXII", + frozenset({2, 5, 7}): "IIIIIIIIIYII", + frozenset({2, 7}): "IIIIIIIIIZII", + frozenset({5, 9}): "IIIIIIIIIIXI", + frozenset({2, 5, 9}): "IIIIIIIIIIYI", + frozenset({2}): "IIIIIIIIIIZI", + frozenset({5, 8, 9}): "IIIIIIIIIIIX", + frozenset({2, 5, 6, 7, 8, 9}): "IIIIIIIIIIIY", + frozenset({2, 6, 7}): "IIIIIIIIIIIZ", + frozenset({0, 3, 6, 8, 9}): "XZIIIIIIIIII", + frozenset({0, 3, 6, 7}): "ZXIIIIIIIIII", + frozenset({0, 3, 8, 9}): "XIZIIIIIIIII", + frozenset({0, 3, 6, 7, 8}): "ZIXIIIIIIIII", + frozenset({0, 3, 7, 8, 9}): "XIIZIIIIIIII", + frozenset({0, 3, 6, 7, 9}): "ZIIXIIIIIIII", + frozenset({1, 3, 7, 8, 9}): "XIIIZIIIIIII", + frozenset({0, 4, 6, 7, 9}): "ZIIIXIIIIIII", + frozenset({1, 3, 6, 7, 8, 9}): "XIIIIZIIIIII", + frozenset({0, 4, 6, 7}): "ZIIIIXIIIIII", + frozenset({1, 3, 8, 9}): "XIIIIIZIIIII", + frozenset({0, 4, 6, 7, 8, 9}): "ZIIIIIXIIIII", + frozenset({1, 3, 6, 8, 9}): "XIIIIIIZIIII", + frozenset({0, 4, 6, 7, 8}): "ZIIIIIIXIIII", + frozenset({2, 3, 6, 8, 9}): "XIIIIIIIZIII", + frozenset({0, 5, 6, 7, 8}): "ZIIIIIIIXIII", + frozenset({2, 3, 7, 8, 9}): "XIIIIIIIIZII", + frozenset({0, 5, 6, 7}): "ZIIIIIIIIXII", + frozenset({2, 3, 8, 9}): "XIIIIIIIIIZI", + frozenset({0, 5, 6, 7, 9}): "ZIIIIIIIIIXI", + frozenset({2, 3, 6, 7, 8, 9}): "XIIIIIIIIIIZ", + frozenset({0, 5, 6, 7, 8, 9}): "ZIIIIIIIIIIX", + frozenset({0, 3}): "IXZIIIIIIIII", + frozenset({0, 3, 6, 8}): "IZXIIIIIIIII", + frozenset({0, 3, 7}): "IXIZIIIIIIII", + frozenset({0, 3, 6, 9}): "IZIXIIIIIIII", + frozenset({1, 3, 7}): "IXIIZIIIIIII", + frozenset({0, 4, 6, 9}): "IZIIXIIIIIII", + frozenset({1, 3, 6, 7}): "IXIIIZIIIIII", + frozenset({0, 4, 6}): "IZIIIXIIIIII", + frozenset({1, 3}): "IXIIIIZIIIII", + frozenset({0, 4, 6, 8, 9}): "IZIIIIXIIIII", + frozenset({1, 3, 6}): "IXIIIIIZIIII", + frozenset({0, 4, 6, 8}): "IZIIIIIXIIII", + frozenset({2, 3, 6}): "IXIIIIIIZIII", + frozenset({0, 5, 6, 8}): "IZIIIIIIXIII", + frozenset({2, 3, 7}): "IXIIIIIIIZII", + frozenset({0, 5, 6}): "IZIIIIIIIXII", + frozenset({2, 3}): "IXIIIIIIIIZI", + frozenset({0, 5, 6, 9}): "IZIIIIIIIIXI", + frozenset({2, 3, 6, 7}): "IXIIIIIIIIIZ", + frozenset({0, 5, 6, 8, 9}): "IZIIIIIIIIIX", + frozenset({0, 3, 7, 8}): "IIXZIIIIIIII", + frozenset({0, 3, 9}): "IIZXIIIIIIII", + frozenset({1, 3, 7, 8}): "IIXIZIIIIIII", + frozenset({0, 4, 9}): "IIZIXIIIIIII", + frozenset({1, 3, 6, 7, 8}): "IIXIIZIIIIII", + frozenset({0, 4}): "IIZIIXIIIIII", + frozenset({1, 3, 8}): "IIXIIIZIIIII", + frozenset({0, 4, 8, 9}): "IIZIIIXIIIII", + frozenset({1, 3, 6, 8}): "IIXIIIIZIIII", + frozenset({0, 4, 8}): "IIZIIIIXIIII", + frozenset({2, 3, 6, 8}): "IIXIIIIIZIII", + frozenset({0, 5, 8}): "IIZIIIIIXIII", + frozenset({2, 3, 7, 8}): "IIXIIIIIIZII", + frozenset({0, 5}): "IIZIIIIIIXII", + frozenset({2, 3, 8}): "IIXIIIIIIIZI", + frozenset({0, 5, 9}): "IIZIIIIIIIXI", + frozenset({2, 3, 6, 7, 8}): "IIXIIIIIIIIZ", + frozenset({0, 5, 8, 9}): "IIZIIIIIIIIX", + frozenset({1, 3, 7, 9}): "IIIXZIIIIIII", + frozenset({0, 4, 7, 9}): "IIIZXIIIIIII", + frozenset({1, 3, 6, 7, 9}): "IIIXIZIIIIII", + frozenset({0, 4, 7}): "IIIZIXIIIIII", + frozenset({1, 3, 9}): "IIIXIIZIIIII", + frozenset({0, 4, 7, 8, 9}): "IIIZIIXIIIII", + frozenset({1, 3, 6, 9}): "IIIXIIIZIIII", + frozenset({0, 4, 7, 8}): "IIIZIIIXIIII", + frozenset({2, 3, 6, 9}): "IIIXIIIIZIII", + frozenset({0, 5, 7, 8}): "IIIZIIIIXIII", + frozenset({2, 3, 7, 9}): "IIIXIIIIIZII", + frozenset({0, 5, 7}): "IIIZIIIIIXII", + frozenset({2, 3, 9}): "IIIXIIIIIIZI", + frozenset({0, 5, 7, 9}): "IIIZIIIIIIXI", + frozenset({2, 3, 6, 7, 9}): "IIIXIIIIIIIZ", + frozenset({0, 5, 7, 8, 9}): "IIIZIIIIIIIX", + frozenset({1, 4, 6, 7, 9}): "IIIIXZIIIIII", + frozenset({1, 4, 7}): "IIIIZXIIIIII", + frozenset({1, 4, 9}): "IIIIXIZIIIII", + frozenset({1, 4, 7, 8, 9}): "IIIIZIXIIIII", + frozenset({1, 4, 6, 9}): "IIIIXIIZIIII", + frozenset({1, 4, 7, 8}): "IIIIZIIXIIII", + frozenset({2, 4, 6, 9}): "IIIIXIIIZIII", + frozenset({1, 5, 7, 8}): "IIIIZIIIXIII", + frozenset({2, 4, 7, 9}): "IIIIXIIIIZII", + frozenset({1, 5, 7}): "IIIIZIIIIXII", + frozenset({2, 4, 9}): "IIIIXIIIIIZI", + frozenset({1, 5, 7, 9}): "IIIIZIIIIIXI", + frozenset({2, 4, 6, 7, 9}): "IIIIXIIIIIIZ", + frozenset({1, 5, 7, 8, 9}): "IIIIZIIIIIIX", + frozenset({1, 4}): "IIIIIXZIIIII", + frozenset({1, 4, 6, 7, 8, 9}): "IIIIIZXIIIII", + frozenset({1, 4, 6}): "IIIIIXIZIIII", + frozenset({1, 4, 6, 7, 8}): "IIIIIZIXIIII", + frozenset({2, 4, 6}): "IIIIIXIIZIII", + frozenset({1, 5, 6, 7, 8}): "IIIIIZIIXIII", + frozenset({2, 4, 7}): "IIIIIXIIIZII", + frozenset({1, 5, 6, 7}): "IIIIIZIIIXII", + frozenset({2, 4}): "IIIIIXIIIIZI", + frozenset({1, 5, 6, 7, 9}): "IIIIIZIIIIXI", + frozenset({2, 4, 6, 7}): "IIIIIXIIIIIZ", + frozenset({1, 5, 6, 7, 8, 9}): "IIIIIZIIIIIX", + frozenset({1, 4, 6, 8, 9}): "IIIIIIXZIIII", + frozenset({1, 4, 8}): "IIIIIIZXIIII", + frozenset({2, 4, 6, 8, 9}): "IIIIIIXIZIII", + frozenset({1, 5, 8}): "IIIIIIZIXIII", + frozenset({2, 4, 7, 8, 9}): "IIIIIIXIIZII", + frozenset({1, 5}): "IIIIIIZIIXII", + frozenset({2, 4, 8, 9}): "IIIIIIXIIIZI", + frozenset({1, 5, 9}): "IIIIIIZIIIXI", + frozenset({2, 4, 6, 7, 8, 9}): "IIIIIIXIIIIZ", + frozenset({1, 5, 8, 9}): "IIIIIIZIIIIX", + frozenset({2, 4, 6, 8}): "IIIIIIIXZIII", + frozenset({1, 5, 6, 8}): "IIIIIIIZXIII", + frozenset({2, 4, 7, 8}): "IIIIIIIXIZII", + frozenset({1, 5, 6}): "IIIIIIIZIXII", + frozenset({2, 4, 8}): "IIIIIIIXIIZI", + frozenset({1, 5, 6, 9}): "IIIIIIIZIIXI", + frozenset({2, 4, 6, 7, 8}): "IIIIIIIXIIIZ", + frozenset({1, 5, 6, 8, 9}): "IIIIIIIZIIIX", + frozenset({2, 5, 7, 8}): "IIIIIIIIXZII", + frozenset({2, 5, 6}): "IIIIIIIIZXII", + frozenset({2, 5, 8}): "IIIIIIIIXIZI", + frozenset({2, 5, 6, 9}): "IIIIIIIIZIXI", + frozenset({2, 5, 6, 7, 8}): "IIIIIIIIXIIZ", + frozenset({2, 5, 6, 8, 9}): "IIIIIIIIZIIX", + frozenset({2, 5}): "IIIIIIIIIXZI", + frozenset({2, 5, 7, 9}): "IIIIIIIIIZXI", + frozenset({2, 5, 6, 7}): "IIIIIIIIIXIZ", + frozenset({2, 5, 7, 8, 9}): "IIIIIIIIIZIX", + frozenset({2, 5, 6, 7, 9}): "IIIIIIIIIIXZ", + frozenset({2, 5, 8, 9}): "IIIIIIIIIIZX", +} + +generators = [ + "XXXXIIIIIIII", + "IIIIXXXXIIII", + "IIIIIIIIXXXX", + "ZZZZIIIIIIII", + "IIIIZZZZIIII", + "IIIIIIIIZZZZ", + "XXIIIXIXXIIX", + "XIIXXXIIIXIX", + "ZIZIIIZZZIIZ", + "ZIIZZIZIIIZZ", +] + +logical_basis = ["XIIXIIIIIIXX", "ZIIZIIIIIZIZ", "IXIXIIIIIXXI", "ZZIIIIIIIZZI"] + +expanded_logical_basis = [ + "XIIXIIIIIIXX", + "ZIIZIIIIIZIZ", + "YIIYIIIIIZXY", + "IXIXIIIIIXXI", + "ZZIIIIIIIZZI", + "ZYIXIIIIIYYI", +] + + +def results_as_pauli(results: list[qsharp.Result], pauli: str = "Z") -> str: + p = "" + for r in results: + if r == qsharp.Result.One: + p += pauli + else: + p += "I" + return p + + +def pauli_as_results(p: str, basis: str = "Z", count: int = 2): + results = [] + chars = "XYZ".replace(basis, "") + for i in range(count): + if p[i] in chars: + results.append(qsharp.Result.One) + else: + results.append(qsharp.Result.Zero) + return results + + +def pauli_support(p: str) -> list[int]: + return [i for i, char in enumerate(p) if char != "I"] + + +def logical_indexes_of(pauli: str): + for qubit in pauli_support(pauli): + character = pauli[qubit] + if character == "X": + yield 3 * qubit + if character == "Z": + yield 3 * qubit + 1 + if character == "Y": + yield 3 * qubit + 2 + + +def commutes_with(pauli1: str, pauli2: str) -> bool: + """Check if two Pauli strings commute.""" + assert len(pauli1) == len(pauli2) + anti_commute_count = 0 + for p1, p2 in zip(pauli1, pauli2): + if p1 == "I" or p2 == "I": + continue + if p1 != p2: + anti_commute_count += 1 + return anti_commute_count % 2 == 0 + + +def syndrome_of(error: str) -> list[int]: + syndrome = [] + for label, generator in enumerate(generators): + if not commutes_with(error, generator): + syndrome.append(label) + return syndrome + + +def mult_paulis(p1: str, p2: str) -> str: + if len(p1) < len(p2): + p1 = p1 + "I" * (len(p2) - len(p1)) + elif len(p2) < len(p1): + p2 = p2 + "I" * (len(p1) - len(p2)) + result = "" + for a, b in zip(p1, p2): + if a == "I": + result += b + elif b == "I": + result += a + elif a == b: + result += "I" + elif (a, b) in [("X", "Y"), ("Y", "X")]: + result += "Z" + elif (a, b) in [("Y", "Z"), ("Z", "Y")]: + result += "X" + elif (a, b) in [("Z", "X"), ("X", "Z")]: + result += "Y" + else: + raise ValueError(f"Unexpected Pauli characters: {a}, {b}") + return result + + +def unsigned_logical_action_of(error: str) -> str: + character_of = ("Y", "Z", "X", "I") + commutations = list(map(lambda lb: commutes_with(error, lb), logical_basis)) + indexes = [2 * x + z for x, z in [commutations[0:2], commutations[2:4]]] + characters = "".join(character_of[index] for index in indexes) + return characters + + +def representative_of(pauli: str) -> str: + generators = (expanded_logical_basis[index] for index in logical_indexes_of(pauli)) + res = "I" * 12 + for gen in generators: + res = mult_paulis(res, gen) + return res + + +def logical_action_of(error: str) -> str: + logical = unsigned_logical_action_of(error) + return logical + + +def recovery_from_syndrome_measurements( + x_meas: list[qsharp.Result], z_meas: list[qsharp.Result] +) -> str: + error_z = results_as_pauli(x_meas, pauli="Z") + error_x = results_as_pauli(z_meas, pauli="X") + error = mult_paulis(error_z, error_x) + syndrome = frozenset(syndrome_of(error)) + recovery = table.get(syndrome, "IIIIIIIIIIII") + return logical_action_of(mult_paulis(recovery, error)) + + +# For each tuple of shot results, mark the shot as preselect if any preselect +# measurement is One. Then use the rounds of error correction syndrome measurements +# to generate Pauli corrections, collected in a frame. Use the final Pauli frame +# to calculate the corrected logical results. +def decode_results(results, basis: str = "Z"): + corrected_logical_results = [] + for res in results: + corrected_logical_results.append([]) + for shot in res: + if any([preselect == qsharp.Result.One for preselect in shot[0]]): + corrected_logical_results[-1] += ["PREselect"] + continue + recovery = "IIIIIIIIIIII" + r = None + for ec_output in shot[1]: + r = recovery_from_syndrome_measurements(ec_output[0], ec_output[1]) + if r is None: + corrected_logical_results[-1] += ["POSTselect"] + break + recovery = mult_paulis(recovery, r) + if r is None: + corrected_logical_results[-1] += [ + pauli_as_results(recovery, basis=basis) + ] + continue + if basis == "Z": + r = recovery_from_syndrome_measurements([], shot[2]) + else: + assert basis == "X" + r = recovery_from_syndrome_measurements(shot[2], []) + if r is None: + corrected_logical_results[-1] += ["POSTselect"] + continue + recovery = mult_paulis(recovery, r) + corrected_logical_results[-1] += [pauli_as_results(recovery, basis=basis)] + return corrected_logical_results diff --git a/samples/notebooks/carbon_error_correction/qsharp.json b/samples/notebooks/carbon_error_correction/qsharp.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/samples/notebooks/carbon_error_correction/qsharp.json @@ -0,0 +1 @@ +{} diff --git a/samples/notebooks/carbon_error_correction/src/C12.qs b/samples/notebooks/carbon_error_correction/src/C12.qs new file mode 100644 index 0000000000..97ec4fc249 --- /dev/null +++ b/samples/notebooks/carbon_error_correction/src/C12.qs @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +export PrepareZZ, PrepareXX; + +import Utils.TransversalCNOT, Utils.PreparePlus, Utils.PrepareZero; +import C4; + +operation PrepareZZ(block : Qubit[], ancillas : Qubit[]) : Result[] { + PreparePlus(ancillas[0]); + C4.PrepareXX(block[...3], ancillas[0]); + PrepareZero(ancillas[1]); + C4.PrepareZZ(block[4..7], ancillas[1]); + let z_res = MResetZ(ancillas[1]); + TransversalCNOT(block[...3], block[4..7]); + + C4.PrepareZZ(block[8..11], ancillas[2]); + TransversalCNOT(block[4..7], block[8..11]); + + Relabel(block[9..11], [block[10], block[11], block[9]]); + Relabel(block[5..7], [block[7], block[5], block[6]]); + + let check1_res = C4.DetectOn(block[4..7], ancillas[0], ancillas[1]); + PreparePlus(ancillas[3]); + let check2_res = C4.DetectZ(block[8..11], ancillas[3], ancillas[2]); + + [z_res] + check1_res + check2_res +} + +operation PrepareXX(block : Qubit[], ancillas : Qubit[]) : Result[] { + let res = PrepareZZ(block, ancillas); + ApplyToEach(H, block); + + Relabel(block[1..2], [block[2], block[1]]); + Relabel(block[5..6], [block[6], block[5]]); + Relabel(block[9..10], [block[10], block[9]]); + + res +} diff --git a/samples/notebooks/carbon_error_correction/src/C4.qs b/samples/notebooks/carbon_error_correction/src/C4.qs new file mode 100644 index 0000000000..f1b563ae1e --- /dev/null +++ b/samples/notebooks/carbon_error_correction/src/C4.qs @@ -0,0 +1,52 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +export PrepareXX, PrepareZZ, DetectOn, DetectZ; + +import Utils.PrepareZero, Utils.PreparePlus, Utils.TransversalCNOT; + +operation PrepareXX(block : Qubit[], plus_ancilla : Qubit) : Unit { + PrepareZero(block[3]); + PreparePlus(block[0]); + CNOT(plus_ancilla, block[3]); + CNOT(block[0], block[3]); + PreparePlus(block[1]); + CNOT(block[1], block[3]); + PreparePlus(block[2]); + CNOT(block[2], block[3]); + CNOT(plus_ancilla, block[3]); +} + +operation PrepareZZ(block : Qubit[], zero_ancilla : Qubit) : Unit { + PreparePlus(block[3]); + PrepareZero(block[0]); + CNOT(block[3], zero_ancilla); + CNOT(block[3], block[0]); + PrepareZero(block[1]); + CNOT(block[3], block[1]); + PrepareZero(block[2]); + CNOT(block[3], block[2]); + CNOT(block[3], zero_ancilla); +} + +operation DetectOn(block : Qubit[], plus_ancilla : Qubit, zero_ancilla : Qubit) : Result[] { + CNOT(plus_ancilla, block[0]); + CNOT(block[1], zero_ancilla); + CNOT(plus_ancilla, block[1]); + CNOT(block[0], zero_ancilla); + CNOT(plus_ancilla, block[2]); + CNOT(block[3], zero_ancilla); + CNOT(plus_ancilla, block[3]); + CNOT(block[2], zero_ancilla); + [MResetX(plus_ancilla), MResetZ(zero_ancilla)] +} + +operation DetectZ(block : Qubit[], plus_ancilla : Qubit, zero_ancilla : Qubit) : Result[] { + CNOT(plus_ancilla, zero_ancilla); + CNOT(block[0], zero_ancilla); + CNOT(block[1], plus_ancilla); + CNOT(block[2], zero_ancilla); + CNOT(block[3], plus_ancilla); + CNOT(plus_ancilla, zero_ancilla); + [MResetX(plus_ancilla), MResetZ(zero_ancilla)] +} diff --git a/samples/notebooks/carbon_error_correction/src/Utils.qs b/samples/notebooks/carbon_error_correction/src/Utils.qs new file mode 100644 index 0000000000..fc42124701 --- /dev/null +++ b/samples/notebooks/carbon_error_correction/src/Utils.qs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +export TransversalCNOT, PreparePlus, PrepareZero; + +import Microsoft.Quantum.Arrays.IndexRange; + +operation TransversalCNOT(block0 : Qubit[], block1 : Qubit[]) : Unit { + for i in IndexRange(block0) { + CNOT(block0[i], block1[i]); + } +} + +operation PrepareZero(q : Qubit) : Unit { + Reset(q); +} + +operation PreparePlus(q : Qubit) : Unit { + Reset(q); + H(q); +} diff --git a/samples/notebooks/parallel_teleport.ipynb b/samples/notebooks/parallel_teleport.ipynb new file mode 100644 index 0000000000..f2b7ed821e --- /dev/null +++ b/samples/notebooks/parallel_teleport.ipynb @@ -0,0 +1,210 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f94615ed", + "metadata": {}, + "source": [ + "# Experimenting with Parallel Teleport on Neutral Atom Device\n", + "\n", + "This notebook shows how you can use the `NeutralAtomDevice` class to visualize and simulate a scaled, parallel teleport sample program.\n", + "\n", + "First, set up the environment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ae94a027", + "metadata": {}, + "outputs": [], + "source": [ + "from qdk import init, TargetProfile, code, Result\n", + "from qdk.qsharp import compile, circuit\n", + "from qdk.simulation import NeutralAtomDevice, NoiseConfig\n", + "from qdk.widgets import Circuit, Histogram\n", + "\n", + "init(target_profile=TargetProfile.Base)" + ] + }, + { + "cell_type": "markdown", + "id": "df5d6387", + "metadata": {}, + "source": [ + "Next, we use Q# to define a `ParalellTeleport` that uses distinct sets of qubits to perform a measurement deferred teleportation. Using different qubits rather than the same qubits should allow later device-specific compilation steps to identify parallelism and run those teleports across the qubits at the same time." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0d435592", + "metadata": { + "vscode": { + "languageId": "qsharp" + } + }, + "outputs": [], + "source": [ + "%%qsharp\n", + "\n", + "operation ParallelTeleport(instances : Int) : Result[] {\n", + " // Partitions the teleport instances across rows and columns on the machine\n", + " let cols = if instances >= 12 { 36 } else { instances * 3 };\n", + " let rows = (instances + 11) / 12; // 1 to 12 = 1, 13 to 24 = 2, etc.\n", + "\n", + " use qubits = Qubit[instances * 3];\n", + " mutable results : Result[] = [];\n", + "\n", + " for i in 0..instances-1 {\n", + " let rowId = i / 12;\n", + " let colId = (i % 12) * 3;\n", + " let idx = colId + (rowId * 36);\n", + "\n", + " // Prep state on msg qubit\n", + " if i % 4 == 1 {\n", + " X(qubits[idx]);\n", + " } elif i % 4 == 2 {\n", + " H(qubits[idx]);\n", + " } elif i % 4 == 3 {\n", + " SX(qubits[idx]);\n", + " }\n", + "\n", + " Teleport(qubits[idx], qubits[idx + 1], qubits[idx + 2]);\n", + "\n", + " // Reverse state prep on Bob's qubit\n", + " if i % 4 == 1 {\n", + " X(qubits[idx + 2]);\n", + " } elif i % 4 == 2 {\n", + " H(qubits[idx + 2]);\n", + " } elif i % 4 == 3 {\n", + " X(qubits[idx + 2]);\n", + " SX(qubits[idx + 2]);\n", + " }\n", + " results += [MResetZ(qubits[idx + 2])];\n", + " ResetAll([qubits[idx], qubits[idx + 1]]);\n", + " }\n", + "\n", + " return results;\n", + "}\n", + "\n", + "operation Teleport(msg : Qubit, alice : Qubit, bob : Qubit) : Unit {\n", + " // Create some entanglement that we can use to send our message.\n", + " H(alice);\n", + " CNOT(alice, bob);\n", + "\n", + " // Encode the message into the entangled pair.\n", + " CNOT(msg, alice);\n", + " H(msg);\n", + "\n", + " CNOT(alice, bob);\n", + " Controlled Z([msg], bob);\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "d86e19f4", + "metadata": {}, + "source": [ + "You can verify the circuit for two parallel teleports using the `Circuit` widget." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b815acd4", + "metadata": {}, + "outputs": [], + "source": [ + "Circuit(circuit(code.ParallelTeleport, 2))" + ] + }, + { + "cell_type": "markdown", + "id": "c342d7e9", + "metadata": {}, + "source": [ + "Now, let's visualize 120 instances of teleportation in parallel on the `NeutralAtomDevice`. This will decompose the program to the device's native gate set and schedule the operations with movement, showing how it might execute on such a device." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e2422917", + "metadata": {}, + "outputs": [], + "source": [ + "# Compile the code into a high-level program\n", + "program = compile(code.ParallelTeleport, 120)\n", + "\n", + "# Visualize a trace of running the program on the target machine,\n", + "# decomposing into native gates and scheduling parallel operations\n", + "device = NeutralAtomDevice()\n", + "device.show_trace(program)" + ] + }, + { + "cell_type": "markdown", + "id": "87b8e819", + "metadata": {}, + "source": [ + "Because the teleport algorithm uses only gates from the Clifford group, we can efficiently simulate a large number of shots of the same program with the Clifford simulator. We'll use a small helper function to interpret the results, which we expect to be all zeros. Without noise, \"Correct\" should be the only bar in the resulting Histogram." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "698849c0", + "metadata": {}, + "outputs": [], + "source": [ + "results = device.simulate(program, shots=1000, type=\"clifford\")\n", + "Histogram([\"Loss\" if any(r == Result.Loss for r in shot) else \"Flip\" if any(r == Result.One for r in shot) else \"Correct\" for shot in results])" + ] + }, + { + "cell_type": "markdown", + "id": "ce124bf0", + "metadata": {}, + "source": [ + "You can also perform this simulation with noise, shown here by configuring a 0.1% chance of loss on the SX gate. Now we'll see a mix of correct and incorrect results in the output of the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "774df3a7", + "metadata": {}, + "outputs": [], + "source": [ + "# Now with noise.\n", + "noise = NoiseConfig()\n", + "noise.sx.loss = 0.001\n", + "results = device.simulate(program, shots=1000, noise=noise, type=\"clifford\")\n", + "Histogram([\"Loss\" if any(r == Result.Loss for r in shot) else \"Flip\" if any(r == Result.One for r in shot) else \"Correct\" for shot in results])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/compiler/qsc_openqasm_compiler/benches/rgqft_multiplier.rs b/source/compiler/qsc_openqasm_compiler/benches/rgqft_multiplier.rs index 1ae9766453..7f7efe5e7f 100644 --- a/source/compiler/qsc_openqasm_compiler/benches/rgqft_multiplier.rs +++ b/source/compiler/qsc_openqasm_compiler/benches/rgqft_multiplier.rs @@ -1,9 +1,10 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +use std::hint::black_box; use std::sync::Arc; -use criterion::{Criterion, black_box, criterion_group, criterion_main}; +use criterion::{Criterion, criterion_group, criterion_main}; use qsc_openqasm_compiler::{ CompilerConfig, OutputSemantics, ProgramType, QasmCompileUnit, QubitSemantics, compiler::parse_and_compile_to_qsharp_ast_with_config, diff --git a/source/jupyterlab/pyproject.toml b/source/jupyterlab/pyproject.toml index 35c5c2a456..3f6b9bb8ad 100644 --- a/source/jupyterlab/pyproject.toml +++ b/source/jupyterlab/pyproject.toml @@ -19,6 +19,7 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] diff --git a/source/noisy_simulator/src/density_matrix_simulator.rs b/source/noisy_simulator/src/density_matrix_simulator.rs index 33bde0990d..9493490e4c 100644 --- a/source/noisy_simulator/src/density_matrix_simulator.rs +++ b/source/noisy_simulator/src/density_matrix_simulator.rs @@ -193,6 +193,22 @@ impl DensityMatrixSimulator { Ok(()) } } + + /// Apply non selective evolution to the given qubit ids. + pub fn apply_instrument( + &mut self, + instrument: &Instrument, + qubits: &[usize], + ) -> Result<(), Error> { + self.check_out_of_bounds_qubits(qubits)?; + self.state + .as_mut()? + .apply_operation_matrix(instrument.non_selective_operation_matrix(), qubits)?; + if let Err(err) = self.state.as_mut()?.renormalize() { + handle_error!(self, err); + } + Ok(()) + } } impl NoisySimulator for DensityMatrixSimulator { @@ -233,19 +249,6 @@ impl NoisySimulator for DensityMatrixSimulator { Ok(()) } - /// Apply non selective evolution to the given qubit ids. - fn apply_instrument(&mut self, instrument: &Instrument, qubits: &[usize]) -> Result<(), Error> { - self.check_out_of_bounds_qubits(qubits)?; - - self.state - .as_mut()? - .apply_operation_matrix(instrument.non_selective_operation_matrix(), qubits)?; - if let Err(err) = self.state.as_mut()?.renormalize() { - handle_error!(self, err); - } - Ok(()) - } - /// Performs selective evolution under the given instrument. /// Returns the index of the observed outcome. /// diff --git a/source/noisy_simulator/src/lib.rs b/source/noisy_simulator/src/lib.rs index 87c35d0033..11709cca75 100644 --- a/source/noisy_simulator/src/lib.rs +++ b/source/noisy_simulator/src/lib.rs @@ -74,9 +74,6 @@ pub trait NoisySimulator { /// Apply an operation to the given qubit ids. fn apply_operation(&mut self, operation: &Operation, qubits: &[usize]) -> Result<(), Error>; - /// Apply non selective evolution to the given qubit ids. - fn apply_instrument(&mut self, instrument: &Instrument, qubits: &[usize]) -> Result<(), Error>; - /// Performs selective evolution under the given instrument. /// Returns the index of the observed outcome. /// @@ -192,12 +189,12 @@ impl From<&mut Error> for Error { /// If an error is unrecoverable, it will set the state of the simulator to that error, /// invalidating any further evolution of the quantum system. macro_rules! handle_error { - ($self:expr, $err:expr) => { + ($self:expr, $err:expr) => {{ if $err.is_unrecoverable() { $self.state = Err($err.clone()); } - return Err($err) - }; + return Err($err); + }}; } pub(crate) use handle_error; diff --git a/source/noisy_simulator/src/operation.rs b/source/noisy_simulator/src/operation.rs index d6c04d10c6..3b659e16dd 100644 --- a/source/noisy_simulator/src/operation.rs +++ b/source/noisy_simulator/src/operation.rs @@ -25,7 +25,7 @@ use crate::{Error, SquareMatrix}; #[macro_export] macro_rules! operation { ($([$($($v:expr),* );*]),*) => { - Operation::new(vec![ + $crate::Operation::new(vec![ $(nalgebra::dmatrix![ $($(num_complex::Complex::::from($v)),* );* ]),* diff --git a/source/noisy_simulator/src/state_vector_simulator.rs b/source/noisy_simulator/src/state_vector_simulator.rs index 2bd1e00c8e..73d189c8e6 100644 --- a/source/noisy_simulator/src/state_vector_simulator.rs +++ b/source/noisy_simulator/src/state_vector_simulator.rs @@ -141,7 +141,7 @@ impl StateVector { qubits: &[usize], renormalization_factor: f64, random_sample: f64, - ) -> Result<(), Error> { + ) -> Result { let mut summed_probability = 0.0; let mut last_non_zero_probability = 0.0; let mut last_non_zero_probability_index = 0; @@ -158,7 +158,7 @@ impl StateVector { if summed_probability > random_sample { self.data = state_copy; self.renormalize_with_norm_squared(norm_squared)?; - return Ok(()); + return Ok(last_non_zero_probability_index); } } } @@ -174,7 +174,9 @@ impl StateVector { qubits, )?; - self.renormalize() + self.renormalize()?; + + Ok(last_non_zero_probability_index) } } @@ -198,6 +200,31 @@ impl StateVectorSimulator { Ok(()) } } + + /// Apply non selective evolution. + pub fn apply_instrument( + &mut self, + instrument: &Instrument, + qubits: &[usize], + ) -> Result { + self.check_out_of_bounds_qubits(qubits)?; + + let renormalization_factor = self + .state + .as_mut()? + .effect_probability(instrument.total_effect(), qubits)?; + self.state.as_mut()?.trace_change *= renormalization_factor; + + match self.state.as_mut()?.sample_kraus_operators( + instrument.non_selective_kraus_operators(), + qubits, + renormalization_factor, + self.rng.r#gen(), + ) { + Ok(choice) => Ok(choice), + Err(err) => handle_error!(self, err), + } + } } impl NoisySimulator for StateVectorSimulator { @@ -247,28 +274,6 @@ impl NoisySimulator for StateVectorSimulator { Ok(()) } - /// Apply non selective evolution. - fn apply_instrument(&mut self, instrument: &Instrument, qubits: &[usize]) -> Result<(), Error> { - self.check_out_of_bounds_qubits(qubits)?; - - let renormalization_factor = self - .state - .as_mut()? - .effect_probability(instrument.total_effect(), qubits)?; - self.state.as_mut()?.trace_change *= renormalization_factor; - - if let Err(err) = self.state.as_mut()?.sample_kraus_operators( - instrument.non_selective_kraus_operators(), - qubits, - renormalization_factor, - self.rng.r#gen(), - ) { - handle_error!(self, err); - } - - Ok(()) - } - /// Performs selective evolution under the given instrument. /// Returns the index of the observed outcome. /// diff --git a/source/npm/qsharp/ux/atoms/controls.ts b/source/npm/qsharp/ux/atoms/controls.ts new file mode 100644 index 0000000000..ab55bc3885 --- /dev/null +++ b/source/npm/qsharp/ux/atoms/controls.ts @@ -0,0 +1,216 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { appendChildren, createSvgElements, setAttributes } from "./utils.js"; + +// Icons are 256x256, with a 32 spacing inbetween +export function getIcon(name: string): SVGGElement { + const g = createSvgElements("g")[0] as SVGGElement; + g.setAttribute("class", "qs-atoms-icon"); + + const circle = createSvgElements("circle")[0] as SVGCircleElement; + setAttributes(circle, { + cx: "128", + cy: "128", + r: "116", + "data-control": name, + }); + + switch (name) { + case "prev": + { + const [path1, path2] = createSvgElements("path", "path"); + setAttributes(path1, { d: "M60,128 l55,-32 l0,64 z" }); + setAttributes(path2, { d: "M122,128 l55,-32 l0,64 z" }); + appendChildren(g, [circle, path1, path2]); + } + break; + case "pause": + { + const [path1, path2] = createSvgElements("path", "path"); + setAttributes(path1, { d: "M99 80 l16 0 l0 96 l-16 0 z" }); + setAttributes(path2, { d: "M141 80 l16 0 l0 96 l-16 0 z" }); + appendChildren(g, [circle, path1, path2]); + } + break; + case "play": + { + const [path1] = createSvgElements("path"); + setAttributes(path1, { d: "M180,128 l-83,-47 l0,96 z" }); + appendChildren(g, [circle, path1]); + } + break; + case "next": + { + const [path1, path2] = createSvgElements("path", "path"); + setAttributes(path1, { d: "M196,128 l-55,-32 l0,64 z" }); + setAttributes(path2, { d: "M134,128 l-55,-32 l0,64 z" }); + appendChildren(g, [circle, path1, path2]); + } + break; + case "info": + { + const [dot, line] = createSvgElements("circle", "path"); + setAttributes(dot, { + cx: "128", + cy: "68", + r: "12", + class: "qs-atoms-info-dot", + }); + setAttributes(line, { + d: "M128,116 v72", + class: "qs-atoms-icon-line", + }); + appendChildren(g, [circle, dot, line]); + } + break; + case "zoom-in": + { + const [path1] = createSvgElements("path"); + setAttributes(path1, { + d: "M68 144 l60 -50 l60 50", + class: "qs-atoms-icon-line", + }); + appendChildren(g, [circle, path1]); + } + break; + case "zoom-out": + { + const [path1] = createSvgElements("path"); + setAttributes(path1, { + d: "M68 112 l60 50 l60 -50", + class: "qs-atoms-icon-line", + }); + appendChildren(g, [circle, path1]); + } + break; + default: + throw "Unknown icon"; + } + + return g; +} + +export function createPlayerControls(): SVGSVGElement { + const svg = createSvgElements("svg")[0] as SVGSVGElement; + const width = 256 * 3 + 32 * 2; + setAttributes(svg, { + viewBox: `0 0 ${width} 256`, + class: "qs-atoms-toolbar", + }); + const prev = getIcon("prev"); + prev.setAttribute("transform", "translate(0)"); + + const play = getIcon("play"); + play.setAttribute("transform", "translate(288)"); + + const pause = getIcon("pause"); + pause.setAttribute("transform", "translate(288)"); + pause.style.display = "none"; // Hidden if not playing + + const next = getIcon("next"); + next.setAttribute("transform", "translate(576)"); + + appendChildren(svg, [prev, play, pause, next]); + return svg; +} + +export function createZoomControls(): SVGSVGElement { + const svg = createSvgElements("svg")[0] as SVGSVGElement; + const width = 256 * 3 + 32 * 2; + setAttributes(svg, { + viewBox: `0 0 ${width} 256`, + class: "qs-atoms-toolbar qs-atoms-toolbar-left", + }); + const info = getIcon("info"); + info.setAttribute("transform", "translate(0)"); + + const zoomIn = getIcon("zoom-in"); + zoomIn.setAttribute("transform", "translate(288)"); + + const zoomOut = getIcon("zoom-out"); + zoomOut.setAttribute("transform", "translate(576)"); + + appendChildren(svg, [info, zoomIn, zoomOut]); + return svg; +} + +export interface Scrubber { + element: HTMLDivElement; + setNavHandler(handler: (step: number) => void): void; + setRange(len: number): void; + reset(): void; + next(): void; + prev(): void; + isAtEnd(): boolean; +} + +export function createScrubberControls(): Scrubber { + let navHandler: ((step: number) => void) | null = null; + let val = 0; + let max = 0; + + const div = document.createElement("div"); + div.style.display = "flex"; + + const span = document.createElement("span"); + span.classList.add("qs-atoms-step"); + + const slider = document.createElement("input"); + slider.type = "range"; + slider.classList.add("qs-atoms-slider"); + slider.id = "slider"; + slider.min = "0"; + slider.max = "0"; + slider.value = "0"; + + // oninput gives constant updates while scrubbing, whereas onchange is only once released + slider.oninput = (ev) => { + ev.preventDefault(); + val = parseInt((ev.target as HTMLInputElement).value); + render(); + if (navHandler) navHandler(val); + }; + + div.appendChild(span); + div.appendChild(slider); + + function setRange(len: number) { + max = len; + slider.max = `${len}`; + render(); + } + + function render() { + span.innerText = `${val} / ${max}`; + slider.value = `${val}`; + } + + function next() { + if (val < max) { + val += 1; + render(); + if (navHandler) navHandler(val); + } + } + + function prev() { + if (val > 0) { + val -= 1; + render(); + if (navHandler) navHandler(val); + } + } + + render(); + + return { + element: div, + setRange, + setNavHandler: (handler) => (navHandler = handler), + next, + prev, + reset: () => (val = 0), + isAtEnd: () => val === max, + }; +} diff --git a/source/npm/qsharp/ux/atoms/index.css b/source/npm/qsharp/ux/atoms/index.css new file mode 100644 index 0000000000..2f83ef96c2 --- /dev/null +++ b/source/npm/qsharp/ux/atoms/index.css @@ -0,0 +1,226 @@ +/* Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. */ + +/* Default colors, or theme set explicitly to light */ +/* data-vscode-theme-kind="vscode-dark" or "vscode-light" or "vscode-high-contrast" or "vscode-high-contrast-light" */ +:root, +[data-theme="light"], +[data-vscode-theme-kind="vscode-light"], +[data-vscode-theme-kind="vscode-high-contrast-light"] { + --qs-atoms-primay-color: #222; + --qs-atoms-background-color: #eee; + --qs-atoms-qubitbox: #bbd; + --qs-atoms-qubit: #123; + --qs-atoms-label: #aaa; + --qs-atoms-gate: #66d; + --qs-atoms-gate-cz: #ec4; + --qs-atoms-gate-mz: #822; + --qs-atoms-gate-reset: #282; +} +/* User has set OS preference for dark (explict theme will override) */ +@media (prefers-color-scheme: dark) { + :root { + --qs-atoms-primay-color: #eee; + --qs-atoms-background-color: #222; + --qs-atoms-qubitbox: #446; + --qs-atoms-qubit: #9df; + --qs-atoms-label: #666; + --qs-atoms-gate: #ccf; + --qs-atoms-gate-cz: #b91; + --qs-atoms-gate-mz: #e88; + --qs-atoms-gate-reset: #8e8; + } +} +/* Explicit dark theme set (should match above dark preference values) */ +[data-theme="dark"], +[data-vscode-theme-kind="vscode-dark"], +[data-vscode-theme-kind="vscode-high-contrast"] { + --qs-atoms-primay-color: #eee; + --qs-atoms-background-color: #222; + --qs-atoms-qubitbox: #446; + --qs-atoms-qubit: #9df; + --qs-atoms-label: #666; + --qs-atoms-gate: #ccf; + --qs-atoms-gate-cz: #b91; + --qs-atoms-gate-mz: #e88; + --qs-atoms-gate-reset: #8e8; +} + +.qs-atoms-app { + background-color: var(--qs-atoms-background-color); + color: var(--qs-atoms-primay-color); + font-family: system-ui, "Segoe UI", Roboto, sans-serif; + box-sizing: border-box; + width: 600px; + border: 1px solid gray; + border-radius: 8px; + margin: auto; + margin-top: 24px; + padding: 16px; + display: flex; + flex-direction: column; +} + +.qs-atoms-app:focus { + outline: none; +} + +.qs-atoms-toolstrip { + display: flex; + align-items: center; + justify-content: space-between; +} + +.qs-atoms-toolbar { + height: 28px; + user-select: none; +} + +.qs-atoms-icon > circle { + stroke: var(--qs-atoms-primay-color); + stroke-width: 6; + fill: transparent; + cursor: pointer; +} + +.qs-atoms-icon > .qs-atoms-info-dot { + fill: var(--qs-atoms-primay-color); + stroke: none; + pointer-events: none; +} + +.qs-atoms-icon > circle:hover { + stroke-width: 10; +} + +.qs-atoms-icon > path { + stroke: none; + fill: var(--qs-atoms-primay-color); + pointer-events: none; +} + +.qs-atoms-icon > .qs-atoms-icon-line { + fill: none; + stroke-width: 16; + stroke: var(--qs-atoms-primay-color); + stroke-linecap: round; + stroke-linejoin: round; +} + +.qs-atoms-slider:focus { + outline: none; +} + +.qs-atoms-step { + text-align: end; + margin-right: 20px; + user-select: none; + -webkit-user-select: none; +} + +.qs-atoms-bigsmall { + margin-left: auto; +} + +.qs-atoms-zones { + margin: 8px auto; +} + +.qs-atoms-zone-text { + font-size: 8px; + font-family: system-ui; + fill: gray; + stroke-width: 0; + user-select: none; + -webkit-user-select: none; +} + +.qs-atoms-label { + font-size: 6px; + font-family: system-ui; + fill: var(--qs-atoms-label); + stroke-width: 0; + user-select: none; + -webkit-user-select: none; + text-anchor: middle; + dominant-baseline: central; + width: 20px; +} + +.qs-atoms-zonebox { + stroke: var(--qs-atoms-background-color); + stroke-width: 0.75; + fill: var(--qs-atoms-qubitbox); +} + +.qs-atoms-qubit { + stroke: none; + fill: var(--qs-atoms-qubit); +} + +.qs-atoms-qubit-trail-start { + stroke: gray; + stroke-width: 1px; + fill: var(--qs-atoms-qubitbox); + r: 3px; +} + +.qs-atoms-qubit-trail { + stroke: gray; + stroke-width: 1px; + fill: none; + stroke-dasharray: 1, 1; +} + +.qs-atoms-qubit-highlight { + stroke: orange; + stroke-width: 1px; +} + +.qs-atoms-gate { + fill: var(--qs-atoms-gate); + stroke-width: 0; +} + +.qs-atoms-gate-cz { + fill: var(--qs-atoms-gate-cz); +} +.qs-atoms-gate-mz { + fill: var(--qs-atoms-gate-mz); +} + +.qs-atoms-gate-reset { + fill: var(--qs-atoms-gate-reset); +} + +.qs-atoms-gate-text { + stroke-width: 0; + fill: var(--qs-atoms-background-color); + font-size: 5px; + font-family: Verdana, Geneva, Tahoma, sans-serif; + text-anchor: middle; + dominant-baseline: central; +} + +.qs-atoms-gate-text-small { + font-size: 4px; +} + +.qs-atoms-info-box { + position: absolute; + display: none; + left: 40px; + top: 50px; + border: 1px solid gray; + border-radius: 8px; + background-color: var(--qs-atoms-background-color); + color: var(--qs-atoms-primay-color); + padding: 16px; + width: 250px; +} + +.qs-atoms-info-box-grid { + display: grid; + grid-template-columns: 50px 200px; + padding: 8px; +} diff --git a/source/npm/qsharp/ux/atoms/index.ts b/source/npm/qsharp/ux/atoms/index.ts new file mode 100644 index 0000000000..2ee1ab4ec2 --- /dev/null +++ b/source/npm/qsharp/ux/atoms/index.ts @@ -0,0 +1,192 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { + createPlayerControls, + createScrubberControls, + createZoomControls, +} from "./controls.js"; +import "./index.css"; +import { Layout, type ZoneLayout, type TraceData } from "./layout.js"; +import { addChildWithClass } from "./utils.js"; + +export type { TraceData, ZoneLayout }; + +export function Atoms( + container: HTMLElement, + zoneLayout: ZoneLayout, + trace: TraceData, +) { + // On first load, Python might still be syncing the underlying model, so just bail if required data is missing + if (!zoneLayout.zones?.length || !trace.steps?.length) return; + + container.classList.add("qs-atoms-app"); + const toolstrip = addChildWithClass(container, "div", "qs-atoms-toolstrip"); + + const zoomControls = createZoomControls(); + const playerControls = createPlayerControls(); + const scrubberControls = createScrubberControls(); + scrubberControls.setRange(trace.steps.length); + + toolstrip.appendChild(zoomControls); + toolstrip.appendChild(scrubberControls.element); + toolstrip.appendChild(playerControls); + + // Render the layout + const zones = addChildWithClass(container, "div", "qs-atoms-zones"); + const layout = new Layout(zoneLayout, trace); + zones.appendChild(layout.container); + + scrubberControls.setNavHandler((step: number) => layout.gotoStep(step)); + + function setAppWidth() { + const newWidth = layout.width * layout.scale + 32; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions + newWidth > 600 + ? (container.style.width = `${newWidth}px`) + : (container.style.width = "600px"); + } + + function onZoomIn() { + layout.zoomIn(); + setAppWidth(); + } + + function onZoomOut() { + layout.zoomOut(); + setAppWidth(); + } + + // Wire up the controls + container.tabIndex = 0; + container.addEventListener("keydown", (e) => { + switch (e.key) { + case "ArrowRight": + e.preventDefault(); + e.stopPropagation(); + scrubberControls.next(); + break; + case "ArrowLeft": + e.preventDefault(); + e.stopPropagation(); + scrubberControls.prev(); + break; + case "ArrowUp": + e.preventDefault(); + e.stopPropagation(); + onZoomIn(); + break; + case "ArrowDown": + e.preventDefault(); + e.stopPropagation(); + onZoomOut(); + break; + case "f": + e.preventDefault(); + e.stopPropagation(); + layout.faster(); + break; + case "s": + e.preventDefault(); + e.stopPropagation(); + layout.slower(); + break; + case "p": + e.preventDefault(); + e.stopPropagation(); + onPlayPause(); + break; + case "t": + e.preventDefault(); + e.stopPropagation(); + layout.cycleAnimation(); + break; + } + }); + + const info = container.querySelector( + "[data-control='info']", + ) as SVGCircleElement; + const next = container.querySelector( + "[data-control='next']", + ) as SVGCircleElement; + const prev = container.querySelector( + "[data-control='prev']", + ) as SVGCircleElement; + const play = container.querySelector( + "[data-control='play']", + ) as SVGCircleElement; + const pause = container.querySelector( + "[data-control='pause']", + ) as SVGCircleElement; + const zoomIn = container.querySelector( + "[data-control='zoom-in']", + ) as SVGCircleElement; + const zoomOut = container.querySelector( + "[data-control='zoom-out']", + ) as SVGCircleElement; + + let playTimer: any; // Different platforms have different types for setTimeout + function onPlayPause() { + // If it was playing, pause it + if (playTimer) { + pause.parentElement!.style.display = "none"; + play.parentElement!.style.display = "inline"; + clearTimeout(playTimer); + playTimer = undefined; + return; + } + + // Else start playing + play.parentElement!.style.display = "none"; + pause.parentElement!.style.display = "inline"; + + if (scrubberControls.isAtEnd()) scrubberControls.reset(); + + function onTimeout() { + if (scrubberControls.isAtEnd()) { + pause.parentElement!.style.display = "none"; + play.parentElement!.style.display = "inline"; + playTimer = undefined; + } else { + scrubberControls.next(); + playTimer = setTimeout(onTimeout, layout.stepInterval); + } + } + playTimer = setTimeout(onTimeout, 0); + } + + const infoBox = document.createElement("div"); + infoBox.innerHTML = ` + Keyboard shortcuts +
+
Left
Step back
+
Right
Step forward
+
Up
Zoom in
+
Down
Zoom out
+
P
Play / Pause
+
F
Faster animation
+
S
Slower animation
+
T
Toggle animation type
+
+ `; + infoBox.classList.add("qs-atoms-info-box"); + container.appendChild(infoBox); + + info.addEventListener("mouseover", () => { + infoBox.style.display = "block"; + }); + info.addEventListener("mouseout", () => { + infoBox.style.display = "none"; + }); + + next.addEventListener("click", () => scrubberControls.next()); + prev.addEventListener("click", () => scrubberControls.prev()); + zoomIn.addEventListener("click", onZoomIn); + zoomOut.addEventListener("click", onZoomOut); + + play.addEventListener("click", onPlayPause); + pause.addEventListener("click", onPlayPause); + + setTimeout(onZoomOut, 16); +} diff --git a/source/npm/qsharp/ux/atoms/layout.ts b/source/npm/qsharp/ux/atoms/layout.ts new file mode 100644 index 0000000000..415fccc615 --- /dev/null +++ b/source/npm/qsharp/ux/atoms/layout.ts @@ -0,0 +1,730 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { appendChildren, createSvgElements, setAttributes } from "./utils.js"; + +// Zones will be rendered from top to bottom in array order +type ZoneData = { + title: string; + rows: number; + kind: "register" | "interaction" | "measurement"; +}; + +export type ZoneLayout = { + cols: number; + zones: ZoneData[]; +}; + +export type TraceData = { + metadata: any; + qubits: Array<[number, number]>; + steps: Array<{ + id: string | number; + ops: Array; + }>; +}; + +// const exampleLayout: ZoneLayout = { +// "cols": 36, +// "zones": [ +// { "title": "Register 1", "rows": 17, "kind": "register" }, +// { "title": "Interaction Zone", "rows": 4, "kind": "interaction" }, +// { "title": "Register 2", "rows": 17, "kind": "register" }, +// { "title": "Measurement Zone", "rows": 4, "kind": "measurement" }, +// ], +// }; + +type Location = [number, number, SVGElement?]; + +const qubitSize = 10; +const zoneSpacing = 8; +const colPadding = 20; +const initialScale = 1.5; +const scaleStep = 0.15; +const speedStep = 0.75; +const zoneBoxCornerRadius = 3; +const doublonCornerRadius = 5; + +// Used when no trace data is provided to fill the qubit mappings, assuming all register +// zones are populated with sequentially numbered qubit ids from the top left to the bottom right. +export function fillQubitLocations( + layout: ZoneLayout, +): Array<[number, number]> { + const qubits: Array<[number, number]> = []; + let currRow = 0; + layout.zones.forEach((zone) => { + for (let row = 0; row < zone.rows; ++row) { + if (zone.kind === "register") { + for (let col = 0; col < layout.cols; ++col) { + qubits.push([currRow, col]); + } + } + ++currRow; + } + }); + + return qubits; +} + +function parseMove(op: string): { qubit: number; to: Location } | undefined { + const match = op.match(/move\((\d+), (\d+)\) (\d+)/); + if (match) { + const to: Location = [parseInt(match[1]), parseInt(match[2])]; + return { qubit: parseInt(match[3]), to }; + } + return undefined; +} + +function parseGate( + op: string, +): { gate: string; qubit: number; arg?: string } | undefined { + const match = op.match(/(\w+)\s*(\(.*\))? (\d+)/); + if (match) { + const gate = match[1]; + const qubit = parseInt(match[3]); + const arg = match[2] + ? match[2].substring(1, match[2].length - 2) + : undefined; + return { gate, qubit, arg }; + } +} + +/* +We want to build up a cache of the qubit location at each 'n' steps so that scrubbing is fast. +Storing for each step is too large for the number of steps we want to handle. Also, the building +of the cache can take a long time, so we want to chunk it up to avoid blocking the UI thread. +*/ +function TraceToGetLayoutFn(trace: TraceData) { + const STEP_SIZE = 100; // How many steps between each cache entry + + const cacheEntries = Math.ceil(trace.steps.length / STEP_SIZE); + const entrySize = trace.qubits.length * 2; // row and col for each qubit + const cache = new Uint16Array(cacheEntries * entrySize); + + // Fill initial locations + trace.qubits.forEach((loc, idx) => { + cache[idx * 2] = loc[0]; + cache[idx * 2 + 1] = loc[1]; + }); + + let lastIndexProcessed = 0; + + // Update the layout (which should be the prior step layout) + function getNextStepLayout(stepIndex: number, layout: Uint16Array) { + if (stepIndex <= 0 || stepIndex >= trace.steps.length) { + throw "Step out of range"; + } + // Extract the move operations in the prior step, to apply to the prior layout + const moves = trace.steps[stepIndex - 1].ops + .map(parseMove) + .filter((x) => x != undefined); + + // Then apply them to the layout + moves.forEach((move) => { + layout[move.qubit * 2] = move.to[0]; + layout[move.qubit * 2 + 1] = move.to[1]; + }); + } + + // syncRunToIndex is used to force processing up to a certain index synchronously, such as + // when the user is scrubbing to a point not yet processed asynchronously. + function processChunk(syncRunToIndex = 0) { + if (lastIndexProcessed >= cacheEntries - 1) { + return; // Done + } + + const startPriorIndex = lastIndexProcessed * entrySize; + const startIndex = (lastIndexProcessed + 1) * entrySize; + + // Copy to the next entry as the starting point + cache.copyWithin(startIndex, startPriorIndex, startPriorIndex + entrySize); + const targetSlice = cache.subarray(startIndex, startIndex + entrySize); + + // Run each step in the chunk and apply the moves to the cache + for (let stepOffset = 1; stepOffset <= STEP_SIZE; ++stepOffset) { + const stepIndex = lastIndexProcessed * STEP_SIZE + stepOffset; + if (stepIndex >= trace.steps.length) break; + getNextStepLayout(stepIndex, targetSlice); + } + + // Queue up the next chunk + ++lastIndexProcessed; + if (syncRunToIndex > 0) { + // Process synchronously up to the requested index if not done yet + if (lastIndexProcessed < syncRunToIndex) processChunk(syncRunToIndex); + } else { + // Process the next chunk asynchronously + setTimeout(processChunk, 0); + } + } + // Kick off the async processing + processChunk(); + + // When a layout is requested for a step, cache the response. Most of the time the following + // step will be requested next, so we can easily just apply one set of moves to the prior layout. + let lastRequestedStep = -1; + const lastLayout = new Uint16Array(entrySize); + + function getLayoutAtStep(step: number): Uint16Array { + if (step < 0 || step >= trace.steps.length) { + throw "Step out of range"; + } + + // If the cache hasn't processed up to the required step, do so now + if (step >= (lastIndexProcessed + 1) * STEP_SIZE) { + const entryIndex = Math.floor(step / STEP_SIZE); + processChunk(entryIndex); + } + + // If the step exactly matches a cache entry, return that + if (step % STEP_SIZE === 0) { + const entryIndex = step / STEP_SIZE; + const startIndex = entryIndex * entrySize; + lastLayout.set(cache.subarray(startIndex, startIndex + entrySize)); + lastRequestedStep = step; + return lastLayout; + } + + // If the same as the last requested step, just return the cached layout + if (step === lastRequestedStep) { + return lastLayout; + } + + // Otherwise, if the last requested step was the prior step, just apply the moves + if (step === lastRequestedStep + 1) { + getNextStepLayout(step, lastLayout); + ++lastRequestedStep; + return lastLayout; + } + + // Otherwise, find the nearest prior cache entry and apply moves from there + const entryIndex = Math.floor(step / STEP_SIZE); + const startIndex = entryIndex * entrySize; + lastLayout.set(cache.subarray(startIndex, startIndex + entrySize)); + for ( + let stepIndex = entryIndex * STEP_SIZE + 1; + stepIndex <= step; + ++stepIndex + ) { + getNextStepLayout(stepIndex, lastLayout); + } + lastRequestedStep = step; + return lastLayout; + } + + return getLayoutAtStep; +} + +export class Layout { + container: SVGSVGElement; + width: number; + height: number; + scale: number = initialScale; + qubits: Location[]; + rowOffset: number[]; + currentStep = 0; + trackParent: SVGGElement; + activeGates: SVGElement[] = []; + trace: TraceData; + getStepLayout: (step: number) => Uint16Array; + showTracks = true; + showDottedPath = true; + stepInterval = 500; // Used for playing and animations + + constructor( + public layout: ZoneLayout, + trace: TraceData, + ) { + if (!trace.qubits?.length) { + trace.qubits = fillQubitLocations(layout); + } + this.trace = trace; + this.getStepLayout = TraceToGetLayoutFn(trace); + + this.qubits = structuredClone(trace.qubits); + + this.container = document.createElementNS( + "http://www.w3.org/2000/svg", + "svg", + ); + + const totalRows = layout.zones.reduce((prev, curr) => prev + curr.rows, 0); + + this.height = + totalRows * qubitSize + zoneSpacing * (layout.zones.length + 1); + this.width = layout.cols * qubitSize + colPadding; + + setAttributes(this.container, { + viewBox: `-5 0 ${this.width} ${this.height}`, + width: `${this.width * this.scale}px`, + height: `${this.height * this.scale}px`, + }); + + // Loop through the zones, calculating the row offsets, and rendering the zones + this.rowOffset = []; + let nextOffset = zoneSpacing; + let nextRowNum = 0; + layout.zones.forEach((zone, index) => { + this.renderZone(index, nextOffset, nextRowNum); + for (let i = 0; i < zone.rows; ++i) { + this.rowOffset.push(nextOffset); + nextOffset += qubitSize; + ++nextRowNum; + } + nextOffset += zoneSpacing; // Add spacing after each zone + }); + + const colNumOffset = nextOffset - 8; + this.renderColNums(layout.cols, colNumOffset); + + // Put the track parent before the qubits, so the qubits render on top + this.trackParent = createSvgElements("g")[0] as SVGGElement; + + this.trackParent.addEventListener("mouseover", (e) => { + const t = e.target as SVGElement; + if (t && t.dataset.qubitid) { + const qubitId = parseInt(t.dataset.qubitid); + this.highlightQubit(qubitId); + } + }); + this.trackParent.addEventListener("mouseout", () => { + this.highlightQubit(null); + }); + + appendChildren(this.container, [this.trackParent]); + + this.renderQubits(); + } + + private highlightQubit(qubit: number | null) { + if (qubit === null || qubit < 0 || qubit >= this.qubits.length) { + this.container + .querySelectorAll(".qs-atoms-qubit-highlight") + .forEach((elem) => { + elem.classList.remove("qs-atoms-qubit-highlight"); + }); + } else { + this.container + .querySelectorAll(`[data-qubitId="${qubit}"]`) + .forEach((elem) => { + elem.classList.add("qs-atoms-qubit-highlight"); + }); + } + } + + private getOpsAtStep(step: number) { + if (step < 0 || step >= this.trace.steps.length) { + throw "Step out of range"; + } + return this.trace.steps[step].ops; + } + + private renderZone(zoneIndex: number, offset: number, firstRowNum = 0) { + const zoneData = this.layout.zones[zoneIndex]; + const g = createSvgElements("g")[0]; + setAttributes(g, { + transform: `translate(0 ${offset})`, + class: "qs-atoms-zonebox", + }); + + if (zoneData.kind !== "interaction") { + // For non-interaction zones we draw one big rounded rectangle with lines between qubit rows & cols + const rect = createSvgElements("rect")[0]; + setAttributes(rect, { + x: "0", + y: "0", + width: `${this.layout.cols * qubitSize}`, + height: `${zoneData.rows * qubitSize}`, + rx: `${zoneBoxCornerRadius}`, + }); + appendChildren(g, [rect]); + + // Draw the lines between the rows + for (let i = 1; i < zoneData.rows; i++) { + const path = createSvgElements("path")[0]; + setAttributes(path, { + d: `M 0,${i * qubitSize} h${this.layout.cols * qubitSize}`, + }); + appendChildren(g, [path]); + } + // Draw the lines between the columns + for (let i = 1; i < this.layout.cols; i++) { + const path = createSvgElements("path")[0]; + setAttributes(path, { + d: `M ${i * qubitSize},0 v${zoneData.rows * qubitSize}`, + }); + appendChildren(g, [path]); + } + } else { + // For the interaction zone draw each doublon + for (let row = 0; row < zoneData.rows; ++row) { + for (let i = 0; i < this.layout.cols; i += 2) { + const rect = createSvgElements("rect")[0]; + setAttributes(rect, { + x: `${i * qubitSize}`, + y: `${row * qubitSize}`, + width: `${qubitSize * 2}`, + height: `${qubitSize}`, + rx: `${doublonCornerRadius}`, + }); + const path = createSvgElements("path")[0]; + setAttributes(path, { + d: `M ${(i + 1) * qubitSize},${row * qubitSize} v${qubitSize}`, + }); + appendChildren(g, [rect, path]); + } + } + } + + // Number the rows + for (let i = 0; i < zoneData.rows; ++i) { + const rowNum = firstRowNum + i; + const label = createSvgElements("text")[0]; + setAttributes(label, { + x: `${this.layout.cols * qubitSize + 5}`, + y: `${i * qubitSize + 5}`, + class: "qs-atoms-label", + }); + label.textContent = `${rowNum}`; + appendChildren(g, [label]); + } + + // Draw the title + const text = createSvgElements("text")[0]; + setAttributes(text, { + x: "1", + y: "-1", + class: "qs-atoms-zone-text", + }); + text.textContent = zoneData.title; + + appendChildren(g, [text]); + appendChildren(this.container, [g]); + } + + private renderQubits() { + const elems = this.qubits.map((location, index) => { + const [x, y] = this.getQubitCenter(index); + + // Safari has an issue animating multiple attributes concurrently, which we need + // to do to move the qubit (animate 'cx' and 'cy'), so instead set cx and cy to 0 + // and position the qubit with a transform (see https://stackoverflow.com/a/72022385/1674945) + + const circle = createSvgElements("circle")[0]; + setAttributes(circle, { + cx: `0`, + cy: `0`, + r: `2`, + class: "qs-atoms-qubit", + "data-qubitid": `${index}`, + }); + circle.addEventListener("mouseover", () => this.highlightQubit(index)); + circle.addEventListener("mouseout", () => this.highlightQubit(null)); + // Animation sets the transform as a style attribute, not an element attribute. + // Also note, when animating the CSS it requires the 'px' length type (unlike the attribute). + circle.style.transform = `translate(${x}px, ${y}px)`; + location[2] = circle; + return circle; + }); + + appendChildren(this.container, elems); + } + + private renderColNums(cols: number, offset: number) { + const g = createSvgElements("g")[0]; + setAttributes(g, { + transform: `translate(0 ${offset})`, + }); + // Number the columns + for (let i = 0; i < cols; ++i) { + const label = createSvgElements("text")[0]; + setAttributes(label, { + x: `${i * qubitSize + 5}`, + y: `5`, + class: "qs-atoms-label", + }); + label.textContent = `${i}`; + appendChildren(g, [label]); + } + appendChildren(this.container, [g]); + } + + renderGateOnQubit(qubit: number, gate: string, arg?: string) { + if (gate == "RESET") gate = "R"; + const [x, y] = this.getQubitCenter(qubit); + + const gateClass = + gate === "MZ" + ? "qs-atoms-gate qs-atoms-gate-mz" + : gate === "R" + ? "qs-atoms-gate qs-atoms-gate-reset" + : "qs-atoms-gate"; + + const g = createSvgElements("g")[0]; + setAttributes(g, { + transform: `translate(${x - qubitSize / 2} ${y - qubitSize / 2})`, + class: "qs-atoms-gate", + }); + + if (gate === "CZ") { + // Render the rounded doublon box in a bright color and x--x inside + const [rect, path, leftDot, rightDot] = createSvgElements( + "rect", + "path", + "circle", + "circle", + ); + setAttributes(rect, { + x: `0`, + y: "0", + width: `${qubitSize * 2}`, + height: `${qubitSize}`, + rx: `${doublonCornerRadius}`, + class: "qs-atoms-zonebox qs-atoms-gate-cz", + }); + // + // + // + setAttributes(path, { + fill: "none", + stroke: "black", + "stroke-width": "1.5", + d: "M5,5 h10", + }); + setAttributes(leftDot, { + cx: "5", + cy: "5", + r: "2", + "stroke-width": "0", + fill: "#123", + }); + setAttributes(rightDot, { + cx: "15", + cy: "5", + r: "2", + "stroke-width": "0", + fill: "#123", + }); + appendChildren(g, [rect, path, leftDot, rightDot]); + } else { + const [rect, text] = createSvgElements("rect", "text"); + setAttributes(rect, { + x: "0.5", + y: "0.5", + width: `${qubitSize - 1}`, + height: `${qubitSize - 1}`, + class: gateClass, + }); + setAttributes(text, { + x: "5", + y: arg ? "2.75" : "5", + class: "qs-atoms-gate-text", + }); + text.textContent = gate; + + appendChildren(g, [rect, text]); + + if (arg) { + const argText = createSvgElements("text")[0]; + setAttributes(argText, { + x: "5", + y: "7", + class: "qs-atoms-gate-text qs-atoms-gate-text-small", + textLength: "8", + }); + text.classList.add("qs-atoms-gate-text-small"); + argText.textContent = arg; + appendChildren(g, [argText]); + } + } + + appendChildren(this.container, [g]); + this.activeGates.push(g); + } + + clearGates() { + this.activeGates.forEach((gate) => { + gate.parentElement?.removeChild(gate); + }); + // TODO: Clear doublons too + this.activeGates = []; + } + + zoomIn() { + this.scale += scaleStep * this.scale; + setAttributes(this.container, { + width: `${this.width * this.scale}px`, + height: `${this.height * this.scale}px`, + }); + } + + zoomOut() { + this.scale -= scaleStep * this.scale; + setAttributes(this.container, { + width: `${this.width * this.scale}px`, + height: `${this.height * this.scale}px`, + }); + } + + faster() { + this.stepInterval = this.stepInterval * speedStep; + } + + slower() { + this.stepInterval = this.stepInterval / speedStep; + } + + cycleAnimation() { + if (!this.showTracks) { + this.showTracks = true; + this.showDottedPath = true; + } else if (this.showTracks && this.showDottedPath) { + this.showDottedPath = false; + } else { + this.showTracks = false; + this.showDottedPath = false; + } + this.gotoStep(this.currentStep); + } + + getQubitRowOffset(row: number) { + return this.rowOffset[row]; + } + + getLocationCenter(row: number, col: number): [number, number] { + const x = col * qubitSize + qubitSize / 2; + const y = this.getQubitRowOffset(row) + qubitSize / 2; + return [x, y]; + } + + getQubitCenter(qubit: number): [number, number] { + if (this.qubits[qubit] == undefined) { + throw "Qubit not found"; + } + + const [row, col] = this.qubits[qubit]; + return this.getLocationCenter(row, col); + } + + gotoStep(step: number) { + // Remove prior rendering's gates, trails, or remaining animations + this.clearGates(); + this.trackParent.replaceChildren(); + this.container.getAnimations({ subtree: true }).forEach((anim) => { + anim.cancel(); + }); + + const forwards = step > this.currentStep; + this.currentStep = step; + + // When on step 0, just layout the qubits per index 0 + // When on step 1, layout per index 0 then apply the gates/moves per index 0 + // When on step 2, layout per index 1 then apply the gates/moves per index 1 + // etc. until when on step n + 1, layout per index n and apply per index n + const qubitLocationIndex = step === 0 ? 0 : step - 1; + + // Update all qubit locations + const qubitLayout = this.getStepLayout(qubitLocationIndex); + const qubitCount = qubitLayout.length / 2; + for (let idx = 0; idx < qubitCount; ++idx) { + const elem = this.qubits[idx][2]; + if (elem === undefined) { + throw "Invalid qubit index in step"; + } + const loc: Location = [qubitLayout[idx * 2], qubitLayout[idx * 2 + 1]]; + this.qubits[idx] = [loc[0], loc[1], elem]; // Update the location + + // Get the offset for the location and move it there + const [x, y] = this.getQubitCenter(idx); + elem.style.transform = `translate(${x}px, ${y}px)`; + } + + // Now apply the ops + if (step > 0) { + const duration = forwards ? this.stepInterval / 2 : 0; + const ops = this.getOpsAtStep(qubitLocationIndex); + let trailId = 0; + ops.forEach((op) => { + const move = parseMove(op); + if (move) { + // Apply the move animation + const [oldX, oldY] = this.getQubitCenter(move.qubit); + const [newX, newY] = this.getLocationCenter(move.to[0], move.to[1]); + const qubit = this.qubits[move.qubit][2]; + if (!qubit) throw "Invalid qubit index"; + if (this.showTracks) { + if (this.showDottedPath) { + // Render a hollow circle at the start position + const [startCircle, trail] = createSvgElements("circle", "line"); + setAttributes(startCircle, { + cx: `${oldX}`, + cy: `${oldY}`, + class: `qs-atoms-qubit-trail-start`, + "data-qubitid": `${move.qubit}`, + }); + + const id = `dotted-trail-${trailId++}`; + setAttributes(trail, { + id, + x1: `${oldX}`, + y1: `${oldY}`, + x2: `${newX}`, + y2: `${newY}`, + class: "qs-atoms-qubit-trail", + "data-qubitid": `${move.qubit}`, + }); + appendChildren(this.trackParent, [trail, startCircle]); + } else { + const id = `gradient-${trailId++}`; + // Draw the path of any qubit movements + const [gradient, trail] = createSvgElements( + "linearGradient", + "line", + ); + setAttributes(gradient, { + id, + gradientUnits: "userSpaceOnUse", + x1: `${oldX}`, + y1: `${oldY}`, + x2: `${newX}`, + y2: `${newY}`, + }); + gradient.innerHTML = ``; + setAttributes(trail, { + x1: `${oldX}`, + y1: `${oldY}`, + x2: `${newX}`, + y2: `${newY}`, + style: `stroke-width: 2px; stroke: url(#${id})`, + }); + appendChildren(this.trackParent, [gradient, trail]); + } + } + qubit + .animate( + [ + { transform: `translate(${oldX}px, ${oldY}px)` }, + { transform: `translate(${newX}px, ${newY}px)` }, + ], + { + duration: this.showDottedPath ? 50 : duration, + fill: "forwards", + easing: "ease", + }, + ) + .finished.then((anim) => { + anim.commitStyles(); + anim.cancel(); + }); + // TODO: Check if you can/should cancel when scrubbing + } else { + // Wasn't a move, so render the gate + const gate = parseGate(op); + if (!gate) throw `Invalid gate: ${op}`; + const arg = gate.arg ? gate.arg.substring(0, 4) : undefined; + this.renderGateOnQubit(gate.qubit, gate.gate.toUpperCase(), arg); + } + }); + } + } +} diff --git a/source/npm/qsharp/ux/atoms/utils.ts b/source/npm/qsharp/ux/atoms/utils.ts new file mode 100644 index 0000000000..c86417dda8 --- /dev/null +++ b/source/npm/qsharp/ux/atoms/utils.ts @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +// **** Helper functions for rendering SVG elements **** + +type StringMap = Record; + +export function createSvgElements(...tags: string[]): SVGElement[] { + return tags.map((tag) => + document.createElementNS("http://www.w3.org/2000/svg", tag), + ); +} + +export function setAttributes(el: SVGElement, attrs: StringMap) { + for (const key in attrs) el.setAttribute(key, attrs[key]); +} + +export function appendChildren(parent: Element, children: Element[]) { + children.forEach((child) => parent.appendChild(child)); +} + +export function addChildWithClass( + parent: HTMLElement, + childTag: string, + className: string, +): HTMLElement { + const parentDoc = parent.ownerDocument; + const child = parentDoc.createElement(childTag); + child.classList.add(className); + parent.appendChild(child); + return child; +} diff --git a/source/npm/qsharp/ux/chem/index.tsx b/source/npm/qsharp/ux/chem/index.tsx new file mode 100644 index 0000000000..30e966282f --- /dev/null +++ b/source/npm/qsharp/ux/chem/index.tsx @@ -0,0 +1,191 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { useRef, useEffect, useState } from "preact/hooks"; +import { createViewer, GLViewer } from "3dmol"; + +import "./style.css"; + +const themeAttribute = "data-vscode-theme-kind"; + +export function MoleculeViewer(props: { + moleculeData: string; + cubeData: { [key: string]: string }; + isoValue?: number; +}) { + // Holds reference to the viewer div and 3Dmol viewer object. + const viewerRef = useRef(null); + const viewer = useRef(null); + const activeCubeData = useRef([] as any[]); + + const [viewStyle, setViewStyle] = useState("Sphere"); + const [isoval, setIsoval] = useState(props.isoValue || 0.02); + const [cubeKey, setCubeKey] = useState(Object.keys(props.cubeData)[0] || ""); + + // Runs after the DOM has been created. Create the 3Dmol viewer and adds the model. + useEffect(() => { + if (props.moleculeData && viewerRef.current) { + const molViewer = + viewer.current ?? + createViewer(viewerRef.current, { + backgroundColor: getComputedStyle(document.body).getPropertyValue( + "--vscode-editor-background", + ), + }); + try { + molViewer.clear(); // If the model is being replaced, clear the old one. Perhaps should get and update instead? + molViewer.addModel(props.moleculeData.trim(), "xyz", { + assignBonds: true, + }); + } catch (error) { + console.error("Error adding model:", error); + } + viewer.current = molViewer; + viewer.current.zoomTo(); + } + + // Respond to theme changes + const callback = (mutations: MutationRecord[]) => { + for (const mutation of mutations) { + if (mutation.attributeName === themeAttribute) { + const newBackgroundColor = getComputedStyle( + document.body, + ).getPropertyValue("--vscode-editor-background"); + if (viewer.current) { + viewer.current.setBackgroundColor(newBackgroundColor, 1.0); + viewer.current.render(); + } + } + } + }; + const observer = new MutationObserver(callback); + observer.observe(document.body, { attributeFilter: [themeAttribute] }); + }, [props.moleculeData]); + + useEffect(() => { + const currViewer = viewer.current; + if (!currViewer) { + return; + } + + if (cubeKey && props.cubeData[cubeKey]) { + activeCubeData.current.forEach((voldata) => { + currViewer.removeShape(voldata); + }); + activeCubeData.current = []; + const cubeData = props.cubeData[cubeKey]; + activeCubeData.current.push( + currViewer.addVolumetricData(cubeData.trim(), "cube", { + isoval, + opacity: 1, + color: "red", + }), + ); + activeCubeData.current.push( + currViewer.addVolumetricData(cubeData.trim(), "cube", { + isoval: -1 * isoval, + opacity: 1, + color: "green", + }), + ); + } + + if (viewStyle === "Sphere") { + currViewer.setStyle({}, { sphere: { scale: 0.3 }, stick: {} }); + } else if (viewStyle === "Stick") { + currViewer.setStyle({}, { stick: { radius: 0.2 } }); + } else if (viewStyle === "Line") { + currViewer.setStyle({}, { line: { linewidth: 5.0 } }); + } + currViewer.render(); + + // Sometimes keys are added later. If that's the case, change the cubeKey to the first available. + if (!cubeKey && Object.keys(props.cubeData).length > 0) { + setCubeKey(Object.keys(props.cubeData)[0]); + } + }, [viewStyle, isoval, cubeKey, props.moleculeData, props.cubeData]); + + // React to changes in the initial isovalue prop, just in case the widget updates state in parts. + useEffect(() => { + setIsoval(props.isoValue || 0.02); + }, [props.isoValue]); + + return ( +
+
+ +
+ + +
+ {cubeKey ? ( + <> +
+ + +
+ +
+ + { + const new_isoval = parseFloat( + (e.target as HTMLInputElement).value, + ); + setIsoval(new_isoval); + }} + /> + { + const new_isoval = parseFloat( + (e.target as HTMLInputElement).value, + ); + if (!isNaN(new_isoval)) { + setIsoval(new_isoval); + } + }} + /> +
+ + ) : null} +
+ ); +} diff --git a/source/npm/qsharp/ux/chem/style.css b/source/npm/qsharp/ux/chem/style.css new file mode 100644 index 0000000000..ce30abb6e0 --- /dev/null +++ b/source/npm/qsharp/ux/chem/style.css @@ -0,0 +1,83 @@ +#viewer { + width: 100%; + height: 100%; + margin: 0; + overflow: hidden; +} + +#viewer-container { + width: 100%; + height: 100%; + margin: 0; + overflow: hidden; + /* border: 1px solid gray; */ +} + +#viewer { + width: 100%; + height: 100%; +} + +#view-dropdown-container { + position: absolute; + top: 10px; /* distance from bottom */ + left: 10px; /* distance from right */ + height: 20px; + padding: 10px; + border-radius: 4px; + z-index: 10; + font-family: system-ui; +} + +#viewSelector { + padding-left: 4px; +} + +.view-option { + display: flex; + align-items: center; + gap: 8px; +} + +.view-option label { + margin-right: 0; + white-space: nowrap; + min-width: 120px; +} + +.view-option select, +.view-option input[type="range"] { + color: var(--vscode-editor-foreground); + background-color: var(--vscode-editor-background); +} + +#cube-dropdown-container { + position: absolute; + top: 40px; /* distance from bottom */ + left: 10px; /* distance from right */ + padding: 10px; + height: 20px; + border-radius: 4px; + z-index: 10; + font-family: system-ui; +} + +#isoval-slider-container { + position: absolute; + top: 70px; /* distance from bottom */ + left: 10px; /* distance from right */ + padding: 10px; + height: 40px; + border-radius: 4px; + z-index: 10; + font-family: system-ui; +} + +#isovalSlider { + width: 100px; + outline: none; +} + +#isovalInput { + width: 64px; +} diff --git a/source/npm/qsharp/ux/index.ts b/source/npm/qsharp/ux/index.ts index d99185dfc8..26f5f90210 100644 --- a/source/npm/qsharp/ux/index.ts +++ b/source/npm/qsharp/ux/index.ts @@ -20,6 +20,8 @@ export { EstimatesOverview } from "./estimatesOverview.js"; export { EstimatesPanel } from "./estimatesPanel.js"; export { Circuit, CircuitPanel } from "./circuit.js"; export { setRenderer, Markdown } from "./renderers.js"; +export { Atoms, type ZoneLayout, type TraceData } from "./atoms/index.js"; +export { MoleculeViewer } from "./chem/index.js"; export { ensureTheme, detectThemeChange, diff --git a/source/paulimer/Cargo.toml b/source/paulimer/Cargo.toml new file mode 100644 index 0000000000..8062f113a0 --- /dev/null +++ b/source/paulimer/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "paulimer" +version = "0.0.1" +edition = "2021" +publish = false + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +getrandom = { workspace = true, features = ["js"] } +num-derive = { workspace = true } +num-traits = { workspace = true } +rand = { workspace = true } +rustc-hash = { workspace = true } +sorted-vec = { workspace = true } +sorted-iter = { workspace = true } + +[dev-dependencies] +criterion = { workspace = true } +proptest = { workspace = true } + +[target.'cfg(unix)'.dev-dependencies] +pprof = { workspace = true } + +[[bench]] +name = "bitmatrix_benchmark" +harness = false diff --git a/source/paulimer/benches/bitmatrix_benchmark.rs b/source/paulimer/benches/bitmatrix_benchmark.rs new file mode 100644 index 0000000000..67906a3629 --- /dev/null +++ b/source/paulimer/benches/bitmatrix_benchmark.rs @@ -0,0 +1,52 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use criterion::{criterion_group, criterion_main, BatchSize, BenchmarkId, Criterion}; +use paulimer::bits::BitMatrix; +use rand::prelude::*; + +struct Parameters((f64, usize)); + +pub fn echelon_form_benchmark(criterion: &mut Criterion) { + let mut group = criterion.benchmark_group("Bitmatrix::echelon_form"); + for sparsity in [0.5, 0.1, 0.01, 0.001] { + for size in [100usize, 1000usize, 10000usize] { + group.sample_size(10); + let parameters = Parameters((sparsity, size)); + group.bench_with_input( + BenchmarkId::from_parameter(¶meters), + ¶meters, + |bencher, parameters| { + let (sparsity, size) = parameters.0; + bencher.iter_batched( + || random_bitmatrix(size, size, sparsity), + |mut matrix| matrix.echelonize(), + BatchSize::SmallInput, + ); + }, + ); + } + } + group.finish(); +} + +impl std::fmt::Display for Parameters { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self.0)?; + Ok(()) + } +} + +criterion_group!(benches, echelon_form_benchmark); +criterion_main!(benches); + +fn random_bitmatrix(rowcount: usize, columncount: usize, sparsity: f64) -> BitMatrix { + let mut matrix = BitMatrix::with_shape(rowcount, columncount); + let mut bits = std::iter::from_fn(move || Some(thread_rng().gen_bool(sparsity))); + for row_index in 0..rowcount { + for column_index in 0..columncount { + matrix.set((row_index, column_index), bits.next().expect("boom")); + } + } + matrix +} diff --git a/source/paulimer/src/bits.rs b/source/paulimer/src/bits.rs new file mode 100644 index 0000000000..a86b498673 --- /dev/null +++ b/source/paulimer/src/bits.rs @@ -0,0 +1,105 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +pub mod bitblock; + +pub mod standard_types; +pub use standard_types::are_supports_equal; + +mod bitvec; +pub use bitvec::{BitVec, WORD_COUNT_DEFAULT}; + +mod bitview; +pub use bitview::{BitView, MutableBitView}; + +mod index_set; +pub use index_set::{remapped, IndexSet}; + +pub mod bitmatrix; +pub use bitmatrix::BitMatrix; + +// Unary traits, involve only one type +use crate::NeutralElement; + +pub trait BitwiseNeutralElement: + Bitwise + + NeutralElement + NeutralElement + IndexAssignable> +{ +} + +pub trait Bitwise { + fn index(&self, index: usize) -> bool; + fn support(&self) -> impl sorted_iter::SortedIterator; + fn weight(&self) -> usize { + self.support().count() + } + fn parity(&self) -> bool { + (self.weight() % 2) == 1 + } + fn is_zero(&self) -> bool { + self.weight() == 0 + } + fn is_one_bit(&self, index: usize) -> bool { + self.weight() == 1 && self.index(index) + } + fn max_bit_id(&self) -> Option { + self.support().last() + } +} + +pub trait IndexAssignable: Bitwise { + fn assign_index(&mut self, index: usize, to: bool); + fn negate_index(&mut self, index: usize); + fn clear_bits(&mut self); + fn set_random(&mut self, num_bits: usize, random_number_generator: &mut impl rand::Rng) { + for j in 0..num_bits { + self.assign_index(j, random_number_generator.gen()); + } + } +} + +pub trait BorrowAsBitIterator { + type BitIterator<'life>: ExactSizeIterator + where + Self: 'life; + fn borrow_as_bit_iterator(&self) -> Self::BitIterator<'_>; +} + +// Binary traits, involve two types + +pub trait BitwiseBinaryOps: Bitwise + IndexAssignable { + fn assign(&mut self, other: &Other); + + fn assign_with_offset(&mut self, other: &Other, start_bit: usize, num_bits: usize) { + for bit_index in 0..num_bits { + self.assign_index(bit_index + start_bit, other.index(bit_index)); + } + } + + fn assign_from_interval(&mut self, other: &Other, start_bit: usize, num_bits: usize) { + for bit_index in 0..num_bits { + self.assign_index(bit_index, other.index(start_bit + bit_index)); + } + } + + fn bitxor_assign(&mut self, other: &Other); + fn bitand_assign(&mut self, other: &Other); +} + +// TODO: should we eliminate Dot and move `dot` into OverlapWeight ? +pub trait Dot { + fn dot(&self, other: &Other) -> bool; +} + +pub trait OverlapWeight { + fn and_weight(&self, other: &Other) -> usize; + fn or_weight(&self, other: &Other) -> usize; +} + +pub trait FromBits { + fn from_bits(other: &Other) -> Self; +} + +//TODO: Should BitVec, BitView, MutableBitView, BitBlock thoroughly implement standard traits such as : BitXor, BitAnd, BitXorAssign, BitAndAssign, Index, FromIterator, Display ? +pub mod bitchunk; +pub mod tiny_matrix; diff --git a/source/paulimer/src/bits/bitblock.rs b/source/paulimer/src/bits/bitblock.rs new file mode 100644 index 0000000000..c8424f2837 --- /dev/null +++ b/source/paulimer/src/bits/bitblock.rs @@ -0,0 +1,261 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use std::ops::{BitAnd, BitAndAssign, BitXor, BitXorAssign, Index}; + +use super::standard_types::{array_get_unchecked, array_set_unchecked, BitIterator}; +use super::{Bitwise, BitwiseNeutralElement, IndexAssignable, WORD_COUNT_DEFAULT}; +use crate::NeutralElement; + +pub type Word = u64; + +#[repr(C, align(64))] +#[derive(Eq, Clone, Debug, Hash, PartialEq)] +pub struct BitBlock { + pub blocks: [Word; WORD_COUNT], +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct BitAccessor { + word_index: usize, + bitmask: Word, +} + +impl BitBlock { + pub const BITS: usize = WORD_COUNT * (Word::BITS as usize); + + #[must_use] + pub fn zeros() -> Self { + Self { + blocks: [0; WORD_COUNT], + } + } + + #[must_use] + pub fn ones() -> Self { + Self { + blocks: [Word::MAX; WORD_COUNT], + } + } + + #[must_use] + pub const fn bits() -> usize { + Self::BITS + } + + #[must_use] + pub fn array(&self) -> &[Word; WORD_COUNT] { + &self.blocks + } + + pub fn array_mut(&mut self) -> &mut [Word; WORD_COUNT] { + &mut self.blocks + } + + #[must_use] + pub fn all(value: bool) -> Self { + if value { + Self::ones() + } else { + Self::zeros() + } + } + + /// # Panics + /// + /// Will panic when array is too big + #[must_use] + pub fn from_array(bits: [bool; ARRAY_SIZE]) -> Self { + assert!(ARRAY_SIZE <= Self::bits()); + let mut block = Self::zeros(); + for (index, bit) in bits.iter().enumerate() { + block.set(index, *bit); + } + block + } + + /// # Panics + /// + /// Will panic if index out of range + #[must_use] + pub fn get(&self, index: usize) -> bool { + assert!(index < Self::BITS); + unsafe { self.get_unchecked(index) } + } + + /// # Safety + /// Does not check if index is out of bounds + #[must_use] + pub unsafe fn get_unchecked(&self, index: usize) -> bool { + array_get_unchecked(self.array(), index) + } + + /// # Panics + /// + /// Will panic if index out of range + pub fn set(&mut self, index: usize, to: bool) { + assert!(index < Self::BITS); + unsafe { self.set_unchecked(index, to) }; + } + + /// # Safety + /// Does not check if index is out of bounds + pub unsafe fn set_unchecked(&mut self, index: usize, to: bool) { + array_set_unchecked(self.array_mut(), index, to); + } + + #[must_use] + pub fn parity(&self) -> bool { + self.blocks.parity() + } + + #[must_use] + pub fn weight(&self) -> usize { + self.blocks.weight() + } + + #[must_use] + pub fn is_zero(&self) -> bool { + self.blocks.is_zero() + } + + #[must_use] + pub fn iter(&self) -> BitIterator<'_> { + BitIterator::from_bits(&self.blocks) + } +} + +impl<'life, const WORD_COUNT: usize> IntoIterator for &'life BitBlock { + type Item = bool; + type IntoIter = BitIterator<'life>; + fn into_iter(self) -> Self::IntoIter { + self.iter() + } +} + +impl NeutralElement for BitBlock { + type NeutralElementType = BitBlock; + + fn neutral_element(&self) -> ::NeutralElementType { + Self::zeros() + } + + fn default_size_neutral_element() -> ::NeutralElementType { + Self::zeros() + } + + fn neutral_element_of_size(size: usize) -> ::NeutralElementType { + assert!(size <= BitBlock::::BITS); + Self::default_size_neutral_element() + } +} + +impl BitwiseNeutralElement for BitBlock {} + +impl Index for BitBlock { + type Output = bool; + + fn index(&self, index: usize) -> &Self::Output { + if Bitwise::index(&self.blocks, index) { + &true + } else { + &false + } + } +} + +impl BitXorAssign<&BitBlock> for BitBlock { + fn bitxor_assign(&mut self, other: &Self) { + for index in 0..WORDCOUNT { + self.blocks[index] ^= other.blocks[index]; + } + } +} + +impl BitXor for &BitBlock { + type Output = BitBlock; + + fn bitxor(self, other: Self) -> Self::Output { + let mut clone = (*self).clone(); + clone ^= other; + clone + } +} + +impl BitAndAssign<&BitBlock> for BitBlock { + fn bitand_assign(&mut self, other: &Self) { + for index in 0..WORDCOUNT { + self.blocks[index] &= other.blocks[index]; + } + } +} + +impl BitAnd for &BitBlock { + type Output = BitBlock; + + fn bitand(self, other: Self) -> Self::Output { + let mut clone = (*self).clone(); + clone &= other; + clone + } +} + +impl FromIterator for BitBlock { + fn from_iter>(iterator: Iterator) -> Self { + let mut res: BitBlock = BitBlock::::default_size_neutral_element(); + for (index, bit) in iterator.into_iter().enumerate() { + res.assign_index(index, bit); + } + res + } +} + +// Bit accessor for [Word; WORDCOUNT] + +impl BitAccessor { + /// # Panics + /// + /// Will panic index is out of range + #[must_use] + pub fn for_index(index: usize) -> Self { + assert!(index < BitBlock::::BITS); + unsafe { Self::for_index_unchecked(index) } + } + + /// # Safety + /// Does not check if index is out of bounds + #[must_use] + pub unsafe fn for_index_unchecked(index: usize) -> Self { + let word_index = index / (Word::BITS as usize); + let bit_index = index % (Word::BITS as usize); + Self { + word_index, + bitmask: 1 << bit_index, + } + } + + #[must_use] + pub fn array_value_of(&self, block: &[Word; WORDCOUNT]) -> bool { + let word = unsafe { block.get_unchecked(self.word_index) }; + (*word & self.bitmask) != 0 + } + + pub fn array_bitxor(&self, block: &mut [Word; WORDCOUNT]) { + let word: &mut Word = unsafe { block.get_unchecked_mut(self.word_index) }; + *word ^= self.bitmask; + } + + pub fn array_set_value_of(&self, block: &mut [Word; WORDCOUNT], to: bool) { + let word = unsafe { block.get_unchecked_mut(self.word_index) }; + // let mask = !self.bitmask; + // let bit_index = mask.trailing_ones(); + // let bit_value = (to as Word) << bit_index; + // *word &= mask; + // *word |= bit_value; + if to { + *word |= self.bitmask; + } else { + *word &= !self.bitmask; + } + } +} diff --git a/source/paulimer/src/bits/bitchunk.rs b/source/paulimer/src/bits/bitchunk.rs new file mode 100644 index 0000000000..db9c2e56bc --- /dev/null +++ b/source/paulimer/src/bits/bitchunk.rs @@ -0,0 +1,45 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +pub struct BitChunkAccessor { + pub threshold: u32, + pub shift: u32, + pub word_id: u32, + pub mask: u64, +} + +impl Default for BitChunkAccessor { + /// # Panics + /// When `CHUNK_SIZE` does not fit into u32 + fn default() -> Self { + Self { + threshold: (u64::BITS / u32::try_from(CHUNK_SIZE).unwrap() - 1) + * u32::try_from(CHUNK_SIZE).unwrap(), + shift: 0, + word_id: 0, + mask: u64::MAX >> (u64::BITS - u32::try_from(CHUNK_SIZE).unwrap()), + } + } +} + +impl BitChunkAccessor { + /// # Panics + /// When `CHUNK_SIZE` does not fit into u32 + pub fn next(&mut self) { + if self.shift == self.threshold { + self.shift = 0; + self.word_id += 1; + } else { + self.shift += u32::try_from(CHUNK_SIZE).unwrap(); + } + } + + pub fn xor(&self, what: &mut [u64], val: u64) { + what[self.word_id as usize] ^= val << self.shift; + } + + #[must_use] + pub fn get(&self, what: &[u64]) -> u64 { + (what[self.word_id as usize] >> self.shift) & self.mask + } +} diff --git a/source/paulimer/src/bits/bitmatrix.rs b/source/paulimer/src/bits/bitmatrix.rs new file mode 100644 index 0000000000..a8d8aa97fa --- /dev/null +++ b/source/paulimer/src/bits/bitmatrix.rs @@ -0,0 +1,1139 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use super::bitvec::WORD_COUNT_DEFAULT; +use super::{BitwiseNeutralElement, OverlapWeight}; +use crate::bits::bitblock::{BitAccessor, BitBlock}; +use crate::bits::{ + BitVec, BitView, Bitwise, BitwiseBinaryOps, Dot, IndexAssignable, MutableBitView, +}; +use crate::NeutralElement; +use sorted_iter::assume::AssumeSortedByItemExt; +use sorted_iter::SortedIterator; +use std::cmp::PartialEq; +use std::hash::Hash; +use std::iter::FromIterator; +use std::mem::size_of; +use std::ops::{Add, AddAssign, BitAnd, BitAndAssign, BitXor, BitXorAssign, Mul}; +use std::ops::{Index, Range}; +use std::str::FromStr; + +#[must_use] +#[derive(Debug, Eq)] +pub struct BitMatrix { + blocks: Vec>, + rows: Vec<*mut BitBlock>, + columncount: usize, +} + +impl Hash for BitMatrix { + fn hash(&self, state: &mut H) { + self.blocks.hash(state); + } +} + +unsafe impl Sync for BitMatrix {} + +pub type Row<'life, const WORD_COUNT: usize = WORD_COUNT_DEFAULT> = BitView<'life, WORD_COUNT>; // should we use View in the name to indicate that it is a view and not a copy of a row ? +pub type MutableRow<'life, const WORD_COUNT: usize = WORD_COUNT_DEFAULT> = + MutableBitView<'life, WORD_COUNT>; // should we use View in the name to indicate that it is a view and not a copy of a row ? + +#[derive(Clone, Debug, Hash)] +pub struct Column<'life, const WORD_COUNT: usize = WORD_COUNT_DEFAULT> { + // TODO(VK) should we use View in the name to indicate that it is a view and not a copy of a column ? + rows: &'life [*mut BitBlock], + accessor: BitAccessor, + block_index: usize, +} + +impl BitMatrix { + pub fn with_shape(rows: usize, columns: usize) -> Self { + Self::zeros(rows, columns) + } + + pub fn zeros(rows: usize, columns: usize) -> Self { + Self::with_value(false, (rows, columns)) + } + + pub fn ones(rows: usize, columns: usize) -> Self { + Self::with_value(true, (rows, columns)) + } + + pub fn identity(dimension: usize) -> Self { + let mut res = Self::zeros(dimension, dimension); + for index in 0..dimension { + res.set((index, index), true); + } + res + } + + pub fn from_row_iter<'life>( + iter: impl ExactSizeIterator>, + columns: usize, + ) -> Self { + let rows = iter.len(); + let mut matrix = Self::zeros(rows, columns); + for (row_from, mut row_to) in std::iter::zip(iter, matrix.row_iterator_mut(0..rows)) { + row_to.assign(&row_from); + } + matrix + } + + pub fn from_iter(iter: Rows, columncount: usize) -> Self + where + Row: IntoIterator, + Rows: IntoIterator, + { + // TODO(AEP): Expanding first into Vec is + // inefficient. Instead, append to Vec> as necessary. + let mut rows = Vec::>::new(); + let mut rowcount = 0; + for row in iter { + rows.push(row.into_iter().collect()); + rowcount += 1; + } + let mut matrix = BitMatrix::with_shape(rowcount, columncount); + for (row_index, row) in rows.iter().enumerate() { + for (column_index, value) in row.iter().take(columncount).enumerate() { + matrix.set((row_index, column_index), *value); + } + } + matrix + } + + fn with_value(value: bool, shape: (usize, usize)) -> Self { + let (rowcount, columncount) = shape; + let rowstride = Self::rowstride_of(columncount); + let buffer = vec![BitBlock::::all(value); rowcount * rowstride]; + Self::from_blocks(buffer, shape) + } + + fn from_blocks(mut buffer: Vec>, shape: (usize, usize)) -> Self { + let rows = Self::rows_of(buffer.as_mut_slice(), shape.0); + Self::from_blocks_and_rows(buffer, shape, rows) + } + + fn from_blocks_and_rows( + buffer: Vec>, + shape: (usize, usize), + rows: Vec<*mut BitBlock>, + ) -> Self { + let matrix = Self { + blocks: buffer, + rows, + columncount: shape.1, + }; + debug_assert!(matrix.is_aligned()); + matrix + } + + #[must_use] + pub fn is_zero(&self) -> bool { + let zero = BitBlock::::zeros(); + for block in &self.blocks { + if *block != zero { + return false; + } + } + true + } + + fn is_aligned(&self) -> bool { + let alignment = (self.blocks.as_ptr() as usize) % size_of::>(); + if alignment != 0 { + return false; + } + for row in &self.rows { + let alignment = (*row as usize) % size_of::>(); + if alignment != 0 { + return false; + } + } + true + } + + fn rowstride(&self) -> usize { + Self::rowstride_of(self.columncount) + } + + fn rowstride_of(columncount: usize) -> usize { + let rowstride = columncount / BitBlock::::BITS; + let adjustment = !columncount.is_multiple_of(BitBlock::::BITS); + rowstride + usize::from(adjustment) + } + + fn rows_of( + blocks: &mut [BitBlock], + rowcount: usize, + ) -> Vec<*mut BitBlock> { + let mut rows = Vec::<*mut BitBlock>::new(); + let rowstride = if rowcount == 0 { + 0 + } else { + blocks.len() / rowcount + }; + if rowstride == 0 { + rows = vec![blocks.as_mut_ptr(); rowcount]; + } else { + for row in blocks.chunks_exact_mut(rowstride) { + rows.push(row.as_mut_ptr()); + } + } + rows + } + + #[must_use] + pub fn rowcount(&self) -> usize { + self.rows.len() + } + + #[must_use] + pub fn columncount(&self) -> usize { + self.columncount + } + + #[must_use] + pub fn shape(&self) -> (usize, usize) { + (self.rowcount(), self.columncount()) + } + + #[must_use] + pub fn row(&self, index: usize) -> Row<'_, WORD_COUNT> { + Row:: { + blocks: unsafe { + std::slice::from_raw_parts((*self.rows[index]).array(), self.block_count()) + }, + } + } + + #[must_use] + pub fn rows(&self) -> impl ExactSizeIterator> { + self.row_iterator(0..self.rowcount()) + } + + pub fn row_iterator( + &self, + index_iterator: impl ExactSizeIterator, + ) -> impl ExactSizeIterator> { + index_iterator.map(|index| self.row(index)) + } + + pub fn row_iterator_mut( + &mut self, + index_iterator: impl ExactSizeIterator, + ) -> impl ExactSizeIterator> { + index_iterator.map(|index| self.build_mutable_row(index)) + } + + pub fn row_mut(&mut self, index: usize) -> MutableRow<'_, WORD_COUNT> { + self.build_mutable_row(index) + } + + #[inline] + fn block_count(&self) -> usize { + let mut block_count = self.columncount() / BitBlock::::BITS; + if !self + .columncount() + .is_multiple_of(BitBlock::::BITS) + { + block_count += 1; + } + block_count + } + + fn build_mutable_row(&self, index: usize) -> MutableRow<'_, WORD_COUNT> { + let ptr = self.rows[index]; + MutableRow:: { + blocks: unsafe { + std::slice::from_raw_parts_mut((*ptr).array_mut(), self.block_count()) + }, + } + } + + pub fn rows_mut( + &mut self, + index: usize, + index2: usize, + ) -> (MutableRow<'_, WORD_COUNT>, MutableRow<'_, WORD_COUNT>) { + ( + self.build_mutable_row(index), + self.build_mutable_row(index2), + ) + } + + pub fn rows2_mut( + &mut self, + index: (usize, usize), + ) -> (MutableRow<'_, WORD_COUNT>, MutableRow<'_, WORD_COUNT>) { + ( + self.build_mutable_row(index.0), + self.build_mutable_row(index.1), + ) + } + + #[must_use] + pub fn rows2(&self, index: (usize, usize)) -> (Row<'_, WORD_COUNT>, Row<'_, WORD_COUNT>) { + (self.row(index.0), self.row(index.1)) + } + + /// # Safety + /// Does not check if all indexes are distinct + pub unsafe fn rows4_mut( + &mut self, + index: (usize, usize, usize, usize), + ) -> ( + MutableRow<'_, WORD_COUNT>, + MutableRow<'_, WORD_COUNT>, + MutableRow<'_, WORD_COUNT>, + MutableRow<'_, WORD_COUNT>, + ) { + ( + self.build_mutable_row(index.0), + self.build_mutable_row(index.1), + self.build_mutable_row(index.2), + self.build_mutable_row(index.3), + ) + } + + /// TODO(VK): Maybe use when it becomes stable + /// # Safety + /// Does not check if all indexes are distinct + pub unsafe fn rows8_mut( + &mut self, + index: crate::Tuple8, + ) -> crate::Tuple8> { + ( + self.build_mutable_row(index.0), + self.build_mutable_row(index.1), + self.build_mutable_row(index.2), + self.build_mutable_row(index.3), + self.build_mutable_row(index.4), + self.build_mutable_row(index.5), + self.build_mutable_row(index.6), + self.build_mutable_row(index.7), + ) + } + + #[must_use] + pub fn column(&self, index: usize) -> Column<'_, WORD_COUNT> { + let block_index = index / BitBlock::::BITS; + let bit_index = index % BitBlock::::BITS; + Column:: { + rows: &self.rows, + accessor: BitAccessor::for_index(bit_index), + block_index, + } + } + + #[must_use] + pub fn columns(&self) -> impl ExactSizeIterator> { + let indexes = 0..self.columncount(); + indexes.map(|index| self.column(index)) + } + + /// # Panics + /// + /// Will panic if index out of range + pub fn set(&mut self, index: (usize, usize), to: bool) { + assert!(index.0 < self.rowcount() && index.1 < self.columncount()); + unsafe { self.set_unchecked(index, to) }; + } + + /// # Safety + /// Dose not check if index is out of bounds + pub unsafe fn set_unchecked(&mut self, index: (usize, usize), to: bool) { + let (block, bit_index) = self.block_index_of_mut(index); + block.set(bit_index, to); + } + + /// # Panics + /// + /// Will panic if index out of range + #[must_use] + pub fn get(&self, index: (usize, usize)) -> bool { + assert!(index.0 < self.rowcount() && index.1 < self.columncount()); + unsafe { self.get_unchecked(index) } + } + + /// # Safety + /// Does not check if index is out of bounds + #[must_use] + pub unsafe fn get_unchecked(&self, index: (usize, usize)) -> bool { + let (block, bit_index) = self.block_index_of(index); + block.get_unchecked(bit_index) + } + + pub fn echelonize(&mut self) -> Vec { + let mut pivot = pivot_of(self, (0, 0)); + let mut rank_profile = Vec::::with_capacity(self.columncount()); + + for row_index in 0..self.rowcount() { + if pivot.1 >= self.columncount() { + break; + } + self.swap_rows(pivot.0, row_index); + pivot.0 = row_index; + rank_profile.push(pivot.1); + reduce(self, pivot); + pivot = pivot_of(self, (pivot.0 + 1, pivot.1 + 1)); + } + rank_profile + } + + #[must_use] + pub fn rank(&self) -> usize { + self.clone().echelonize().len() + } + + pub fn transposed(&self) -> Self { + let mut res = Self::with_shape(self.columncount(), self.rowcount()); + for i in 0..self.rowcount() { + for j in 0..self.columncount() { + res.set((j, i), self[(i, j)]); + } + } + res + } + + pub fn submatrix(&self, rows: &[usize], columns: &[usize]) -> Self { + let mut res = Self::with_shape(rows.len(), columns.len()); + for (row_index, &row) in rows.iter().enumerate() { + for (column_index, &column) in columns.iter().enumerate() { + res.set((row_index, column_index), self[(row, column)]); + } + } + res + } + + /// # Panics + /// + /// Will panic if matrix is not invertible + pub fn inverted(&self) -> BitMatrix { + assert!(self.columncount() == self.rowcount()); + let (_, t, _, profile) = rref_with_transforms(self.clone()); + assert!(profile.len() == self.rowcount()); + debug_assert_eq!( + self * &t, + BitMatrix::::identity(self.rowcount()) + ); + t + } + + pub fn swap_rows(&mut self, left_row_index: usize, right_row_index: usize) { + self.rows.swap(left_row_index, right_row_index); + } + + pub fn swap_columns(&mut self, left_column_index: usize, right_column_index: usize) { + for row_index in 0..self.rowcount() { + let left_bit = self.get((row_index, left_column_index)); + let right_bit = self.get((row_index, right_column_index)); + self.set((row_index, left_column_index), right_bit); + self.set((row_index, right_column_index), left_bit); + } + } + + pub fn permute_rows(&mut self, permutation: &[usize]) { + let old_rows = self.rows.clone(); + for index in 0..permutation.len() { + self.rows[index] = old_rows[permutation[index]]; + } + } + + pub fn add_into_row(&mut self, to_index: usize, from_index: usize) { + let mut to_block = self.rows[to_index]; + let mut from_block = self.rows[from_index]; + for _ in 0..self.rowstride() { + unsafe { + BitwiseBinaryOps::bitxor_assign(&mut *to_block, &*from_block); + to_block = to_block.add(1); + from_block = from_block.add(1); + } + } + } + + // TODO(VK): check if we also need dot_transposed + /// # Panics + /// + /// Will panic if matrix dimensions are incompatible + pub fn dot(&self, rhs: &BitMatrix) -> BitMatrix { + assert_eq!(self.columncount(), rhs.rowcount()); + let mut rows = Vec::with_capacity(self.rowcount()); + for output_row in 0..self.rowcount() { + let mut row = BitVec::::zeros(rhs.columncount()); + for column_index in 0..self.columncount() { + if self[(output_row, column_index)] { + // TODO(AEP): This is needlessly slow. Make it fast. + for into_column_index in 0..rhs.columncount() { + row.assign_index( + into_column_index, + row.index(into_column_index) + ^ rhs.get((column_index, into_column_index)), + ); + } + } + } + rows.push(row); + } + Self::from_iter(rows.iter(), rhs.columncount()) + } + + fn block_index_of_mut(&mut self, index: (usize, usize)) -> (&mut BitBlock, usize) { + let column_block = index.1 / BitBlock::::BITS; + let column_remainder = index.1 % BitBlock::::BITS; + let bit_index = column_remainder % BitBlock::::BITS; + unsafe { + let block = self.rows[index.0].add(column_block); + (&mut *block, bit_index) + } + } + + fn block_index_of(&self, index: (usize, usize)) -> (&BitBlock, usize) { + let column_block = index.1 / BitBlock::::BITS; + let column_remainder = index.1 % BitBlock::::BITS; + let bit_index = column_remainder % BitBlock::::BITS; + unsafe { + let block = self.rows[index.0].add(column_block); + (&*block, bit_index) + } + } +} + +unsafe impl Send for BitMatrix {} + +impl Clone for BitMatrix { + fn clone(&self) -> Self { + let mut blocks = self.blocks.clone(); + let mut rows = Vec::<*mut BitBlock>::new(); + let offset = unsafe { blocks.as_mut_ptr().offset_from(self.blocks.as_ptr()) }; + for row in &self.rows { + rows.push(unsafe { row.offset(offset) }); + } + BitMatrix::from_blocks_and_rows(blocks, self.shape(), rows) + } +} + +impl Index<[usize; 2]> for BitMatrix { + type Output = bool; + + fn index(&self, index: [usize; 2]) -> &Self::Output { + &self[(index[0], index[1])] + } +} + +impl Index<(usize, usize)> for BitMatrix { + type Output = bool; + + fn index(&self, index: (usize, usize)) -> &Self::Output { + if self.get(index) { + return &true; + } + &false + } +} + +impl PartialEq for BitMatrix { + fn eq(&self, other: &Self) -> bool { + if self.shape() != other.shape() { + return false; + } + for irow in 0..self.rowcount() { + for icol in 0..self.columncount() { + if self[(irow, icol)] != other[(irow, icol)] { + return false; + } + } + } + true + } +} + +impl AddAssign<&BitMatrix> for BitMatrix { + fn add_assign(&mut self, other: &BitMatrix) { + assert_eq!(self.shape(), other.shape()); + for index in 0..self.rowcount() { + self.row_mut(index).bitxor_assign(&other.row(index)); + } + } +} + +impl Add for &BitMatrix { + type Output = BitMatrix; + + fn add(self, other: Self) -> Self::Output { + let mut clone = (*self).clone(); + clone += other; + clone + } +} + +impl BitXor for &BitMatrix { + type Output = BitMatrix; + + fn bitxor(self, other: Self) -> Self::Output { + self.add(other) + } +} + +impl BitXorAssign<&BitMatrix> for BitMatrix { + fn bitxor_assign(&mut self, other: &BitMatrix) { + self.add_assign(other); + } +} + +impl BitAndAssign<&BitMatrix> for BitMatrix { + fn bitand_assign(&mut self, other: &Self) { + assert_eq!(self.shape(), other.shape()); + for index in 0..self.rowcount() { + self.row_mut(index).bitand_assign(&other.row(index)); + } + } +} + +impl BitAnd for &BitMatrix { + type Output = BitMatrix; + + fn bitand(self, other: Self) -> Self::Output { + let mut clone = (*self).clone(); + clone &= other; + clone + } +} + +impl Mul for &BitMatrix { + type Output = BitMatrix; + + fn mul(self, other: Self) -> Self::Output { + assert_eq!(self.columncount(), other.rowcount()); + + let mut result = BitMatrix::::with_shape(self.rowcount(), other.columncount()); + + for i in 0..self.rowcount() { + for j in 0..other.columncount() { + let mut val = false; + for k in 0..self.columncount() { + val ^= self[[i, k]] && other[[k, j]]; + } + result.set((i, j), val); + } + } + + result + } +} + +impl std::fmt::Display for BitMatrix { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + for row_index in 0..self.rowcount() { + for column_index in 0..self.columncount() { + let value = i32::from(self.get((row_index, column_index))); + write!(f, "{value:?}")?; + } + writeln!(f)?; + } + Ok(()) + } +} + +impl FromStr for BitMatrix { + type Err = usize; + + fn from_str(s: &str) -> Result { + let mut rows = Vec::::new(); + let mut column_count = 0; + for row_string in s.split(&['|', '[', ']', '(', ')', ';', '\n']) { + if !row_string.is_empty() { + let mut res = Vec::::new(); + for char in row_string.chars() { + match char { + '0' | '.' | '▫' | '□' => res.push(false), + '1' | '▪' | '■' => res.push(true), + ' ' | '-' | ',' => {} + _ => return Err(0), + } + } + if !res.is_empty() { + column_count = column_count.max(res.len()); + rows.push(res.into_iter().collect()); + } + } + } + Ok(BitMatrix::from_iter(rows.iter(), column_count)) + } +} + +/// # Panics +/// +/// Should not panic. TODO: refactor so clippy does not complain +pub fn row_stacked<'t, Matrices, const WORD_COUNT: usize>( + matrices: Matrices, +) -> BitMatrix +where + Matrices: IntoIterator>, +{ + let mut buffer = Vec::>::new(); + let mut columncount: Option = None; + let mut rowcount = 0; + for matrix in matrices { + debug_assert!(columncount.is_none() || columncount.unwrap() == matrix.columncount()); + buffer.append(&mut matrix.blocks.clone()); + columncount = Some(matrix.columncount()); + rowcount += matrix.rowcount(); + } + BitMatrix::::from_blocks(buffer, (rowcount, *columncount.get_or_insert(0))) +} + +pub fn directly_summed<'t, Matrices>(matrices: Matrices) -> BitMatrix +where + Matrices: IntoIterator, +{ + let mut rowcount = 0; + let mut columncount = 0; + let vec_matrices = Vec::from_iter(matrices); + for matrix in &vec_matrices { + rowcount += matrix.rowcount(); + columncount += matrix.columncount(); + } + let mut sum = BitMatrix::zeros(rowcount, columncount); + let mut sum_row_offset = 0; + let mut sum_column_offset = 0; + for matrix in &vec_matrices { + for row_index in 0..matrix.rowcount() { + for column_index in 0..matrix.columncount() { + sum.set( + (row_index + sum_row_offset, column_index + sum_column_offset), + matrix[(row_index, column_index)], + ); + } + } + sum_row_offset += matrix.rowcount(); + sum_column_offset += matrix.columncount(); + } + sum +} + +fn pivot_of( + matrix: &BitMatrix, + starting_at: (usize, usize), +) -> (usize, usize) { + let (mut row_index, mut column_index) = starting_at; + if row_index >= matrix.rowcount() || column_index >= matrix.columncount() { + return (row_index, column_index); + } + while !matrix.get((row_index, column_index)) { + row_index += 1; + if row_index == matrix.rowcount() { + column_index += 1; + row_index = starting_at.0; + if column_index == matrix.columncount() { + break; + } + } + } + (row_index, column_index) +} + +struct ReductionData { + column_accessor: BitAccessor, + blocks_per_row: usize, + rowstride: usize, + base_block: *const BitBlock, + from_block: *mut BitBlock, +} + +impl ReductionData { + pub fn for_pivot(pivot: (usize, usize), within: &BitMatrix) -> Self { + let start_block_offset = pivot.1 / BitBlock::::BITS; + let bit_index = pivot.1 % BitBlock::::BITS; + let from_block = unsafe { within.rows.get_unchecked(pivot.0).add(start_block_offset) }; + let base_block = unsafe { within.blocks.as_ptr().add(start_block_offset) }; + let rowstride = within.rowstride(); + + ReductionData { + column_accessor: BitAccessor::for_index(bit_index), + blocks_per_row: rowstride - start_block_offset, + rowstride, + from_block, + base_block, + } + } +} + +fn reduce(matrix: &mut BitMatrix, from: (usize, usize)) { + let data = ReductionData::for_pivot(from, matrix); + let mut to_block = data.from_block; + to_block = reduce_backward_until(data.base_block, to_block, &data); + to_block = unsafe { to_block.add(data.rowstride * matrix.rowcount()) }; + let until_block = unsafe { data.from_block.add(data.rowstride) }; + reduce_backward_until(until_block, to_block, &data); +} + +fn reduce_backward_until( + until_block: *const BitBlock, + mut to_block: *mut BitBlock, + data: &ReductionData, +) -> *mut BitBlock { + while until_block != to_block { + to_block = unsafe { to_block.sub(data.rowstride) }; + let column_value = unsafe { data.column_accessor.array_value_of((*to_block).array()) }; + if column_value { + add_into_block(to_block, data.from_block, data.blocks_per_row); + } + } + to_block +} + +fn add_into_block( + mut to_block: *mut BitBlock, + mut from_block: *const BitBlock, + block_count: usize, +) { + for _ in 0..block_count { + unsafe { + *to_block ^= &*from_block; + to_block = to_block.add(1); + from_block = from_block.add(1); + } + } +} + +/// # Returns +/// Row reduced echelon form R of `matrix` , transformation matrix T and , inverse transpose of T, +/// and row rank profile. +/// T * `matrix` equals R +pub fn rref_with_transforms( + mut matrix: BitMatrix, +) -> ( + BitMatrix, + BitMatrix, + BitMatrix, + Vec, +) { + let num_rows = matrix.rowcount(); + let mut transform = BitMatrix::identity(num_rows); + let mut transform_inv_t = BitMatrix::identity(num_rows); + let mut pivot = pivot_of(&matrix, (0, 0)); + let mut rank_profile = Vec::::with_capacity(matrix.columncount()); + + for row_index in 0..matrix.rowcount() { + if pivot.1 >= matrix.columncount() { + break; + } + + matrix.swap_rows(pivot.0, row_index); + transform_inv_t.swap_rows(pivot.0, row_index); + transform.swap_rows(pivot.0, row_index); + + pivot.0 = row_index; + rank_profile.push(pivot.1); + reduce_with_transforms(&mut matrix, &mut transform, &mut transform_inv_t, pivot); + pivot = pivot_of(&matrix, (pivot.0 + 1, pivot.1 + 1)); + } + (matrix, transform, transform_inv_t, rank_profile) +} + +fn reduce_with_transforms( + matrix: &mut BitMatrix, + transform: &mut BitMatrix, + transform_inv_t: &mut BitMatrix, + from: (usize, usize), +) { + let rowcount = matrix.rowcount(); + for row_index in 0..from.0 { + xor_if_column_with_transforms( + from.1, + matrix, + transform, + transform_inv_t, + row_index, + from.0, + ); + } + for row_index in from.0 + 1..rowcount { + xor_if_column_with_transforms( + from.1, + matrix, + transform, + transform_inv_t, + row_index, + from.0, + ); + } +} + +fn xor_if_column_with_transforms( + column_index: usize, + matrix: &mut BitMatrix, + transform: &mut BitMatrix, + transform_inv_t: &mut BitMatrix, + row_index: usize, + from_row_index: usize, +) { + if matrix[(row_index, column_index)] { + matrix.add_into_row(row_index, from_row_index); + transform.add_into_row(row_index, from_row_index); + transform_inv_t.add_into_row(from_row_index, row_index); + } +} + +pub fn kernel_basis_matrix( + matrix: &BitMatrix, +) -> BitMatrix { + let num_cols = matrix.columncount(); + let mut rr = matrix.clone(); + let rank_profile = rr.echelonize(); + let rank_profile_complement = crate::setwise::complement(&rank_profile, num_cols); + let res_row_count = num_cols - rank_profile.len(); + let mut res = BitMatrix::zeros(res_row_count, num_cols); + for (index, elt) in rank_profile.into_iter().enumerate() { + for (row_pos, col_src) in rank_profile_complement + .iter() + .enumerate() + .take(res_row_count) + { + res.set((row_pos, elt), rr[(index, *col_src)]); + } + } + for (index, position) in rank_profile_complement.into_iter().enumerate() { + res.set((index, position), true); + } + res +} + +pub fn full_rank_row_completion_with_inv( + _matrix: &BitMatrix, +) -> (BitMatrix, BitMatrix) { + // let _num_cols = matrix.columncount(); + // let rr = matrix.clone(); + // let rr2 = matrix.clone(); + // (rr,rr2); + todo!() +} + +impl Bitwise for Column<'_, WORD_COUNT> { + fn weight(&self) -> usize { + self.into_iter().filter(|bit| *bit).count() + } + + fn support(&self) -> impl SortedIterator { + Box::new( + self.into_iter() + .enumerate() + .filter(|pair| pair.1) + .map(|pair| pair.0), + ) + .assume_sorted_by_item() + } + + fn index(&self, index: usize) -> bool { + let block = unsafe { &*self.rows[index].add(self.block_index) }; + self.accessor.array_value_of(block.array()) + } +} + +impl Dot for Column<'_, WORD_COUNT> { + fn dot(&self, other: &Self) -> bool { + assert_eq!(self.rows.len(), other.rows.len()); + let mut result = false; + for index in 0..self.rows.len() { + result ^= self.index(index) & other.index(index); + } + result + } +} + +impl OverlapWeight for Column<'_, WORD_COUNT> { + fn and_weight(&self, other: &Self) -> usize { + assert_eq!(self.rows.len(), other.rows.len()); + let mut result = 0usize; + for index in 0..self.rows.len() { + if self.index(index) & other.index(index) { + result += 1; + } + } + result + } + + fn or_weight(&self, other: &Self) -> usize { + assert_eq!(self.rows.len(), other.rows.len()); + let mut result = 0usize; + for index in 0..self.rows.len() { + if self.index(index) | other.index(index) { + result += 1; + } + } + result + } +} + +impl PartialEq for Column<'_, WORD_COUNT> { + fn eq(&self, other: &Self) -> bool { + if self.rows.len() != other.rows.len() { + return false; + } + for index in 0..self.rows.len() { + if self.index(index) != other.index(index) { + return false; + } + } + true + } +} + +impl Eq for Column<'_, WORD_COUNT> {} + +impl Column<'_, WORD_COUNT> { + #[must_use] + pub fn slice(&self, range: Range) -> Self { + Column { + rows: &self.rows[range], + accessor: self.accessor.clone(), + block_index: self.block_index, + } + } + + #[must_use] + pub fn len(&self) -> usize { + self.rows.len() + } + + #[must_use] + pub fn is_empty(&self) -> bool { + self.len() == 0 + } +} + +// impl<'life,const WORD_COUNT: usize> IntoIterator for Column<'life,WORD_COUNT> { +// type Item = bool; +// type IntoIter = ColumnIterator<'life,WORD_COUNT>; +// fn into_iter(self) -> Self::IntoIter { +// ColumnIterator { +// column: self, +// row_index: 0, +// } +// } +// } + +impl<'life, const WORD_COUNT: usize> IntoIterator for &'life Column<'_, WORD_COUNT> { + type Item = bool; + type IntoIter = ColumnIterator<'life, WORD_COUNT>; + fn into_iter(self) -> Self::IntoIter { + ColumnIterator { + column: self, + row_index: 0, + } + } +} + +impl Column<'_, WORD_COUNT> { + #[must_use] + pub fn iter(&self) -> ColumnIterator<'_, WORD_COUNT> { + <&Self as IntoIterator>::into_iter(self) + } +} + +pub struct ColumnIterator<'life, const WORD_COUNT: usize = WORD_COUNT_DEFAULT> { + column: &'life Column<'life, WORD_COUNT>, + row_index: usize, +} + +impl Iterator for ColumnIterator<'_, WORD_COUNT> { + type Item = bool; + + fn next(&mut self) -> Option { + if self.row_index >= self.column.rows.len() { + return None; + } + let output = self.column.index(self.row_index); + self.row_index += 1; + Some(output) + } +} + +impl NeutralElement for Column<'_, WORD_COUNT> { + type NeutralElementType = BitVec; + + fn neutral_element(&self) -> Self::NeutralElementType { + BitVec::::zeros(self.rows.len()) + } + + fn default_size_neutral_element() -> Self::NeutralElementType { + Self::NeutralElementType::default_size_neutral_element() + } + + fn neutral_element_of_size(size: usize) -> Self::NeutralElementType { + Self::NeutralElementType::neutral_element_of_size(size) + } +} + +impl BitwiseNeutralElement for Column<'_, WORD_COUNT> {} + +impl<'life, const WORD_COUNT: usize> BitwiseBinaryOps> + for BitVec +{ + fn assign(&mut self, other: &Column<'life, WORD_COUNT>) { + for (index, val) in other.into_iter().enumerate() { + self.assign_index(index, val); + } + } + + fn bitxor_assign(&mut self, other: &Column<'life, WORD_COUNT>) { + for (index, val) in other.into_iter().enumerate() { + if val { + self.negate_index(index); + } + } + } + + fn bitand_assign(&mut self, other: &Column<'life, WORD_COUNT>) { + for (index, val) in other.into_iter().enumerate() { + if !val { + self.assign_index(index, false); + } + } + } +} + +impl<'life1, const WORD_COUNT_1: usize, const WORD_COUNT_2: usize> + BitwiseBinaryOps> for MutableBitView<'_, WORD_COUNT_2> +{ + fn assign(&mut self, other: &Column<'life1, WORD_COUNT_1>) { + for (index, val) in other.into_iter().enumerate() { + self.assign_index(index, val); + } + } + + fn bitxor_assign(&mut self, other: &Column<'life1, WORD_COUNT_1>) { + for (index, val) in other.into_iter().enumerate() { + if val { + self.negate_index(index); + } + } + } + + fn bitand_assign(&mut self, other: &Column<'life1, WORD_COUNT_1>) { + for (index, val) in other.into_iter().enumerate() { + if !val { + self.assign_index(index, false); + } + } + } +} + +pub fn is_zero_padded_identity(row_iterator: impl ExactSizeIterator) -> bool { + row_iterator + .into_iter() + .enumerate() + .all(|(row_index, row)| row.is_one_bit(row_index)) +} + +pub fn is_zero_padded_symmetric<'life, const WORD_COUNT: usize>( + row_iterator: impl ExactSizeIterator>, + column_count: usize, +) -> bool { + let matrix = BitMatrix::from_row_iter(row_iterator, column_count); + matrix == matrix.transposed() +} + +pub fn are_zero_rows(mut row_iterator: impl Iterator) -> bool { + row_iterator.all(|row| row.is_zero()) +} diff --git a/source/paulimer/src/bits/bitvec.rs b/source/paulimer/src/bits/bitvec.rs new file mode 100644 index 0000000000..4ece6001fd --- /dev/null +++ b/source/paulimer/src/bits/bitvec.rs @@ -0,0 +1,527 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use crate::bits::bitblock::{BitBlock, Word}; +use crate::bits::bitview::{BitView, MutableBitView}; +use crate::bits::index_set::IndexSet; +use crate::bits::{Bitwise, BitwiseBinaryOps, Dot, IndexAssignable, OverlapWeight}; +use crate::NeutralElement; + +use super::standard_types::{BitIterator, BitsPerBlock}; +use super::{are_supports_equal, BorrowAsBitIterator}; +use super::{BitwiseNeutralElement, FromBits}; + +pub const WORD_COUNT_DEFAULT: usize = 8usize; + +pub fn block_count(length: usize, bits_per_block: usize) -> usize { + let mut block_count = length / bits_per_block; + if !length.is_multiple_of(bits_per_block) { + block_count += 1; + } + block_count +} + +#[must_use] +#[derive(Eq, Clone, Debug)] +pub struct BitVec { + pub(crate) blocks: Vec<[Word; WORD_COUNT]>, +} + +impl std::hash::Hash for BitVec { + fn hash(&self, state: &mut H) { + self.blocks.hash(state); + } +} + +impl BitVec { + const fn bits_per_block() -> usize { + <[Word; WORD_COUNT] as BitsPerBlock>::BITS_PER_BLOCK + } + + pub fn of_length(length: usize) -> BitVec { + Self::zeros(length) + } + + pub fn zeros(length: usize) -> BitVec { + BitVec { + blocks: vec![[0; WORD_COUNT]; block_count(length, Self::bits_per_block())], + } + } + + #[must_use] + pub fn top(&self) -> u64 { + self.blocks[0][0] + } + + pub fn top_mut(&mut self) -> &mut u64 { + &mut self.blocks[0][0] + } + + pub fn from_view( + view: &BitView, + ) -> BitVec { + BitVec:: { + blocks: view.blocks.to_vec(), + } + } + + pub fn from_view_mut( + view: &MutableBitView, + ) -> BitVec { + BitVec:: { + blocks: view.blocks.to_vec(), + } + } + + pub fn selected_from<'life, Iterable, const WORD_COUNT_IN: usize>( + view: &'life BitView, + support: Iterable, + ) -> BitVec + where + Iterable: IntoIterator, + Iterable::IntoIter: ExactSizeIterator, + { + let support_iterator = support.into_iter(); + let mut bits = BitVec::::of_length(support_iterator.len()); + for index in support_iterator { + bits.assign_index(*index, view.index(*index)); + } + bits + } + + #[must_use] + pub fn as_view(&self) -> BitView<'_, WORD_COUNT> { + BitView { + blocks: &self.blocks, + } + } + + pub fn as_view_mut(&mut self) -> MutableBitView<'_, WORD_COUNT> { + MutableBitView { + blocks: &mut self.blocks, + } + } + + #[must_use] + pub fn len(&self) -> usize { + self.blocks.len() * <[Word; WORD_COUNT] as BitsPerBlock>::BITS_PER_BLOCK + } + + #[must_use] + pub fn is_empty(&self) -> bool { + self.blocks.len() == 0 + } +} + +// Bit traits : Unary + +macro_rules! blocks_neutral_element_body { + () => { + type NeutralElementType = BitVec; + + fn neutral_element(&self) -> ::NeutralElementType { + BitVec:: { + blocks: self.blocks.neutral_element(), + } + } + + fn default_size_neutral_element() -> ::NeutralElementType { + BitVec::::zeros(0) + } + + fn neutral_element_of_size(size: usize) -> ::NeutralElementType { + BitVec::::zeros(size) + } + }; +} + +impl NeutralElement for BitVec { + blocks_neutral_element_body!(); +} + +impl NeutralElement for MutableBitView<'_, WORD_COUNT> { + blocks_neutral_element_body!(); +} + +impl NeutralElement for BitView<'_, WORD_COUNT> { + blocks_neutral_element_body!(); +} + +impl BitwiseNeutralElement for BitVec {} +impl BitwiseNeutralElement for MutableBitView<'_, WORD_COUNT> {} +impl BitwiseNeutralElement for BitView<'_, WORD_COUNT> {} + +macro_rules! blocks_bitwise_body { + () => { + fn index(&self, index: usize) -> bool { + self.blocks.index(index) + } + + fn support(&self) -> impl sorted_iter::SortedIterator { + self.blocks.support() + } + + fn weight(&self) -> usize { + self.blocks.weight() + } + + fn parity(&self) -> bool { + self.blocks.parity() + } + + fn is_zero(&self) -> bool { + self.blocks.is_zero() + } + }; +} + +impl Bitwise for BitVec { + blocks_bitwise_body!(); +} + +impl Bitwise for MutableBitView<'_, WORD_COUNT> { + blocks_bitwise_body!(); +} + +impl Bitwise for BitView<'_, WORD_COUNT> { + blocks_bitwise_body!(); +} + +impl Bitwise for BitBlock { + blocks_bitwise_body!(); +} + +impl Bitwise for &BitBlock { + blocks_bitwise_body!(); +} + +impl Bitwise for &mut BitBlock { + blocks_bitwise_body!(); +} + +macro_rules! blocks_index_assignable_body { + () => { + fn assign_index(&mut self, index: usize, to: bool) { + self.blocks.assign_index(index, to) + } + + fn negate_index(&mut self, index: usize) { + self.blocks.negate_index(index) + } + + fn clear_bits(&mut self) { + self.blocks.clear_bits() + } + }; +} + +impl IndexAssignable for BitVec { + blocks_index_assignable_body!(); +} + +impl IndexAssignable for MutableBitView<'_, WORD_COUNT> { + blocks_index_assignable_body!(); +} + +impl IndexAssignable for &mut BitBlock { + blocks_index_assignable_body!(); +} + +impl IndexAssignable for BitBlock { + blocks_index_assignable_body!(); +} + +macro_rules! borrow_as_bit_iterator_body { + () => { + type BitIterator<'life1> + = BitIterator<'life1> + where + Self: 'life1; + fn borrow_as_bit_iterator(&self) -> Self::BitIterator<'_> { + self.blocks.borrow_as_bit_iterator() + } + }; +} + +impl BorrowAsBitIterator for BitVec { + borrow_as_bit_iterator_body!(); +} + +impl BorrowAsBitIterator for BitBlock { + borrow_as_bit_iterator_body!(); +} + +impl BorrowAsBitIterator for &BitBlock { + borrow_as_bit_iterator_body!(); +} + +impl BorrowAsBitIterator for &mut BitBlock { + borrow_as_bit_iterator_body!(); +} + +impl BorrowAsBitIterator for MutableBitView<'_, WORD_COUNT> { + borrow_as_bit_iterator_body!(); +} + +impl BorrowAsBitIterator for BitView<'_, WORD_COUNT> { + borrow_as_bit_iterator_body!(); +} + +// Bit traits : Binary + +macro_rules! blocks_bitwise_binary_ops_body { + ($other_type:ty) => { + fn assign(&mut self, other: &$other_type) { + self.blocks.assign(&other.blocks) + } + + fn bitxor_assign(&mut self, other: &$other_type) { + self.blocks.bitxor_assign(&other.blocks) + } + + fn bitand_assign(&mut self, other: &$other_type) { + self.blocks.bitand_assign(&other.blocks) + } + }; +} + +macro_rules! blocks_bitwise_binary_ops_refs { + ($other_type:ty,$vec_type:ty) => { + impl BitwiseBinaryOps<$other_type> for $vec_type { + blocks_bitwise_binary_ops_body!($other_type); + } + }; +} + +macro_rules! blocks_bitwise_binary_ops { + ($vec_type:ty) => { + blocks_bitwise_binary_ops_refs!(BitVec, $vec_type); + blocks_bitwise_binary_ops_refs!(BitView<'_, WORD_COUNT>, $vec_type); + blocks_bitwise_binary_ops_refs!(MutableBitView<'_, WORD_COUNT>, $vec_type); + }; +} + +blocks_bitwise_binary_ops!(BitVec); +blocks_bitwise_binary_ops!(MutableBitView<'_, WORD_COUNT>); + +macro_rules! bitblock_bitwise_binary_ops { + ($bitblock_type:ty) => { + blocks_bitwise_binary_ops_refs!(BitBlock, $bitblock_type); + blocks_bitwise_binary_ops_refs!(&BitBlock, $bitblock_type); + blocks_bitwise_binary_ops_refs!(&mut BitBlock, $bitblock_type); + }; +} + +bitblock_bitwise_binary_ops!(BitBlock); +bitblock_bitwise_binary_ops!(&mut BitBlock); + +macro_rules! blocks_dot_body { + ($other_type:ty) => { + fn dot(&self, other: &$other_type) -> bool { + self.blocks.dot(&other.blocks) + } + }; +} + +macro_rules! blocks_overlap_weight_body { + ($other_type:ty) => { + fn and_weight(&self, other: &$other_type) -> usize { + self.blocks.and_weight(&other.blocks) + } + + fn or_weight(&self, other: &$other_type) -> usize { + self.blocks.or_weight(&other.blocks) + } + }; +} + +macro_rules! bitblock_dot_refs { + ($other_type:ty,$bitblock_type:ty) => { + impl Dot<$other_type> for $bitblock_type { + blocks_dot_body!($other_type); + } + + impl OverlapWeight<$other_type> for $bitblock_type { + blocks_overlap_weight_body!($other_type); + } + }; +} + +macro_rules! blocks_dot { + ($vec_type:ty) => { + bitblock_dot_refs!(BitVec, $vec_type); + bitblock_dot_refs!(BitView<'_, WORD_COUNT>, $vec_type); + bitblock_dot_refs!(MutableBitView<'_, WORD_COUNT>, $vec_type); + }; +} + +blocks_dot!(BitVec); +blocks_dot!(BitView<'_, WORD_COUNT>); +blocks_dot!(MutableBitView<'_, WORD_COUNT>); + +macro_rules! bitblock_dot { + ($bitblock_type:ty) => { + bitblock_dot_refs!(BitBlock, $bitblock_type); + bitblock_dot_refs!(&BitBlock, $bitblock_type); + bitblock_dot_refs!(&mut BitBlock, $bitblock_type); + }; +} + +bitblock_dot!(BitBlock); +bitblock_dot!(&BitBlock); +bitblock_dot!(&mut BitBlock); + +// Standard traits + +impl FromIterator for BitVec { + fn from_iter>(iterator: Iterator) -> Self { + let mut blocks = vec![]; + let mut iterator = iterator.into_iter(); + + // Note: once `Iterator::array_chunks` is stabilized, we can use that instead. + loop { + let mut block = [0 as Word; WORD_COUNT]; + for index in 0..Self::bits_per_block() { + match iterator.next() { + Some(bit) => block.assign_index(index, bit), + None if index == 0 => return BitVec { blocks }, + None => { + blocks.push(block); + return BitVec { blocks }; + } + } + } + blocks.push(block); + } + } +} + +macro_rules! blocks_partial_eq_body { + ($other_type:ty) => { + fn eq(&self, other: &$other_type) -> bool { + self.blocks == other.blocks + } + }; +} + +macro_rules! blocks_partial_eq_body_bool { + ($other_type:ty) => { + fn eq(&self, other: &$other_type) -> bool { + are_supports_equal(self, other) + } + }; +} + +macro_rules! blocks_partial_eq_vec_bool { + ($vec_bool:ty,$vec_type:ty) => { + impl PartialEq<$vec_bool> for $vec_type { + blocks_partial_eq_body_bool!($vec_bool); + } + + impl PartialEq<$vec_type> for $vec_bool { + blocks_partial_eq_body_bool!($vec_type); + } + }; +} + +macro_rules! blocks_partial_eq { + ($vec_type:ty) => { + impl PartialEq> for $vec_type { + blocks_partial_eq_body!(BitVec); + } + + impl PartialEq> for $vec_type { + blocks_partial_eq_body!(MutableBitView<'_, WORD_COUNT>); + } + + impl PartialEq> for $vec_type { + blocks_partial_eq_body!(BitView<'_, WORD_COUNT>); + } + + impl PartialEq for $vec_type { + blocks_partial_eq_body_bool!(IndexSet); + } + + blocks_partial_eq_vec_bool!(Vec, $vec_type); + blocks_partial_eq_vec_bool!(&[bool], $vec_type); + blocks_partial_eq_vec_bool!(&mut [bool], $vec_type); + }; +} + +blocks_partial_eq!(BitVec); +blocks_partial_eq!(MutableBitView<'_, WORD_COUNT>); +blocks_partial_eq!(BitView<'_, WORD_COUNT>); + +macro_rules! bitblocks_partial_eq { + ($vec_type:ty) => { + impl PartialEq for $vec_type { + blocks_partial_eq_body_bool!(IndexSet); + } + + blocks_partial_eq_vec_bool!(Vec, $vec_type); + blocks_partial_eq_vec_bool!(&[bool], $vec_type); + blocks_partial_eq_vec_bool!(&mut [bool], $vec_type); + }; +} + +bitblocks_partial_eq!(BitBlock); +bitblocks_partial_eq!(&mut BitBlock); +bitblocks_partial_eq!(&BitBlock); + +macro_rules! blocks_into_iterator_body { + () => { + type Item = bool; + type IntoIter = BitIterator<'life>; + fn into_iter(self) -> Self::IntoIter { + self.blocks.borrow_as_bit_iterator() + } + }; +} + +impl<'life, const WORD_COUNT: usize> IntoIterator for &'life BitVec { + blocks_into_iterator_body!(); +} + +impl<'life, const WORD_COUNT: usize> IntoIterator for &'life MutableBitView<'_, WORD_COUNT> { + blocks_into_iterator_body!(); +} + +impl<'life, const WORD_COUNT: usize> IntoIterator for &'life BitView<'_, WORD_COUNT> { + blocks_into_iterator_body!(); +} + +impl BitVec { + #[must_use] + pub fn iter(&self) -> BitIterator<'_> { + <&Self as IntoIterator>::into_iter(self) + } +} + +impl BitView<'_, WORD_COUNT> { + #[must_use] + pub fn iter(&self) -> BitIterator<'_> { + <&Self as IntoIterator>::into_iter(self) + } +} + +impl MutableBitView<'_, WORD_COUNT> { + #[must_use] + pub fn iter(&self) -> BitIterator<'_> { + <&Self as IntoIterator>::into_iter(self) + } +} + +impl< + Other: BorrowAsBitIterator + Bitwise, + T: NeutralElement + IndexAssignable + BorrowAsBitIterator, + > FromBits for T +{ + fn from_bits(other: &Other) -> Self { + let iter = other.borrow_as_bit_iterator(); + let mut res = Self::neutral_element_of_size(iter.len()); + for index in other.support() { + res.assign_index(index, true); + } + res + } +} diff --git a/source/paulimer/src/bits/bitview.rs b/source/paulimer/src/bits/bitview.rs new file mode 100644 index 0000000000..1e8a0ccdcb --- /dev/null +++ b/source/paulimer/src/bits/bitview.rs @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use super::bitvec::WORD_COUNT_DEFAULT; +use super::standard_types::BitsPerBlock; +use super::BitVec; +use crate::bits::bitblock::Word; + +#[derive(Eq, Hash)] +pub struct BitView<'life, const WORD_COUNT: usize = WORD_COUNT_DEFAULT> { + pub blocks: &'life [[Word; WORD_COUNT]], +} + +// Should we use convention Mutable or Mutable ? +#[derive(Eq, Hash)] +pub struct MutableBitView<'life, const WORD_COUNT: usize = WORD_COUNT_DEFAULT> { + pub blocks: &'life mut [[Word; WORD_COUNT]], +} + +impl BitView<'_, WORD_COUNT> { + #[must_use] + pub fn len(&self) -> usize { + self.blocks.len() * <[Word; WORD_COUNT]>::BITS_PER_BLOCK + } + + #[must_use] + pub fn is_empty(&self) -> bool { + self.blocks.len() == 0 + } + + #[must_use] + pub fn top(&self) -> u64 { + self.blocks[0][0] + } +} + +impl MutableBitView<'_, WORD_COUNT> { + #[must_use] + pub fn len(&self) -> usize { + self.blocks.len() * <[Word; WORD_COUNT]>::BITS_PER_BLOCK + } + + #[must_use] + pub fn is_empty(&self) -> bool { + self.blocks.len() == 0 + } + + #[must_use] + pub fn top(&self) -> u64 { + self.blocks[0][0] + } + + pub fn top_mut(&mut self) -> &mut u64 { + &mut self.blocks[0][0] + } +} + +impl<'life, const WORD_COUNT: usize> From> for BitVec { + fn from(value: BitView<'life, WORD_COUNT>) -> Self { + Self::from_view(&value) + } +} + +impl<'life, const WORD_COUNT: usize> From<&'life BitVec> for BitVec { + fn from(value: &'life BitVec) -> Self { + value.clone() + } +} + +impl<'life, const WORD_COUNT: usize> From> + for BitVec +{ + fn from(value: MutableBitView<'life, WORD_COUNT>) -> Self { + Self::from_view_mut(&value) + } +} diff --git a/source/paulimer/src/bits/index_set.rs b/source/paulimer/src/bits/index_set.rs new file mode 100644 index 0000000000..0ddd108abc --- /dev/null +++ b/source/paulimer/src/bits/index_set.rs @@ -0,0 +1,240 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use super::{BitVec, BitwiseNeutralElement, BorrowAsBitIterator, FromBits, OverlapWeight}; +use crate::bits::{are_supports_equal, Bitwise, BitwiseBinaryOps, Dot, IndexAssignable}; +use crate::NeutralElement; +use sorted_iter::{assume::AssumeSortedByItemExt, SortedIterator}; +use sorted_vec::SortedSet; + +#[must_use] +#[derive(PartialEq, Eq, Clone, Debug, Hash)] +pub struct IndexSet { + indexes: SortedSet, +} + +impl IndexSet { + pub fn new() -> IndexSet { + IndexSet { + indexes: SortedSet::new(), + } + } + + pub fn singleton(value: usize) -> Self { + IndexSet { + indexes: unsafe { SortedSet::from_sorted(vec![value]) }, + } + } +} + +impl Default for IndexSet { + fn default() -> Self { + Self::new() + } +} + +impl FromIterator for IndexSet { + fn from_iter>(iterator: Iterator) -> Self { + let indexes = SortedSet::from_unsorted(iterator.into_iter().collect()); + IndexSet { indexes } + } +} + +impl IntoIterator for IndexSet { + type Item = usize; + type IntoIter = std::vec::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.indexes.into_vec().into_iter() + } +} + +impl Bitwise for IndexSet { + fn index(&self, index: usize) -> bool { + self.indexes.contains(&index) + } + + fn weight(&self) -> usize { + self.indexes.len() + } + + fn support(&self) -> impl SortedIterator { + self.indexes.iter().copied().assume_sorted_by_item() + } +} + +impl BitwiseBinaryOps for IndexSet { + fn assign(&mut self, other: &Bits) { + let indexes: Vec = other.support().collect(); + self.indexes = indexes.into(); + } + + fn bitxor_assign(&mut self, other: &Bits) { + for index in other.support() { + let found = self.indexes.find_or_insert(index); + if found.is_found() { + self.indexes.remove_index(found.index()); + } + } + } + + fn bitand_assign(&mut self, other: &Bits) { + let self_support = self.indexes.iter().copied().assume_sorted_by_item(); + let other_support = other.support(); + let indexes: Vec = self_support.intersection(other_support).collect(); + self.indexes = indexes.into(); + } +} + +impl IndexAssignable for IndexSet { + fn assign_index(&mut self, index: usize, to: bool) { + if to { + self.indexes.push(index); + } else { + self.indexes.remove_item(&index); + } + } + + fn negate_index(&mut self, index: usize) { + if self.indexes.contains(&index) { + self.indexes.remove_item(&index); + } else { + self.indexes.push(index); + } + } + + fn clear_bits(&mut self) { + self.indexes.clear(); + } +} + +impl Dot for IndexSet { + fn dot(&self, other: &Bits) -> bool { + debug_assert!(is_sorted(self.support())); + debug_assert!(is_sorted(other.support())); + let mut res = false; + for index in self.support() { + res ^= other.index(index); + } + res + } +} + +impl Dot for T { + fn dot(&self, other: &IndexSet) -> bool { + other.dot(self) + } +} + +impl OverlapWeight for IndexSet { + fn and_weight(&self, other: &Bits) -> usize { + let mut res = 0usize; + for index in self.support() { + if other.index(index) { + res += 1; + } + } + res + } + + fn or_weight(&self, other: &Bits) -> usize { + self.weight() + other.weight() - self.and_weight(other) + } +} + +impl OverlapWeight for T { + fn and_weight(&self, other: &IndexSet) -> usize { + other.and_weight(self) + } + + fn or_weight(&self, other: &IndexSet) -> usize { + other.or_weight(self) + } +} + +fn is_sorted>(items: Items) -> bool { + items.into_iter().is_sorted() +} + +impl BitwiseBinaryOps for T { + #[allow(clippy::explicit_iter_loop)] + fn assign(&mut self, other: &IndexSet) { + self.clear_bits(); + for index in other.indexes.iter() { + self.assign_index(*index, true); + } + } + + fn bitxor_assign(&mut self, other: &IndexSet) { + for index in other.support() { + self.negate_index(index); + } + } + + fn bitand_assign(&mut self, other: &IndexSet) { + let intersection: Vec = self.support().intersection(other.support()).collect(); + self.clear_bits(); + for k in intersection { + self.assign_index(k, true); + } + } +} + +impl PartialEq for IndexSet { + fn eq(&self, other: &T) -> bool { + are_supports_equal(self, other) + } +} + +impl FromBits for IndexSet { + fn from_bits(other: &Other) -> Self { + IndexSet { + indexes: other.support().collect::>().into(), + } + } +} + +impl NeutralElement for IndexSet { + type NeutralElementType = IndexSet; + + fn neutral_element(&self) -> Self::NeutralElementType { + IndexSet::new() + } + + fn default_size_neutral_element() -> Self::NeutralElementType { + IndexSet::new() + } + + fn neutral_element_of_size(_size: usize) -> Self::NeutralElementType { + IndexSet::new() + } +} + +impl BitwiseNeutralElement for IndexSet {} + +impl<'life, const WORD_COUNT: usize> From<&'life BitVec> for IndexSet { + fn from(value: &'life BitVec) -> Self { + unsafe { + IndexSet { + indexes: SortedSet::from_sorted(value.support().collect::>()), + } + } + } +} + +pub fn remapped(bits: &IndexSet, support: &[usize]) -> IndexSet { + bits.support().map(|id| support[id]).collect() +} + +impl From for IndexSet +where + T: SortedIterator, +{ + fn from(value: T) -> Self { + unsafe { + IndexSet { + indexes: SortedSet::from_sorted(value.collect::>()), + } + } + } +} diff --git a/source/paulimer/src/bits/standard_types.rs b/source/paulimer/src/bits/standard_types.rs new file mode 100644 index 0000000000..21fc02182a --- /dev/null +++ b/source/paulimer/src/bits/standard_types.rs @@ -0,0 +1,1439 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use super::{ + Bitwise, BitwiseBinaryOps, BitwiseNeutralElement, BorrowAsBitIterator, Dot, IndexAssignable, + OverlapWeight, +}; +use crate::bits::bitvec::block_count; +use crate::NeutralElement; +use sorted_iter::{assume::AssumeSortedByItemExt, SortedIterator}; + +// Helper functions + +// TODO: See of ToOwned and Borrow, BorrowMut traits can be used instead of RefsAndValues and RefsMut + +pub fn support_iterator(iter: impl Iterator) -> impl SortedIterator { + iter.enumerate() + .filter(|pair| pair.1) + .map(|pair| pair.0) + .assume_sorted_by_item() +} + +pub struct ExactZipIter { + iter1: U, + iter2: V, +} + +impl Iterator for ExactZipIter { + type Item = (U::Item, V::Item); + + fn next(&mut self) -> Option { + let i1 = self.iter1.next(); + let i2 = self.iter2.next(); + match (i1, i2) { + (None, None) => None, + (None, Some(_)) => panic!("Iterators of different length. The second one is longer."), + (Some(_), None) => panic!("Iterators of different length. The first one is longer"), + (Some(a), Some(b)) => Some((a, b)), + } + } +} + +pub fn exact_zip(iter1: U, iter2: V) -> ExactZipIter { + ExactZipIter { iter1, iter2 } +} + +pub fn are_sorted_iter_equal( + iterator1: impl SortedIterator, + iterator2: impl SortedIterator, +) -> bool { + let mut iter1 = iterator1; + let mut iter2 = iterator2; + let mut i1 = iter1.next(); + let mut i2 = iter2.next(); + loop { + match (i1, i2) { + (None, None) => return true, + (None, Some(_)) | (Some(_), None) => return false, + (Some(val1), Some(val2)) => { + if val1 != val2 { + return false; + } + } + } + i1 = iter1.next(); + i2 = iter2.next(); + } +} + +pub fn are_supports_equal(bitwise1: &impl Bitwise, bitwise2: &impl Bitwise) -> bool { + are_sorted_iter_equal(bitwise1.support(), bitwise2.support()) +} + +// Uniform refs and values + +pub trait RefsAndValues { + type Ref<'life> + where + Self: 'life; + type Value; + + fn value(&self) -> Self::Value; + fn as_ref(&self) -> Self::Ref<'_>; +} + +pub trait MutRefs { + type MutRef<'life> + where + Self: 'life; + fn as_ref_mut(&mut self) -> Self::MutRef<'_>; +} + +pub trait BitsPerBlock { + const BITS_PER_BLOCK: usize; +} + +pub trait IntoBitUIntIterator +where + Self: Sized, +{ + type BitUIntIterator: Iterator; + type BitUIntSliceIterator<'life>: Iterator + where + Self: 'life; + fn from_value(value: Self) -> Self::BitUIntIterator; + fn from_slice(slice: &[Self]) -> Self::BitUIntSliceIterator<'_>; +} + +pub trait UnsignedIntTag {} + +pub trait UnsignedIntArrayTag {} + +macro_rules! refs_and_values_body_val { + ($type:ty) => { + type Ref<'life> = &'life $type; + type Value = $type; + + #[inline] + fn value(&self) -> Self::Value { + *self + } + + #[inline] + fn as_ref(&self) -> Self::Ref<'_> { + self + } + }; +} + +macro_rules! refs_and_values_body_ref { + ($type:ty) => { + type Ref<'life> + = &'life $type + where + Self: 'life; + type Value = $type; + + #[inline] + fn value(&self) -> Self::Value { + **self + } + + #[inline] + fn as_ref(&self) -> Self::Ref<'_> { + *self + } + }; +} + +macro_rules! mut_ref_body { + ($type:ty) => { + type MutRef<'life> + = &'life mut $type + where + Self: 'life; + + #[inline] + fn as_ref_mut(&mut self) -> Self::MutRef<'_> { + self + } + }; +} + +macro_rules! bits_per_block_body_uint { + ($type:ty) => { + const BITS_PER_BLOCK: usize = <$type>::BITS as usize; + }; +} + +macro_rules! bits_per_block_body_uint_arr { + ($type:ty) => { + const BITS_PER_BLOCK: usize = (<$type>::BITS as usize) * WORD_COUNT; + }; +} + +macro_rules! refs_and_values { + ($type:ty) => { + impl RefsAndValues for $type { + refs_and_values_body_val!($type); + } + impl RefsAndValues for &$type { + refs_and_values_body_ref!($type); + } + impl RefsAndValues for &mut $type { + refs_and_values_body_ref!($type); + } + + impl UnsignedIntTag for $type {} + + impl MutRefs for $type { + mut_ref_body!($type); + } + impl MutRefs for &mut $type { + mut_ref_body!($type); + } + impl BitsPerBlock for $type { + bits_per_block_body_uint!($type); + } + impl BitsPerBlock for &$type { + bits_per_block_body_uint!($type); + } + impl BitsPerBlock for &mut $type { + bits_per_block_body_uint!($type); + } + }; +} + +macro_rules! refs_and_values_arrays { + ($type:ty) => { + impl UnsignedIntArrayTag for [$type; WORD_COUNT] {} + + impl RefsAndValues for [$type; WORD_COUNT] { + refs_and_values_body_val!([$type; WORD_COUNT]); + } + impl RefsAndValues for &[$type; WORD_COUNT] { + refs_and_values_body_ref!([$type; WORD_COUNT]); + } + impl RefsAndValues for &mut [$type; WORD_COUNT] { + refs_and_values_body_ref!([$type; WORD_COUNT]); + } + impl MutRefs for [$type; WORD_COUNT] { + mut_ref_body!([$type; WORD_COUNT]); + } + impl MutRefs for &mut [$type; WORD_COUNT] { + mut_ref_body!([$type; WORD_COUNT]); + } + impl BitsPerBlock for [$type; WORD_COUNT] { + bits_per_block_body_uint_arr!($type); + } + impl BitsPerBlock for &[$type; WORD_COUNT] { + bits_per_block_body_uint_arr!($type); + } + impl BitsPerBlock for &mut [$type; WORD_COUNT] { + bits_per_block_body_uint_arr!($type); + } + }; +} + +refs_and_values!(u16); +refs_and_values!(u32); +refs_and_values!(u64); +refs_and_values!(u128); +refs_and_values_arrays!(u16); +refs_and_values_arrays!(u32); +refs_and_values_arrays!(u64); +refs_and_values_arrays!(u128); + +// Bit traits for unsigned ints + +macro_rules! bit_iterator_for_unsigned_int { + ($name:ident, $word_type:ty) => { + pub struct $name { + word_mask: $word_type, + word: $word_type, + } + + impl $name { + #[must_use] + pub fn from_bits(word: &$word_type) -> $name { + $name { + word_mask: 1 as $word_type, + word: *word, + } + } + } + + impl Iterator for $name { + type Item = bool; + + fn next(&mut self) -> Option { + if self.word_mask != 0 { + let value = self.word & self.word_mask == self.word_mask; + self.word_mask <<= 1; + Some(value) + } else { + None + } + } + + fn size_hint(&self) -> (usize, Option) { + let size = <$word_type>::BITS as usize; + (size, Some(size)) + } + } + + impl ExactSizeIterator for $name { + fn len(&self) -> usize { + <$word_type>::BITS as usize + } + } + }; +} + +macro_rules! bitwise_for_unsigned_int { + ($word_type:ty) => { + impl Bitwise for $word_type { + #[inline] + fn index(&self, index: usize) -> bool { + assert!(index < (::Value::BITS as usize)); + let mask = (1 as ::Value) << index; + mask & *self.as_ref() == mask + } + + #[inline] + fn support(&self) -> impl sorted_iter::SortedIterator { + support_iterator(self.borrow_as_bit_iterator()) + } + + #[inline] + fn weight(&self) -> usize { + self.as_ref().count_ones() as usize + } + + #[inline] + fn parity(&self) -> bool { + self.as_ref().count_ones() & 1 == 1 + } + + #[inline] + fn is_zero(&self) -> bool { + *self.as_ref() == (0 as ::Value) + } + } + + impl BorrowAsBitIterator for $word_type { + type BitIterator<'life> + = <::Value as IntoBitUIntIterator>::BitUIntIterator + where + Self: 'life; + fn borrow_as_bit_iterator(&self) -> Self::BitIterator<'_> { + <::Value as IntoBitUIntIterator>::from_value((*self).value()) + } + } + }; +} + +// impl IntoBitIterator for &mut [u64;WORD_COUNT] { +// type BitIterator<'life> = ::BitUIntSliceIterator<'life> where Self:'life; + +// fn into_bit_iterator(&self) -> Self::BitIterator<'_> { +// ::from_slice(self.as_slice()) +// } +// } + +macro_rules! dot_for_unsigned_int { + ($word_type1:ty, $word_type2:ty) => { + impl Dot<$word_type1> for $word_type2 { + #[inline] + fn dot(&self, other: &$word_type1) -> bool { + (*self.as_ref() & *other.as_ref()).count_ones() & 1 == 1 + } + } + + impl OverlapWeight<$word_type1> for $word_type2 { + #[inline] + fn and_weight(&self, other: &$word_type1) -> usize { + (*self.as_ref() & *other.as_ref()).count_ones() as usize + } + + fn or_weight(&self, other: &$word_type1) -> usize { + (*self.as_ref() | *other.as_ref()).count_ones() as usize + } + } + }; +} + +macro_rules! dot_for_unsigned_int_with_refs { + ($word_type1:ty, $word_type2:ty) => { + dot_for_unsigned_int!($word_type1, $word_type2); + dot_for_unsigned_int!($word_type1, &$word_type2); + dot_for_unsigned_int!($word_type1, &mut $word_type2); + }; +} + +macro_rules! dot_variations_for_unsigned_int_with_refs { + ($word_type1:ty) => { + dot_for_unsigned_int_with_refs!($word_type1, $word_type1); + dot_for_unsigned_int_with_refs!(&$word_type1, $word_type1); + dot_for_unsigned_int_with_refs!(&mut $word_type1, $word_type1); + }; +} + +macro_rules! index_assignable_for_unsigned_int { + ($word_type:ty) => { + impl IndexAssignable for $word_type { + #[inline] + fn assign_index(&mut self, index: usize, to: bool) { + assert!(index < (<$word_type as RefsAndValues>::Value::BITS as usize)); + let mask = (1 as <$word_type as RefsAndValues>::Value) << index; + if to { + *self.as_ref_mut() |= mask; + } else { + *self.as_ref_mut() &= !mask; + } + } + + #[inline] + fn negate_index(&mut self, index: usize) { + assert!(index < (<$word_type as RefsAndValues>::Value::BITS as usize)); + *self.as_ref_mut() ^= (1 as <$word_type as RefsAndValues>::Value) << index; + } + + #[inline] + fn clear_bits(&mut self) { + *self.as_ref_mut() = (0 as <$word_type as RefsAndValues>::Value); + } + } + }; +} + +macro_rules! neutral_element_for_unsigned_int { + ($word_type:ty) => { + impl NeutralElement for $word_type { + type NeutralElementType = ::Value; + + #[inline] + fn neutral_element(&self) -> ::NeutralElementType { + 0 as Self::NeutralElementType + } + + #[inline] + fn default_size_neutral_element() -> ::NeutralElementType { + 0 as Self::NeutralElementType + } + + fn neutral_element_of_size( + size: usize, + ) -> ::NeutralElementType { + assert!(size <= Self::BITS_PER_BLOCK); + Self::default_size_neutral_element() + } + } + + impl BitwiseNeutralElement for $word_type {} + }; +} + +macro_rules! bitwise_binary_for_unsigned_int { + ($word_type1:ty, $word_type2:ty) => { + impl BitwiseBinaryOps<$word_type2> for $word_type1 { + #[inline] + fn assign(&mut self, other: &$word_type2) { + *self.as_ref_mut() = *other.as_ref(); + } + + #[inline] + fn bitxor_assign(&mut self, other: &$word_type2) { + *self.as_ref_mut() ^= *other.as_ref(); + } + + #[inline] + fn bitand_assign(&mut self, other: &$word_type2) { + *self.as_ref_mut() &= *other.as_ref(); + } + } + }; +} + +macro_rules! bitwise_binary_for_unsigned_int_and_refs { + ($word_type1:ty, $word_type2:ty) => { + bitwise_binary_for_unsigned_int!($word_type1, $word_type2); + bitwise_binary_for_unsigned_int!($word_type1, &$word_type2); + bitwise_binary_for_unsigned_int!($word_type1, &mut $word_type2); + }; +} + +macro_rules! bit_traits_for_uint { + ($iterator_name:ident, $word_type:ty) => { + bitwise_for_unsigned_int!($word_type); + bitwise_for_unsigned_int!(&$word_type); + bitwise_for_unsigned_int!(&mut $word_type); + dot_variations_for_unsigned_int_with_refs!($word_type); + index_assignable_for_unsigned_int!($word_type); + index_assignable_for_unsigned_int!(&mut $word_type); + neutral_element_for_unsigned_int!($word_type); + neutral_element_for_unsigned_int!(&$word_type); + neutral_element_for_unsigned_int!(&mut $word_type); + bitwise_binary_for_unsigned_int_and_refs!($word_type, $word_type); + bitwise_binary_for_unsigned_int_and_refs!(&mut $word_type, $word_type); + }; +} + +bit_traits_for_uint!(BitIteratorU16, u16); +bit_traits_for_uint!(BitIteratorU32, u32); +bit_traits_for_uint!(BitIteratorU64, u64); +bit_traits_for_uint!(BitIteratorU128, u128); + +// Bit traits for fixed sized arrays +// array helper functions + +#[inline] +fn array_weight(array: &[T; WORD_COUNT]) -> usize { + array.iter().map(super::Bitwise::weight).sum() +} + +#[inline] +fn array_parity(array: &[T; WORD_COUNT]) -> bool { + array.iter().fold(false, |parity, x| parity ^ x.parity()) +} + +#[inline] +fn array_is_zero(array: &[T; WORD_COUNT]) -> bool { + array.iter().all(super::Bitwise::is_zero) +} + +#[inline] +fn array_clear(array: &mut [T; WORD_COUNT]) { + for element in array.iter_mut() { + element.clear_bits(); + } +} + +#[inline] +fn block_and_bit_index(index: usize) -> (usize, usize) { + let block_index = index / T::BITS_PER_BLOCK; + let bit_index = index % T::BITS_PER_BLOCK; + (block_index, bit_index) +} + +/// # Safety +/// Does not check if index is out of bounds +#[inline] +pub unsafe fn array_get_unchecked( + array: &[T; WORD_COUNT], + index: usize, +) -> bool { + let (block_index, bit_index) = block_and_bit_index::(index); + array.get_unchecked(block_index).index(bit_index) +} + +/// # Safety +/// Does not check if index is out of bounds +#[inline] +pub unsafe fn array_set_unchecked( + array: &mut [T; WORD_COUNT], + index: usize, + to: bool, +) { + let (block_index, bit_index) = block_and_bit_index::(index); + array + .get_unchecked_mut(block_index) + .assign_index(bit_index, to); +} + +#[inline] +unsafe fn array_bitxor_unchecked( + array: &mut [T; WORD_COUNT], + index: usize, +) { + let (block_index, bit_index) = block_and_bit_index::(index); + array.get_unchecked_mut(block_index).negate_index(bit_index); +} + +#[inline] +pub fn array_dot( + array1: &[T; WORD_COUNT], + array2: &[T; WORD_COUNT], +) -> bool { + let mut parity = false; + for j in 0..WORD_COUNT { + parity ^= unsafe { array1.get_unchecked(j).dot(array2.get_unchecked(j)) }; + } + parity +} + +#[inline] +pub fn array_and_weight( + array1: &[T; WORD_COUNT], + array2: &[T; WORD_COUNT], +) -> usize { + let mut weight = 0usize; + for j in 0..WORD_COUNT { + weight += unsafe { array1.get_unchecked(j).and_weight(array2.get_unchecked(j)) }; + } + weight +} + +#[inline] +pub fn array_or_weight( + array1: &[T; WORD_COUNT], + array2: &[T; WORD_COUNT], +) -> usize { + let mut weight = 0usize; + for j in 0..WORD_COUNT { + weight += unsafe { array1.get_unchecked(j).or_weight(array2.get_unchecked(j)) }; + } + weight +} + +// Bitwise, IndexAssignable, Dot and BitwiseBinaryOps for [Word;WORD_COUNT] + +macro_rules! dot_for_unsigned_int_array { + ($arr_type1:ty, $arr_type2:ty) => { + impl Dot<$arr_type2> for $arr_type1 { + fn dot(&self, other: &$arr_type2) -> bool { + array_dot(RefsAndValues::as_ref(self), RefsAndValues::as_ref(other)) + } + } + + impl OverlapWeight<$arr_type2> for $arr_type1 { + fn and_weight(&self, other: &$arr_type2) -> usize { + array_and_weight(RefsAndValues::as_ref(self), RefsAndValues::as_ref(other)) + } + + fn or_weight(&self, other: &$arr_type2) -> usize { + array_or_weight(RefsAndValues::as_ref(self), RefsAndValues::as_ref(other)) + } + } + }; +} + +macro_rules! dot_for_unsigned_int_arr_with_refs { + ($arr_type1:ty, $arr_type2:ty) => { + dot_for_unsigned_int_array!($arr_type1, $arr_type2); + dot_for_unsigned_int_array!($arr_type1, &$arr_type2); + dot_for_unsigned_int_array!($arr_type1, &mut $arr_type2); + }; +} + +macro_rules! dot_variations_for_unsigned_int_arr_with_refs { + ($arr_type1:ty) => { + dot_for_unsigned_int_arr_with_refs!($arr_type1, $arr_type1); + dot_for_unsigned_int_arr_with_refs!(&$arr_type1, $arr_type1); + dot_for_unsigned_int_arr_with_refs!(&mut $arr_type1, $arr_type1); + }; +} + +macro_rules! bitwise_for_unsigned_int_arr { + ($arr_type1:ty,$word_type:ty) => { + impl Bitwise for $arr_type1 { + #[inline] + fn index(&self, index: usize) -> bool { + assert!(index < ::BITS_PER_BLOCK); + unsafe { array_get_unchecked((RefsAndValues::as_ref(self)), index) } + } + + #[inline] + fn support(&self) -> impl sorted_iter::SortedIterator { + support_iterator(self.borrow_as_bit_iterator()) + } + + #[inline] + fn weight(&self) -> usize { + array_weight(RefsAndValues::as_ref(self)) + } + + #[inline] + fn parity(&self) -> bool { + array_parity(RefsAndValues::as_ref(self)) + } + + #[inline] + fn is_zero(&self) -> bool { + array_is_zero(RefsAndValues::as_ref(self)) + } + } + + impl BorrowAsBitIterator for $arr_type1 { + type BitIterator<'life> + = <$word_type as IntoBitUIntIterator>::BitUIntSliceIterator<'life> + where + Self: 'life; + + fn borrow_as_bit_iterator(&self) -> Self::BitIterator<'_> { + <$word_type as IntoBitUIntIterator>::from_slice(self.as_slice()) + } + } + }; +} + +macro_rules! index_assignable_for_unsigned_int_arr { + ($arr_type1:ty) => { + impl IndexAssignable for $arr_type1 { + #[inline] + fn assign_index(&mut self, index: usize, to: bool) { + assert!(index < ::BITS_PER_BLOCK); + unsafe { array_set_unchecked(MutRefs::as_ref_mut(self), index, to) } + } + + #[inline] + fn negate_index(&mut self, index: usize) { + assert!(index < ::BITS_PER_BLOCK); + unsafe { array_bitxor_unchecked(MutRefs::as_ref_mut(self), index) } + } + + #[inline] + fn clear_bits(&mut self) { + array_clear(MutRefs::as_ref_mut(self)); + } + } + }; +} + +macro_rules! bitwise_binary_ops_for_unsigned_int_array { + ($arr_type1:ty, $arr_type2:ty) => { + impl BitwiseBinaryOps<$arr_type2> for $arr_type1 { + #[inline] + fn assign(&mut self, other: &$arr_type2) { + for j in 0..WORD_COUNT { + unsafe { + *MutRefs::as_ref_mut(self).get_unchecked_mut(j) = + *RefsAndValues::as_ref(other).get_unchecked(j) + } + } + } + + #[inline] + fn bitxor_assign(&mut self, other: &$arr_type2) { + for j in 0..WORD_COUNT { + unsafe { + *MutRefs::as_ref_mut(self).get_unchecked_mut(j) ^= + *RefsAndValues::as_ref(other).get_unchecked(j) + } + } + } + + #[inline] + fn bitand_assign(&mut self, other: &$arr_type2) { + for j in 0..WORD_COUNT { + unsafe { + *MutRefs::as_ref_mut(self).get_unchecked_mut(j) &= + *RefsAndValues::as_ref(other).get_unchecked(j) + } + } + } + } + }; +} + +macro_rules! neutral_element_for_unsigned_int_array { + ($array_type:ty) => { + impl NeutralElement for $array_type { + type NeutralElementType = ::Value; + + fn neutral_element(&self) -> Self::NeutralElementType { + Self::default_size_neutral_element() + } + + fn default_size_neutral_element() -> Self::NeutralElementType { + [0; WORD_COUNT] + } + + fn neutral_element_of_size(size: usize) -> Self::NeutralElementType { + assert!(size <= Self::BITS_PER_BLOCK); + Self::default_size_neutral_element() + } + } + + impl BitwiseNeutralElement for $array_type {} + }; +} + +macro_rules! bitwise_binary_ops_for_unsigned_int_array_with_refs { + ($arr_type1:ty, $arr_type2:ty) => { + bitwise_binary_ops_for_unsigned_int_array!($arr_type1, $arr_type2); + bitwise_binary_ops_for_unsigned_int_array!($arr_type1, &$arr_type2); + bitwise_binary_ops_for_unsigned_int_array!($arr_type1, &mut $arr_type2); + }; +} + +macro_rules! bit_traits_for_arrays_of_unsigned_ints { + ($word_type:ty) => { + dot_variations_for_unsigned_int_arr_with_refs!([$word_type; WORD_COUNT]); + bitwise_for_unsigned_int_arr!([$word_type; WORD_COUNT], $word_type); + bitwise_for_unsigned_int_arr!(&[$word_type; WORD_COUNT], $word_type); + bitwise_for_unsigned_int_arr!(&mut [$word_type; WORD_COUNT], $word_type); + index_assignable_for_unsigned_int_arr!([$word_type; WORD_COUNT]); + index_assignable_for_unsigned_int_arr!(&mut [$word_type; WORD_COUNT]); + bitwise_binary_ops_for_unsigned_int_array_with_refs!( + [$word_type; WORD_COUNT], + [$word_type; WORD_COUNT] + ); + bitwise_binary_ops_for_unsigned_int_array_with_refs!( + &mut [$word_type; WORD_COUNT], + [$word_type; WORD_COUNT] + ); + neutral_element_for_unsigned_int_array!([$word_type; WORD_COUNT]); + neutral_element_for_unsigned_int_array!(&[$word_type; WORD_COUNT]); + neutral_element_for_unsigned_int_array!(&mut [$word_type; WORD_COUNT]); + }; +} + +bit_traits_for_arrays_of_unsigned_ints!(u16); +bit_traits_for_arrays_of_unsigned_ints!(u32); +bit_traits_for_arrays_of_unsigned_ints!(u64); +bit_traits_for_arrays_of_unsigned_ints!(u128); + +// BitIterator for slices of unsigned ints + +macro_rules! bit_iterator_for_unsigned_int_slice { + ($name:ident, $word_type:ty) => { + pub struct $name<'life> { + word_index: usize, + word_mask: $word_type, + bits: &'life [$word_type], + } + + impl<'life> $name<'life> { + #[must_use] + pub fn from_bits(bits: &'life [$word_type]) -> $name<'life> { + $name { + word_index: 0, + word_mask: 1, + bits, + } + } + } + + impl<'life> Iterator for $name<'life> { + type Item = bool; + + fn next(&mut self) -> Option { + const LAST_BIT_MASK: $word_type = (1 as $word_type) << (<$word_type>::BITS - 1); + if self.word_index < self.bits.len() { + let value = (*unsafe { self.bits.get_unchecked(self.word_index) }) + & self.word_mask + == self.word_mask; + if self.word_mask == LAST_BIT_MASK { + self.word_mask = 1; + self.word_index += 1; + } else { + self.word_mask <<= 1; + } + return Some(value); + } + None + } + + fn size_hint(&self) -> (usize, Option) { + let size = (<$word_type>::BITS as usize) * self.bits.len(); + (size, Some(size)) + } + } + + impl<'life> ExactSizeIterator for $name<'life> { + fn len(&self) -> usize { + (<$word_type>::BITS as usize) * self.bits.len() + } + } + }; +} + +macro_rules! into_bit_uint_iterator { + ($word_type:ty, $bit_iterator_name:ident, $bit_slice_iterator_name:ident) => { + bit_iterator_for_unsigned_int!($bit_iterator_name, $word_type); + bit_iterator_for_unsigned_int_slice!($bit_slice_iterator_name, $word_type); + + impl IntoBitUIntIterator for $word_type { + type BitUIntIterator = $bit_iterator_name; + type BitUIntSliceIterator<'life> = $bit_slice_iterator_name<'life>; + + fn from_value(value: Self) -> Self::BitUIntIterator { + Self::BitUIntIterator::from_bits(&value) + } + + fn from_slice(slice: &[Self]) -> Self::BitUIntSliceIterator<'_> { + Self::BitUIntSliceIterator::from_bits(&slice) + } + } + }; +} + +into_bit_uint_iterator!(u16, BitIteratorU16, BitIteratorArrU16); +into_bit_uint_iterator!(u32, BitIteratorU32, BitIteratorArrU32); +into_bit_uint_iterator!(u64, BitIteratorU64, BitIterator); +into_bit_uint_iterator!(u128, BitIteratorU128, BitIteratorArrU128); + +fn slice_weight(slice: &[T]) -> usize { + let mut res = 0usize; + for elt in slice { + res += elt.weight(); + } + res +} + +fn slice_parity(slice: &[T]) -> bool { + let mut res = false; + for elt in slice { + res ^= elt.parity(); + } + res +} + +fn slice_is_zero(slice: &[T]) -> bool { + for elt in slice { + if !elt.is_zero() { + return false; + } + } + true +} + +macro_rules! bitwise_body_for_vec { + ($elt_type:ty) => { + fn support(&self) -> impl sorted_iter::SortedIterator { + support_iterator(self.borrow_as_bit_iterator()) + } + + fn index(&self, index: usize) -> bool { + let (block_index, bit_index) = block_and_bit_index::<$elt_type>(index); + self[block_index].index(bit_index) + } + + fn weight(&self) -> usize { + slice_weight(self) + } + + fn parity(&self) -> bool { + slice_parity(self) + } + + fn is_zero(&self) -> bool { + slice_is_zero(self) + } + }; +} + +macro_rules! bitwise_for_vec { + ($vec_type:ty, $vec_arr_type:ty, $word_type:ty, $arr_type:ty) => { + impl Bitwise for $vec_arr_type { + bitwise_body_for_vec!($arr_type); + } + + impl Bitwise for $vec_type { + bitwise_body_for_vec!($word_type); + } + + impl BorrowAsBitIterator for $vec_type { + type BitIterator<'life> + = <$word_type as IntoBitUIntIterator>::BitUIntSliceIterator<'life> + where + Self: 'life; + + fn borrow_as_bit_iterator(&self) -> Self::BitIterator<'_> { + <$word_type as IntoBitUIntIterator>::from_slice(self) + } + } + + impl BorrowAsBitIterator for $vec_arr_type { + type BitIterator<'life> + = <$word_type as IntoBitUIntIterator>::BitUIntSliceIterator<'life> + where + Self: 'life; + + fn borrow_as_bit_iterator(&self) -> Self::BitIterator<'_> { + <$word_type as IntoBitUIntIterator>::from_slice(self.as_flattened()) + } + } + }; +} + +// impl IntoBitIterator for Vec { +// type BitIterator<'life> = ::BitUIntSliceIterator<'life> where Self:'life; + +// fn into_bit_iterator(&self) -> Self::BitIterator<'_> { +// ::from_slice(self) +// } +// } + +macro_rules! bitwise_for_vec_variation { + ($word_type:ty) => { + bitwise_for_vec!( + Vec<$word_type>, + Vec<[$word_type; WORD_COUNT]>, + $word_type, + [$word_type; WORD_COUNT] + ); + bitwise_for_vec!( + &[$word_type], + &[[$word_type; WORD_COUNT]], + $word_type, + [$word_type; WORD_COUNT] + ); + bitwise_for_vec!( + &mut [$word_type], + &mut [[$word_type; WORD_COUNT]], + $word_type, + [$word_type; WORD_COUNT] + ); + }; +} + +bitwise_for_vec_variation!(u16); +bitwise_for_vec_variation!(u32); +bitwise_for_vec_variation!(u64); +bitwise_for_vec_variation!(u128); + +macro_rules! dot_for_vec { + ($vec_type1:ty, $vec_type2:ty) => { + impl Dot<$vec_type2> for $vec_type1 + where + U: Dot, + { + fn dot(&self, other: &$vec_type2) -> bool { + assert!(self.len() == other.len()); + let mut res = false; + for (a, b) in exact_zip(self.iter(), other.iter()) { + res ^= a.dot(b) + } + res + } + } + + impl OverlapWeight<$vec_type2> for $vec_type1 + where + U: OverlapWeight, + { + fn and_weight(&self, other: &$vec_type2) -> usize { + assert!(self.len() == other.len()); + let mut res = 0usize; + for (a, b) in exact_zip(self.iter(), other.iter()) { + res += a.and_weight(b) + } + res + } + + fn or_weight(&self, other: &$vec_type2) -> usize { + assert!(self.len() == other.len()); + let mut res = 0usize; + for (a, b) in exact_zip(self.iter(), other.iter()) { + res += a.or_weight(b) + } + res + } + } + }; +} + +macro_rules! dot_for_vec_refs { + ($vec_type1:ty) => { + dot_for_vec!($vec_type1, Vec); + dot_for_vec!($vec_type1, &[T]); + dot_for_vec!($vec_type1, &mut [T]); + }; +} + +dot_for_vec_refs!(Vec); +dot_for_vec_refs!(&[U]); +dot_for_vec_refs!(&mut [U]); + +macro_rules! index_assignable_for_vec_body { + ($word:ty) => { + fn assign_index(&mut self, index: usize, to: bool) { + let (block_index, bit_index) = block_and_bit_index::<$word>(index); + self[block_index].assign_index(bit_index, to) + } + + fn negate_index(&mut self, index: usize) { + let (block_index, bit_index) = block_and_bit_index::<$word>(index); + self[block_index].negate_index(bit_index) + } + + fn clear_bits(&mut self) { + for val in self.iter_mut() { + val.clear_bits(); + } + } + }; +} + +macro_rules! index_assignable_for_vec { + ($vec:ty, $vec_arr:ty, $word:ty) => { + impl IndexAssignable for $vec { + index_assignable_for_vec_body!($word); + } + impl IndexAssignable for $vec_arr { + index_assignable_for_vec_body!([$word; WORD_COUNT]); + } + }; +} + +macro_rules! index_assignable_for_vec_with_refs { + ($word:ty) => { + index_assignable_for_vec!(Vec<$word>, Vec<[$word; WORD_COUNT]>, $word); + index_assignable_for_vec!(&mut [$word], &mut [[$word; WORD_COUNT]], $word); + }; +} + +index_assignable_for_vec_with_refs!(u16); +index_assignable_for_vec_with_refs!(u32); +index_assignable_for_vec_with_refs!(u64); +index_assignable_for_vec_with_refs!(u128); + +macro_rules! bitwise_binary_ops_for_vec_body { + ($vec:ty) => { + fn assign(&mut self, other: &$vec) { + assert!(self.len() == other.len()); + for (a, b) in exact_zip(self.iter_mut(), other.iter()) { + a.assign(b); + } + } + + fn bitxor_assign(&mut self, other: &$vec) { + assert!(self.len() == other.len()); + for (a, b) in exact_zip(self.iter_mut(), other.iter()) { + a.bitxor_assign(b); + } + } + + fn bitand_assign(&mut self, other: &$vec) { + assert!(self.len() == other.len()); + for (a, b) in exact_zip(self.iter_mut(), other.iter()) { + a.bitand_assign(b); + } + } + }; +} + +macro_rules! bitwise_binary_ops_for_vec { + ($mut_vec:ty, $vec:ty) => { + impl BitwiseBinaryOps<$vec> for $mut_vec { + bitwise_binary_ops_for_vec_body!($vec); + } + }; +} + +macro_rules! bitwise_binary_ops_for_vec_arr { + ($mut_vec:ty, $vec:ty) => { + impl BitwiseBinaryOps<$vec> for $mut_vec { + bitwise_binary_ops_for_vec_body!($vec); + } + }; +} + +macro_rules! bitwise_binary_ops_for_vec_refs { + ($vec:ty,$vec_arr:ty,$inner_type:ty) => { + bitwise_binary_ops_for_vec!($vec, Vec<$inner_type>); + bitwise_binary_ops_for_vec!($vec, &[$inner_type]); + bitwise_binary_ops_for_vec!($vec, &mut [$inner_type]); + bitwise_binary_ops_for_vec_arr!($vec_arr, Vec<[$inner_type; WORD_COUNT]>); + bitwise_binary_ops_for_vec_arr!($vec_arr, &[[$inner_type; WORD_COUNT]]); + bitwise_binary_ops_for_vec_arr!($vec_arr, &mut [[$inner_type; WORD_COUNT]]); + }; +} + +macro_rules! bitwise_binary_ops_for_vec_variations { + ($word_type:ty) => { + bitwise_binary_ops_for_vec_refs!( + Vec<$word_type>, + Vec<[$word_type; WORD_COUNT]>, + $word_type + ); + bitwise_binary_ops_for_vec_refs!( + &mut [$word_type], + &mut [[$word_type; WORD_COUNT]], + $word_type + ); + }; +} + +bitwise_binary_ops_for_vec_variations!(u16); +bitwise_binary_ops_for_vec_variations!(u32); +bitwise_binary_ops_for_vec_variations!(u64); +bitwise_binary_ops_for_vec_variations!(u128); + +macro_rules! neutral_element_for_vec_body { + ($inner:ty) => { + type NeutralElementType = Vec<<$inner as NeutralElement>::NeutralElementType>; + + fn neutral_element(&self) -> Self::NeutralElementType { + vec![<$inner as NeutralElement>::default_size_neutral_element(); self.len()] + } + + fn default_size_neutral_element() -> Self::NeutralElementType { + Self::NeutralElementType::new() + } + + fn neutral_element_of_size(size: usize) -> Self::NeutralElementType { + let bits_per_block: usize = + <$inner as NeutralElement>::NeutralElementType::BITS_PER_BLOCK; + vec![ + <$inner as NeutralElement>::default_size_neutral_element(); + block_count(size, bits_per_block) + ] + } + }; +} + +macro_rules! neutral_element_for_vec_refs { + ($vec:ty, $vec_arr:ty, $inner:ty) => { + impl NeutralElement for $vec { + neutral_element_for_vec_body!($inner); + } + + impl NeutralElement for $vec_arr { + neutral_element_for_vec_body!([$inner; WORD_COUNT]); + } + + impl BitwiseNeutralElement for $vec {} + impl BitwiseNeutralElement for $vec_arr {} + }; +} + +macro_rules! neutral_element_for_vec_variation { + ($word:ty) => { + neutral_element_for_vec_refs!(Vec<$word>, Vec<[$word; WORD_COUNT]>, $word); + neutral_element_for_vec_refs!(&[$word], &[[$word; WORD_COUNT]], $word); + neutral_element_for_vec_refs!(&mut [$word], &mut [[$word; WORD_COUNT]], $word); + }; +} + +neutral_element_for_vec_variation!(u16); +neutral_element_for_vec_variation!(u32); +neutral_element_for_vec_variation!(u64); +neutral_element_for_vec_variation!(u128); + +// Bit traits for Vec, &[bool], &mut[bool], [bool;SIZE] + +macro_rules! implement_dot_array { + () => { + fn dot(&self, other: &T) -> bool { + let mut res = false; + for (a, b) in exact_zip(self.iter(), other.borrow_as_bit_iterator()) { + res ^= a & b; + } + res + } + }; +} + +macro_rules! implement_overlap_weight_array { + () => { + fn and_weight(&self, other: &T) -> usize { + let mut res = 0usize; + for (a, b) in exact_zip(self.iter(), other.borrow_as_bit_iterator()) { + if a & b { + res += 1; + } + } + res + } + + fn or_weight(&self, other: &T) -> usize { + let mut res = 0usize; + for (a, b) in exact_zip(self.iter(), other.borrow_as_bit_iterator()) { + if a | b { + res += 1; + } + } + res + } + }; +} + +macro_rules! implement_bitwise_array_body { + () => { + fn index(&self, index: usize) -> bool { + self[index] + } + + fn weight(&self) -> usize { + self.iter().filter(|bit| **bit).count() + } + + fn support(&self) -> impl sorted_iter::SortedIterator { + sorted_iter::assume::AssumeSortedByItemExt::assume_sorted_by_item( + self.iter() + .enumerate() + .filter(|pair| *pair.1) + .map(|pair| pair.0), + ) + } + }; +} + +macro_rules! borrow_as_bit_iterator_for_bool_body { + () => { + type BitIterator<'life> + = std::iter::Copied> + where + Self: 'life; + fn borrow_as_bit_iterator(&self) -> Self::BitIterator<'_> { + self.iter().copied() + } + }; +} + +macro_rules! implement_bitwise_array_bool { + ($array_type:ty) => { + impl Bitwise for $array_type { + implement_bitwise_array_body!(); + } + + impl BorrowAsBitIterator for $array_type { + borrow_as_bit_iterator_for_bool_body!(); + } + + impl NeutralElement for $array_type { + type NeutralElementType = [bool; SIZE]; + + fn neutral_element(&self) -> Self::NeutralElementType { + Self::default_size_neutral_element() + } + + fn default_size_neutral_element() -> Self::NeutralElementType { + [false; SIZE] + } + + fn neutral_element_of_size(size: usize) -> Self::NeutralElementType { + assert!(size <= SIZE); + [false; SIZE] + } + } + + impl BitwiseNeutralElement for $array_type {} + + impl Dot for $array_type { + implement_dot_array!(); + } + + impl OverlapWeight for $array_type { + implement_overlap_weight_array!(); + } + }; +} + +macro_rules! implement_bitwise_vec_bool { + ($array_type:ty) => { + impl Bitwise for $array_type { + implement_bitwise_array_body!(); + } + + impl BorrowAsBitIterator for $array_type { + borrow_as_bit_iterator_for_bool_body!(); + } + + impl NeutralElement for $array_type { + type NeutralElementType = Vec; + + fn neutral_element(&self) -> Self::NeutralElementType { + vec![false; self.len()] + } + + fn default_size_neutral_element() -> Self::NeutralElementType { + vec![] + } + + fn neutral_element_of_size(size: usize) -> Self::NeutralElementType { + vec![false; size] + } + } + + impl BitwiseNeutralElement for $array_type {} + + impl Dot for $array_type { + implement_dot_array!(); + } + + impl OverlapWeight for $array_type { + implement_overlap_weight_array!(); + } + }; +} + +implement_bitwise_array_bool!([bool; SIZE]); +implement_bitwise_array_bool!(&[bool; SIZE]); +implement_bitwise_array_bool!(&mut [bool; SIZE]); +implement_bitwise_vec_bool!(Vec); +implement_bitwise_vec_bool!(&[bool]); +implement_bitwise_vec_bool!(&mut [bool]); + +macro_rules! implement_index_assignable_array { + ($right:ty) => { + fn assign_index(&mut self, index: usize, to: bool) { + self[index] = to; + } + + fn negate_index(&mut self, index: usize) { + self[index] ^= true; + } + + fn clear_bits(&mut self) { + for val in self.iter_mut() { + *val = false; + } + } + }; +} + +impl IndexAssignable for [bool; SIZE] { + implement_index_assignable_array!(Self); +} + +impl IndexAssignable for &mut [bool; SIZE] { + implement_index_assignable_array!(Self); +} + +impl IndexAssignable for Vec { + implement_index_assignable_array!(Self); +} + +impl IndexAssignable for &mut [bool] { + implement_index_assignable_array!(Self); +} + +macro_rules! bitwise_binary_ops_body_for_bool { + () => { + fn assign(&mut self, other: &T) { + for (a, b) in exact_zip(self.iter_mut(), other.borrow_as_bit_iterator()) { + *a = b + } + } + + fn bitxor_assign(&mut self, other: &T) { + for (a, b) in exact_zip(self.iter_mut(), other.borrow_as_bit_iterator()) { + *a ^= b + } + } + + fn bitand_assign(&mut self, other: &T) { + for (a, b) in exact_zip(self.iter_mut(), other.borrow_as_bit_iterator()) { + *a &= b + } + } + }; +} + +macro_rules! bitwise_binary_ops_for_vec_bool { + ($array_type:ty) => { + impl BitwiseBinaryOps for $array_type { + bitwise_binary_ops_body_for_bool!(); + } + }; +} + +macro_rules! bitwise_binary_ops_for_arr_bool { + ($array_type:ty) => { + impl BitwiseBinaryOps + for $array_type + { + bitwise_binary_ops_body_for_bool!(); + } + }; +} + +bitwise_binary_ops_for_vec_bool!(Vec); +bitwise_binary_ops_for_vec_bool!(&mut [bool]); +bitwise_binary_ops_for_arr_bool!([bool; SIZE]); +bitwise_binary_ops_for_arr_bool!(&mut [bool; SIZE]); diff --git a/source/paulimer/src/bits/tiny_matrix.rs b/source/paulimer/src/bits/tiny_matrix.rs new file mode 100644 index 0000000000..5d72cff321 --- /dev/null +++ b/source/paulimer/src/bits/tiny_matrix.rs @@ -0,0 +1,116 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +// Tiny bitmatrix with RREF, not heap allocation, compile-time known sizes + +use super::BitMatrix; + +#[must_use] +pub fn tiny_matrix_from_bitmatrix(matrix: &BitMatrix) -> [u64; ROW_COUNT] { + let mut tiny_matrix = [0u64; ROW_COUNT]; + let column_count = matrix.columncount(); + for row_id in 0..ROW_COUNT { + for column_id in 0..column_count { + if matrix[(row_id, column_id)] { + tiny_matrix[row_id] ^= 1 << column_id; + } + } + } + tiny_matrix +} + +pub fn xor_tiny_column( + tiny_matrix: &mut [u64; NUM_ROWS], + column_index: usize, + column: u64, +) { + let mask = 1 << column_index; + for (row_id, row) in tiny_matrix.iter_mut().enumerate() { + if column & (1 << row_id) != 0 { + *row ^= mask; + } + } +} + +#[must_use] +pub fn get_tiny_column( + tiny_matrix: &[u64; NUM_ROWS], + column_index: usize, +) -> u64 { + let mask = 1 << column_index; + let mut column = 0u64; + for (row_id, row) in tiny_matrix.iter().enumerate() { + if *row & mask != 0 { + column ^= 1u64 << row_id; + } + } + column +} + +fn tiny_pivot_row( + tiny_matrix: &mut [u64; NUM_ROWS], + column_id: usize, + start_row: usize, +) -> usize { + let column_mask = 1u64 << column_id; + for (row_id, row) in tiny_matrix.iter().enumerate().skip(start_row) { + if *row & column_mask != 0 { + return row_id; + } + } + NUM_ROWS +} + +fn tiny_reduce_forward( + tiny_matrix: &mut [u64; NUM_ROWS], + column_id: usize, + start_row: usize, +) -> usize { + let column_mask = 1u64 << column_id; + let reducing_row = tiny_matrix[start_row]; + for row in tiny_matrix.iter_mut().skip(start_row + 1) { + if *row & column_mask != 0 { + *row ^= reducing_row; + } + } + NUM_ROWS +} + +fn tiny_reduce_backward( + tiny_matrix: &mut [u64; NUM_ROWS], + column_id: usize, + end_row: usize, +) -> usize { + let column_mask = 1u64 << column_id; + let reducing_row = tiny_matrix[end_row]; + for row in tiny_matrix.iter_mut().take(end_row) { + if *row & column_mask != 0 { + *row ^= reducing_row; + } + } + NUM_ROWS +} + +pub fn tiny_matrix_rref( + tiny_matrix: &mut [u64; NUM_ROWS], +) -> usize { + let mut rank_profile = [0usize; 64]; + let mut column_id = 0; + let mut current_row_id = 0; + let mut rank = 0; + while column_id < NUM_COLUMNS { + let pivot_row = tiny_pivot_row(tiny_matrix, column_id, current_row_id); + if pivot_row != NUM_ROWS { + tiny_matrix.swap(current_row_id, pivot_row); + tiny_reduce_forward(tiny_matrix, column_id, current_row_id); + rank_profile[current_row_id] = column_id; + current_row_id += 1; + rank += 1; + } + column_id += 1; + } + for (row_id, column_id) in rank_profile.iter().enumerate().take(rank) { + tiny_reduce_backward(tiny_matrix, *column_id, row_id); + } + rank +} diff --git a/source/paulimer/src/clifford.rs b/source/paulimer/src/clifford.rs new file mode 100644 index 0000000000..057d9a396d --- /dev/null +++ b/source/paulimer/src/clifford.rs @@ -0,0 +1,189 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use crate::bits::{BitMatrix, Bitwise, WORD_COUNT_DEFAULT}; +use crate::pauli::{Pauli, PauliBinaryOps, PauliBits, PauliMutable, PauliUnitary}; +use crate::quantum_core; +use crate::UnitaryOp; +use num_derive::{FromPrimitive, ToPrimitive}; + +#[derive(FromPrimitive, ToPrimitive, Clone, Copy, Debug, PartialEq, Eq)] +pub enum XOrZ { + X = Axis::X as isize, + Z = Axis::Z as isize, +} + +pub trait Clifford { + type PhaseExponentValue; + type DensePauli: PauliMutable + Pauli; + fn num_qubits(&self) -> usize; + fn qubits(&self) -> std::ops::Range { + 0..self.num_qubits() + } + + fn is_valid(&self) -> bool; + fn is_identity(&self) -> bool; + + #[must_use] + fn identity(num_qubits: usize) -> Self; + #[must_use] + fn zero(num_qubits: usize) -> Self; + #[must_use] + fn random(num_qubits: usize, random_number_generator: &mut impl rand::Rng) -> Self; + + fn preimage_x(&self, qubit_index: usize) -> Self::DensePauli; + fn preimage_z(&self, qubit_index: usize) -> Self::DensePauli; + fn preimage_x_bits(&self, x_bits: &impl Bitwise) -> Self::DensePauli; + fn preimage_z_bits(&self, z_bits: &impl Bitwise) -> Self::DensePauli; + fn preimage>( + &self, + pauli: &PauliLike, + ) -> Self::DensePauli; + + fn image_x(&self, qubit_index: usize) -> Self::DensePauli; + fn image_z(&self, qubit_index: usize) -> Self::DensePauli; + fn image_x_bits(&self, x_bits: &impl Bitwise) -> Self::DensePauli; + fn image_z_bits(&self, z_bits: &impl Bitwise) -> Self::DensePauli; + fn image>( + &self, + pauli: &PauliLike, + ) -> Self::DensePauli; + + #[must_use] + fn multiply_with(&self, rhs: &Self) -> Self; + #[must_use] + fn tensor(&self, rhs: &Self) -> Self; + #[must_use] + fn inverse(&self) -> Self; + #[must_use] + fn from_preimages(preimages: &[Self::DensePauli]) -> Self; + #[must_use] + fn from_css_preimage_indicators(x_indicators: &BitMatrix, z_indicators: &BitMatrix) -> Self; + + fn is_diagonal(&self, axis: XOrZ) -> bool; + fn is_diagonal_resource_encoder(&self, axis: XOrZ) -> bool; + fn is_css(&self) -> bool; + fn unitary_from_diagonal_resource_state(&self, axis: XOrZ) -> Option + where + Self: Sized; + + fn symplectic_matrix(&self) -> BitMatrix; +} + +pub trait CliffordMutable { + type PhaseExponentValue; + + fn left_mul_x(&mut self, qubit_index: usize); + fn left_mul_y(&mut self, qubit_index: usize); + fn left_mul_z(&mut self, qubit_index: usize); + + fn left_mul_hadamard(&mut self, qubit_index: usize); + fn left_mul_root_z(&mut self, qubit_index: usize); + fn left_mul_root_z_inverse(&mut self, qubit_index: usize); + fn left_mul_root_x(&mut self, qubit_index: usize); + fn left_mul_root_x_inverse(&mut self, qubit_index: usize); + fn left_mul_root_y(&mut self, qubit_index: usize); + fn left_mul_root_y_inverse(&mut self, qubit_index: usize); + + fn left_mul_cx(&mut self, control_qubit_index: usize, target_qubit_index: usize); + fn left_mul_cz(&mut self, qubit1_index: usize, qubit2_index: usize); + fn left_mul_prepare_bell(&mut self, qubit1_index: usize, qubit2_index: usize); + fn left_mul_swap(&mut self, qubit_index1: usize, qubit_index2: usize); + + fn left_mul(&mut self, unitary_op: UnitaryOp, support: &[usize]); + + fn left_mul_pauli(&mut self, pauli: &PauliLike); + fn left_mul_pauli_exp>( + &mut self, + pauli: &PauliLike, + ); + fn left_mul_controlled_pauli>( + &mut self, + control: &PauliLike, + target: &PauliLike, + ); + + fn left_mul_permutation(&mut self, permutation: &[usize], support: &[usize]); + fn left_mul_clifford(&mut self, clifford: &CliffordLike, support: &[usize]) + where + CliffordLike: Clifford + + PreimageViews; +} + +pub trait PreimageViews { + type PhaseExponentValue; + type PreImageView<'life>: Pauli + where + Self: 'life; + type ImageViewUpToPhase<'life>: Pauli + where + Self: 'life; + + fn preimage_x_view(&self, index: usize) -> Self::PreImageView<'_>; + fn preimage_z_view(&self, index: usize) -> Self::PreImageView<'_>; + fn x_image_view_up_to_phase(&self, qubit_index: usize) -> Self::ImageViewUpToPhase<'_>; + fn z_image_view_up_to_phase(&self, qubit_index: usize) -> Self::ImageViewUpToPhase<'_>; +} + +pub trait MutablePreImages { + type PhaseExponentValue; + type PreImageViewMut<'life>: PauliBinaryOps + + Pauli + where + Self: 'life; + fn preimage_x_view_mut(&mut self, qubit_index: usize) -> Self::PreImageViewMut<'_>; + fn preimage_z_view_mut(&mut self, qubit_index: usize) -> Self::PreImageViewMut<'_>; + fn preimage_xz_views_mut( + &mut self, + index: usize, + ) -> (Self::PreImageViewMut<'_>, Self::PreImageViewMut<'_>); + fn preimage_xz_views_mut_distinct( + &mut self, + index: (usize, usize), + ) -> crate::Tuple2x2>; +} + +pub mod generic_algos; + +#[must_use] +#[derive(Eq, Clone)] +pub struct CliffordUnitary { + bits: BitMatrix, + preimage_phase_exponents: Vec, +} + +#[must_use] +#[derive(Eq, Clone)] +pub struct CliffordUnitaryModPauli { + bits: BitMatrix, +} + +#[must_use] +#[repr(C, align(64))] +#[derive(Eq, PartialEq, Clone, Debug)] +pub struct CliffordModPauliBatch { + pub preimages: [[[u64; WORD_COUNT]; QUBIT_COUNT]; 4], +} + +pub struct PauliExponent( + PauliUnitary, +); +pub struct ControlledPauli( + PauliUnitary, + PauliUnitary, +); +pub struct Swap(pub usize, pub usize); +pub struct Hadamard(pub usize); + +mod clifford_impl; +pub use clifford_impl::{ + apply_qubit_clifford_by_axis, group_encoding_clifford_of, prepare_all_plus, prepare_all_zero, + random_clifford_via_operations_sampling, recover_z_images_phases, split_clifford_encoder, + split_clifford_encoder_mod_pauli, split_clifford_mod_pauli_with_transforms, split_phased_css, + split_qubit_cliffords_and_css, split_qubit_tensor_product_encoder, +}; +use quantum_core::Axis; +mod special_clifford; + +#[derive(Debug, PartialEq, Eq, Default)] +pub struct CliffordStringParsingError; diff --git a/source/paulimer/src/clifford/clifford_impl.rs b/source/paulimer/src/clifford/clifford_impl.rs new file mode 100644 index 0000000000..ec4cb939eb --- /dev/null +++ b/source/paulimer/src/clifford/clifford_impl.rs @@ -0,0 +1,2216 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use crate::quantum_core::{y, Axis}; +use sorted_iter::assume::AssumeSortedByItemExt; +use sorted_iter::SortedIterator; + +use super::generic_algos::support_restricted_z_images_from_support_complement; +use super::{ + Bitwise, Clifford, CliffordModPauliBatch, CliffordMutable, CliffordStringParsingError, + CliffordUnitary, CliffordUnitaryModPauli, ControlledPauli, Hadamard, MutablePreImages, + PauliExponent, PreimageViews, Swap, XOrZ, +}; + +use crate::bits::bitmatrix::{ + are_zero_rows, is_zero_padded_identity, is_zero_padded_symmetric, BitMatrix, Column, +}; +use crate::bits::{ + BitVec, BitView, BitwiseBinaryOps, IndexAssignable, IndexSet, MutableBitView, + WORD_COUNT_DEFAULT, +}; +use crate::pauli::generic::PhaseExponent; +use crate::pauli::{ + apply_pauli_exponent, apply_root_x, are_mutually_commuting, dense_from, remapped_sparse, + DensePauli, DensePauliProjective, Pauli, PauliBinaryOps, PauliBits, PauliMutable, PauliUnitary, + PauliUnitaryProjective, SparsePauli, SparsePauliProjective, +}; +use crate::{assert_1q_gate, assert_2q_gate, UnitaryOp}; +use crate::{subscript_digits, NeutralElement, Tuple2x2, Tuple4, Tuple4x2, Tuple8}; + +use core::fmt; +use std::collections::BTreeSet; +use std::fmt::{Debug, Display}; +use std::iter::{zip, IntoIterator}; +use std::ops::Mul; +use std::str::FromStr; +use std::vec; + +// Utils + +fn concat2(ab: Tuple2x2) -> Tuple4 { + (ab.0 .0, ab.0 .1, ab.1 .0, ab.1 .1) +} + +fn split2(ab: Tuple4) -> Tuple2x2 { + ((ab.0, ab.1), (ab.2, ab.3)) +} + +fn concat4(a: Tuple4x2) -> Tuple8 { + ( + a.0 .0, a.0 .1, a.1 .0, a.1 .1, a.2 .0, a.2 .1, a.3 .0, a.3 .1, + ) +} + +fn split4(abcd: Tuple8) -> Tuple4x2 { + ( + (abcd.0, abcd.1), + (abcd.2, abcd.3), + (abcd.4, abcd.5), + (abcd.6, abcd.7), + ) +} + +/// Does not check if indices are distinct +unsafe fn tuple2_from_vec(vec: &mut Vec, index: (usize, usize)) -> (&mut T, &mut T) { + let ptr = vec.as_mut_ptr(); + unsafe { (&mut *ptr.add(index.0), &mut *ptr.add(index.1)) } +} + +/// Does not check if indices are distinct +unsafe fn tuple4_from_vec( + vec: &mut Vec, + index: (usize, usize, usize, usize), +) -> (&mut T, &mut T, &mut T, &mut T) { + let ptr = vec.as_mut_ptr(); + unsafe { + ( + &mut *ptr.add(index.0), + &mut *ptr.add(index.1), + &mut *ptr.add(index.2), + &mut *ptr.add(index.3), + ) + } +} + +// Neutral element trait + +fn set_identity_pre_images( + clifford: &mut CliffordLike, +) where + for<'life> ::PreImageViewMut<'life>: + PauliBinaryOps, +{ + for index in 0..clifford.num_qubits() { + debug_assert!(clifford.preimage_x_view_mut(index).is_identity()); + clifford.preimage_x_view_mut(index).mul_assign_left_x(index); + debug_assert!(clifford.preimage_z_view_mut(index).is_identity()); + clifford + .preimage_z_view_mut(index) + .mul_assign_right_z(index); + } +} + +impl NeutralElement for CliffordUnitary { + type NeutralElementType = CliffordUnitary; + + fn neutral_element(&self) -> Self::NeutralElementType { + Self::identity(self.num_qubits()) + } + + fn default_size_neutral_element() -> Self::NeutralElementType { + Self::identity(0) + } + + fn neutral_element_of_size(size: usize) -> Self::NeutralElementType { + Self::identity(size) + } +} + +impl NeutralElement for CliffordUnitaryModPauli { + type NeutralElementType = CliffordUnitaryModPauli; + + fn neutral_element(&self) -> Self::NeutralElementType { + Self::identity(self.num_qubits()) + } + + fn default_size_neutral_element() -> Self::NeutralElementType { + Self::identity(0) + } + + fn neutral_element_of_size(size: usize) -> Self::NeutralElementType { + Self::identity(size) + } +} + +// Clifford trait + +fn projective_image_at( + bits: &BitMatrix, + dimension: usize, + qubit_index: usize, + x_bits_start: usize, + z_bits_start: usize, +) -> PauliUnitaryProjective> { + let column = bits.column(qubit_index); + let x_bits = column.slice(x_bits_start..dimension + x_bits_start); + let z_bits = column.slice(z_bits_start..dimension + z_bits_start); + PauliUnitaryProjective::>::from_bits(x_bits, z_bits) +} + +fn projective_x_image_at( + bits: &BitMatrix, + dimension: usize, + qubit_index: usize, +) -> PauliUnitaryProjective> { + projective_image_at( + bits, + dimension, + qubit_index, + z_of_preimage_z_offset(dimension), + z_of_preimage_x_offset(dimension), + ) +} + +fn projective_z_image_at( + bits: &BitMatrix, + dimension: usize, + qubit_index: usize, +) -> PauliUnitaryProjective> { + projective_image_at( + bits, + dimension, + qubit_index, + x_of_preimage_z_offset(dimension), + x_of_preimage_x_offset(dimension), + ) +} + +/// index of `preimage_phase_exponents` that describes phase of preimage x_`index` +#[inline] +fn phase_of_preimage_x(index: usize) -> usize { + 2 * index +} + +/// index of `preimage_phase_exponents` that describes phase of preimage z_`index` +#[inline] +fn phase_of_preimage_z(index: usize) -> usize { + 2 * index + 1 +} + +/// first row where x bits of preimage of x of a clifford unitary are stored +#[inline] +fn x_of_preimage_x_offset(_dimension: usize) -> usize { + 0 +} + +/// first row where z bits of preimage of x of a clifford unitary are stored +#[inline] +fn z_of_preimage_x_offset(dimension: usize) -> usize { + dimension +} + +/// first row where x bits of preimage of z of a clifford unitary are stored +#[inline] +fn x_of_preimage_z_offset(dimension: usize) -> usize { + 2 * dimension +} + +/// first row where z bits of preimage of z of a clifford unitary are stored +#[inline] +fn z_of_preimage_z_offset(dimension: usize) -> usize { + 3 * dimension +} + +/// index of row of bits that describes `z_bits` of preimage z_`index` +#[inline] +fn z_of_pz(dimension: usize, index: usize) -> usize { + index + z_of_preimage_z_offset(dimension) +} + +/// index of row of bits that describes `x_bits` of preimage z_`index` +#[inline] +fn x_of_pz(dimension: usize, index: usize) -> usize { + index + x_of_preimage_z_offset(dimension) +} + +/// index of row of bits that describes `z_bits` of preimage x_`index` +#[inline] +fn z_of_px(dimension: usize, index: usize) -> usize { + index + z_of_preimage_x_offset(dimension) +} + +/// index of row of bits that describes `x_bits` of preimage x_`index` +#[inline] +fn x_of_px(dimension: usize, index: usize) -> usize { + index + x_of_preimage_x_offset(dimension) +} + +#[inline] +fn x_preimage_rows_ids(dimension: usize, qubit_id: usize) -> (usize, usize) { + (x_of_px(dimension, qubit_id), z_of_px(dimension, qubit_id)) +} + +#[inline] +fn z_preimage_rows_ids(dimension: usize, qubit_id: usize) -> (usize, usize) { + (x_of_pz(dimension, qubit_id), z_of_pz(dimension, qubit_id)) +} + +#[inline] +fn xz_preimage_rows_ids(dimension: usize, qubit_id: usize) -> ((usize, usize), (usize, usize)) { + ( + x_preimage_rows_ids(dimension, qubit_id), + z_preimage_rows_ids(dimension, qubit_id), + ) +} + +macro_rules! clifford_common_impl { + () => { + fn preimage_x_bits(&self, x_bits: &impl Bitwise) -> Self::DensePauli { + let mut res = Self::DensePauli::neutral_element_of_size(self.num_qubits()); + super::generic_algos::mul_assign_right_clifford_preimage_x_bits(&mut res, self, x_bits); + res + } + + fn preimage_z_bits(&self, z_bits: &impl Bitwise) -> Self::DensePauli { + let mut res = Self::DensePauli::neutral_element_of_size(self.num_qubits()); + super::generic_algos::mul_assign_right_clifford_preimage_z_bits(&mut res, self, z_bits); + res + } + + fn preimage>( + &self, + pauli: &PauliLike, + ) -> Self::DensePauli { + let mut res = Self::DensePauli::neutral_element_of_size(self.num_qubits()); + super::generic_algos::mul_assign_right_clifford_preimage(&mut res, self, pauli); + res + } + + fn num_qubits(&self) -> usize { + self.bits.columncount() + } + + fn is_valid(&self) -> bool { + super::generic_algos::is_valid_clifford(self) + } + + fn is_identity(&self) -> bool { + super::generic_algos::clifford_is_identity(self) + } + + fn multiply_with(&self, rhs: &Self) -> Self { + super::generic_algos::clifford_multiply_with(self, &rhs) + } + + fn from_preimages(preimages: &[Self::DensePauli]) -> Self { + super::generic_algos::clifford_from_preimages(preimages.into_iter()) + } + + fn preimage_x(&self, qubit_index: usize) -> Self::DensePauli { + self.preimage_x_view(qubit_index).into() + } + + fn preimage_z(&self, qubit_index: usize) -> Self::DensePauli { + self.preimage_z_view(qubit_index).into() + } + + fn random(num_qubits: usize, random_number_generator: &mut impl rand::Rng) -> Self { + let mut res = Self::identity(num_qubits); + let mut random_pauli: Self::DensePauli = + Self::DensePauli::neutral_element_of_size(num_qubits); + for _ in 0..2 * num_qubits + 1 { + random_pauli.set_random_order_two(num_qubits, random_number_generator); + res.left_mul_pauli_exp(&random_pauli); + } + res + } + + fn identity(num_qubits: usize) -> Self { + let mut res = Self::zero(num_qubits); + set_identity_pre_images::(&mut res); + res + } + + fn from_css_preimage_indicators( + x_indicators: &BitMatrix, + z_indicators: &BitMatrix, + ) -> Self { + super::generic_algos::clifford_from_css_preimage_indicators(x_indicators, z_indicators) + } + + fn tensor(&self, rhs: &Self) -> Self { + super::generic_algos::clifford_tensored(self, rhs) + } + + fn is_diagonal(&self, axis: XOrZ) -> bool { + match axis { + XOrZ::X => is_x_diagonal(self), + XOrZ::Z => is_z_diagonal(self), + } + } + + fn is_diagonal_resource_encoder(&self, axis: XOrZ) -> bool { + match axis { + XOrZ::X => is_x_diagonal_resource_encoder(self).is_some(), + XOrZ::Z => is_z_diagonal_resource_encoder(self).is_some(), + } + } + + fn is_css(&self) -> bool { + is_css_clifford(self) + } + + fn symplectic_matrix(&self) -> BitMatrix { + let qubit_count = self.num_qubits(); + let mut res = BitMatrix::zeros(2 * qubit_count, 2 * qubit_count); + for qubit in self.qubits() { + let (x, z) = (self.preimage_x_view(qubit), self.preimage_z_view(qubit)); + res.row_mut(qubit) + .assign_with_offset(x.x_bits(), 0, qubit_count); + res.row_mut(qubit) + .assign_with_offset(x.z_bits(), qubit_count, qubit_count); + res.row_mut(qubit + qubit_count) + .assign_with_offset(z.x_bits(), 0, qubit_count); + res.row_mut(qubit + qubit_count).assign_with_offset( + z.z_bits(), + qubit_count, + qubit_count, + ); + } + res + } + }; +} + +impl Clifford for CliffordUnitary { + type PhaseExponentValue = u8; + type DensePauli = PauliUnitary, u8>; + + fn image_x(&self, qubit_index: usize) -> Self::DensePauli { + let mut image_up_to_phase = self.x_image_view_up_to_phase(0).neutral_element(); + image_up_to_phase.mul_assign_left(&self.x_image_view_up_to_phase(qubit_index)); + super::generic_algos::clifford_image_with_phase(self, image_up_to_phase.to_xz_bits()) + } + + fn image_z(&self, qubit_index: usize) -> Self::DensePauli { + let mut image_up_to_phase = self.z_image_view_up_to_phase(0).neutral_element(); + image_up_to_phase.mul_assign_left(&self.z_image_view_up_to_phase(qubit_index)); + super::generic_algos::clifford_image_with_phase(self, image_up_to_phase.to_xz_bits()) + } + + fn image_x_bits(&self, x_bits: &impl Bitwise) -> Self::DensePauli { + let mut image_up_to_phase = self.x_image_view_up_to_phase(0).neutral_element(); + super::generic_algos::mul_assign_right_clifford_image_x_bits_up_to_phase( + &mut image_up_to_phase, + self, + x_bits, + ); + super::generic_algos::clifford_image_with_phase(self, image_up_to_phase.to_xz_bits()) + } + + fn image_z_bits(&self, z_bits: &impl Bitwise) -> Self::DensePauli { + let mut image_up_to_phase = self.x_image_view_up_to_phase(0).neutral_element(); + super::generic_algos::mul_assign_right_clifford_image_z_bits_up_to_phase( + &mut image_up_to_phase, + self, + z_bits, + ); + super::generic_algos::clifford_image_with_phase(self, image_up_to_phase.to_xz_bits()) + } + + fn image>( + &self, + pauli: &PauliLike, + ) -> Self::DensePauli { + let mut image_up_to_phase = self.x_image_view_up_to_phase(0).neutral_element(); + super::generic_algos::mul_assign_right_clifford_image_up_to_phase( + &mut image_up_to_phase, + self, + pauli, + ); + let mut res = + super::generic_algos::clifford_image_with_phase(self, image_up_to_phase.to_xz_bits()); + res.mul_assign_phase_from(pauli); + res + } + + fn unitary_from_diagonal_resource_state(&self, axis: XOrZ) -> Option { + if let Some(mut res) = blocks_from_diagonal_resource_state(self, axis) { + // make sure pre-images are hermitian + for qubit_index in self.qubits() { + if !res.preimage_z(qubit_index).is_order_two() { + res.preimage_z_view_mut(qubit_index).add_assign_phase_exp(1); + } + if !res.preimage_x(qubit_index).is_order_two() { + res.preimage_x_view_mut(qubit_index).add_assign_phase_exp(1); + } + } + // make sure images signs match + debug_assert!(res.is_valid()); + match axis { + XOrZ::X => { + for qubit_index in self.qubits() { + let mut im_z = self.image_z(qubit_index); + im_z.mul_assign_left(&res.image_z(qubit_index)); + if im_z.xz_phase_exponent() != 0 { + res.left_mul_pauli(&res.image_x(qubit_index)); + } + } + } + XOrZ::Z => { + for qubit_index in self.qubits() { + let mut im_z = self.image_z(qubit_index); + im_z.mul_assign_left(&res.image_x(qubit_index)); + if im_z.xz_phase_exponent() != 0 { + res.left_mul_pauli(&res.image_z(qubit_index)); + } + } + } + } + Some(res) + } else { + None + } + } + + fn zero(num_qubits: usize) -> Self { + CliffordUnitary { + bits: BitMatrix::::zeros(num_qubits * 4, num_qubits), + preimage_phase_exponents: vec![0u8; 2 * num_qubits], + } + } + + clifford_common_impl! {} + + fn inverse(&self) -> Self { + inverse_with_signs(self) + } +} + +impl PreimageViews for CliffordUnitary { + type PhaseExponentValue = u8; + type PreImageView<'life> = PauliUnitary, &'life u8>; + type ImageViewUpToPhase<'life> = PauliUnitaryProjective>; + + fn preimage_x_view(&self, qubit_index: usize) -> Self::PreImageView<'_> { + let xz_bits = self + .bits + .rows2(x_preimage_rows_ids(self.num_qubits(), qubit_index)); + Self::PreImageView::from_bits_tuple( + xz_bits, + &self.preimage_phase_exponents[phase_of_preimage_x(qubit_index)], + ) + } + + fn preimage_z_view(&self, qubit_index: usize) -> Self::PreImageView<'_> { + let xz_bits = self + .bits + .rows2(z_preimage_rows_ids(self.num_qubits(), qubit_index)); + Self::PreImageView::from_bits_tuple( + xz_bits, + &self.preimage_phase_exponents[phase_of_preimage_z(qubit_index)], + ) + } + + fn x_image_view_up_to_phase(&self, qubit_index: usize) -> Self::ImageViewUpToPhase<'_> { + projective_x_image_at(&self.bits, self.num_qubits(), qubit_index) + } + + fn z_image_view_up_to_phase(&self, qubit_index: usize) -> Self::ImageViewUpToPhase<'_> { + projective_z_image_at(&self.bits, self.num_qubits(), qubit_index) + } +} + +fn inverse_with_signs( + from: &CliffordLikeFrom, +) -> CliffordLikeTo +where + CliffordLikeTo: Clifford + PreimageViews + MutablePreImages, + for<'life> ::PreImageViewMut<'life>: + PauliBinaryOps, +{ + let mut res = CliffordLikeTo::identity(from.num_qubits()); + for qubit_index in 0..from.num_qubits() { + res.preimage_x_view_mut(qubit_index) + .assign(&from.image_x(qubit_index)); + res.preimage_z_view_mut(qubit_index) + .assign(&from.image_z(qubit_index)); + } + res +} + +impl Clifford for CliffordUnitaryModPauli { + type PhaseExponentValue = (); + type DensePauli = PauliUnitaryProjective>; + // type SparsePauli = PauliUnitaryProjective; + + fn image_x(&self, qubit_index: usize) -> Self::DensePauli { + let mut res = Self::DensePauli::neutral_element_of_size(self.num_qubits()); + res.assign(&self.x_image_view_up_to_phase(qubit_index)); + res + } + + fn image_z(&self, qubit_index: usize) -> Self::DensePauli { + let mut res = Self::DensePauli::neutral_element_of_size(self.num_qubits()); + res.assign(&self.z_image_view_up_to_phase(qubit_index)); + res + } + + fn image_x_bits(&self, x_bits: &impl Bitwise) -> Self::DensePauli { + let mut res = Self::DensePauli::neutral_element_of_size(self.num_qubits()); + super::generic_algos::mul_assign_right_clifford_image_x_bits_up_to_phase( + &mut res, self, x_bits, + ); + res + } + + fn image_z_bits(&self, z_bits: &impl Bitwise) -> Self::DensePauli { + let mut res = Self::DensePauli::neutral_element_of_size(self.num_qubits()); + super::generic_algos::mul_assign_right_clifford_image_z_bits_up_to_phase( + &mut res, self, z_bits, + ); + res + } + + fn image>( + &self, + pauli: &PauliLike, + ) -> Self::DensePauli { + let mut res = Self::DensePauli::neutral_element_of_size(self.num_qubits()); + super::generic_algos::mul_assign_right_clifford_image_up_to_phase(&mut res, self, pauli); + res + } + + fn zero(num_qubits: usize) -> Self { + CliffordUnitaryModPauli { + bits: BitMatrix::::zeros(num_qubits * 4, num_qubits), + } + } + + clifford_common_impl! {} + + fn inverse(&self) -> Self { + super::generic_algos::clifford_inverse_up_to_signs(self) + } + + fn unitary_from_diagonal_resource_state(&self, axis: XOrZ) -> Option { + blocks_from_diagonal_resource_state(self, axis) + } +} + +impl PreimageViews for CliffordUnitaryModPauli { + type PreImageView<'life> = PauliUnitaryProjective>; + type ImageViewUpToPhase<'life> = PauliUnitaryProjective>; + + fn preimage_x_view(&self, qubit_index: usize) -> Self::PreImageView<'_> { + let xz_bits = self + .bits + .rows2(x_preimage_rows_ids(self.num_qubits(), qubit_index)); + Self::PreImageView::from_bits_tuple(xz_bits) + } + + fn preimage_z_view(&self, qubit_index: usize) -> Self::PreImageView<'_> { + let xz_bits = self + .bits + .rows2(z_preimage_rows_ids(self.num_qubits(), qubit_index)); + Self::PreImageView::from_bits_tuple(xz_bits) + } + + fn x_image_view_up_to_phase(&self, qubit_index: usize) -> Self::ImageViewUpToPhase<'_> { + projective_x_image_at(&self.bits, self.num_qubits(), qubit_index) + } + + fn z_image_view_up_to_phase(&self, qubit_index: usize) -> Self::ImageViewUpToPhase<'_> { + projective_z_image_at(&self.bits, self.num_qubits(), qubit_index) + } + + type PhaseExponentValue = (); +} + +// CliffordMutable trait + +fn swap_clifford_bits( + dimension: usize, + qubit1_id: usize, + qubit2_id: usize, + bits: &mut BitMatrix, +) { + let ((a1, b1), (c1, d1)) = xz_preimage_rows_ids(dimension, qubit1_id); + let ((a2, b2), (c2, d2)) = xz_preimage_rows_ids(dimension, qubit2_id); + bits.swap_rows(a1, a2); + bits.swap_rows(b1, b2); + bits.swap_rows(c1, c2); + bits.swap_rows(d1, d2); +} + +fn hadamard_clifford_bits( + dimension: usize, + qubit_id: usize, + bits: &mut BitMatrix, +) { + let (x1, x2) = x_preimage_rows_ids(dimension, qubit_id); + let (z1, z2) = z_preimage_rows_ids(dimension, qubit_id); + bits.swap_rows(x1, z1); + bits.swap_rows(x2, z2); +} + +impl MutablePreImages for CliffordUnitaryModPauli +where + for<'life> PauliUnitaryProjective>: + PauliBinaryOps + Pauli, +{ + type PhaseExponentValue = (); + type PreImageViewMut<'life> = PauliUnitaryProjective>; + + fn preimage_x_view_mut(&mut self, index: usize) -> Self::PreImageViewMut<'_> { + let xz_bits = self + .bits + .rows2_mut(x_preimage_rows_ids(self.num_qubits(), index)); + Self::PreImageViewMut::from_bits_tuple(xz_bits) + } + + fn preimage_z_view_mut(&mut self, index: usize) -> Self::PreImageViewMut<'_> { + let xz_bits = self + .bits + .rows2_mut(z_preimage_rows_ids(self.num_qubits(), index)); + Self::PreImageViewMut::from_bits_tuple(xz_bits) + } + + fn preimage_xz_views_mut( + &mut self, + index: usize, + ) -> (Self::PreImageViewMut<'_>, Self::PreImageViewMut<'_>) { + unsafe { + let xz_ids = xz_preimage_rows_ids(self.num_qubits(), index); + let (xz_of_x, xz_of_z) = split2(self.bits.rows4_mut(concat2(xz_ids))); + ( + Self::PreImageViewMut::from_bits_tuple(xz_of_x), + Self::PreImageViewMut::from_bits_tuple(xz_of_z), + ) + } + } + + #[allow(clippy::similar_names)] + fn preimage_xz_views_mut_distinct( + &mut self, + index: (usize, usize), + ) -> ( + (Self::PreImageViewMut<'_>, Self::PreImageViewMut<'_>), + (Self::PreImageViewMut<'_>, Self::PreImageViewMut<'_>), + ) { + assert_ne!(index.0, index.1); + let (xz_of_x0_ids, xz_of_z0_ids) = xz_preimage_rows_ids(self.num_qubits(), index.0); + let (xz_of_x1_ids, xz_of_z1_ids) = xz_preimage_rows_ids(self.num_qubits(), index.1); + unsafe { + let (xz_of_x0, xz_of_z0, xz_of_x1, xz_of_z1) = split4(self.bits.rows8_mut(concat4(( + xz_of_x0_ids, + xz_of_z0_ids, + xz_of_x1_ids, + xz_of_z1_ids, + )))); + ( + ( + Self::PreImageViewMut::from_bits_tuple(xz_of_x0), + Self::PreImageViewMut::from_bits_tuple(xz_of_z0), + ), + ( + Self::PreImageViewMut::from_bits_tuple(xz_of_x1), + Self::PreImageViewMut::from_bits_tuple(xz_of_z1), + ), + ) + } + } +} + +macro_rules! clifford_mutable_common_impl { + () => { + fn left_mul_root_z(&mut self, qubit_id: usize) { + super::generic_algos::clifford_left_mul_eq_root_z(self, qubit_id) + } + + fn left_mul_root_z_inverse(&mut self, qubit_id: usize) { + super::generic_algos::clifford_left_mul_eq_root_z_inverse(self, qubit_id) + } + + fn left_mul_root_x(&mut self, qubit_id: usize) { + super::generic_algos::clifford_left_mul_eq_root_x(self, qubit_id) + } + + fn left_mul_root_x_inverse(&mut self, qubit_id: usize) { + super::generic_algos::clifford_left_mul_eq_root_x_inverse(self, qubit_id) + } + + fn left_mul_root_y(&mut self, qubit_id: usize) { + super::generic_algos::clifford_left_mul_eq_root_y(self, qubit_id) + } + + fn left_mul_root_y_inverse(&mut self, qubit_id: usize) { + super::generic_algos::clifford_left_mul_eq_root_y_inverse(self, qubit_id) + } + + fn left_mul_cx(&mut self, control_qubit_id: usize, target_qubit_id: usize) { + super::generic_algos::clifford_left_mul_eq_cnot(self, control_qubit_id, target_qubit_id) + } + + fn left_mul_cz(&mut self, control_qubit_id: usize, target_qubit_id: usize) { + super::generic_algos::clifford_left_mul_eq_cz(self, control_qubit_id, target_qubit_id) + } + + fn left_mul_prepare_bell(&mut self, control_qubit_id: usize, target_qubit_id: usize) { + super::generic_algos::clifford_left_mul_eq_prepare_bell( + self, + control_qubit_id, + target_qubit_id, + ) + } + + fn left_mul(&mut self, unitary_op: UnitaryOp, support: &[usize]) { + use crate::UnitaryOp::*; + match unitary_op { + I => {} + X => { + assert_1q_gate!(support); + self.left_mul_x(support[0]); + } + Y => { + assert_1q_gate!(support); + self.left_mul_y(support[0]); + } + Z => { + assert_1q_gate!(support); + self.left_mul_z(support[0]); + } + SqrtX => { + assert_1q_gate!(support); + self.left_mul_root_x(support[0]); + } + SqrtXInv => { + assert_1q_gate!(support); + self.left_mul_root_x_inverse(support[0]); + } + SqrtY => { + assert_1q_gate!(support); + self.left_mul_root_y(support[0]); + } + SqrtYInv => { + assert_1q_gate!(support); + self.left_mul_root_y_inverse(support[0]); + } + SqrtZ => { + assert_1q_gate!(support); + self.left_mul_root_z(support[0]); + } + SqrtZInv => { + assert_1q_gate!(support); + self.left_mul_root_z_inverse(support[0]); + } + Hadamard => { + assert_1q_gate!(support); + self.left_mul_hadamard(support[0]); + } + Swap => { + assert_2q_gate!(support); + self.left_mul_swap(support[0], support[1]); + } + ControlledX => { + assert_2q_gate!(support); + self.left_mul_cx(support[0], support[1]); + } + ControlledZ => { + assert_2q_gate!(support); + self.left_mul_cz(support[0], support[1]); + } + PrepareBell => { + assert_2q_gate!(support); + self.left_mul_prepare_bell(support[0], support[1]); + } + } + } + }; +} + +macro_rules! clifford_mutable_common_multi_qubit_impl { + ($DensePauli:ty) => { + fn left_mul_pauli_exp>( + &mut self, + pauli: &PauliLike, + ) { + if self.num_qubits() > 0 { + super::generic_algos::clifford_left_mul_eq_pauli_exp(self, pauli); + } + } + + fn left_mul_pauli(&mut self, pauli: &PauliLike) { + for qubit_x_index in pauli.x_bits().support() { + self.left_mul_x(qubit_x_index) + } + for qubit_z_index in pauli.z_bits().support() { + self.left_mul_z(qubit_z_index) + } + } + + fn left_mul_controlled_pauli< + PauliLike: Pauli, + >( + &mut self, + control: &PauliLike, + target: &PauliLike, + ) { + if self.num_qubits() > 0 { + super::generic_algos::clifford_left_mul_eq_controlled_pauli(self, control, target); + } + } + + fn left_mul_permutation(&mut self, permutation: &[usize], support: &[usize]) { + assert! {is_permutation(permutation)}; + assert! {has_no_duplicates(support)}; + assert_eq! {permutation.len(), support.len()}; + let mut new_preimages = Vec::<($DensePauli, $DensePauli)>::with_capacity(support.len()); + for elt_index in 0..support.len() { + new_preimages.push(( + self.preimage_x_view(support[permutation[elt_index]]).into(), + self.preimage_z_view(support[permutation[elt_index]]).into(), + )); + } + for (elt_index, elt) in support.into_iter().enumerate() { + ::preimage_x_view_mut(self, *elt) + .assign(&new_preimages[elt_index].0); + ::preimage_z_view_mut(self, *elt) + .assign(&new_preimages[elt_index].1); + } + } + }; +} + +fn reindexed_support( + new_index: &[usize], + bit_support: impl sorted_iter::SortedIterator, +) -> IndexSet { + bit_support.map(|bit| new_index[bit]).collect() +} + +fn sparse_projective_pauli_on_support( + pauli: &impl Pauli, + support: &[usize], +) -> PauliUnitaryProjective { + PauliUnitaryProjective::::from_bits( + reindexed_support(support, pauli.x_bits().support()), + reindexed_support(support, pauli.z_bits().support()), + ) +} + +fn sparse_pauli_on_support(pauli: &PauliLike, support: &[usize]) -> SparsePauli +where + SparsePauli: Pauli, +{ + let mut res = SparsePauli::from_bits( + reindexed_support(support, pauli.x_bits().support()), + reindexed_support(support, pauli.z_bits().support()), + 0, + ); + res.assign_phase_from(pauli); + res +} + +fn is_permutation(sequence: &[usize]) -> bool { + let mut seq = sequence.to_vec(); + seq.sort_unstable(); + if seq[0] != 0 { + return false; + } + for j in 0..seq.len() - 1 { + if seq[j] + 1 != seq[j + 1] { + return false; + } + } + true +} + +fn has_no_duplicates(sequence: &[usize]) -> bool { + let mut seq = sequence.to_vec(); + seq.sort_unstable(); + for j in 0..seq.len() - 1 { + if seq[j] == seq[j + 1] { + return false; + } + } + true +} + +impl CliffordMutable for CliffordUnitaryModPauli { + clifford_mutable_common_impl!(); + clifford_mutable_common_multi_qubit_impl!(::DensePauli); + + fn left_mul_hadamard(&mut self, qubit_id: usize) { + hadamard_clifford_bits(self.num_qubits(), qubit_id, &mut self.bits); + } + + fn left_mul_swap(&mut self, qubit1_id: usize, qubit2_id: usize) { + swap_clifford_bits(self.num_qubits(), qubit1_id, qubit2_id, &mut self.bits); + } + + fn left_mul_x(&mut self, _qubit_index: usize) {} + + fn left_mul_y(&mut self, _qubit_index: usize) {} + + fn left_mul_z(&mut self, _qubit_index: usize) {} + + #[allow(clippy::similar_names)] + fn left_mul_clifford( + &mut self, + clifford: &CliffordLike, + support: &[usize], + ) { + assert_eq! {support.len(),clifford.num_qubits()}; + assert!(has_no_duplicates(support)); + + let mut new_preimages = Vec::<( + ::DensePauli, + ::DensePauli, + )>::with_capacity(support.len()); + for elt_index in 0..support.len() { + let px_on_support = + sparse_projective_pauli_on_support(&clifford.preimage_x_view(elt_index), support); + let pz_on_support = + sparse_projective_pauli_on_support(&clifford.preimage_z_view(elt_index), support); + new_preimages.push((self.preimage(&px_on_support), self.preimage(&pz_on_support))); + } + + for (elt_index, elt) in support.iter().enumerate() { + self.preimage_x_view_mut(*elt) + .assign(&new_preimages[elt_index].0); + self.preimage_z_view_mut(*elt) + .assign(&new_preimages[elt_index].1); + } + } + + type PhaseExponentValue = (); +} + +impl MutablePreImages for CliffordUnitary +where + for<'life> PauliUnitary, &'life mut u8>: + PauliBinaryOps + Pauli, +{ + type PreImageViewMut<'life> = + PauliUnitary, &'life mut u8>; + + fn preimage_x_view_mut(&mut self, index: usize) -> Self::PreImageViewMut<'_> { + let xz_bits = self + .bits + .rows2_mut(x_preimage_rows_ids(self.num_qubits(), index)); + Self::PreImageViewMut::from_bits_tuple( + xz_bits, + &mut self.preimage_phase_exponents[phase_of_preimage_x(index)], + ) + } + + fn preimage_z_view_mut(&mut self, index: usize) -> Self::PreImageViewMut<'_> { + let xz_bits = self + .bits + .rows2_mut(z_preimage_rows_ids(self.num_qubits(), index)); + Self::PreImageViewMut::from_bits_tuple( + xz_bits, + &mut self.preimage_phase_exponents[phase_of_preimage_z(index)], + ) + } + + fn preimage_xz_views_mut( + &mut self, + index: usize, + ) -> (Self::PreImageViewMut<'_>, Self::PreImageViewMut<'_>) { + unsafe { + let (xz_of_x, xz_of_z) = split2( + self.bits + .rows4_mut(concat2(xz_preimage_rows_ids(self.num_qubits(), index))), + ); + let (px, pz) = tuple2_from_vec( + &mut self.preimage_phase_exponents, + (phase_of_preimage_x(index), phase_of_preimage_z(index)), + ); + ( + Self::PreImageViewMut::from_bits_tuple(xz_of_x, px), + Self::PreImageViewMut::from_bits_tuple(xz_of_z, pz), + ) + } + } + + #[allow(clippy::similar_names)] + fn preimage_xz_views_mut_distinct( + &mut self, + index: (usize, usize), + ) -> ( + (Self::PreImageViewMut<'_>, Self::PreImageViewMut<'_>), + (Self::PreImageViewMut<'_>, Self::PreImageViewMut<'_>), + ) { + let (xz_of_x0_ids, xz_of_z0_ids) = xz_preimage_rows_ids(self.num_qubits(), index.0); + let (xz_of_x1_ids, xz_of_z1_ids) = xz_preimage_rows_ids(self.num_qubits(), index.1); + unsafe { + let (xz_of_x0, xz_of_z0, xz_of_x1, xz_of_z1) = split4(self.bits.rows8_mut(concat4(( + xz_of_x0_ids, + xz_of_z0_ids, + xz_of_x1_ids, + xz_of_z1_ids, + )))); + let (px0, pz0, px1, pz1) = tuple4_from_vec( + &mut self.preimage_phase_exponents, + ( + phase_of_preimage_x(index.0), + phase_of_preimage_z(index.0), + phase_of_preimage_x(index.1), + phase_of_preimage_z(index.1), + ), + ); + ( + ( + Self::PreImageViewMut::from_bits_tuple(xz_of_x0, px0), + Self::PreImageViewMut::from_bits_tuple(xz_of_z0, pz0), + ), + ( + Self::PreImageViewMut::from_bits_tuple(xz_of_x1, px1), + Self::PreImageViewMut::from_bits_tuple(xz_of_z1, pz1), + ), + ) + } + } + + type PhaseExponentValue = u8; +} + +impl CliffordMutable for CliffordUnitary { + fn left_mul_hadamard(&mut self, qubit_id: usize) { + hadamard_clifford_bits(self.num_qubits(), qubit_id, &mut self.bits); + self.preimage_phase_exponents + .swap(phase_of_preimage_x(qubit_id), phase_of_preimage_z(qubit_id)); + } + + fn left_mul_swap(&mut self, qubit1_id: usize, qubit2_id: usize) { + swap_clifford_bits(self.num_qubits(), qubit1_id, qubit2_id, &mut self.bits); + self.preimage_phase_exponents.swap( + phase_of_preimage_x(qubit1_id), + phase_of_preimage_x(qubit2_id), + ); + self.preimage_phase_exponents.swap( + phase_of_preimage_z(qubit1_id), + phase_of_preimage_z(qubit2_id), + ); + } + + fn left_mul_x(&mut self, qubit_id: usize) { + super::generic_algos::clifford_left_mul_eq_x(self, qubit_id); + } + + fn left_mul_y(&mut self, qubit_id: usize) { + super::generic_algos::clifford_left_mul_eq_y(self, qubit_id); + } + + fn left_mul_z(&mut self, qubit_id: usize) { + super::generic_algos::clifford_left_mul_eq_z(self, qubit_id); + } + + clifford_mutable_common_impl!(); + clifford_mutable_common_multi_qubit_impl!(::DensePauli); + + #[allow(clippy::similar_names)] + fn left_mul_clifford< + CliffordLike: Clifford + + PreimageViews, + >( + &mut self, + clifford: &CliffordLike, + support: &[usize], + ) { + assert_eq! {support.len(),clifford.num_qubits()}; + assert! {has_no_duplicates(support)}; + + let mut new_preimages = Vec::<( + ::DensePauli, + ::DensePauli, + )>::with_capacity(support.len()); + for elt_index in 0..support.len() { + let px_on_support = + sparse_pauli_on_support(&clifford.preimage_x_view(elt_index), support); + let pz_on_support = + sparse_pauli_on_support(&clifford.preimage_z_view(elt_index), support); + new_preimages.push((self.preimage(&px_on_support), self.preimage(&pz_on_support))); + } + + for (elt_index, elt) in support.iter().enumerate() { + self.preimage_x_view_mut(*elt) + .assign(&new_preimages[elt_index].0); + self.preimage_z_view_mut(*elt) + .assign(&new_preimages[elt_index].1); + } + } + + type PhaseExponentValue = u8; +} + +fn clifford_display_fmt<'life, CliffordLike: Clifford + PreimageViews>( + clifford: &'life CliffordLike, + f: &mut std::fmt::Formatter<'_>, +) -> std::fmt::Result +where + CliffordLike::PreImageView<'life>: fmt::Display, + CliffordLike::DensePauli: fmt::Display, +{ + if f.alternate() { + for index in 0..clifford.num_qubits() { + let index_str = subscript_digits(index); + write!(f, "Z{}→{:#}, ", index_str, clifford.image_z(index))?; + } + for index in 0..clifford.num_qubits() { + let index_str = subscript_digits(index); + write!(f, "X{}→{:#}, ", index_str, clifford.image_x(index))?; + } + Ok(()) + } else { + for index in 0..clifford.num_qubits() { + let index_str = subscript_digits(index); + write!(f, "Z{}→{}, ", index_str, clifford.image_z(index))?; + } + for index in 0..clifford.num_qubits() { + let index_str = subscript_digits(index); + write!(f, "X{}→{}, ", index_str, clifford.image_x(index))?; + } + Ok(()) + } +} + +impl Display for CliffordUnitary { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + clifford_display_fmt(self, f) + } +} + +impl Display for CliffordUnitaryModPauli { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + clifford_display_fmt(self, f) + } +} + +impl Debug for CliffordUnitary { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + clifford_display_fmt(self, f) + } +} + +impl Debug for CliffordUnitaryModPauli { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + clifford_display_fmt(self, f) + } +} + +fn clifford_from_str( + s: &str, +) -> Result +where + DensePauliLike: Pauli + + NeutralElement + + Clone + + PauliBinaryOps + + fmt::Display, + SparsePauliLike: Pauli + std::str::FromStr, + CliffordLike: Clifford, +{ + let trimmed = s.trim().trim_end_matches(','); + let pauli_images = trimmed.split(['\n', ',']); + let mut image_pairs = Vec::new(); + for pauli_image in pauli_images { + let image_parts = pauli_image.split([':', '→']).collect::>(); + if image_parts.len() == 2 { + let from = image_parts[0].parse::(); + let to = image_parts[1].parse::(); + if let (Ok(pauli_from), Ok(pauli_to)) = (from, to) { + image_pairs.push((pauli_from, pauli_to)); + } else { + return Err(CliffordStringParsingError); + } + } else { + return Err(CliffordStringParsingError); + } + } + if image_pairs.len() % 2 == 0 { + let qubit_count = image_pairs.len() / 2; + let mut preimages = + vec![DensePauliLike::neutral_element_of_size(qubit_count); 2 * qubit_count]; + for (pauli_from, pauli_to) in image_pairs { + if pauli_from.weight() == 1 { + if let Some(qubit_id) = pauli_from.support().next() { + if pauli_from.is_pauli_x(qubit_id) { + preimages[2 * qubit_id].assign(&pauli_to); + } else if pauli_from.is_pauli_z(qubit_id) { + preimages[2 * qubit_id + 1].assign(&pauli_to); + } else { + return Err(CliffordStringParsingError); + } + } else { + return Err(CliffordStringParsingError); + } + } else { + return Err(CliffordStringParsingError); + } + } + let clifford = CliffordLike::from_preimages(&preimages); + if !clifford.is_valid() { + return Err(CliffordStringParsingError); + } + Ok(clifford.inverse()) + } else { + Err(CliffordStringParsingError) + } +} + +impl FromStr for CliffordUnitary { + type Err = CliffordStringParsingError; + + fn from_str(s: &str) -> Result { + clifford_from_str::(s) + } +} + +impl FromStr for CliffordUnitaryModPauli { + type Err = CliffordStringParsingError; + + fn from_str(s: &str) -> Result { + clifford_from_str::(s) + } +} + +impl> From for CliffordUnitary +where + ::DensePauli: From, +{ + fn from(value: T) -> Self { + let mut preimages = Vec::new(); + for j in value.qubits() { + preimages.push(value.preimage_x(j).into()); + preimages.push(value.preimage_z(j).into()); + } + Self::from_preimages(&preimages) + } +} + +impl> From for CliffordUnitaryModPauli +where + ::DensePauli: From, +{ + fn from(value: T) -> Self { + let mut preimages = Vec::new(); + for j in value.qubits() { + preimages.push(value.preimage_x(j).into()); + preimages.push(value.preimage_z(j).into()); + } + Self::from_preimages(&preimages) + } +} + +/// Multiplication traits +impl Mul for &CliffordUnitary { + type Output = CliffordUnitary; + + fn mul(self, other: Self) -> CliffordUnitary { + self.multiply_with(other) + } +} + +impl<'life, Bits: PauliBits, _Phase: PhaseExponent> Mul<&'life mut CliffordUnitary> + for &PauliUnitary +{ + type Output = (); + + fn mul(self, clifford: &'life mut CliffordUnitary) -> Self::Output { + clifford.left_mul_pauli(self); + // for qubit_index in self.x_bits().support() { + // let mut clifford_preimage = clifford.z_preimage_at_mut(qubit_index); + // clifford_preimage *= Phase::from_exponent(2u8); + // } + // for qubit_index in self.z_bits().support() { + // let mut clifford_preimage = clifford.x_preimage_at_mut(qubit_index); + // clifford_preimage *= Phase::from_exponent(2u8); + // } + } +} + +impl Mul<&mut CliffordUnitary> + for &ControlledPauli +{ + type Output = (); + + fn mul(self, clifford: &mut CliffordUnitary) -> Self::Output { + clifford.left_mul_controlled_pauli(&self.0, &self.1); + } +} + +impl Mul<&mut CliffordUnitary> + for &PauliExponent +{ + type Output = (); + + fn mul(self, clifford: &mut CliffordUnitary) -> Self::Output { + clifford.left_mul_pauli_exp(&self.0); + } +} + +impl Mul<&Swap> for CliffordUnitary { + type Output = CliffordUnitary; + + fn mul(mut self, swap: &Swap) -> CliffordUnitary { + self.bits.swap_columns(swap.0, swap.1); + self + } +} + +impl Mul for CliffordUnitary { + type Output = CliffordUnitary; + + fn mul(self, swap: Swap) -> CliffordUnitary { + self * &swap + } +} + +impl Mul<&mut CliffordUnitary> for &Swap { + type Output = (); + + fn mul(self, clifford: &mut CliffordUnitary) -> Self::Output { + clifford.left_mul_swap(self.0, self.1); + } +} + +impl Mul<&mut CliffordUnitary> for &Hadamard { + type Output = (); + + fn mul(self, clifford: &mut CliffordUnitary) -> Self::Output { + clifford.left_mul_hadamard(self.0); + } +} + +impl + CliffordModPauliBatch +{ + #[must_use] + pub fn num_qubits(&self) -> usize { + QUBIT_COUNT + } + + pub fn preimage_bits_mut( + &mut self, + qubit_index: usize, + axis_index: usize, + preimage_index: usize, + ) -> &mut [u64; WORD_COUNT] { + &mut self.preimages[2 * preimage_index + axis_index][qubit_index] + } + + #[must_use] + pub fn preimage_bits( + &self, + qubit_index: usize, + axis_index: usize, + preimage_index: usize, + ) -> &[u64; WORD_COUNT] { + &self.preimages[2 * preimage_index + axis_index][qubit_index] + } + + fn preimage>( + &self, + pauli: &PauliLike, + ) -> PauliUnitaryProjective<[u64; WORD_COUNT]> { + let mut res = + PauliUnitaryProjective::<[u64; WORD_COUNT]>::neutral_element_of_size(self.num_qubits()); + super::generic_algos::mul_assign_right_clifford_preimage(&mut res, self, pauli); + res + } + + pub fn clear(&mut self) { + unsafe { + std::ptr::write_bytes(self.preimages.as_mut_ptr(), 0, 4); + } + } +} + +impl Default + for CliffordModPauliBatch +{ + fn default() -> Self { + Self { + preimages: [[[0u64; WORD_COUNT]; QUBIT_COUNT]; 4], + } + } +} + +unsafe fn get_pair_mut_unsafe(v: &mut [T; 4], i: usize) -> (&mut T, &mut T) { + let ptr = v as *mut [T; 4]; + (&mut (*ptr)[i], &mut (*ptr)[i + 1]) +} + +unsafe fn get_quad_mut_unsafe(v: &mut [T; 4]) -> (&mut T, &mut T, &mut T, &mut T) { + let ptr = v as *mut [T; 4]; + ( + &mut (*ptr)[0], + &mut (*ptr)[1], + &mut (*ptr)[2], + &mut (*ptr)[3], + ) +} + +unsafe fn get_tuple_mut_unsafe( + v: &mut [T; SIZE], + i: (usize, usize), +) -> (&mut T, &mut T) { + let ptr = v as *mut [T; SIZE]; + (&mut (*ptr)[i.0], &mut (*ptr)[i.1]) +} + +impl MutablePreImages + for CliffordModPauliBatch +{ + type PreImageViewMut<'life> = PauliUnitaryProjective<&'life mut [u64; WORD_COUNT]>; + + fn preimage_x_view_mut(&mut self, qubit_index: usize) -> Self::PreImageViewMut<'_> { + unsafe { + let (x, z) = get_pair_mut_unsafe(&mut self.preimages, 0); + PauliUnitaryProjective::from_bits(&mut x[qubit_index], &mut z[qubit_index]) + } + } + + fn preimage_z_view_mut(&mut self, qubit_index: usize) -> Self::PreImageViewMut<'_> { + unsafe { + let (x, z) = get_pair_mut_unsafe(&mut self.preimages, 2); + PauliUnitaryProjective::from_bits(&mut x[qubit_index], &mut z[qubit_index]) + } + } + + fn preimage_xz_views_mut( + &mut self, + index: usize, + ) -> (Self::PreImageViewMut<'_>, Self::PreImageViewMut<'_>) { + unsafe { + let (xx, xz, zx, zz) = get_quad_mut_unsafe(&mut self.preimages); + ( + PauliUnitaryProjective::from_bits(&mut xx[index], &mut xz[index]), + PauliUnitaryProjective::from_bits(&mut zx[index], &mut zz[index]), + ) + } + } + + #[allow(clippy::similar_names)] + fn preimage_xz_views_mut_distinct( + &mut self, + index: (usize, usize), + ) -> crate::Tuple2x2> { + debug_assert!(index.0 != index.1); + unsafe { + let (xx, xz, zx, zz) = get_quad_mut_unsafe(&mut self.preimages); + let (xx0, xx1) = get_tuple_mut_unsafe(xx, index); + let (xz0, xz1) = get_tuple_mut_unsafe(xz, index); + let (zx0, zx1) = get_tuple_mut_unsafe(zx, index); + let (zz0, zz1) = get_tuple_mut_unsafe(zz, index); + ( + ( + PauliUnitaryProjective::from_bits(xx0, xz0), + PauliUnitaryProjective::from_bits(zx0, zz0), + ), + ( + PauliUnitaryProjective::from_bits(xx1, xz1), + PauliUnitaryProjective::from_bits(zx1, zz1), + ), + ) + } + } + + type PhaseExponentValue = (); +} + +impl PreimageViews + for CliffordModPauliBatch +{ + type PreImageView<'life> = PauliUnitaryProjective<&'life [u64; WORD_COUNT]>; + type ImageViewUpToPhase<'life> = PauliUnitaryProjective<&'life [u64; WORD_COUNT]>; + + fn preimage_x_view(&self, index: usize) -> Self::PreImageView<'_> { + PauliUnitaryProjective::from_bits(&self.preimages[0][index], &self.preimages[1][index]) + } + + fn preimage_z_view(&self, index: usize) -> Self::PreImageView<'_> { + PauliUnitaryProjective::from_bits(&self.preimages[2][index], &self.preimages[3][index]) + } + + fn x_image_view_up_to_phase(&self, _qubit_index: usize) -> Self::ImageViewUpToPhase<'_> { + todo!() + } + + fn z_image_view_up_to_phase(&self, _qubit_index: usize) -> Self::ImageViewUpToPhase<'_> { + todo!() + } + + type PhaseExponentValue = (); +} + +impl CliffordMutable + for CliffordModPauliBatch +{ + clifford_mutable_common_impl!(); + + fn left_mul_x(&mut self, _qubit_index: usize) {} + + fn left_mul_y(&mut self, _qubit_index: usize) {} + + fn left_mul_z(&mut self, _qubit_index: usize) {} + + #[allow(clippy::similar_names)] + fn left_mul_hadamard(&mut self, qubit_index: usize) { + unsafe { + let (xx, xz, zx, zz) = get_quad_mut_unsafe(&mut self.preimages); + std::mem::swap(&mut xx[qubit_index], &mut zx[qubit_index]); + std::mem::swap(&mut xz[qubit_index], &mut zz[qubit_index]); + } + } + + #[allow(clippy::similar_names)] + fn left_mul_swap(&mut self, qubit_index1: usize, qubit_index2: usize) { + unsafe { + let (xx, xz, zx, zz) = get_quad_mut_unsafe(&mut self.preimages); + let index = (qubit_index1, qubit_index2); + let (xx0, xx1) = get_tuple_mut_unsafe(xx, index); + std::mem::swap(xx0, xx1); + let (xz0, xz1) = get_tuple_mut_unsafe(xz, index); + std::mem::swap(xz0, xz1); + let (zx0, zx1) = get_tuple_mut_unsafe(zx, index); + std::mem::swap(zx0, zx1); + let (zz0, zz1) = get_tuple_mut_unsafe(zz, index); + std::mem::swap(zz0, zz1); + } + } + + #[allow(clippy::similar_names)] + fn left_mul_clifford( + &mut self, + clifford: &CliffordLike, + support: &[usize], + ) { + assert_eq! {support.len(),clifford.num_qubits()}; + assert!(has_no_duplicates(support)); + + let mut new_preimages = Vec::<( + PauliUnitaryProjective<[u64; WORD_COUNT]>, + PauliUnitaryProjective<[u64; WORD_COUNT]>, + )>::with_capacity(support.len()); + for elt_index in 0..support.len() { + let px_on_support = + sparse_projective_pauli_on_support(&clifford.preimage_x_view(elt_index), support); + let pz_on_support = + sparse_projective_pauli_on_support(&clifford.preimage_z_view(elt_index), support); + new_preimages.push((self.preimage(&px_on_support), self.preimage(&pz_on_support))); + } + + for (elt_index, elt) in support.iter().enumerate() { + self.preimage_x_view_mut(*elt) + .assign(&new_preimages[elt_index].0); + self.preimage_z_view_mut(*elt) + .assign(&new_preimages[elt_index].1); + } + } + + clifford_mutable_common_multi_qubit_impl!(PauliUnitaryProjective<[u64; WORD_COUNT]>); + + type PhaseExponentValue = (); +} + +fn image_block_range(qubit_count: usize, bits: XOrZ, image: XOrZ) -> std::ops::Range { + let offset = block_offset(qubit_count, bits, image); + offset..offset + qubit_count +} + +fn image_block_iterator( + qubit_count: usize, + bits: XOrZ, + image: XOrZ, + iter: impl ExactSizeIterator, +) -> impl ExactSizeIterator { + let offset: usize = block_offset(qubit_count, bits, image); + iter.map(move |x| x + offset) +} + +fn block_offset(qubit_count: usize, bits: XOrZ, image: XOrZ) -> usize { + use XOrZ::{X, Z}; + match (bits, image) { + (X, X) => z_of_preimage_z_offset(qubit_count), + (X, Z) => x_of_preimage_z_offset(qubit_count), + (Z, X) => z_of_preimage_x_offset(qubit_count), + (Z, Z) => x_of_preimage_x_offset(qubit_count), + } +} + +trait CliffordBitBlocks { + type Column<'life>: Bitwise + where + Self: 'life; + type ColumnMutable<'life>: Bitwise + BitwiseBinaryOps> + where + Self: 'life; + fn block(&self, bits: XOrZ, image: XOrZ) -> impl ExactSizeIterator>; + fn block_restriction( + &self, + bits: XOrZ, + image: XOrZ, + iter: impl ExactSizeIterator, + ) -> impl ExactSizeIterator>; + fn block_mut( + &mut self, + bits: XOrZ, + image: XOrZ, + ) -> impl ExactSizeIterator>; + // fn block_restriction_mut( + // &mut self, + // bits: XOrZ, + // image: XOrZ, + // iter: impl ExactSizeIterator, + // ) -> impl ExactSizeIterator>; +} + +macro_rules! clifford_bit_blocks_common { + () => { + fn block( + &self, + bits: XOrZ, + image: XOrZ, + ) -> impl ExactSizeIterator> { + self.bits + .row_iterator(image_block_range(self.num_qubits(), bits, image)) + } + + fn block_restriction( + &self, + bits: XOrZ, + image: XOrZ, + iter: impl ExactSizeIterator, + ) -> impl ExactSizeIterator> { + self.bits + .row_iterator(image_block_iterator(self.num_qubits(), bits, image, iter)) + } + + fn block_mut( + &mut self, + bits: XOrZ, + image: XOrZ, + ) -> impl ExactSizeIterator> { + self.bits + .row_iterator_mut(image_block_range(self.num_qubits(), bits, image)) + } + + // fn block_restriction_mut( + // &mut self, + // bits: XOrZ, + // image: XOrZ, + // iter: impl ExactSizeIterator, + // ) -> impl ExactSizeIterator> { + // self.bits + // .row_iterator_mut(image_block_iterator(self.num_qubits(), bits, image, iter)) + // } + }; +} + +impl CliffordBitBlocks for CliffordUnitaryModPauli { + type Column<'life> = BitView<'life, WORD_COUNT_DEFAULT>; + type ColumnMutable<'life> = MutableBitView<'life, WORD_COUNT_DEFAULT>; + clifford_bit_blocks_common!(); +} + +impl CliffordBitBlocks for CliffordUnitary { + type Column<'life> = BitView<'life, WORD_COUNT_DEFAULT>; + type ColumnMutable<'life> = MutableBitView<'life, WORD_COUNT_DEFAULT>; + clifford_bit_blocks_common!(); +} + +fn is_x_diagonal(clifford: &impl CliffordBitBlocks) -> bool { + use XOrZ::{X, Z}; + is_zero_padded_identity(clifford.block(X, X)) + & is_zero_padded_identity(clifford.block(Z, Z)) + & are_zero_rows(&mut clifford.block(Z, X)) +} + +fn is_z_diagonal(clifford: &impl CliffordBitBlocks) -> bool { + use XOrZ::{X, Z}; + is_zero_padded_identity(clifford.block(X, X)) + & is_zero_padded_identity(clifford.block(Z, Z)) + & are_zero_rows(&mut clifford.block(X, Z)) +} + +fn is_css_clifford(clifford: &impl CliffordBitBlocks) -> bool { + use XOrZ::{X, Z}; + are_zero_rows(&mut clifford.block(X, Z)) & are_zero_rows(&mut clifford.block(Z, X)) +} + +// fn is_reduced_z_diagonal_resource_encoder<'life, CliffordLike>(clifford: &'life CliffordLike) -> bool +// where +// CliffordLike: CliffordBitBlocks = BitView<'life, WORD_COUNT_DEFAULT>> + Clifford, +// { +// use XOrZ::{X, Z}; +// is_zero_padded_identity(clifford.block(X, Z)) +// & is_zero_padded_symmetric(clifford.block(Z, Z), clifford.num_qubits()) +// } + +fn is_z_diagonal_resource_encoder<'life, CliffordLike>( + clifford: &'life CliffordLike, +) -> Option +where + CliffordLike: CliffordBitBlocks = BitView<'life, WORD_COUNT_DEFAULT>> + Clifford, +{ + use XOrZ::{X, Z}; + let qubit_count = clifford.num_qubits(); + let chain = clifford + .block(X, Z) + .chain(clifford.block(Z, Z)) + .collect::>(); + is_reduced_symmetric(qubit_count, chain) +} + +fn is_reduced_symmetric( + qubit_count: usize, + chain: Vec>, +) -> Option { + let mut matrix = BitMatrix::from_row_iter(chain.into_iter(), qubit_count).transposed(); + matrix.echelonize(); + let transposed_rref = matrix.transposed(); + let (top_block, bottom_block) = split_blocks(qubit_count, &transposed_rref); + if is_zero_padded_identity(top_block) & is_zero_padded_symmetric(bottom_block, qubit_count) { + Some(transposed_rref) + } else { + None + } +} + +fn split_blocks( + qubit_count: usize, + transposed_rref: &BitMatrix, +) -> ( + impl ExactSizeIterator>, + impl ExactSizeIterator>, +) { + let top_block = transposed_rref.row_iterator(0..qubit_count); + let bottom_block = transposed_rref.row_iterator(qubit_count..2 * qubit_count); + (top_block, bottom_block) +} + +fn is_x_diagonal_resource_encoder<'life, CliffordLike>( + clifford: &'life CliffordLike, +) -> Option +where + CliffordLike: CliffordBitBlocks = BitView<'life, WORD_COUNT_DEFAULT>> + Clifford, +{ + use XOrZ::{X, Z}; + let qubit_count = clifford.num_qubits(); + let chain = clifford + .block(Z, Z) + .chain(clifford.block(X, Z)) + .collect::>(); + is_reduced_symmetric(qubit_count, chain) +} + +// fn is_reduced_x_diagonal_resource_encoder<'life, CliffordLike>(clifford: &'life CliffordLike) -> bool +// where +// CliffordLike: CliffordBitBlocks = BitView<'life, WORD_COUNT_DEFAULT>> + Clifford, +// { +// use XOrZ::{X, Z}; +// is_zero_padded_identity(clifford.block(Z, Z)) +// & is_zero_padded_symmetric(clifford.block(X, Z), clifford.num_qubits()) +// } + +fn blocks_from_diagonal_resource_state( + encoder: &CliffordLike, + axis: XOrZ, +) -> Option +where + for<'life1> CliffordLike: + CliffordBitBlocks = BitView<'life1, 8>> + Clifford + 'life1, + for<'life1, 'life2> ::ColumnMutable<'life1>: + BitwiseBinaryOps<::Column<'life2>>, +{ + use XOrZ::{X, Z}; + let some_blocks = match axis { + X => is_x_diagonal_resource_encoder(encoder), + Z => is_z_diagonal_resource_encoder(encoder), + }; + + if let Some(blocks) = some_blocks { + let (_, symmetric_block) = split_blocks(encoder.num_qubits(), &blocks); + let mut res = CliffordLike::identity(encoder.num_qubits()); + match axis { + X => { + for (mut row_to, row_from) in std::iter::zip(res.block_mut(X, Z), symmetric_block) { + row_to.assign(&row_from); + } + } + Z => { + for (mut row_to, row_from) in std::iter::zip(res.block_mut(Z, X), symmetric_block) { + row_to.assign(&row_from); + } + } + } + debug_assert!(res.is_diagonal(axis)); + Some(res) + } else { + None + } +} + +#[must_use] +pub fn split_clifford_mod_pauli_with_transforms( + clifford: &CliffordUnitaryModPauli, + support: &[usize], + support_complement: &[usize], +) -> Option<( + CliffordUnitaryModPauli, + CliffordUnitaryModPauli, + BitMatrix, + BitMatrix, +)> { + use XOrZ::{X, Z}; + + let qubit_count = clifford.num_qubits(); + let restriction_transform = support_restricted_z_images_from_support_complement::< + CliffordUnitaryModPauli, + >(clifford, support_complement); + let restriction_transform_complement = support_restricted_z_images_from_support_complement::< + CliffordUnitaryModPauli, + >(clifford, support); + if restriction_transform.rowcount() + restriction_transform_complement.rowcount() != qubit_count + { + return None; + } + let stacked_rows = restriction_transform + .rows() + .chain(restriction_transform_complement.rows()) + .collect::>(); + let stacked = BitMatrix::from_row_iter(stacked_rows.into_iter(), clifford.num_qubits()); + let stacked_inv_transpose = stacked.inverted().transposed(); + let split_transform = CliffordUnitaryModPauli::from_css_preimage_indicators( + &stacked.transposed(), + &stacked.inverted(), + ); + let split_clifford = clifford.multiply_with(&split_transform); + + let size1 = support.len(); + let size2 = support_complement.len(); + let mut split_clifford1 = CliffordUnitaryModPauli::zero(size1); + let mut split_clifford2 = CliffordUnitaryModPauli::zero(size2); + for image_axis in [X, Z] { + for bits_axis in [X, Z] { + let block_from_1 = + split_clifford.block_restriction(bits_axis, image_axis, support.iter().copied()); + let block_to_1 = split_clifford1.block_mut(bits_axis, image_axis); + for (mut row_to, row_from) in zip(block_to_1, block_from_1) { + row_to.assign_from_interval(&row_from, 0, size1); + } + + let block_from_2 = split_clifford.block_restriction( + bits_axis, + image_axis, + support_complement.iter().copied(), + ); + let block_to_2 = split_clifford2.block_mut(bits_axis, image_axis); + for (mut row_to, row_from) in zip(block_to_2, block_from_2) { + row_to.assign_from_interval(&row_from, size1, size2); + } + } + } + Some(( + split_clifford1, + split_clifford2, + stacked, + stacked_inv_transpose, + )) +} + +#[must_use] +pub fn split_clifford_encoder_mod_pauli( + clifford: &CliffordUnitaryModPauli, + support: &[usize], + support_complement: &[usize], +) -> Option<(CliffordUnitaryModPauli, CliffordUnitaryModPauli)> { + if let Some((clifford1, clifford2, _, _)) = + split_clifford_mod_pauli_with_transforms(clifford, support, support_complement) + { + Some((clifford1, clifford2)) + } else { + None + } +} + +pub fn recover_z_images_phases( + clifford_up_to_phases: &mut CliffordUnitary, + support: &[usize], + reference_unitary: &CliffordUnitary, +) { + for qubit_index in clifford_up_to_phases.qubits() { + let stabilizer: SparsePauli = clifford_up_to_phases.image_z(qubit_index).into(); + let remapped_stabilizer = remapped_sparse(&stabilizer, support); + let preimage = reference_unitary.preimage(&remapped_stabilizer); + if preimage.xz_phase_exponent().wrapping_neg() != 0 { + clifford_up_to_phases.left_mul_pauli(&clifford_up_to_phases.preimage_x(qubit_index)); + } + debug_assert!(preimage.x_bits().is_zero()); + } +} + +#[must_use] +pub fn split_clifford_encoder( + first_part_qubit_count: usize, + tensor_product_encoder: &CliffordUnitary, +) -> Option<(CliffordUnitary, CliffordUnitary)> { + let first_part_qubits = (0..first_part_qubit_count).collect::>(); + let second_part_qubits = + (first_part_qubit_count..tensor_product_encoder.num_qubits()).collect::>(); + if let Some((first_part_encoder_mod_pauli, second_part_encoder_mod_pauli)) = + split_clifford_encoder_mod_pauli( + &tensor_product_encoder.clone().into(), + &first_part_qubits, + &second_part_qubits, + ) + { + let mut first_part_encoder: CliffordUnitary = first_part_encoder_mod_pauli.into(); + let mut second_part_encoder: CliffordUnitary = second_part_encoder_mod_pauli.into(); + recover_z_images_phases( + &mut first_part_encoder, + &first_part_qubits, + tensor_product_encoder, + ); + recover_z_images_phases( + &mut second_part_encoder, + &second_part_qubits, + tensor_product_encoder, + ); + Some((first_part_encoder, second_part_encoder)) + } else { + None + } +} + +pub fn prepare_all_zero(qubit_count: usize) -> CliffordUnitaryModPauli { + CliffordUnitaryModPauli::identity(qubit_count) +} + +pub fn prepare_all_plus(qubit_count: usize) -> CliffordUnitaryModPauli { + prepare_zero_plus(qubit_count, &(0..qubit_count).collect::>()) +} + +pub fn prepare_zero_plus(qubit_count: usize, plus_indicies: &[usize]) -> CliffordUnitaryModPauli { + let mut result = CliffordUnitaryModPauli::identity(qubit_count); + for qubit_index in plus_indicies { + result.left_mul_hadamard(*qubit_index); + } + result +} + +#[must_use] +pub fn split_phased_css( + clifford: &CliffordUnitaryModPauli, +) -> Option<(CliffordUnitaryModPauli, CliffordUnitaryModPauli)> { + let qubit_count = clifford.num_qubits(); + let plus_resource = clifford.multiply_with(&prepare_all_plus(qubit_count)); + if let Some(diagonal_part) = plus_resource.unitary_from_diagonal_resource_state(XOrZ::Z) { + // assert!(diagonal_part.multiply_with(&diagonal_part).is_identity()); + let css_remainder = diagonal_part.multiply_with(clifford); + if css_remainder.is_css() { + return Some((diagonal_part, css_remainder)); + } + return None; + } + None +} + +#[must_use] +pub fn split_qubit_tensor_product_encoder(clifford: &CliffordUnitaryModPauli) -> Option> { + let mut res = Vec::new(); + for qubit_index in clifford.qubits() { + if clifford.preimage_x(qubit_index).x_bits().is_zero() { + res.push(Axis::X); + } else if clifford + .preimage::(&[y(qubit_index)].into()) + .x_bits() + .is_zero() + { + res.push(Axis::Y); + } else if clifford.preimage_z(qubit_index).x_bits().is_zero() { + res.push(Axis::Z); + } else { + return None; + } + } + Some(res) +} + +#[must_use] +pub fn split_qubit_cliffords_and_css( + clifford: &CliffordUnitaryModPauli, +) -> Option<(CliffordUnitaryModPauli, CliffordUnitaryModPauli)> { + let qubit_count = clifford.num_qubits(); + let plus_resource = clifford.multiply_with(&prepare_all_plus(qubit_count)); + let zero_resource = clifford.multiply_with(&prepare_all_zero(qubit_count)); + if let (Some(plus_axes), Some(zero_axes)) = ( + split_qubit_tensor_product_encoder(&plus_resource), + split_qubit_tensor_product_encoder(&zero_resource), + ) { + let mut qubit_product = CliffordUnitaryModPauli::identity(clifford.num_qubits()); + for (qubit_index, (zero_image, plus_image)) in zip(zero_axes, plus_axes).enumerate() { + apply_qubit_clifford_by_axis(&mut qubit_product, qubit_index, zero_image, plus_image)?; + } + let css_remainder = qubit_product.inverse().multiply_with(clifford); + if css_remainder.is_css() { + return Some((qubit_product, css_remainder)); + } + return None; + } + None +} + +pub fn apply_qubit_clifford_by_axis( + qubit_product: &mut CliffordUnitaryModPauli, + qubit_index: usize, + zero_image: Axis, + plus_image: Axis, +) -> Option<()> { + match (zero_image, plus_image) { + (Axis::Y, Axis::Y) | (Axis::Z, Axis::Z) | (Axis::X, Axis::X) => { + return None; + } + (Axis::Z, Axis::X) => {} + (Axis::Z, Axis::Y) => { + qubit_product.left_mul_root_z(qubit_index); + } + (Axis::X, Axis::Z) => { + qubit_product.left_mul_root_y(qubit_index); + } + (Axis::X, Axis::Y) => { + qubit_product.left_mul_root_y(qubit_index); + qubit_product.left_mul_root_x(qubit_index); + } + (Axis::Y, Axis::X) => { + qubit_product.left_mul_root_x(qubit_index); + } + (Axis::Y, Axis::Z) => { + qubit_product.left_mul_root_y(qubit_index); + qubit_product.left_mul_root_z(qubit_index); + } + } + Some(()) +} + +#[must_use] +pub fn random_clifford_via_operations_sampling( + qubit_count: usize, + num_random_generators: usize, + operations: &crate::operations::Operations, +) -> CliffordLike { + let mut random_clifford = CliffordLike::identity(qubit_count); + for _ in 0..num_random_generators { + let (unitary_operation, support) = &operations[rand::random::() % operations.len()]; + random_clifford.left_mul(*unitary_operation, support); + } + random_clifford +} + +pub fn dense_restriction_of( + pauli: &impl Pauli, + support: impl SortedIterator + Clone, + qubit_count: usize, +) -> DensePauli { + let (mut x_bits, mut z_bits) = DensePauli::neutral_element_of_size(qubit_count).to_xz_bits(); + for index in pauli + .x_bits() + .support() + .intersection(support.clone().assume_sorted_by_item()) + { + x_bits.assign_index(index, true); + } + for index in pauli + .z_bits() + .support() + .intersection(support.assume_sorted_by_item()) + { + z_bits.assign_index(index, true); + } + DensePauli::from_bits(x_bits, z_bits, pauli.xz_phase_exponent()) +} + +/// # Panics +/// If the generators are not mutually commuting. +pub fn group_encoding_clifford_of>( + generators: &[PauliLike], + qubit_count: usize, +) -> CliffordUnitary +where + DensePauli: PauliBinaryOps, +{ + assert!(are_mutually_commuting(generators)); + let mut current_support = (0..qubit_count).collect::>(); + let mut current_images = generators + .iter() + .map(|sparse| dense_from(sparse, qubit_count)) + .collect::>(); + let mut result = CliffordUnitary::identity(qubit_count); + let mut pivots = Vec::new(); + for index in 0..current_images.len() { + let mut remainder = dense_restriction_of( + ¤t_images[index], + current_support.iter().copied().assume_sorted_by_item(), + qubit_count, + ); + let support_first = remainder.support().next(); + if let Some(non_identity_index) = support_first { + let x_bit = remainder.x_bits().index(non_identity_index); + // ensure that x_bit is true + if !x_bit { + apply_root_x(&mut remainder, non_identity_index); + result.left_mul_root_x(non_identity_index); + for current_image in current_images.iter_mut().skip(index) { + apply_root_x(current_image, non_identity_index); + } + } + + remainder.mul_assign_left_z(non_identity_index); + remainder.add_assign_phase_exp(1); + + result.left_mul_pauli_exp(&remainder); + for current_image in current_images.iter_mut().skip(index) { + apply_pauli_exponent(current_image, &remainder); + } + + current_support.remove(&non_identity_index); + pivots.push(non_identity_index); + } else { + panic!("Group generators are not independent") + } + } + let new_order = pivots + .iter() + .chain(current_support.iter()) + .copied() + .collect::>(); + result.left_mul_permutation(&new_order, &(0..qubit_count).collect::>()); + result.inverse() +} + +// PartialEq trait + +impl PartialEq for CliffordUnitaryModPauli { + fn eq(&self, other: &Self) -> bool { + self.bits == other.bits + } +} + +impl PartialEq for CliffordUnitary { + fn eq(&self, other: &Self) -> bool { + zip( + &self.preimage_phase_exponents, + &other.preimage_phase_exponents, + ) + .all(|(x, y)| ::raw_eq(*x, *y)) + && (self.bits == other.bits) + } +} + +impl std::hash::Hash for CliffordUnitary { + fn hash(&self, state: &mut H) { + self.bits.hash(state); + todo!("not implemented yet"); + } +} + +impl std::hash::Hash for CliffordUnitaryModPauli { + fn hash(&self, state: &mut H) { + self.bits.hash(state); + } +} diff --git a/source/paulimer/src/clifford/generic_algos.rs b/source/paulimer/src/clifford/generic_algos.rs new file mode 100644 index 0000000000..f097b174be --- /dev/null +++ b/source/paulimer/src/clifford/generic_algos.rs @@ -0,0 +1,576 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use super::{Clifford, CliffordMutable, MutablePreImages, PreimageViews}; +use crate::pauli::{PauliMutable, PauliMutableBits, PauliNeutralElement}; +use crate::{ + bits::{ + bitmatrix::{kernel_basis_matrix, MutableRow}, + BitMatrix, Bitwise, BitwiseBinaryOps, + }, + pauli::{anti_commutes_with, commutes_with, Pauli, PauliBinaryOps, PauliBits}, + setwise::complement, + NeutralElement, +}; + +pub fn mul_assign_right_clifford_preimage_x_bits<'life, Target, PreImageUnder: PreimageViews>( + target: &mut Target, + clifford: &'life PreImageUnder, + bits: &impl Bitwise, +) where + Target: PauliBinaryOps>, +{ + for id in bits.support() { + target.mul_assign_right(&clifford.preimage_x_view(id)); + } +} + +pub fn mul_assign_right_clifford_preimage_z_bits<'life, Target, PreImageUnder: PreimageViews>( + target: &mut Target, + clifford: &'life PreImageUnder, + bits: &impl Bitwise, +) where + Target: PauliBinaryOps>, +{ + for id in bits.support() { + target.mul_assign_right(&clifford.preimage_z_view(id)); + } +} + +pub fn mul_assign_right_clifford_preimage< + 'life, + Target, + PreImageUnder: PreimageViews, + PreImageOf: Pauli, +>( + target: &mut Target, + clifford: &'life PreImageUnder, + pauli: &PreImageOf, +) where + Target: PauliBinaryOps> + + Pauli, +{ + mul_assign_right_clifford_preimage_x_bits(target, clifford, pauli.x_bits()); + mul_assign_right_clifford_preimage_z_bits(target, clifford, pauli.z_bits()); + target.mul_assign_phase_from(pauli); +} + +pub fn mul_assign_right_clifford_image_x_bits_up_to_phase< + 'life, + Target, + ImageUnder: Clifford + PreimageViews, +>( + target: &mut Target, + clifford: &'life ImageUnder, + bits: &impl Bitwise, +) where + Target: PauliBinaryOps>, +{ + for id in bits.support() { + target.mul_assign_right(&clifford.x_image_view_up_to_phase(id)); + } +} + +pub fn mul_assign_right_clifford_image_z_bits_up_to_phase< + 'life, + Target, + ImageUnder: Clifford + PreimageViews, +>( + target: &mut Target, + clifford: &'life ImageUnder, + bits: &impl Bitwise, +) where + Target: PauliBinaryOps>, +{ + for id in bits.support() { + target.mul_assign_right(&clifford.z_image_view_up_to_phase(id)); + } +} + +pub fn mul_assign_right_clifford_image_up_to_phase< + 'life, + Target, + ImageUnder: Clifford + PreimageViews, + ImageOf: Pauli, +>( + target: &mut Target, + clifford: &'life ImageUnder, + pauli: &ImageOf, +) where + Target: PauliBinaryOps>, +{ + mul_assign_right_clifford_image_x_bits_up_to_phase(target, clifford, pauli.x_bits()); + mul_assign_right_clifford_image_z_bits_up_to_phase(target, clifford, pauli.z_bits()); +} + +#[allow(clippy::similar_names)] +pub fn is_valid_clifford(candidate: &CliffordLike) -> bool { + for index in 0..candidate.num_qubits() { + let x_preimage = candidate.preimage_x_view(index); + let z_preimage = candidate.preimage_z_view(index); + if commutes_with(&x_preimage, &z_preimage) { + println!("commutes_with failed for:{index}"); + return false; + } + for other_index in index + 1..candidate.num_qubits() { + let other_x_preimage = candidate.preimage_x_view(other_index); + let other_z_preimage = candidate.preimage_z_view(other_index); + let xx = anti_commutes_with(&x_preimage, &other_x_preimage); + let xz = anti_commutes_with(&x_preimage, &other_z_preimage); + let zx = anti_commutes_with(&z_preimage, &other_x_preimage); + let zz = anti_commutes_with(&z_preimage, &other_z_preimage); + if xx || xz || zx || zz { + println!( + "anti_commutes_with failed for:{index}, {other_index}, {xx} {xz} {zx} {zz}" + ); + return false; + } + } + } + true +} + +pub fn clifford_left_mul_eq_cnot( + clifford: &mut impl MutablePreImages, + control_id: usize, + target_id: usize, +) { + let ((mut xc, zc), (xt, mut zt)) = + clifford.preimage_xz_views_mut_distinct((control_id, target_id)); + xc.mul_assign_left(&xt); + zt.mul_assign_left(&zc); +} + +pub fn clifford_left_mul_eq_cz( + clifford: &mut impl MutablePreImages, + control_id: usize, + target_id: usize, +) { + let ((mut xc, zc), (mut xt, zt)) = + clifford.preimage_xz_views_mut_distinct((control_id, target_id)); + xc.mul_assign_left(&zt); + xt.mul_assign_left(&zc); +} + +pub fn clifford_left_mul_eq_root_z(clifford: &mut impl MutablePreImages, qubit_id: usize) { + let (mut x, z) = clifford.preimage_xz_views_mut(qubit_id); + x.mul_assign_left(&z); + x.add_assign_phase_exp(1); +} + +pub fn clifford_left_mul_eq_root_z_inverse(clifford: &mut impl MutablePreImages, qubit_id: usize) { + let (mut x, z) = clifford.preimage_xz_views_mut(qubit_id); + x.mul_assign_left(&z); + x.add_assign_phase_exp(3); +} + +pub fn clifford_left_mul_eq_root_x(clifford: &mut impl MutablePreImages, qubit_id: usize) { + let (x, mut z) = clifford.preimage_xz_views_mut(qubit_id); + z.mul_assign_left(&x); + z.add_assign_phase_exp(1); +} + +pub fn clifford_left_mul_eq_root_y(clifford: &mut impl CliffordMutable, qubit_id: usize) { + clifford.left_mul_z(qubit_id); + clifford.left_mul_hadamard(qubit_id); +} + +pub fn clifford_left_mul_eq_root_y_inverse(clifford: &mut impl CliffordMutable, qubit_id: usize) { + clifford.left_mul_hadamard(qubit_id); + clifford.left_mul_z(qubit_id); +} + +pub fn clifford_left_mul_eq_x(clifford: &mut impl MutablePreImages, qubit_id: usize) { + let (_, mut z) = clifford.preimage_xz_views_mut(qubit_id); + z.add_assign_phase_exp(2); +} + +pub fn clifford_left_mul_eq_z(clifford: &mut impl MutablePreImages, qubit_id: usize) { + let (mut x, _) = clifford.preimage_xz_views_mut(qubit_id); + x.add_assign_phase_exp(2); +} + +pub fn clifford_left_mul_eq_y(clifford: &mut impl MutablePreImages, qubit_id: usize) { + let (mut x, mut z) = clifford.preimage_xz_views_mut(qubit_id); + x.add_assign_phase_exp(2); + z.add_assign_phase_exp(2); +} + +pub fn clifford_left_mul_eq_root_x_inverse(clifford: &mut impl MutablePreImages, qubit_id: usize) { + let (x, mut z) = clifford.preimage_xz_views_mut(qubit_id); + z.mul_assign_left(&x); + z.add_assign_phase_exp(3); +} + +pub fn support_restricted_z_images_from_support_complement( + clifford: &CliffordLike, + support_complement: &[usize], +) -> BitMatrix +where + CliffordLike: Clifford + PreimageViews, + for<'a> MutableRow<'a>: BitwiseBinaryOps< as Pauli>::Bits>, +{ + let num_qubits = clifford.num_qubits(); + let mut a = BitMatrix::zeros(2 * support_complement.len(), num_qubits); + let complement_size = support_complement.len(); + + for (j, qubit_index) in support_complement.iter().enumerate() { + let pre_img_x = clifford.preimage_x_view(*qubit_index); + a.row_mut(j).assign(pre_img_x.x_bits()); + } + + for (j, qubit_index) in support_complement.iter().enumerate() { + let pre_img_z = clifford.preimage_z_view(*qubit_index); + a.row_mut(j + complement_size).assign(pre_img_z.x_bits()); + } + + // for (j, qubit_index) in enumerate(support_complement) { + // let pre_img_z = clifford.z_preimage_view(*qubit_index); + // let pre_img_x = clifford.x_preimage_view(*qubit_index); + // for i in 0..num_qubits { + // a.set((j, i), pre_img_x.x_bits().index(i)); + // a.set((j + complement_size, i), pre_img_z.x_bits().index(i)) + // } + // } + + kernel_basis_matrix(&a) +} + +// pub fn z_clifford_image<'life, CliffordLike, ZBits>( +// clifford: &'life CliffordLike, +// z_bits: ZBits, +// ) -> >::ImageUpToPhase +// where +// CliffordLike: Clifford<'life>, +// ZBits: IntoIterator, +// { +// if clifford.num_qubits() == 0 { +// as NeutralElement>::default_size_neutral_element() +// } else { +// let mut res = clifford.z_image_view_up_to_phase(0).neutral_element(); +// for (index, val) in enumerate(z_bits.into_iter()) { +// if val { +// res.mul_assign_left(&clifford.z_image_view_up_to_phase(index)); +// } +// } +// res +// } +// } + +// pub fn x_clifford_image<'life, CliffordLike, ZBits>( +// clifford: &'life CliffordLike, +// x_bits: ZBits, +// ) -> >::ImageUpToPhase +// where +// CliffordLike: CliffordWithNeutrals<'life>, +// ZBits: IntoIterator, +// { +// if clifford.num_qubits() == 0 { +// as NeutralElement>::default_size_neutral_element() +// } else { +// let mut res = clifford.x_image_view_up_to_phase(0).neutral_element(); +// for (index, val) in enumerate(x_bits.into_iter()) { +// if val { +// res.mul_assign_left(&clifford.x_image_view_up_to_phase(index)); +// } +// } +// res +// } +// } + +/// Each row of result a is such that image of Z^a is supported on `supported_on_qubits`. +/// The result has full row rank; the rank is maximal possible. +pub fn support_restricted_z_images( + clifford: &CliffordLike, + sorted_support: &[usize], +) -> BitMatrix +where + CliffordLike: Clifford + PreimageViews, + for<'a> MutableRow<'a>: BitwiseBinaryOps< as Pauli>::Bits>, +{ + let num_qubits = clifford.num_qubits(); + let support_complement = complement(sorted_support, num_qubits); + support_restricted_z_images_from_support_complement::( + clifford, + &support_complement, + ) +} + +pub fn clifford_left_mul_eq_prepare_bell( + clifford: &mut CliffordLike, + qubit_index1: usize, + qubit_index2: usize, +) where + CliffordLike: CliffordMutable, +{ + clifford.left_mul_hadamard(qubit_index1); + clifford.left_mul_cx(qubit_index1, qubit_index2); +} + +// Prepares state |0>^{k_1} \otimes |Bell_k> \otimes |0>^{k_2} +// Where |Bell_k> are k Bell states between qubits j and j + k for j in [k] +#[must_use] +pub fn clifford_to_prepare_bell_states(num_bell_pairs: usize) -> CliffordLike +where + CliffordLike: CliffordMutable + Clifford, +{ + let mut res = CliffordLike::identity(num_bell_pairs * 2); + for q in 0..num_bell_pairs { + clifford_left_mul_eq_prepare_bell(&mut res, q, q + num_bell_pairs); + } + res +} + +/// # Panics +/// +/// Will panic if Clifford unitaries act on different number of qubits +pub fn clifford_multiply_with< + PhaseType, + CliffordLike: Clifford + + PreimageViews + + MutablePreImages, +>( + left: &CliffordLike, + right: &CliffordLike, +) -> CliffordLike +where + for<'life> ::PreImageViewMut<'life>: + PauliBinaryOps<::DensePauli>, +{ + assert!(left.num_qubits() == right.num_qubits()); + let mut result = CliffordLike::identity(left.num_qubits()); + for qubit_index in 0..left.num_qubits() { + result + .preimage_x_view_mut(qubit_index) + .assign(&right.preimage(&left.preimage_x_view(qubit_index))); + result + .preimage_z_view_mut(qubit_index) + .assign(&right.preimage(&left.preimage_z_view(qubit_index))); + } + result +} + +pub fn clifford_is_identity( + clifford: &CliffordLike, +) -> bool { + for qubit_id in 0..clifford.num_qubits() { + if !clifford.preimage_x_view(qubit_id).is_pauli_x(qubit_id) { + return false; + } + if !clifford.preimage_z_view(qubit_id).is_pauli_z(qubit_id) { + return false; + } + } + true +} + +/// # Panics +/// +/// Will panic if preimages do not correspond to a Clifford unitary +pub fn clifford_from_preimages<'life, Paulis, PauliLike: Pauli + 'life, CliffordLike>( + mut preimages: Paulis, +) -> CliffordLike +where + CliffordLike: Clifford + MutablePreImages + PreimageViews, + for<'life1> ::PreImageViewMut<'life1>: + PauliBinaryOps, + Paulis: ExactSizeIterator, +{ + assert!(preimages.len().is_multiple_of(2)); + let mut res = CliffordLike::zero(preimages.len() / 2); + for qubit_index in 0..(preimages.len() / 2) { + let x_preimage = preimages + .next() + .expect("there should be `preimages.len()` items"); + let z_preimage = preimages + .next() + .expect("there should be `preimages.len()` items"); + res.preimage_x_view_mut(qubit_index).assign(x_preimage); + res.preimage_z_view_mut(qubit_index).assign(z_preimage); + } + assert!(is_valid_clifford(&res)); + res +} + +pub fn clifford_from_images<'life, Paulis, PauliLike: Pauli + 'life, CliffordLike>( + images: Paulis, +) -> CliffordLike +where + CliffordLike: Clifford + MutablePreImages + PreimageViews, + for<'life1> ::PreImageViewMut<'life1>: + PauliBinaryOps, + Paulis: ExactSizeIterator, +{ + clifford_from_preimages::(images).inverse() +} + +pub fn clifford_image_with_phase( + clifford: &CliffordLike, + xz_bits: (Bits, Bits), +) -> CliffordLike::DensePauli +where + CliffordLike::DensePauli: PauliMutable, + CliffordLike::DensePauli: From<(Bits, Bits)>, + for<'life> ::PreImageView<'life>: + PauliNeutralElement, +{ + let mut preimage = clifford.preimage_x_view(0).neutral_element(); + mul_assign_right_clifford_preimage_x_bits(&mut preimage, clifford, &xz_bits.0); + mul_assign_right_clifford_preimage_z_bits(&mut preimage, clifford, &xz_bits.1); + preimage.complex_conjugate(); + let mut res = CliffordLike::DensePauli::from(xz_bits); + res.mul_assign_phase_from(&preimage); + res +} + +pub fn clifford_left_mul_eq_pauli_exp< + PauliLike: Pauli, + CliffordLike: PreimageViews + + MutablePreImages, +>( + clifford: &mut CliffordLike, + pauli: &PauliLike, +) where + for<'life> ::PreImageView<'life>: + PauliNeutralElement + Pauli, + for<'life1, 'life2> ::PreImageViewMut<'life1>: PauliBinaryOps<<::PreImageView<'life2> as NeutralElement>::NeutralElementType> + + Pauli, + for<'life> <::PreImageView<'life> as NeutralElement>::NeutralElementType: + Pauli, +{ + let mut pauli_preimage = clifford.preimage_x_view(0).neutral_element(); + mul_assign_right_clifford_preimage(&mut pauli_preimage, clifford, pauli); + pauli_preimage.add_assign_phase_exp(1u8); + for index in pauli.x_bits().support() { + clifford + .preimage_z_view_mut(index) + .mul_assign_right(&pauli_preimage); + } + for index in pauli.z_bits().support() { + clifford + .preimage_x_view_mut(index) + .mul_assign_right(&pauli_preimage); + } +} + +pub fn clifford_left_mul_eq_controlled_pauli( + clifford: &mut CliffordLike, + control: &PauliLike, + target: &PauliLike, +) where + for<'life> ::PreImageView<'life>: + PauliNeutralElement + Pauli, + for<'life> ::PreImageViewMut<'life>: + PauliBinaryOps<<::PreImageView<'life> as NeutralElement>::NeutralElementType>, + for<'life> <::PreImageView<'life> as NeutralElement>::NeutralElementType: + Pauli, +{ + debug_assert!(commutes_with(control, target)); + let mut target_preimage = clifford.preimage_x_view(0).neutral_element(); + let mut control_preimage = clifford.preimage_x_view(0).neutral_element(); + mul_assign_right_clifford_preimage(&mut target_preimage, clifford, target); + mul_assign_right_clifford_preimage(&mut control_preimage, clifford, control); + for index in control.x_bits().support() { + clifford + .preimage_z_view_mut(index) + .mul_assign_right(&target_preimage); + } + for index in control.z_bits().support() { + clifford + .preimage_x_view_mut(index) + .mul_assign_right(&target_preimage); + } + for index in target.x_bits().support() { + clifford + .preimage_z_view_mut(index) + .mul_assign_left(&control_preimage); + } + for index in target.z_bits().support() { + clifford + .preimage_x_view_mut(index) + .mul_assign_left(&control_preimage); + } +} + +#[must_use] +pub fn clifford_from_css_preimage_indicators( + x_indicators: &BitMatrix, + z_indicators: &BitMatrix, +) -> CliffordLike +where + for<'life> ::PreImageViewMut<'life>: + PauliMutableBits>, +{ + let num_qubits = x_indicators.columncount(); + let mut res = CliffordLike::zero(num_qubits); + for qubit_index in res.qubits() { + res.preimage_x_view_mut(qubit_index) + .x_bits_mut() + .assign(&x_indicators.row(qubit_index)); + res.preimage_z_view_mut(qubit_index) + .z_bits_mut() + .assign(&z_indicators.row(qubit_index)); + } + debug_assert!(res.is_valid()); + res +} + +pub fn clifford_tensored(left: &CliffordLike, right: &CliffordLike) -> CliffordLike +where + CliffordLike: Clifford + MutablePreImages + PreimageViews, + for<'life> ::PreImageViewMut<'life>: + PauliBinaryOps<::PreImageView<'life>>, +{ + let lhs_num_qubits = left.num_qubits(); + let rhs_num_qubits = right.num_qubits(); + let num_output_qubits = lhs_num_qubits + rhs_num_qubits; + let mut result = CliffordLike::zero(num_output_qubits); + for qubit_id in 0..lhs_num_qubits { + result.preimage_x_view_mut(qubit_id).assign_with_offset( + &left.preimage_x_view(qubit_id), + 0, + lhs_num_qubits, + ); + result.preimage_z_view_mut(qubit_id).assign_with_offset( + &left.preimage_z_view(qubit_id), + 0, + lhs_num_qubits, + ); + } + for qubit_id in 0..rhs_num_qubits { + result + .preimage_x_view_mut(lhs_num_qubits + qubit_id) + .assign_with_offset( + &right.preimage_x_view(qubit_id), + lhs_num_qubits, + rhs_num_qubits, + ); + result + .preimage_z_view_mut(lhs_num_qubits + qubit_id) + .assign_with_offset( + &right.preimage_z_view(qubit_id), + lhs_num_qubits, + rhs_num_qubits, + ); + } + debug_assert!(result.is_valid()); + result +} + +pub fn clifford_inverse_up_to_signs( + from: &CliffordLikeFrom, +) -> CliffordLikeTo +where + CliffordLikeTo: Clifford + MutablePreImages, + for<'life1, 'life2> ::PreImageViewMut<'life1>: + PauliBinaryOps<::ImageViewUpToPhase<'life2>>, +{ + let mut res = CliffordLikeTo::identity(from.num_qubits()); + for qubit_index in 0..from.num_qubits() { + res.preimage_x_view_mut(qubit_index) + .assign(&from.x_image_view_up_to_phase(qubit_index)); + res.preimage_z_view_mut(qubit_index) + .assign(&from.z_image_view_up_to_phase(qubit_index)); + } + res +} diff --git a/source/paulimer/src/clifford/special_clifford.rs b/source/paulimer/src/clifford/special_clifford.rs new file mode 100644 index 0000000000..e81cbaa610 --- /dev/null +++ b/source/paulimer/src/clifford/special_clifford.rs @@ -0,0 +1,99 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use super::{CliffordUnitary, ControlledPauli, Hadamard, PauliExponent, Swap}; +use crate::pauli::{commutes_with, generic::PhaseExponent, Pauli, PauliBits, PauliUnitary}; +use std::ops::Mul; + +impl ControlledPauli { + /// # Panics + /// + /// Will panic + pub fn new( + control: PauliUnitary, + target: PauliUnitary, + ) -> ControlledPauli { + assert!(commutes_with(&control, &target)); + assert!(control.is_order_two()); + assert!(target.is_order_two()); + ControlledPauli(control, target) + } +} + +impl PauliExponent { + /// # Panics + /// + /// Will panic + pub fn new(pauli: PauliUnitary) -> PauliExponent { + assert!(pauli.is_order_two()); + PauliExponent(pauli) + } +} + +macro_rules! delegate_left_multiplication_template_variants { + ($left:ident) => { + impl Mul for &$left { + type Output = CliffordUnitary; + + fn mul(self, mut clifford: CliffordUnitary) -> Self::Output { + self * &mut clifford; + clifford + } + } + + impl Mul<&mut CliffordUnitary> + for $left + { + type Output = (); + + fn mul(self, clifford: &mut CliffordUnitary) -> Self::Output { + &self * clifford; + } + } + + impl Mul for $left { + type Output = CliffordUnitary; + + fn mul(self, mut clifford: CliffordUnitary) -> Self::Output { + &self * &mut clifford; + clifford + } + } + }; +} + +macro_rules! delegate_left_multiplication_variants { + ($left:ty) => { + impl Mul for &$left { + type Output = CliffordUnitary; + + fn mul(self, mut clifford: CliffordUnitary) -> Self::Output { + self * &mut clifford; + clifford + } + } + + impl Mul<&mut CliffordUnitary> for $left { + type Output = (); + + fn mul(self, clifford: &mut CliffordUnitary) -> Self::Output { + &self * clifford; + } + } + + impl Mul for $left { + type Output = CliffordUnitary; + + fn mul(self, mut clifford: CliffordUnitary) -> Self::Output { + &self * &mut clifford; + clifford + } + } + }; +} + +delegate_left_multiplication_template_variants!(PauliUnitary); +delegate_left_multiplication_template_variants!(ControlledPauli); +delegate_left_multiplication_template_variants!(PauliExponent); +delegate_left_multiplication_variants!(Swap); +delegate_left_multiplication_variants!(Hadamard); diff --git a/source/paulimer/src/lib.rs b/source/paulimer/src/lib.rs new file mode 100644 index 0000000000..415a52bc04 --- /dev/null +++ b/source/paulimer/src/lib.rs @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +pub mod bits; +pub mod clifford; +pub mod operations; +pub mod outcome_specific_simulation; +pub mod pauli; +pub mod quantum_core; +pub mod setwise; + +pub use operations::UnitaryOp; + +type Tuple2 = (T, T); +type Tuple4 = (T, T, T, T); +type Tuple8 = (T, T, T, T, T, T, T, T); +type Tuple2x2 = Tuple2>; +type Tuple4x2 = Tuple4>; + +pub trait NeutralElement { + type NeutralElementType: 'static; + fn neutral_element(&self) -> Self::NeutralElementType; + fn default_size_neutral_element() -> Self::NeutralElementType; + fn neutral_element_of_size(size: usize) -> Self::NeutralElementType; +} + +use clifford::CliffordUnitary; +use pauli::SparsePauli; +use quantum_core::PositionedPauliObservable; + +pub trait Simulation { + fn pauli_exp(&mut self, sparse_pauli: &[PositionedPauliObservable]); + + fn apply_unitary(&mut self, unitary_op: UnitaryOp, support: &[usize]); + fn apply_clifford(&mut self, clifford: &CliffordUnitary, support: &[usize]); + fn apply_permutation(&mut self, permutation: &[usize], support: &[usize]); + + fn controlled_pauli( + &mut self, + observable1: &[PositionedPauliObservable], + observable2: &[PositionedPauliObservable], + ); + fn pauli(&mut self, observable: &[PositionedPauliObservable]); + fn random_bit(&mut self) -> usize; + + fn measure(&mut self, observable: &[PositionedPauliObservable]) -> usize; + fn measure_with_hint( + &mut self, + observable: &[PositionedPauliObservable], + hint: &[PositionedPauliObservable], + ) -> usize; + fn measure_sparse(&mut self, pauli: &SparsePauli) -> usize; + + fn conditional_pauli( + &mut self, + observable: &[PositionedPauliObservable], + outcomes: &[usize], + parity: bool, + ); + + fn assert_stabilizer(&self, observable: &[PositionedPauliObservable]); + fn assert_stabilizer_up_to_sign(&self, observable: &[PositionedPauliObservable]); + fn assert_anti_stabilizer(&self, observable: &[PositionedPauliObservable]); + + fn with_capacity(num_qubits: usize, num_outcomes: usize, num_random_outcomes: usize) -> Self; + + fn new() -> Self; + + fn num_random_outcomes(&self) -> usize; + fn random_outcome_indicator(&self) -> &[bool]; +} + +#[must_use] +pub fn subscript_digits(number: usize) -> String { + let mut res = String::new(); + for char in number.to_string().chars() { + let digit = char.to_digit(10).unwrap_or_default() as usize; + res.push(SUB_CHARS[digit]); + } + res +} + +pub const SUB_CHARS: [char; 10] = ['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉']; diff --git a/source/paulimer/src/main.rs b/source/paulimer/src/main.rs new file mode 100644 index 0000000000..44112954c3 --- /dev/null +++ b/source/paulimer/src/main.rs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use paulimer::bits::BitMatrix; +use rand::prelude::*; + +fn main() { + let mut matrix = random_bitmatrix(10000, 10000); + matrix.echelonize(); +} + +fn random_bitmatrix(rowcount: usize, columncount: usize) -> BitMatrix { + let mut matrix = BitMatrix::with_shape(rowcount, columncount); + let mut bits = std::iter::from_fn(move || Some(thread_rng().gen::())); + for row_index in 0..rowcount { + for column_index in 0..columncount { + matrix.set((row_index, column_index), bits.next().expect("boom")); + } + } + matrix +} diff --git a/source/paulimer/src/operations.rs b/source/paulimer/src/operations.rs new file mode 100644 index 0000000000..1df4cca7dc --- /dev/null +++ b/source/paulimer/src/operations.rs @@ -0,0 +1,98 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use num_derive::{FromPrimitive, ToPrimitive}; + +#[derive(FromPrimitive, ToPrimitive, Clone, Copy, Debug)] +pub enum UnitaryOp { + I, + X, + Y, + Z, + SqrtX, + SqrtXInv, + SqrtY, + SqrtYInv, + SqrtZ, + SqrtZInv, + Hadamard, + Swap, + ControlledX, + ControlledZ, + PrepareBell, +} + +#[macro_export] +macro_rules! assert_1q_gate { + ($x: expr) => { + debug_assert_eq!($x.len(), 1); + }; +} + +#[macro_export] +macro_rules! assert_2q_gate { + ($x: expr) => { + debug_assert_eq!($x.len(), 2); + debug_assert!($x[0] != $x[1]); + }; +} + +pub type Operations = Vec<(UnitaryOp, Vec)>; + +#[must_use] +pub fn qubit_operations(qubit_count: usize, qubit_op: UnitaryOp) -> Operations { + let mut res = Vec::new(); + for qubit in 0..qubit_count { + res.push((qubit_op, vec![qubit])); + } + res +} + +#[must_use] +pub fn asymmetric_two_qubit_operations(qubit_count: usize, qubit_op: UnitaryOp) -> Operations { + let mut res = Vec::new(); + for qubit1 in 0..qubit_count { + for qubit2 in 0..qubit_count { + if qubit1 != qubit2 { + res.push((qubit_op, vec![qubit1, qubit2])); + } + } + } + res +} + +#[must_use] +pub fn symmetric_two_qubit_operations(qubit_count: usize, qubit_op: UnitaryOp) -> Operations { + let mut res = Vec::new(); + for qubit1 in 0..qubit_count { + for qubit2 in 0..qubit1 { + let gen = (qubit_op, vec![qubit1, qubit2]); + res.push(gen); + } + } + res +} + +#[must_use] +pub fn diagonal_operations(qubit_count: usize) -> Operations { + use UnitaryOp::{ControlledZ, SqrtZ}; + let mut res = Vec::new(); + res.append(&mut symmetric_two_qubit_operations( + qubit_count, + ControlledZ, + )); + res.append(&mut qubit_operations(qubit_count, SqrtZ)); + res +} + +#[must_use] +pub fn css_operations(qubit_count: usize) -> Operations { + use UnitaryOp::{ControlledX, Swap}; + let mut res = Vec::new(); + res.append(&mut symmetric_two_qubit_operations(qubit_count, Swap)); + res.append(&mut asymmetric_two_qubit_operations( + qubit_count, + ControlledX, + )); + res +} diff --git a/source/paulimer/src/outcome_specific_simulation.rs b/source/paulimer/src/outcome_specific_simulation.rs new file mode 100644 index 0000000000..753433cdab --- /dev/null +++ b/source/paulimer/src/outcome_specific_simulation.rs @@ -0,0 +1,316 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use rand::{thread_rng, Rng}; + +use crate::{ + bits::{Bitwise, IndexSet}, + clifford::{ + Clifford, CliffordMutable, CliffordUnitary, ControlledPauli, Hadamard, PauliExponent, Swap, + }, + pauli::{anti_commutes_with, generic::PhaseExponent, Pauli, PauliBits, PauliUnitary, Phase}, + quantum_core, Simulation, UnitaryOp, +}; + +type SparsePauli = PauliUnitary; + +#[must_use] +pub struct OutcomeSpecificSimulation { + clifford: CliffordUnitary, // R + outcome_vector: Vec, + random_outcome_indicator: Vec, // vec(p), [j] is true iff vec(p)_j = 1/2 + num_random_bits: usize, + use_all_zeros: bool, +} + +impl OutcomeSpecificSimulation { + pub fn new(num_qubits: usize, num_outcomes: usize) -> Self { + OutcomeSpecificSimulation { + clifford: CliffordUnitary::identity(num_qubits), + outcome_vector: Vec::::with_capacity(num_outcomes), + random_outcome_indicator: Vec::::with_capacity(num_outcomes), + num_random_bits: 0, + use_all_zeros: false, + } + } + + pub fn new_with_random_outcomes(num_qubits: usize, num_outcomes: usize) -> Self { + Self::new(num_qubits, num_outcomes) + } + + pub fn new_with_zero_outcomes(num_qubits: usize, num_outcomes: usize) -> Self { + let mut result = Self::new(num_qubits, num_outcomes); + result.use_all_zeros = true; + result + } +} + +pub fn new_outcome_specific_simulation( + num_qubits: usize, + num_outcomes: usize, +) -> OutcomeSpecificSimulation { + OutcomeSpecificSimulation::new_with_random_outcomes(num_qubits, num_outcomes) +} + +impl OutcomeSpecificSimulation { + pub fn clifford(&self) -> &CliffordUnitary { + &self.clifford + } + + #[must_use] + pub fn outcome_vector(&self) -> &Vec { + &self.outcome_vector + } +} + +pub fn apply_hadamard(simulation: &mut OutcomeSpecificSimulation, qubit_index: usize) { + Hadamard(qubit_index) * &mut simulation.clifford; +} + +pub fn apply_cx(simulation: &mut OutcomeSpecificSimulation, control_id: usize, target_id: usize) { + let control = PauliUnitary::from_bits(IndexSet::new(), IndexSet::from_iter([control_id]), 0u8); + let target = PauliUnitary::from_bits(IndexSet::from_iter([target_id]), IndexSet::new(), 0u8); + ControlledPauli::new(control, target) * &mut simulation.clifford; +} + +pub fn apply_cz(simulation: &mut OutcomeSpecificSimulation, control_id: usize, target_id: usize) { + let control = PauliUnitary::from_bits(IndexSet::new(), IndexSet::from_iter([control_id]), 0u8); + let target = PauliUnitary::from_bits(IndexSet::new(), IndexSet::from_iter([target_id]), 0u8); + ControlledPauli::new(control, target) * &mut simulation.clifford; +} + +pub fn apply_pauli( + simulation: &mut OutcomeSpecificSimulation, + pauli: &PauliUnitary, +) { + pauli * &mut simulation.clifford; +} + +pub fn apply_pauli_exponent( + simulation: &mut OutcomeSpecificSimulation, + pauli: PauliUnitary, +) { + // simulation.clifford = PauliExponent(pauli) * simulation.clifford; + // clifford = PauliExponent(Pauli) * clifford; + PauliExponent::new(pauli) * &mut simulation.clifford; +} + +pub fn apply_controlled_pauli( + simulation: &mut OutcomeSpecificSimulation, + control: PauliUnitary, + target: PauliUnitary, +) { + ControlledPauli::new(control, target) * &mut simulation.clifford; +} + +pub fn apply_swap(simulation: &mut OutcomeSpecificSimulation, qubit_id1: usize, qubit_id2: usize) { + Swap(qubit_id1, qubit_id2) * &mut simulation.clifford; +} + +/// # Panics +/// Panics if `hint` commutes with `observable` +pub fn measure_pauli_with_hint( + simulation: &mut OutcomeSpecificSimulation, + observable: &SparsePauli, + hint: &PauliUnitary, +) { + assert!( + anti_commutes_with(observable, hint), + "observable={observable}, hint={hint}" + ); + let preimage = simulation.clifford.preimage(hint); + + if preimage.x_bits().support().next().is_some() { + // hint is not true + measure_pauli(simulation, observable); + } else { + let mut pauli = observable.clone() * hint; + pauli *= Phase::from_exponent(3u8.wrapping_sub(preimage.xz_phase_exponent().raw_value())); + PauliExponent::new(pauli) * &mut simulation.clifford; + allocate_random_bit(simulation); + apply_conditional_pauli( + simulation, + hint, + &[simulation.outcome_vector.len() - 1], + true, + ); + } +} + +pub fn allocate_random_bit(simulation: &mut OutcomeSpecificSimulation) { + simulation.outcome_vector.push(if simulation.use_all_zeros { + false + } else { + thread_rng().gen() + }); + simulation.random_outcome_indicator.push(true); + simulation.num_random_bits += 1; +} + +pub fn measure_pauli(simulation: &mut OutcomeSpecificSimulation, observable: &SparsePauli) { + let preimage = simulation.clifford.preimage(observable); + let non_zero_pos = preimage.x_bits().support().next(); + match non_zero_pos { + Some(pos) => { + let hint = simulation.clifford.image_z(pos); + measure_pauli_with_hint(simulation, observable, &hint); + } + None => { + measure_deterministic(simulation, &preimage); + } + } +} + +fn measure_deterministic( + simulation: &mut OutcomeSpecificSimulation, + preimage: &PauliUnitary, +) { + debug_assert!(preimage.xz_phase_exponent().is_even()); + simulation + .outcome_vector + .push(preimage.xz_phase_exponent().value() == 2); + simulation.random_outcome_indicator.push(false); +} + +fn is_stabilizer( + simulation: &OutcomeSpecificSimulation, + pauli: &PauliUnitary, +) -> bool { + let preimage = simulation.clifford.preimage(pauli); + preimage.x_bits().weight() == 0 && preimage.xz_phase_exponent().value() == 0 +} + +fn is_stabilizer_up_to_sign( + simulation: &OutcomeSpecificSimulation, + pauli: &PauliUnitary, +) -> bool { + let preimage = simulation.clifford.preimage(pauli); + preimage.x_bits().weight() == 0 +} + +pub fn apply_conditional_pauli( + simulation: &mut OutcomeSpecificSimulation, + pauli: &PauliUnitary, + outcomes_indicator: &[usize], + parity: bool, +) { + if total_parity(simulation.outcome_vector(), outcomes_indicator) == parity { + apply_pauli(simulation, pauli); + } +} + +fn total_parity(outcome_vector: &[bool], outcomes_indicator: &[usize]) -> bool { + let mut res = false; + for j in outcomes_indicator { + res ^= outcome_vector[*j]; + } + res +} + +#[test] +fn init_test() { + let mut _outcome_specific_simulation = new_outcome_specific_simulation(2, 10); + // println!("{:?}",outcome_specific_simulation.random_outcome_source()) +} + +impl Simulation for OutcomeSpecificSimulation { + fn pauli_exp(&mut self, observable: &[quantum_core::PositionedPauliObservable]) { + let pauli = SparsePauli::from(observable); + apply_pauli_exponent(self, pauli); + } + + fn controlled_pauli( + &mut self, + observable1: &[quantum_core::PositionedPauliObservable], + observable2: &[quantum_core::PositionedPauliObservable], + ) { + let pauli1 = SparsePauli::from(observable1); + let pauli2 = SparsePauli::from(observable2); + apply_controlled_pauli(self, pauli1, pauli2); + } + + fn pauli(&mut self, observable: &[quantum_core::PositionedPauliObservable]) { + let pauli = SparsePauli::from(observable); + apply_pauli(self, &pauli); + } + + fn measure(&mut self, observable: &[quantum_core::PositionedPauliObservable]) -> usize { + let pauli = SparsePauli::from(observable); + measure_pauli(self, &pauli); + self.outcome_vector().len() - 1 + } + + fn measure_sparse(&mut self, observable: &SparsePauli) -> usize { + measure_pauli(self, observable); + self.outcome_vector().len() - 1 + } + + fn measure_with_hint( + &mut self, + observable: &[quantum_core::PositionedPauliObservable], + hint: &[quantum_core::PositionedPauliObservable], + ) -> usize { + let pauli = SparsePauli::from(observable); + let hint = SparsePauli::from(hint); + measure_pauli_with_hint(self, &pauli, &hint); + self.outcome_vector().len() - 1 + } + + fn assert_stabilizer(&self, observable: &[quantum_core::PositionedPauliObservable]) { + let sparse_pauli = SparsePauli::from(observable); + assert!(is_stabilizer(self, &sparse_pauli)); + } + + fn assert_stabilizer_up_to_sign(&self, observable: &[quantum_core::PositionedPauliObservable]) { + let sparse_pauli = SparsePauli::from(observable); + assert!(is_stabilizer_up_to_sign(self, &sparse_pauli)); + } + + fn assert_anti_stabilizer(&self, observable: &[quantum_core::PositionedPauliObservable]) { + let sparse_pauli = SparsePauli::from(observable); + assert!(!is_stabilizer_up_to_sign(self, &sparse_pauli)); + } + + fn with_capacity(num_qubits: usize, num_outcomes: usize, _num_random_outcomes: usize) -> Self { + OutcomeSpecificSimulation::new_with_random_outcomes(num_qubits, num_outcomes) + } + + fn new() -> Self { + Self::with_capacity(1, 1, 1) + } + + fn conditional_pauli( + &mut self, + observable: &[quantum_core::PositionedPauliObservable], + outcomes: &[usize], + parity: bool, + ) { + let pauli = SparsePauli::from(observable); + apply_conditional_pauli(self, &pauli, outcomes, parity); + } + + fn random_bit(&mut self) -> usize { + allocate_random_bit(self); + self.num_random_bits - 1 + } + + fn num_random_outcomes(&self) -> usize { + self.num_random_bits + } + + fn random_outcome_indicator(&self) -> &[bool] { + &self.random_outcome_indicator + } + + fn apply_unitary(&mut self, unitary_op: UnitaryOp, support: &[usize]) { + self.clifford.left_mul(unitary_op, support); + } + + fn apply_clifford(&mut self, clifford: &CliffordUnitary, support: &[usize]) { + self.clifford.left_mul_clifford(clifford, support); + } + + fn apply_permutation(&mut self, permutation: &[usize], support: &[usize]) { + self.clifford.left_mul_permutation(permutation, support); + } +} diff --git a/source/paulimer/src/pauli.rs b/source/paulimer/src/pauli.rs new file mode 100644 index 0000000000..612f41364b --- /dev/null +++ b/source/paulimer/src/pauli.rs @@ -0,0 +1,186 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +pub mod generic; +pub use generic::{ + add_assign_bits, pauli_random, pauli_random_order_two, PauliUnitary, PauliUnitaryProjective, +}; + +pub mod operators; +pub use operators::Phase; + +mod dense; +pub use dense::{dense_from, DensePauli, DensePauliProjective}; +use sorted_iter::SortedIterator; + +mod sparse; +pub use sparse::{ + as_sparse, as_sparse_projective, remapped_sparse, SparsePauli, SparsePauliProjective, +}; + +mod algorithms; +pub use algorithms::{ + apply_pauli_exponent, apply_root_x, apply_root_y, apply_root_z, are_mutually_commuting, + are_the_same_group_up_to_phases, complete_to_full_pauli_basis, paulis_qubit_count, +}; + +use crate::bits::{Bitwise, BitwiseBinaryOps, Dot, IndexAssignable, OverlapWeight}; +use crate::NeutralElement; + +pub trait PauliBits: Bitwise + Dot + OverlapWeight + PartialEq + std::hash::Hash {} +impl PauliBits for T {} + +// Generalizes Pauli unitaries and Projective Pauli unitaries +// TODO: add Pauli: + for<'a> PartialEq<&'a [quantum_core::PositionedPauliObservable]> +pub trait Pauli: PartialEq { + type Bits: PauliBits; + type PhaseExponentValue; + + fn xz_phase_exponent(&self) -> Self::PhaseExponentValue; + fn x_bits(&self) -> &Self::Bits; + fn z_bits(&self) -> &Self::Bits; + + fn support(&self) -> impl SortedIterator { + self.x_bits().support().union(self.z_bits().support()) + } + + fn y_parity(&self) -> bool { + self.x_bits().dot(self.z_bits()) + } + + fn weight(&self) -> usize { + self.x_bits().or_weight(self.z_bits()) + } + + fn is_order_two(&self) -> bool; + fn is_identity(&self) -> bool; + fn is_pauli_x(&self, qubit: usize) -> bool; + fn is_pauli_z(&self, qubit: usize) -> bool; + fn is_pauli_y(&self, qubit: usize) -> bool; + fn equals_to(&self, rhs: &Self) -> bool; + fn to_xz_bits(self) -> (Self::Bits, Self::Bits); + fn max_qubit_id(&self) -> Option { + match (self.x_bits().max_bit_id(), self.z_bits().max_bit_id()) { + (None, None) => None, + (None, Some(id)) | (Some(id), None) => Some(id), + (Some(id1), Some(id2)) => Some(std::cmp::max(id1, id2)), + } + } + fn qubit_count(&self) -> usize { + self.max_qubit_id().map_or(0, |max_id| max_id + 1) + } + + #[must_use] + fn x(qubit_index: usize, qubit_count: usize) -> Self + where + Self: Sized, + Self: NeutralElement, + Self: PauliMutable, + { + let mut result = Self::neutral_element_of_size(qubit_count); + result.mul_assign_left_x(qubit_index); + result + } + + #[must_use] + fn y(qubit_index: usize, qubit_count: usize) -> Self + where + Self: Sized, + Self: NeutralElement, + Self: PauliMutable, + { + let mut result = Self::neutral_element_of_size(qubit_count); + result.mul_assign_left_y(qubit_index); + result + } + + #[must_use] + fn z(qubit_index: usize, qubit_count: usize) -> Self + where + Self: Sized, + Self: NeutralElement, + Self: PauliMutable, + { + let mut result = Self::neutral_element_of_size(qubit_count); + result.mul_assign_left_z(qubit_index); + result + } +} + +pub trait PauliMutable: Pauli { + fn assign_phase_exp(&mut self, rhs: u8); + fn add_assign_phase_exp(&mut self, rhs: u8); + fn complex_conjugate(&mut self); + fn invert(&mut self); + fn negate(&mut self); + fn assign_phase_from>( + &mut self, + other: &PauliLike, + ); + fn mul_assign_phase_from>( + &mut self, + other: &PauliLike, + ); + + fn mul_assign_left_x(&mut self, qubit_id: usize); + fn mul_assign_right_x(&mut self, qubit_id: usize); + fn mul_assign_left_z(&mut self, qubit_id: usize); + fn mul_assign_right_z(&mut self, qubit_id: usize); + fn set_identity(&mut self); + fn set_random(&mut self, num_qubits: usize, random_number_generator: &mut impl rand::Rng); + fn set_random_order_two( + &mut self, + num_qubits: usize, + random_number_generator: &mut impl rand::Rng, + ); + + fn mul_assign_left_y(&mut self, qubit_id: usize) { + self.mul_assign_left_z(qubit_id); + self.mul_assign_left_x(qubit_id); + self.add_assign_phase_exp(1u8); + } + + fn mul_assign_right_y(&mut self, qubit_id: usize) { + self.mul_assign_right_x(qubit_id); + self.mul_assign_right_z(qubit_id); + self.add_assign_phase_exp(1u8); + } +} + +pub fn anti_commutes_with( + left: &LeftPauli, + right: &RightPauli, +) -> bool +where + LeftPauli::Bits: Dot, +{ + left.x_bits().dot(right.z_bits()) ^ left.z_bits().dot(right.x_bits()) +} + +pub fn commutes_with( + left: &LeftPauli, + right: &RightPauli, +) -> bool +where + LeftPauli::Bits: Dot, +{ + !anti_commutes_with(left, right) +} + +pub trait PauliMutableBits: PauliMutable { + type BitsMutable: BitwiseBinaryOps; + fn x_bits_mut(&mut self) -> &mut Self::BitsMutable; + fn z_bits_mut(&mut self) -> &mut Self::BitsMutable; +} + +pub trait PauliBinaryOps: PauliMutable { + fn assign(&mut self, rhs: &Other); + fn assign_with_offset(&mut self, rhs: &Other, start_qubit_index: usize, num_qubits: usize); + fn mul_assign_right(&mut self, rhs: &Other); + fn mul_assign_left(&mut self, lhs: &Other); +} + +pub trait PauliNeutralElement: + Pauli + NeutralElement> +{ +} diff --git a/source/paulimer/src/pauli/algorithms.rs b/source/paulimer/src/pauli/algorithms.rs new file mode 100644 index 0000000000..531c5504e4 --- /dev/null +++ b/source/paulimer/src/pauli/algorithms.rs @@ -0,0 +1,128 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use super::{anti_commutes_with, DensePauli, Pauli, PauliBinaryOps}; +use crate::{ + bits::{BitMatrix, Bitwise}, + setwise::complement, + NeutralElement, +}; + +/// # Panics +/// Will panic if the input `paulis` are not independent +pub fn complete_to_full_pauli_basis( + paulis: &[PauliLike], + qubit_count: usize, +) -> Vec +where + DensePauli: PauliBinaryOps, +{ + let mut paulis_as_bitmatrix = bitmatrix_from_paulis(paulis, qubit_count); + let rank_profile = paulis_as_bitmatrix.echelonize(); + assert_eq!(rank_profile.len(), paulis.len()); + let rank_profile_complement = complement(&rank_profile, 2 * qubit_count); + let mut result = Vec::new(); + for pauli in paulis { + let mut dense_pauli = DensePauli::neutral_element_of_size(qubit_count); + dense_pauli.assign(pauli); + result.push(dense_pauli); + } + for column_index in rank_profile_complement { + if column_index < qubit_count { + result.push(DensePauli::x(column_index, qubit_count)); + } else { + result.push(DensePauli::z(column_index - qubit_count, qubit_count)); + } + } + result +} + +pub fn bitmatrix_from_paulis( + paulis: &[PauliLike], + qubit_count: usize, +) -> BitMatrix { + let mut result = BitMatrix::zeros(paulis.len(), 2 * qubit_count); + for (row_index, pauli) in paulis.iter().enumerate() { + for x_column_index in pauli.x_bits().support() { + result.set((row_index, x_column_index), true); + } + for z_column_index in pauli.z_bits().support() { + result.set((row_index, qubit_count + z_column_index), true); + } + } + result +} + +pub fn paulis_qubit_count(pauli: &[PauliLike]) -> usize { + pauli + .iter() + .map(super::Pauli::qubit_count) + .max() + .unwrap_or(0) +} + +pub fn are_the_same_group_up_to_phases( + paulis_left: &[PauliLike1], + paulis_right: &[PauliLike2], +) -> bool { + let qubit_count = paulis_qubit_count(paulis_left); + if paulis_qubit_count(paulis_right) != qubit_count { + return false; + } + let mut matrix_left = bitmatrix_from_paulis(paulis_left, qubit_count); + let mut matrix_right = bitmatrix_from_paulis(paulis_right, qubit_count); + let left_rank_profile = matrix_left.echelonize(); + let right_rank_profile = matrix_right.echelonize(); + let rank = left_rank_profile.len(); + if rank == right_rank_profile.len() { + matrix_left + .rows() + .take(rank) + .zip(matrix_right.rows().take(rank)) + .all(|(row_left, row_right)| row_left == row_right) + } else { + false + } +} + +pub fn are_mutually_commuting(paulis: &[PauliLike]) -> bool { + for i in 0..paulis.len() { + for j in 0..i { + if anti_commutes_with(&paulis[i], &paulis[j]) { + return false; + } + } + } + true +} + +pub fn apply_pauli_exponent( + target: &mut PauliLike, + exponent: &PauliLike, +) { + if anti_commutes_with(target, exponent) { + target.mul_assign_left(exponent); + target.add_assign_phase_exp(1); + } +} + +pub fn apply_root_x(target: &mut PauliLike, qubit_index: usize) { + if target.z_bits().index(qubit_index) { + target.mul_assign_left_x(qubit_index); + target.add_assign_phase_exp(3); + } +} + +pub fn apply_root_y(target: &mut PauliLike, qubit_index: usize) { + if !(target.z_bits().index(qubit_index) & target.x_bits().index(qubit_index)) { + target.mul_assign_left_y(qubit_index); + target.add_assign_phase_exp(3); + } +} + +pub fn apply_root_z(target: &mut PauliLike, qubit_index: usize) { + if target.x_bits().index(qubit_index) { + target.mul_assign_left_z(qubit_index); + target.add_assign_phase_exp(3); + } +} diff --git a/source/paulimer/src/pauli/dense.rs b/source/paulimer/src/pauli/dense.rs new file mode 100644 index 0000000000..22efbcebde --- /dev/null +++ b/source/paulimer/src/pauli/dense.rs @@ -0,0 +1,61 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use crate::quantum_core::PositionedPauliObservable; + +use super::{PauliUnitaryProjective, SparsePauli}; +use crate::{ + bits::BitVec, + pauli::{generic::PauliUnitary, Pauli, PauliBinaryOps}, + NeutralElement, +}; +pub type DensePauli = PauliUnitary; +pub type DensePauliProjective = PauliUnitaryProjective; + +impl From<&[PositionedPauliObservable]> for DensePauli { + fn from(value: &[PositionedPauliObservable]) -> Self { + let r: SparsePauli = value.into(); + match super::Pauli::max_qubit_id(&r) { + Some(max_id) => { + let mut dense = + ::neutral_element_of_size(max_id + 1); + super::PauliBinaryOps::assign(&mut dense, &r); + dense + } + None => ::default_size_neutral_element(), + } + } +} + +impl From<[PositionedPauliObservable; LENGTH]> for DensePauli { + fn from(pauli_observable: [PositionedPauliObservable; LENGTH]) -> Self { + pauli_observable.as_slice().into() + } +} + +impl From<&[PositionedPauliObservable; LENGTH]> for DensePauli { + fn from(pauli_observable: &[PositionedPauliObservable; LENGTH]) -> Self { + pauli_observable.as_slice().into() + } +} + +impl From> for DensePauli { + fn from(value: Vec) -> Self { + value.as_slice().into() + } +} + +impl From<&Vec> for DensePauli { + fn from(value: &Vec) -> Self { + value.as_slice().into() + } +} + +pub fn dense_from(pauli: &PauliLike, qubit_count: usize) -> DensePauli +where + DensePauli: PauliBinaryOps, +{ + let mut result = DensePauli::neutral_element_of_size(qubit_count); + result.assign(pauli); + result +} diff --git a/source/paulimer/src/pauli/generic.rs b/source/paulimer/src/pauli/generic.rs new file mode 100644 index 0000000000..dd0ca87e06 --- /dev/null +++ b/source/paulimer/src/pauli/generic.rs @@ -0,0 +1,1291 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use crate::quantum_core::PositionedPauliObservable; + +use crate::bits::{self, BitVec, BitView, FromBits, IndexSet}; +use crate::bits::{ + Bitwise, BitwiseBinaryOps, BitwiseNeutralElement, Dot, IndexAssignable, OverlapWeight, +}; +use crate::{subscript_digits, NeutralElement}; + +use std::collections::btree_map::Entry; +use std::fmt::Debug; +use std::num::ParseIntError; +use std::str::FromStr; +use std::{collections::BTreeMap, fmt::Display}; + +use super::sparse::SparsePauliProjective; +use super::{ + Pauli, PauliBinaryOps, PauliBits, PauliMutable, PauliMutableBits, PauliNeutralElement, + SparsePauli, +}; + +pub trait PhaseExponent { + fn raw_value(&self) -> u8; + + fn value(&self) -> u8 { + self.raw_value() % 4 + } + + fn is_even(&self) -> bool { + self.raw_value() & 1 == 0 + } + + fn is_odd(&self) -> bool { + self.raw_value() & 1 != 0 + } + + #[must_use] + fn raw_eq(raw_value1: u8, raw_value2: u8) -> bool { + raw_value1.wrapping_sub(raw_value2).is_multiple_of(4) + } + + fn eq(&self, other: &Self) -> bool { + Self::raw_eq(self.raw_value(), other.raw_value()) + } + + fn is_zero(&self) -> bool { + self.raw_value().trailing_zeros() >= 2 + } +} + +pub trait PhaseExponentMutable: PhaseExponent { + fn add_assign(&mut self, value: u8); + fn assign(&mut self, value: u8); + fn complex_conjugate_in_place(&mut self) { + self.assign(4u8 - self.raw_value() % 4); + } + fn set_random(&mut self, random_number_generator: &mut impl rand::Rng); +} + +pub trait PhaseNeutralElement: + PhaseExponent + NeutralElement +{ +} + +impl PhaseExponent for u8 { + fn raw_value(&self) -> u8 { + *self + } +} + +impl PhaseExponent for &u8 { + fn raw_value(&self) -> u8 { + **self + } +} + +impl PhaseExponent for &mut u8 { + fn raw_value(&self) -> u8 { + **self + } +} + +impl PhaseExponentMutable for u8 { + fn add_assign(&mut self, value: u8) { + *self = self.wrapping_add(value); + } + + fn assign(&mut self, value: u8) { + *self = value; + } + + fn set_random(&mut self, random_number_generator: &mut impl rand::Rng) { + *self = random_number_generator.gen::(); + } +} + +impl PhaseExponentMutable for &mut u8 { + fn add_assign(&mut self, value: u8) { + **self = self.wrapping_add(value); + } + + fn assign(&mut self, value: u8) { + **self = value; + } + + fn set_random(&mut self, random_number_generator: &mut impl rand::Rng) { + **self = random_number_generator.gen::(); + } +} + +impl NeutralElement for u8 { + type NeutralElementType = u8; + + #[inline] + fn neutral_element(&self) -> Self::NeutralElementType { + 0u8 + } + + #[inline] + fn default_size_neutral_element() -> Self::NeutralElementType { + 0u8 + } + + #[inline] + fn neutral_element_of_size(_size: usize) -> Self::NeutralElementType { + 0u8 + } +} + +impl NeutralElement for &u8 { + type NeutralElementType = u8; + + #[inline] + fn neutral_element(&self) -> Self::NeutralElementType { + 0u8 + } + + #[inline] + fn default_size_neutral_element() -> Self::NeutralElementType { + 0u8 + } + + #[inline] + fn neutral_element_of_size(_size: usize) -> Self::NeutralElementType { + 0u8 + } +} + +impl NeutralElement for &mut u8 { + type NeutralElementType = u8; + + #[inline] + fn neutral_element(&self) -> Self::NeutralElementType { + 0u8 + } + + #[inline] + fn default_size_neutral_element() -> Self::NeutralElementType { + 0u8 + } + + #[inline] + fn neutral_element_of_size(_size: usize) -> Self::NeutralElementType { + 0u8 + } +} + +impl PhaseNeutralElement for u8 {} +impl PhaseNeutralElement for &u8 {} +impl PhaseNeutralElement for &mut u8 {} + +// PauliUnitary & PauliUnitaryProjective structs + +#[must_use] +#[derive(Clone, Eq, Hash)] +pub struct PauliUnitary { + x_bits: Bits, + z_bits: Bits, + xz_phase_exp: Phase, +} + +#[must_use] +#[derive(Clone, Eq, Hash)] +pub struct PauliUnitaryProjective { + x_bits: Bits, + z_bits: Bits, +} + +// Pauli + +impl Pauli for PauliUnitaryProjective { + type Bits = Bits; + type PhaseExponentValue = (); + + fn x_bits(&self) -> &Self::Bits { + &self.x_bits + } + + fn z_bits(&self) -> &Self::Bits { + &self.z_bits + } + + fn is_order_two(&self) -> bool { + true + } + + fn is_identity(&self) -> bool { + self.x_bits.is_zero() && self.z_bits.is_zero() + } + + fn is_pauli_x(&self, qubit: usize) -> bool { + self.x_bits.is_one_bit(qubit) && self.z_bits.is_zero() + } + + fn is_pauli_z(&self, qubit: usize) -> bool { + self.x_bits.is_zero() && self.z_bits.is_one_bit(qubit) + } + + fn is_pauli_y(&self, qubit: usize) -> bool { + self.x_bits.is_one_bit(qubit) && self.z_bits.is_one_bit(qubit) + } + + fn equals_to(&self, rhs: &Self) -> bool { + self == rhs + } + + fn to_xz_bits(self) -> (Self::Bits, Self::Bits) { + (self.x_bits, self.z_bits) + } + + fn xz_phase_exponent(&self) -> Self::PhaseExponentValue {} +} + +impl Pauli for PauliUnitary { + type Bits = Bits; + type PhaseExponentValue = u8; + + fn x_bits(&self) -> &Bits { + &self.x_bits + } + + fn z_bits(&self) -> &Bits { + &self.z_bits + } + + fn is_order_two(&self) -> bool { + self.y_parity() ^ self.xz_phase_exp.is_even() + } + + fn is_identity(&self) -> bool { + self.x_bits.is_zero() && self.z_bits.is_zero() && self.xz_phase_exp.is_zero() + } + + fn is_pauli_x(&self, qubit: usize) -> bool { + self.x_bits.is_one_bit(qubit) && self.z_bits.is_zero() && self.xz_phase_exp.is_zero() + } + + fn is_pauli_z(&self, qubit: usize) -> bool { + self.x_bits.is_zero() && self.z_bits.is_one_bit(qubit) && self.xz_phase_exp.is_zero() + } + + fn is_pauli_y(&self, qubit: usize) -> bool { + self.x_bits.is_one_bit(qubit) + && self.z_bits.is_one_bit(qubit) + && self.xz_phase_exp.value() == 1 + } + + fn equals_to(&self, rhs: &Self) -> bool { + self == rhs + } + + fn to_xz_bits(self) -> (Self::Bits, Self::Bits) { + (self.x_bits, self.z_bits) + } + + fn xz_phase_exponent(&self) -> Self::PhaseExponentValue { + self.xz_phase_exp.value() + } +} + +// PauliMutableBits + +impl + PauliBits> PauliMutableBits + for PauliUnitaryProjective +{ + type BitsMutable = Bits; + + fn x_bits_mut(&mut self) -> &mut Self::BitsMutable { + &mut self.x_bits + } + + fn z_bits_mut(&mut self) -> &mut Self::BitsMutable { + &mut self.z_bits + } +} + +impl< + OtherBits: Bitwise, + Bits: BitwiseBinaryOps + PauliBits, + PhExp: PhaseExponentMutable, + > PauliMutableBits for PauliUnitary +{ + type BitsMutable = Bits; + + fn x_bits_mut(&mut self) -> &mut Self::BitsMutable { + &mut self.x_bits + } + + fn z_bits_mut(&mut self) -> &mut Self::BitsMutable { + &mut self.z_bits + } +} + +// PauliOps + +impl PauliMutable + for PauliUnitary +{ + fn assign_phase_exp(&mut self, rhs: u8) { + self.xz_phase_exp.assign(rhs); + } + + fn add_assign_phase_exp(&mut self, rhs: u8) { + self.xz_phase_exp.add_assign(rhs); + } + + fn complex_conjugate(&mut self) { + self.xz_phase_exp.complex_conjugate_in_place(); + } + + fn invert(&mut self) { + self.complex_conjugate(); + if self.y_parity() { + self.negate(); + } + } + + fn negate(&mut self) { + self.xz_phase_exp.add_assign(2u8); + } + + fn assign_phase_from>( + &mut self, + other: &PauliLike, + ) { + self.xz_phase_exp.assign(other.xz_phase_exponent()); + } + + fn mul_assign_phase_from>( + &mut self, + other: &PauliLike, + ) { + self.xz_phase_exp.add_assign(other.xz_phase_exponent()); + } + + fn mul_assign_left_x(&mut self, qubit_id: usize) { + self.x_bits.negate_index(qubit_id); + } + + fn mul_assign_right_x(&mut self, qubit_id: usize) { + self.x_bits.negate_index(qubit_id); + if self.z_bits().index(qubit_id) { + self.xz_phase_exponent().add_assign(2); + } + } + + fn mul_assign_left_z(&mut self, qubit_id: usize) { + self.z_bits.negate_index(qubit_id); + if self.x_bits().index(qubit_id) { + self.xz_phase_exponent().add_assign(2); + } + } + + fn mul_assign_right_z(&mut self, qubit_id: usize) { + self.z_bits.negate_index(qubit_id); + } + + fn set_identity(&mut self) { + self.x_bits.clear_bits(); + self.z_bits.clear_bits(); + self.xz_phase_exp.assign(0); + } + + fn set_random(&mut self, num_qubits: usize, random_number_generator: &mut impl rand::Rng) { + self.x_bits.set_random(num_qubits, random_number_generator); + self.z_bits.set_random(num_qubits, random_number_generator); + self.xz_phase_exp.set_random(random_number_generator); + } + + fn set_random_order_two( + &mut self, + num_qubits: usize, + random_number_generator: &mut impl rand::Rng, + ) { + self.set_random(num_qubits, random_number_generator); + if !self.is_order_two() { + self.xz_phase_exp.add_assign(1u8); + } + debug_assert!(self.is_order_two()); + } +} + +// PauliBinaryOps + +impl PauliMutable for PauliUnitaryProjective { + fn assign_phase_exp(&mut self, _rhs: u8) {} + + fn add_assign_phase_exp(&mut self, _rhs: u8) {} + + fn complex_conjugate(&mut self) {} + + fn invert(&mut self) {} + + fn negate(&mut self) {} + + fn assign_phase_from>( + &mut self, + _other: &PauliLike, + ) { + } + + fn mul_assign_phase_from>( + &mut self, + _other: &PauliLike, + ) { + } + + fn mul_assign_left_x(&mut self, qubit_id: usize) { + self.x_bits.negate_index(qubit_id); + } + + fn mul_assign_right_x(&mut self, qubit_id: usize) { + self.x_bits.negate_index(qubit_id); + } + + fn mul_assign_left_z(&mut self, qubit_id: usize) { + self.z_bits.negate_index(qubit_id); + } + + fn mul_assign_right_z(&mut self, qubit_id: usize) { + self.z_bits.negate_index(qubit_id); + } + + fn set_identity(&mut self) { + self.x_bits.clear_bits(); + self.z_bits.clear_bits(); + } + + fn set_random(&mut self, num_qubits: usize, random_number_generator: &mut impl rand::Rng) { + self.x_bits.set_random(num_qubits, random_number_generator); + self.z_bits.set_random(num_qubits, random_number_generator); + } + + fn set_random_order_two( + &mut self, + num_qubits: usize, + random_number_generator: &mut impl rand::Rng, + ) { + self.set_random(num_qubits, random_number_generator); + } +} + +pub fn add_assign_bits(to: &mut T, from: &U) +where + T: PauliMutableBits, + U: Pauli, +{ + to.x_bits_mut().bitxor_assign(from.x_bits()); + to.z_bits_mut().bitxor_assign(from.z_bits()); +} + +fn assign_bits(to: &mut T, from: &U) +where + T: PauliMutableBits, + U: Pauli, +{ + to.x_bits_mut().assign(from.x_bits()); + to.z_bits_mut().assign(from.z_bits()); +} + +fn assign_bits_with_offset(to: &mut T, from: &U, start_qubit_index: usize, num_qubits: usize) +where + T: PauliMutableBits, + U: Pauli, +{ + to.x_bits_mut() + .assign_with_offset(from.x_bits(), start_qubit_index, num_qubits); + to.z_bits_mut() + .assign_with_offset(from.z_bits(), start_qubit_index, num_qubits); +} + +fn bits_eq(x: &T, z: &T, b: &U) -> bool +where + U: Pauli, + T: PartialEq, +{ + x == b.x_bits() && z == b.z_bits() +} + +impl> PauliBinaryOps + for PauliUnitaryProjective +where + Bits: BitwiseBinaryOps + PauliBits, + OtherPauli: Pauli, +{ + fn mul_assign_right(&mut self, rhs: &OtherPauli) { + add_assign_bits(self, rhs); + } + + fn mul_assign_left(&mut self, lhs: &OtherPauli) { + add_assign_bits(self, lhs); + } + + fn assign(&mut self, rhs: &OtherPauli) { + assign_bits(self, rhs); + } + + fn assign_with_offset( + &mut self, + rhs: &OtherPauli, + start_qubit_index: usize, + num_qubits: usize, + ) { + assign_bits_with_offset(self, rhs, start_qubit_index, num_qubits); + } +} + +// impl> PauliPhaseBinaryOps for PauliUnitaryProjective +// where +// Bits: PauliBits, +// { +// fn assign_phase_from(&mut self, _other: &OtherPauli) {} +// fn mul_assign_phase_from(&mut self, _other: &OtherPauli) {} +// } + +impl> PauliBinaryOps + for PauliUnitary +where + Bits: BitwiseBinaryOps + Dot + PauliBits + IndexAssignable, + Exponent: PhaseExponentMutable, +{ + fn mul_assign_right(&mut self, rhs: &OtherPauli) { + let cross: u8 = if self.z_bits().dot(rhs.x_bits()) { + 2u8 + } else { + 0u8 + }; + add_assign_bits(self, rhs); + self.add_assign_phase_exp(cross.wrapping_add(rhs.xz_phase_exponent())); + } + + fn mul_assign_left(&mut self, lhs: &OtherPauli) { + let cross: u8 = if self.x_bits().dot(lhs.z_bits()) { + 2u8 + } else { + 0u8 + }; + add_assign_bits(self, lhs); + self.add_assign_phase_exp(cross.wrapping_add(lhs.xz_phase_exponent())); + } + + fn assign(&mut self, rhs: &OtherPauli) { + self.assign_phase_exp(rhs.xz_phase_exponent()); + assign_bits(self, rhs); + } + + fn assign_with_offset( + &mut self, + rhs: &OtherPauli, + start_qubit_index: usize, + num_qubits: usize, + ) { + self.assign_phase_exp(rhs.xz_phase_exponent()); + assign_bits_with_offset(self, rhs, start_qubit_index, num_qubits); + } +} + +// impl > PauliPhaseBinaryOps for PauliUnitary +// where +// Bits: PauliBits, +// Exponent: PhaseExponentMutable, +// { +// fn assign_phase_from(&mut self, other: &OtherPauli) { +// self.assign_phase_exp(other.xz_phase_exponent()); +// } + +// fn mul_assign_phase_from(&mut self, other: &OtherPauli) { +// self.add_assign_phase_exp(other.xz_phase_exponent()); +// } +// } + +impl PauliUnitary { + pub fn from_bits(x_bits: Bits, z_bits: Bits, phase: Exponent) -> PauliUnitary { + PauliUnitary { + x_bits, + z_bits, + xz_phase_exp: phase, + } + } + + pub fn from_bits_tuple(bits: (Bits, Bits), phase: Exponent) -> PauliUnitary { + PauliUnitary { + x_bits: bits.0, + z_bits: bits.1, + xz_phase_exp: phase, + } + } +} + +impl PauliUnitaryProjective { + pub fn from_bits(x_bits: Bits, z_bits: Bits) -> PauliUnitaryProjective { + PauliUnitaryProjective { x_bits, z_bits } + } + + pub fn from_bits_tuple(xz_bits: (Bits, Bits)) -> PauliUnitaryProjective { + PauliUnitaryProjective { + x_bits: xz_bits.0, + z_bits: xz_bits.1, + } + } +} + +impl PauliUnitary { + pub fn size(&self) -> usize { + self.x_bits.len() + } +} + +impl PauliUnitaryProjective { + #[must_use] + pub fn size(&self) -> usize { + self.x_bits.len() + } +} + +// Partial and Full equality + +impl PartialEq> + for PauliUnitary +where + LeftBits: PartialEq + PauliBits, + RightBits: PauliBits, + LeftPhase: PhaseExponent, + RightPhase: PhaseExponent, +{ + fn eq(&self, other: &PauliUnitary) -> bool { + (self.xz_phase_exponent() == other.xz_phase_exponent()) + && bits_eq(&self.x_bits, &self.z_bits, other) + } +} + +impl PartialEq> + for &PauliUnitary +where + LeftBits: PartialEq + PauliBits, + RightBits: PauliBits, + LeftPhase: PhaseExponent, + RightPhase: PhaseExponent, +{ + fn eq(&self, other: &PauliUnitary) -> bool { + *self == other + } +} + +impl PartialEq<&PauliUnitary> + for PauliUnitary +where + LeftBits: PartialEq + PauliBits, + RightBits: PauliBits, + LeftPhase: PhaseExponent, + RightPhase: PhaseExponent, +{ + fn eq(&self, other: &&PauliUnitary) -> bool { + self == *other + } +} + +// impl PartialEq +// for PauliUnitaryProjective +// where +// LeftBits: Bitwise + PartialEq, +// { +// fn eq(&self, other: &RightPauli) -> bool { +// bits_eq(&self.x_bits, &self.z_bits, other) +// } +// } + +impl PartialEq> + for PauliUnitaryProjective +where + LeftBits: PartialEq + PauliBits, + RightBits: PauliBits, +{ + fn eq(&self, other: &PauliUnitaryProjective) -> bool { + bits_eq(&self.x_bits, &self.z_bits, other) + } +} + +impl PartialEq> + for &PauliUnitaryProjective +where + LeftBits: PartialEq + PauliBits, + RightBits: PauliBits, +{ + fn eq(&self, other: &PauliUnitaryProjective) -> bool { + *self == other + } +} + +impl PartialEq<&PauliUnitaryProjective> + for PauliUnitaryProjective +where + LeftBits: PartialEq + PauliBits, + RightBits: PauliBits, +{ + fn eq(&self, other: &&PauliUnitaryProjective) -> bool { + self == *other + } +} + +fn string_map(pauli: &impl Pauli) -> (u8, BTreeMap) { + let mut phase = 0; + let mut support = BTreeMap::new(); + for index in pauli.x_bits().support() { + support.insert(index, 'X'); + } + for index in pauli.z_bits().support() { + match support.entry(index) { + Entry::Occupied(mut e) => { + e.insert('Y'); + phase = (phase + 3) % 4; + } + Entry::Vacant(e) => { + e.insert('Z'); + } + } + } + (phase, support) +} + +fn pauli_string( + pauli: &impl Pauli, + phase: u8, + add_phase: bool, + sign_plus: bool, + dense: bool, +) -> String { + if let Some(last_index) = pauli.max_qubit_id() { + let mut string = String::new(); + let (extra_phase, id_to_character) = string_map(pauli); + if add_phase { + string.push_str(&phase_to_string( + (phase.wrapping_add(extra_phase)) % 4u8, + sign_plus, + )); + } + if dense { + for index in 0..=last_index { + if let Some(character) = id_to_character.get(&index) { + string.push(*character); + } else { + string.push('I'); + } + } + } else { + for (index, character) in &id_to_character { + string.push(*character); + string.push_str(&subscript_digits(*index)); + } + } + string + } else { + "I".to_owned() + } +} + +// Display + +impl Display for PauliUnitary { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if f.alternate() { + // dense + f.pad(&pauli_string( + self, + self.xz_phase_exp.value(), + true, + f.sign_plus(), + true, + )) + } else { + // sparse + f.pad(&pauli_string( + self, + self.xz_phase_exp.value(), + true, + f.sign_plus(), + false, + )) + } + } +} + +impl Debug for PauliUnitary { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + ::fmt(self, f) + } +} + +impl Display for PauliUnitaryProjective { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if f.alternate() { + f.pad(&pauli_string(self, 0, false, f.sign_plus(), true)) + } else { + f.pad(&pauli_string(self, 0, false, f.sign_plus(), false)) + } + } +} + +impl Debug for PauliUnitaryProjective { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + ::fmt(self, f) + } +} + +/// # Panics +/// +/// Will panic +#[must_use] +pub fn phase_to_string(phase: u8, with_plus: bool) -> String { + let s = match phase { + 0 => { + if with_plus { + "+" + } else { + "" + } + } + 1 => { + if with_plus { + "+𝑖" + } else { + "𝑖" + } + } + 2 => "-", + 3 => "-𝑖", + _ => panic!("Unexpected phase"), + }; + String::from(s) +} + +impl NeutralElement for PauliUnitary +where + Bits: BitwiseNeutralElement + PauliBits, + Bits::NeutralElementType: PauliBits, + Phase: PhaseNeutralElement, +{ + type NeutralElementType = PauliUnitary; + + fn neutral_element(&self) -> Self::NeutralElementType { + PauliUnitary::from_bits( + self.x_bits.neutral_element(), + self.z_bits.neutral_element(), + self.xz_phase_exp.neutral_element(), + ) + } + + fn default_size_neutral_element() -> Self::NeutralElementType { + PauliUnitary::from_bits( + ::default_size_neutral_element(), + ::default_size_neutral_element(), + ::default_size_neutral_element(), + ) + } + + fn neutral_element_of_size(size: usize) -> Self::NeutralElementType { + PauliUnitary::from_bits( + ::neutral_element_of_size(size), + ::neutral_element_of_size(size), + ::default_size_neutral_element(), + ) + } +} + +impl NeutralElement for PauliUnitaryProjective +where + Bits: BitwiseNeutralElement + PauliBits, + Bits::NeutralElementType: PauliBits, +{ + type NeutralElementType = PauliUnitaryProjective; + + fn neutral_element(&self) -> Self::NeutralElementType { + PauliUnitaryProjective::from_bits( + self.x_bits.neutral_element(), + self.z_bits.neutral_element(), + ) + } + + fn default_size_neutral_element() -> Self::NeutralElementType { + PauliUnitaryProjective::from_bits( + ::default_size_neutral_element(), + ::default_size_neutral_element(), + ) + } + + fn neutral_element_of_size(size: usize) -> Self::NeutralElementType { + PauliUnitaryProjective::from_bits( + ::neutral_element_of_size(size), + ::neutral_element_of_size(size), + ) + } +} + +impl PauliNeutralElement for PauliUnitaryProjective +where + Bits: BitwiseNeutralElement + PauliBits, + Bits::NeutralElementType: PauliBits + IndexAssignable, +{ +} + +impl PauliNeutralElement for PauliUnitary +where + Bits: BitwiseNeutralElement + PauliBits, + Phase: PhaseNeutralElement, + Bits::NeutralElementType: PauliBits + Dot + IndexAssignable, +{ +} + +impl FromBits> + for PauliUnitaryProjective +where + Self: PauliNeutralElement, + Bits: FromBits, +{ + fn from_bits(other: &PauliUnitaryProjective) -> Self { + let x = Bits::from_bits(other.x_bits()); + let z = Bits::from_bits(other.z_bits()); + PauliUnitaryProjective::::from_bits(x, z) + } +} + +impl< + BitsFrom: PauliBits, + Bits: PauliBits, + PhaseFrom: PhaseExponent, + Phase: PhaseExponentMutable + NeutralElement, + > FromBits> for PauliUnitary +where + Self: PauliNeutralElement, + Bits: FromBits, + PauliUnitary: Pauli, +{ + fn from_bits(other: &PauliUnitary) -> Self { + let x = Bits::from_bits(other.x_bits()); + let z = Bits::from_bits(other.z_bits()); + let mut res = + PauliUnitary::::from_bits(x, z, Phase::default_size_neutral_element()); + res.add_assign_phase_exp(other.xz_phase_exponent()); + res + } +} + +fn digits_to_int(digits: &[u32]) -> Result { + let mut normal_digits = String::with_capacity(digits.len()); + for digit_value in digits { + let digit_char = std::char::from_digit(*digit_value, 10).expect("expected a digit"); + normal_digits.push(digit_char); + } + normal_digits.parse() +} + +fn pauli_from_str(pauli_string: &str) -> Result +where + T: PauliMutable + NeutralElement, +{ + let no_whitespace = pauli_string.trim(); + let allowed_chars = "IXYZxyz +-i𝑖 ₀₁₂₃₄₅₆₇₈₉0123456789{}_"; + let index_chars = "₀₁₂₃₄₅₆₇₈₉0123456789"; + let phase_prefix_options = ["+i", "i", "-i", "+𝑖", "𝑖", "-𝑖", "+", "-"]; + + if no_whitespace.chars().all(|ch| allowed_chars.contains(ch)) { + let (no_whitespace, phase_exp) = parse_phase(no_whitespace, phase_prefix_options); + + if no_whitespace.chars().any(|ch| index_chars.contains(ch)) { + // Sparse string + parse_sparse_pauli(no_whitespace, phase_exp) + } else { + // Dense string + let mut res: T = ::neutral_element_of_size(pauli_string.len()); + res.add_assign_phase_exp(phase_exp); + for (index, character) in no_whitespace.chars().enumerate() { + match character { + 'X' | 'x' => res.mul_assign_right_x(index), + 'Z' | 'z' => res.mul_assign_right_z(index), + 'Y' | 'y' => res.mul_assign_right_y(index), + 'I' | ' ' => {} + _ => { + return Err(PauliStringParsingError); + } + } + } + Ok(res) + } + } else { + Err(PauliStringParsingError) + } +} + +fn parse_sparse_pauli(no_whitespace: &str, phase_exp: u8) -> Result +where + T: PauliMutable + NeutralElement, +{ + let mut character_and_positions = Vec::new(); + let mut digit_group = Vec::::new(); + let mut pauli_char: char = 'I'; + + for character in no_whitespace.chars() { + match character { + 'X' | 'x' | 'Z' | 'z' | 'Y' | 'y' => { + if pauli_char != 'I' { + character_and_positions.push((pauli_char, digit_group.clone())); + digit_group.clear(); + } + pauli_char = character; + } + '₀'..='₉' => { + digit_group.push(character as u32 - '₀' as u32); + } + '0'..='9' => { + digit_group.push(character as u32 - '0' as u32); + } + '{' | '}' | ' ' | '_' => {} + _ => { + return Err(PauliStringParsingError); + } + } + } + if pauli_char != 'I' { + character_and_positions.push((pauli_char, digit_group.clone())); + } + + let mut max_index = 0; + for (_, digits) in &character_and_positions { + if let Ok(index) = digits_to_int(digits) { + if let Ok(index_usize) = usize::try_from(index) { + max_index = usize::max(max_index, index_usize); + } else { + return Err(PauliStringParsingError); + } + } else { + return Err(PauliStringParsingError); + } + } + let mut res: T = ::neutral_element_of_size(no_whitespace.len()); + res.add_assign_phase_exp(phase_exp); + for (pauli_char, digits) in &character_and_positions { + if let Ok(index) = digits_to_int(digits) { + if let Ok(index_usize) = usize::try_from(index) { + match pauli_char { + 'X' | 'x' => res.mul_assign_left_x(index_usize), + 'Z' | 'z' => res.mul_assign_left_z(index_usize), + 'Y' | 'y' => res.mul_assign_left_y(index_usize), + _ => { + return Err(PauliStringParsingError); + } + } + } else { + return Err(PauliStringParsingError); + } + } else { + return Err(PauliStringParsingError); + } + } + Ok(res) +} + +fn parse_phase<'life>( + no_whitespace: &'life str, + phase_prefix_options: [&'static str; 8], +) -> (&'life str, u8) { + for phase_prefix in phase_prefix_options { + if no_whitespace.starts_with(phase_prefix) { + let (phase_string, remainder) = no_whitespace.split_at(phase_prefix.len()); + let phase_exp = match phase_string { + "-" => 2, + "+i" | "+𝑖" | "i" | "𝑖" => 1, + "-i" | "-𝑖" => 3, + "+" => 0, + _ => { + unreachable!(); + } + }; + return (remainder, phase_exp); + } + } + (no_whitespace, 0) +} + +impl FromStr for PauliUnitaryProjective +where + Self: PauliNeutralElement, +{ + type Err = PauliStringParsingError; + + fn from_str(characters: &str) -> Result { + pauli_from_str(characters) + } +} + +impl FromStr for PauliUnitary +where + Bits: BitwiseNeutralElement + PauliBits, + Phase: PhaseNeutralElement, + Self: PauliNeutralElement, +{ + type Err = PauliStringParsingError; + + fn from_str(characters: &str) -> Result { + pauli_from_str(characters) + } +} + +impl PartialEq<&[PositionedPauliObservable]> for PauliUnitary +where + Bits: PauliBits + std::cmp::PartialEq, + Phase: PhaseNeutralElement, +{ + fn eq(&self, other: &&[PositionedPauliObservable]) -> bool { + self == <&[PositionedPauliObservable] as Into>::into(other) + } +} + +impl PartialEq<[PositionedPauliObservable; LENGTH]> + for PauliUnitary +where + Bits: PauliBits + std::cmp::PartialEq, + Phase: PhaseNeutralElement, +{ + fn eq(&self, other: &[PositionedPauliObservable; LENGTH]) -> bool { + self == <&[PositionedPauliObservable] as Into>::into(other) + } +} + +impl PartialEq> for PauliUnitary +where + Bits: PauliBits + std::cmp::PartialEq, + Phase: PhaseNeutralElement, +{ + fn eq(&self, other: &Vec) -> bool { + self == <&[PositionedPauliObservable] as Into>::into(other) + } +} + +impl PartialEq<&[PositionedPauliObservable]> for PauliUnitaryProjective +where + Bits: PauliBits + std::cmp::PartialEq, +{ + fn eq(&self, other: &&[PositionedPauliObservable]) -> bool { + self == <&[PositionedPauliObservable] as Into>::into(other) + } +} + +impl PartialEq<[PositionedPauliObservable; LENGTH]> + for PauliUnitaryProjective +where + Bits: PauliBits + std::cmp::PartialEq, +{ + fn eq(&self, other: &[PositionedPauliObservable; LENGTH]) -> bool { + self == <&[PositionedPauliObservable] as Into>::into(other) + } +} + +impl PartialEq> for PauliUnitaryProjective +where + Bits: PauliBits + std::cmp::PartialEq, +{ + fn eq(&self, other: &Vec) -> bool { + self == <&[PositionedPauliObservable] as Into>::into(other) + } +} + +#[derive(Debug, PartialEq, Eq, Default)] +pub struct PauliCharacterError; + +#[derive(Debug, PartialEq, Eq, Default)] +pub struct PauliStringParsingError; + +impl From<(Bits, Bits)> for PauliUnitaryProjective { + fn from(value: (Bits, Bits)) -> Self { + PauliUnitaryProjective::::from_bits_tuple(value) + } +} + +impl> + From<(Bits, Bits)> for PauliUnitary +{ + fn from(value: (Bits, Bits)) -> Self { + PauliUnitary::::from_bits_tuple(value, Phase::default_size_neutral_element()) + } +} + +impl<'life, const WORD_COUNT: usize> From>> + for PauliUnitaryProjective> +{ + fn from(value: PauliUnitaryProjective>) -> Self { + Self::from_bits(value.x_bits.into(), value.z_bits.into()) + } +} + +impl, const WORD_COUNT: usize> + From for PauliUnitaryProjective> +where + BitVec: for<'life> From<&'life Bits>, +{ + fn from(value: T) -> Self { + Self::from_bits(value.x_bits().into(), value.z_bits().into()) + } +} + +impl, const WORD_COUNT: usize> + From for PauliUnitary, u8> +where + BitVec: for<'life> From<&'life Bits>, +{ + fn from(value: T) -> Self { + let weight = value.x_bits().and_weight(value.z_bits()); + Self::from_bits( + value.x_bits().into(), + value.z_bits().into(), + (weight % 4).try_into().unwrap(), + ) + } +} + +impl> From + for PauliUnitary +where + IndexSet: for<'life> From<&'life Bits>, +{ + fn from(value: T) -> Self { + Self::from_bits( + value.x_bits().into(), + value.z_bits().into(), + value.xz_phase_exponent(), + ) + } +} + +impl<'life, const WORD_COUNT: usize> From> + for PauliUnitaryProjective<[u64; WORD_COUNT]> +{ + fn from(value: PauliUnitaryProjective<&'life [u64; WORD_COUNT]>) -> Self { + Self::from_bits(value.x_bits.to_owned(), value.z_bits.to_owned()) + } +} + +impl<'life, const WORD_COUNT: usize> From, &u8>> + for PauliUnitary, u8> +{ + fn from(value: PauliUnitary, &u8>) -> Self { + Self::from_bits( + value.x_bits.into(), + value.z_bits.into(), + *value.xz_phase_exp, + ) + } +} + +pub fn pauli_random + PauliMutable>( + num_qubits: usize, + random_number_generator: &mut impl rand::Rng, +) -> PauliLike { + let mut res = PauliLike::neutral_element_of_size(num_qubits); + res.set_random(num_qubits, random_number_generator); + res +} + +/// # Example +/// `pauli_random_order_two(6, &mut thread_rng());` +pub fn pauli_random_order_two< + PauliLike: NeutralElement + PauliMutable, +>( + num_qubits: usize, + random_number_generator: &mut impl rand::Rng, +) -> PauliLike { + let mut res = PauliLike::neutral_element_of_size(num_qubits); + res.set_random_order_two(num_qubits, random_number_generator); + res +} diff --git a/source/paulimer/src/pauli/operators.rs b/source/paulimer/src/pauli/operators.rs new file mode 100644 index 0000000000..433dfb5fd9 --- /dev/null +++ b/source/paulimer/src/pauli/operators.rs @@ -0,0 +1,222 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +// fn is_sorted>(items: Items) -> bool { +// let vec_items: Vec = items.collect(); +// equal(sorted(vec_items.iter()), vec_items.iter()) +// } + +// MulAssign for PauliUnitary and PauliUnitaryAbs with rhs that implements Pauli or PauliAbs + +use std::ops::{Mul, MulAssign, Neg}; + +use crate::NeutralElement; + +use super::{ + generic::{PhaseExponent, PhaseExponentMutable}, + Pauli, PauliBinaryOps, PauliBits, PauliMutable, PauliNeutralElement, PauliUnitary, + PauliUnitaryProjective, +}; + +impl> MulAssign<&PauliRight> + for PauliUnitary +where + PauliUnitary: PauliBinaryOps, + BitsLeft: PauliBits, + PhaseLeft: PhaseExponent, +{ + fn mul_assign(&mut self, other: &PauliRight) { + self.mul_assign_right(other); + } +} + +impl> MulAssign<&PauliRight> + for PauliUnitaryProjective +where + PauliUnitaryProjective: PauliBinaryOps, + BitsLeft: PauliBits, +{ + fn mul_assign(&mut self, other: &PauliRight) { + self.mul_assign_right(other); + } +} + +pub struct Phase(Exponent); + +impl Phase { + pub fn from_exponent(exponent: Exponent) -> Self { + Self(exponent) + } +} + +// Multiply an object by a reference on the right, consume the object return multiplication result +impl> Mul<&PauliRight> + for PauliUnitary +where + PauliUnitary: for<'a> MulAssign<&'a PauliRight>, + BitsLeft: PauliBits, + PhaseLeft: PhaseExponent, +{ + type Output = PauliUnitary; + + fn mul(mut self, other: &PauliRight) -> Self::Output { + self *= other; + self + } +} + +impl> Mul<&PauliRight> + for PauliUnitaryProjective +where + PauliUnitaryProjective: for<'a> MulAssign<&'a PauliRight>, + BitsLeft: PauliBits, +{ + type Output = PauliUnitaryProjective; + + fn mul(mut self, other: &PauliRight) -> Self::Output { + self *= other; + self + } +} + +// Multiply an object by a reference on the left, consume the object return multiplication result + +impl> Mul + for &PauliUnitary +where + PauliRight: PauliBinaryOps>, + BitsLeft: PauliBits, + PhaseLeft: PhaseExponent, +{ + type Output = PauliRight; + + fn mul(self, mut other: PauliRight) -> Self::Output { + other.mul_assign_left(self); + other + } +} + +impl> Mul + for &PauliUnitaryProjective +where + PauliRight: PauliBinaryOps>, + BitsLeft: PauliBits, +{ + type Output = PauliRight; + + fn mul(self, mut other: PauliRight) -> Self::Output { + other.mul_assign_left(self); + other + } +} + +// Multiplying by a phase + +impl + MulAssign> for PauliUnitary +where + PauliUnitary: PauliMutable + Pauli, +{ + fn mul_assign(&mut self, phase: Phase) { + self.add_assign_phase_exp(phase.0.raw_value()); + } +} + +impl Mul> + for PauliUnitary +where + PauliUnitary: PauliMutable + Pauli, +{ + type Output = PauliUnitary; + + fn mul(mut self, phase: Phase) -> Self::Output { + self.add_assign_phase_exp(phase.0.raw_value()); + self + } +} + +impl Mul<&PauliUnitary> + for &PauliUnitary +where + PauliUnitary: PauliNeutralElement, + as NeutralElement>::NeutralElementType: + PauliBinaryOps>, + BitsRight: PauliBits, + PhaseRight: PhaseExponent, + BitsLeft: PauliBits, + PhaseLeft: PhaseExponent, +{ + type Output = as NeutralElement>::NeutralElementType; + + fn mul(self, other: &PauliUnitary) -> Self::Output { + let mut res = as NeutralElement>::neutral_element(self); + res.assign(self); + res.mul_assign_right(other); + res + } +} + +impl Mul<&PauliUnitaryProjective> + for &PauliUnitaryProjective +where + PauliUnitaryProjective: PauliNeutralElement, + as NeutralElement>::NeutralElementType: + PauliBinaryOps>, + BitsRight: PauliBits, + BitsLeft: PauliBits, +{ + type Output = as NeutralElement>::NeutralElementType; + + fn mul(self, other: &PauliUnitaryProjective) -> Self::Output { + let mut res = as NeutralElement>::neutral_element(self); + res.assign(self); + res.mul_assign_right(other); + res + } +} + +// negating object consumes it and returns the negation +impl Neg for PauliUnitary +where + PauliUnitary: PauliMutable + Pauli, +{ + type Output = Self; + fn neg(mut self) -> Self::Output { + self.add_assign_phase_exp(2u8); + self + } +} + +impl Neg for PauliUnitaryProjective +where + PauliUnitaryProjective: PauliMutable, +{ + type Output = Self; + fn neg(self) -> Self::Output { + self + } +} + +// negating object consumes it and returns the negation +impl Neg + for &PauliUnitary +where + PauliUnitary: PauliMutable + Pauli, +{ + type Output = PauliUnitary; + fn neg(self) -> Self::Output { + let mut res = self.clone(); + res.add_assign_phase_exp(2u8); + res + } +} + +impl Neg for &PauliUnitaryProjective +where + PauliUnitaryProjective: PauliMutable, +{ + type Output = PauliUnitaryProjective; + fn neg(self) -> Self::Output { + self.clone() + } +} diff --git a/source/paulimer/src/pauli/sparse.rs b/source/paulimer/src/pauli/sparse.rs new file mode 100644 index 0000000000..654119b26f --- /dev/null +++ b/source/paulimer/src/pauli/sparse.rs @@ -0,0 +1,172 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use rustc_hash::FxHashMap; + +use crate::bits::{self, Bitwise, IndexAssignable, IndexSet}; +use crate::pauli::generic::{PauliCharacterError, PauliUnitary}; +use crate::quantum_core::{self, PositionedPauliObservable}; + +use super::{Pauli, PauliUnitaryProjective}; + +pub type SparsePauli = PauliUnitary; +pub type SparsePauliProjective = PauliUnitaryProjective; + +// Note: Can be improved using PauliMutable trait +// Question: Should 'i' be interpreted as I or complex phase ? +impl TryFrom> for SparsePauli { + type Error = PauliCharacterError; + + fn try_from(characters: FxHashMap) -> Result { + let mut x_bits = IndexSet::new(); + let mut z_bits = IndexSet::new(); + let mut exponent: u8 = 0; + for (index, character) in characters { + match character { + 'X' | 'x' => x_bits.assign_index(index, true), + 'Z' | 'z' => z_bits.assign_index(index, true), + 'Y' | 'y' => { + exponent += 1; + x_bits.assign_index(index, true); + z_bits.assign_index(index, true); + } + 'I' => {} + _ => return Err(PauliCharacterError {}), + } + } + Ok(SparsePauli::from_bits(x_bits, z_bits, exponent)) + } +} + +// Note: Allow repeated indicies so that conversion never fails and replace with generic that relies on PauliMutable +impl From<&[PositionedPauliObservable]> for SparsePauli { + fn from(pauli_observable: &[PositionedPauliObservable]) -> Self { + let mut obs_copy = Vec::from(pauli_observable); + obs_copy.sort_unstable(); + if obs_copy.len() > 1 { + for j in 0..obs_copy.len() - 1 { + assert!( + obs_copy[j].qubit_id < obs_copy[j + 1].qubit_id, + "Repeated qubit positions" + ); + } + } + + let mut x_indices = IndexSet::new(); + let mut z_indices = IndexSet::new(); + let mut phase = 0u8; + + for quantum_core::PositionedPauliObservable { + qubit_id, + observable, + } in obs_copy + { + match observable { + quantum_core::PauliObservable::PlusI => (), + quantum_core::PauliObservable::MinusI => phase += 2, + quantum_core::PauliObservable::PlusX => x_indices.assign_index(qubit_id, true), + quantum_core::PauliObservable::PlusZ => z_indices.assign_index(qubit_id, true), + quantum_core::PauliObservable::MinusX => { + x_indices.assign_index(qubit_id, true); + phase += 2; + } + quantum_core::PauliObservable::MinusZ => { + z_indices.assign_index(qubit_id, true); + phase += 2; + } + quantum_core::PauliObservable::PlusY => { + x_indices.assign_index(qubit_id, true); + z_indices.assign_index(qubit_id, true); + phase += 1; + } + quantum_core::PauliObservable::MinusY => { + x_indices.assign_index(qubit_id, true); + z_indices.assign_index(qubit_id, true); + phase += 3; + } + } + } + PauliUnitary::from_bits(x_indices, z_indices, phase) + } +} + +impl From<&[PositionedPauliObservable]> for SparsePauliProjective { + fn from(pauli_observable: &[PositionedPauliObservable]) -> Self { + let mut obs_copy = Vec::from(pauli_observable); + obs_copy.sort_unstable(); + if obs_copy.len() > 1 { + for j in 0..obs_copy.len() - 1 { + assert!( + obs_copy[j].qubit_id < obs_copy[j + 1].qubit_id, + "Repeated qubit positions" + ); + } + } + + let mut x_indices = IndexSet::new(); + let mut z_indices = IndexSet::new(); + + for quantum_core::PositionedPauliObservable { + qubit_id, + observable, + } in obs_copy + { + match observable { + quantum_core::PauliObservable::PlusI | quantum_core::PauliObservable::MinusI => (), + quantum_core::PauliObservable::PlusX | quantum_core::PauliObservable::MinusX => { + x_indices.assign_index(qubit_id, true); + } + quantum_core::PauliObservable::PlusZ | quantum_core::PauliObservable::MinusZ => { + z_indices.assign_index(qubit_id, true); + } + quantum_core::PauliObservable::PlusY | quantum_core::PauliObservable::MinusY => { + x_indices.assign_index(qubit_id, true); + z_indices.assign_index(qubit_id, true); + } + } + } + PauliUnitaryProjective::from_bits(x_indices, z_indices) + } +} + +impl From<[PositionedPauliObservable; LENGTH]> for SparsePauli { + fn from(pauli_observable: [PositionedPauliObservable; LENGTH]) -> Self { + pauli_observable.as_slice().into() + } +} + +impl From> for SparsePauli { + fn from(value: Vec) -> Self { + value.as_slice().into() + } +} + +impl From<[PositionedPauliObservable; LENGTH]> for SparsePauliProjective { + fn from(pauli_observable: [PositionedPauliObservable; LENGTH]) -> Self { + pauli_observable.as_slice().into() + } +} + +impl From> for SparsePauliProjective { + fn from(value: Vec) -> Self { + value.as_slice().into() + } +} + +pub fn remapped_sparse(pauli: &SparsePauli, support: &[usize]) -> SparsePauli { + let x_bits: IndexSet = bits::remapped(pauli.x_bits(), support); + let z_bits: IndexSet = bits::remapped(pauli.z_bits(), support); + SparsePauli::from_bits(x_bits, z_bits, pauli.xz_phase_exponent()) +} + +pub fn as_sparse(pauli: &impl Pauli) -> SparsePauli { + let x_bits = pauli.x_bits().support().into(); + let z_bits = pauli.z_bits().support().into(); + SparsePauli::from_bits(x_bits, z_bits, pauli.xz_phase_exponent()) +} + +pub fn as_sparse_projective(pauli: &impl Pauli) -> SparsePauliProjective { + let x_bits = pauli.x_bits().support().into(); + let z_bits = pauli.z_bits().support().into(); + SparsePauliProjective::from_bits(x_bits, z_bits) +} diff --git a/source/paulimer/src/quantum_core.rs b/source/paulimer/src/quantum_core.rs new file mode 100644 index 0000000000..5c1c65b5a1 --- /dev/null +++ b/source/paulimer/src/quantum_core.rs @@ -0,0 +1,307 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#[cfg(test)] +mod tests; + +use num_derive::{FromPrimitive, ToPrimitive}; +use std::ops::Neg; + +/// All elements of a given type. Usually used for simple enums. +pub trait All: Sized { + fn all() -> [Self; NUM_ELEMENTS]; +} + +/// Pauli matrices not equal to identity, also axes of the Block sphere. +/// See also [`PauliMatrix`], [`Axis`]. +#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, Eq, Ord, FromPrimitive, ToPrimitive)] +pub enum Axis { + /// Pauli X, also x axis of the Bloch sphere + /// ```text + /// |0 1| + /// |1 0| + /// ``` + X = 0b001, + + /// Pauli Y, also y axis of the Bloch sphere + /// ```text + /// |0 -i| + /// |i 0| + /// ``` + Y = 0b011, + + /// Pauli Z, also z axis of the Bloch sphere + /// ```text + /// |1 0| + /// |0 -1| + /// ``` + Z = 0b010, +} + +/// Pauli matrices on one qubit. +/// See also [`Axis`]. +#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, Eq, Ord, FromPrimitive, ToPrimitive)] +pub enum PauliMatrix { + /// One qubit identity matrix + /// ```text + /// |1 0| + /// |0 1| + /// ``` + I = 0b000, + + /// Pauli X + /// ```text + /// |0 1| + /// |1 0| + /// ``` + X = (Axis::X as isize), + + /// Pauli Y + /// ```text + /// |0 -i| + /// |i 0| + /// ``` + Y = (Axis::Y as isize), + + /// Pauli Z + /// ```text + /// |1 0| + /// |0 -1| + /// ``` + Z = (Axis::Z as isize), +} + +const MINUS_IDENTITY: isize = 0b100; + +/// Hermitian one qubit Pauli operators that are not identity. +/// See also [`Axis`]. +#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, Eq, Ord, FromPrimitive, ToPrimitive)] +pub enum DirectedAxis { + /// Pauli X + PlusX = (Axis::X as isize), + /// Pauli Y + PlusY = (Axis::Y as isize), + /// Pauli Z + PlusZ = (Axis::Z as isize), + /// Pauli -X + MinusX = (Axis::X as isize) ^ MINUS_IDENTITY, + /// Pauli -Y + MinusY = (Axis::Y as isize) ^ MINUS_IDENTITY, + /// Pauli -Z + MinusZ = (Axis::Z as isize) ^ MINUS_IDENTITY, +} + +/// Hermitian one qubit Pauli operators. +/// See also [`Axis`], [`DirectedAxis`], [`PauliMatrix`] +#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, Eq, Ord, FromPrimitive, ToPrimitive)] +pub enum PauliObservable { + /// Pauli I + PlusI = (PauliMatrix::I as isize), + /// Pauli X + PlusX = (PauliMatrix::X as isize), + /// Pauli Y + PlusY = (PauliMatrix::Y as isize), + /// Pauli Z + PlusZ = (PauliMatrix::Z as isize), + /// Pauli -I + MinusI = (PauliMatrix::I as isize) ^ MINUS_IDENTITY, + /// Pauli -X + MinusX = (PauliMatrix::X as isize) ^ MINUS_IDENTITY, + /// Pauli -Y + MinusY = (PauliMatrix::Y as isize) ^ MINUS_IDENTITY, + /// Pauli -Z + MinusZ = (PauliMatrix::Z as isize) ^ MINUS_IDENTITY, +} + +impl From for PauliMatrix { + fn from(axis: Axis) -> Self { + match axis { + Axis::X => PauliMatrix::X, + Axis::Y => PauliMatrix::Y, + Axis::Z => PauliMatrix::Z, + } + } +} + +impl From for DirectedAxis { + fn from(axis: Axis) -> Self { + match axis { + Axis::X => DirectedAxis::PlusX, + Axis::Y => DirectedAxis::PlusY, + Axis::Z => DirectedAxis::PlusZ, + } + } +} + +impl From for PauliObservable { + fn from(axis: Axis) -> Self { + match axis { + Axis::X => PauliObservable::PlusX, + Axis::Y => PauliObservable::PlusY, + Axis::Z => PauliObservable::PlusZ, + } + } +} + +impl From for PauliObservable { + fn from(pauli: PauliMatrix) -> Self { + match pauli { + PauliMatrix::I => PauliObservable::PlusI, + PauliMatrix::X => PauliObservable::PlusX, + PauliMatrix::Y => PauliObservable::PlusY, + PauliMatrix::Z => PauliObservable::PlusZ, + } + } +} + +impl From for PauliObservable { + fn from(directed_axis: DirectedAxis) -> Self { + match directed_axis { + DirectedAxis::PlusX => PauliObservable::PlusX, + DirectedAxis::PlusY => PauliObservable::PlusY, + DirectedAxis::PlusZ => PauliObservable::PlusZ, + DirectedAxis::MinusX => PauliObservable::MinusX, + DirectedAxis::MinusY => PauliObservable::MinusY, + DirectedAxis::MinusZ => PauliObservable::MinusZ, + } + } +} + +impl All<4> for PauliMatrix { + fn all() -> [PauliMatrix; 4] { + [ + PauliMatrix::I, + PauliMatrix::X, + PauliMatrix::Y, + PauliMatrix::Z, + ] + } +} + +impl All<3> for Axis { + fn all() -> [Axis; 3] { + [Axis::X, Axis::Y, Axis::Z] + } +} + +impl All<6> for DirectedAxis { + fn all() -> [DirectedAxis; 6] { + [ + DirectedAxis::PlusX, + DirectedAxis::PlusY, + DirectedAxis::PlusZ, + DirectedAxis::MinusX, + DirectedAxis::MinusY, + DirectedAxis::MinusZ, + ] + } +} + +impl All<8> for PauliObservable { + fn all() -> [PauliObservable; 8] { + [ + PauliObservable::PlusI, + PauliObservable::PlusX, + PauliObservable::PlusY, + PauliObservable::PlusZ, + PauliObservable::MinusI, + PauliObservable::MinusX, + PauliObservable::MinusY, + PauliObservable::MinusZ, + ] + } +} + +impl Neg for PauliObservable { + type Output = PauliObservable; + fn neg(self) -> Self::Output { + match self { + PauliObservable::PlusI => PauliObservable::MinusI, + PauliObservable::PlusX => PauliObservable::MinusX, + PauliObservable::PlusY => PauliObservable::MinusY, + PauliObservable::PlusZ => PauliObservable::MinusZ, + PauliObservable::MinusI => PauliObservable::PlusI, + PauliObservable::MinusX => PauliObservable::PlusX, + PauliObservable::MinusY => PauliObservable::PlusY, + PauliObservable::MinusZ => PauliObservable::PlusZ, + } + } +} + +#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, Eq, Ord)] +pub struct PositionedPauliObservable { + pub qubit_id: usize, + pub observable: PauliObservable, +} + +impl Neg for PositionedPauliObservable { + type Output = PositionedPauliObservable; + fn neg(self) -> Self::Output { + PositionedPauliObservable { + qubit_id: self.qubit_id, + observable: -self.observable, + } + } +} + +#[must_use] +pub fn id(qubit_id: usize) -> PositionedPauliObservable { + PositionedPauliObservable { + qubit_id, + observable: PauliObservable::PlusI, + } +} + +#[must_use] +pub fn x(qubit_id: usize) -> PositionedPauliObservable { + PositionedPauliObservable { + qubit_id, + observable: PauliObservable::PlusX, + } +} + +#[must_use] +pub fn y(qubit_id: usize) -> PositionedPauliObservable { + PositionedPauliObservable { + qubit_id, + observable: PauliObservable::PlusY, + } +} + +#[must_use] +pub fn z(qubit_id: usize) -> PositionedPauliObservable { + PositionedPauliObservable { + qubit_id, + observable: PauliObservable::PlusZ, + } +} + +impl From<(usize, PauliObservable)> for PositionedPauliObservable { + fn from(value: (usize, PauliObservable)) -> Self { + PositionedPauliObservable { + qubit_id: value.0, + observable: value.1, + } + } +} + +impl From for (usize, PauliObservable) { + fn from(value: PositionedPauliObservable) -> Self { + (value.qubit_id, value.observable) + } +} + +impl From<(PauliObservable, usize)> for PositionedPauliObservable { + fn from(value: (PauliObservable, usize)) -> Self { + PositionedPauliObservable { + qubit_id: value.1, + observable: value.0, + } + } +} + +impl From for (PauliObservable, usize) { + fn from(value: PositionedPauliObservable) -> Self { + (value.observable, value.qubit_id) + } +} diff --git a/source/paulimer/src/quantum_core/tests.rs b/source/paulimer/src/quantum_core/tests.rs new file mode 100644 index 0000000000..9eed61d27d --- /dev/null +++ b/source/paulimer/src/quantum_core/tests.rs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use super::{id, x, y, z, All, Axis, DirectedAxis, PauliMatrix, PauliObservable}; + +#[test] +fn neg_neg_is_identity() { + for a in PauliObservable::all() { + assert_eq!(a, -(-a)); + } + assert_eq!(x(0), -(-x(0))); + assert_eq!(y(0), -(-y(0))); + assert_eq!(z(0), -(-z(0))); + assert_eq!(id(0), -(-id(0))); +} + +#[test] +fn qubit_then_pauli_order() { + assert!(x(1) < x(2)); + assert!(x(1) < y(1)); + assert!(y(1) < x(2)); +} + +#[test] +fn axis_xor() { + let result = (Axis::X as isize) ^ (Axis::Z as isize); + assert_eq!(result, Axis::Y as isize); +} + +#[test] +fn pauli_matrix_from_axis() { + assert_eq!(PauliMatrix::X as isize, Axis::X as isize); + assert_eq!(PauliMatrix::Y as isize, Axis::Y as isize); + assert_eq!(PauliMatrix::Z as isize, Axis::Z as isize); +} + +#[test] +fn directed_axis_from_axis() { + assert_eq!(DirectedAxis::PlusX as isize, Axis::X as isize); + assert_eq!(DirectedAxis::PlusY as isize, Axis::Y as isize); + assert_eq!(DirectedAxis::PlusZ as isize, Axis::Z as isize); +} diff --git a/source/paulimer/src/setwise.rs b/source/paulimer/src/setwise.rs new file mode 100644 index 0000000000..84eb69ee1e --- /dev/null +++ b/source/paulimer/src/setwise.rs @@ -0,0 +1,101 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use sorted_iter::{assume::AssumeSortedByItemExt, SortedIterator}; +use std::borrow::Borrow; + +#[must_use] +pub fn union(v1: &[usize], v2: &[usize]) -> Vec { + as_sorted_iter(v1) + .union(as_sorted_iter(v2)) + .copied() + .collect() +} + +#[must_use] +pub fn is_subset(subset: &[usize], superset: &[usize]) -> bool { + as_sorted_iter(subset).is_subset(as_sorted_iter(superset)) +} + +#[must_use] +pub fn intersection(v1: &[usize], v2: &[usize]) -> Vec { + as_sorted_iter(v1) + .intersection(as_sorted_iter(v2)) + .copied() + .collect() +} + +#[must_use] +pub fn complement(v: &[usize], index_bound: usize) -> Vec { + let values = as_sorted_iter(v).copied().assume_sorted_by_item(); + (0..index_bound).difference(values).collect() +} + +#[must_use] +pub fn symmetric_difference(v1: &[usize], v2: &[usize]) -> Vec { + as_sorted_iter(v1) + .symmetric_difference(as_sorted_iter(v2)) + .copied() + .collect() +} + +#[test] +fn intersection_test() { + assert_eq!(intersection(&[1, 2, 3, 6], &[3, 4, 5, 10]), vec![3]); + assert_eq!(intersection(&[1, 2, 3, 6], &[2, 3, 4, 5, 10]), vec![2, 3]); +} + +#[test] +fn symmetric_difference_test() { + assert_eq!( + symmetric_difference(&[1, 2, 3, 6], &[3, 4, 5, 10]), + vec![1, 2, 4, 5, 6, 10] + ); + assert_eq!( + symmetric_difference(&[1, 2, 3, 6], &[2, 3, 4, 5, 10]), + vec![1, 4, 5, 6, 10] + ); +} + +fn as_sorted_iter(values: Values) -> impl SortedIterator +where + Value: Borrow + Copy, + Values: IntoIterator + Copy, +{ + debug_assert!(is_ascending(values)); + values.into_iter().assume_sorted_by_item() +} + +fn is_ascending(values: Values) -> bool +where + Value: Borrow + Copy, + Values: IntoIterator, +{ + values + .into_iter() + .is_sorted_by(|a, b| a.borrow() < b.borrow()) +} + +#[test] +fn union_test() { + assert_eq!( + union(&[1, 2, 3, 6], &[3, 4, 5, 10]), + vec![1, 2, 3, 4, 5, 6, 10] + ); + assert_eq!( + union(&[1, 2, 3, 6], &[2, 3, 4, 5, 10]), + vec![1, 2, 3, 4, 5, 6, 10] + ); +} + +#[test] +fn complement_test() { + assert_eq!(complement(&[1, 2, 3, 6], 7), vec![0, 4, 5]); + assert_eq!(complement(&[0, 1, 2, 3, 6], 8), vec![4, 5, 7]); +} + +#[test] +fn is_subset_test() { + assert!(is_subset(&[1, 2, 3], &[0, 1, 2, 3, 5])); + assert!(!is_subset(&[1, 2, 3], &[0, 1, 3, 5])); +} diff --git a/source/paulimer/src/utils.rs b/source/paulimer/src/utils.rs new file mode 100644 index 0000000000..060f46d62f --- /dev/null +++ b/source/paulimer/src/utils.rs @@ -0,0 +1,71 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use crate::{BitStringView, BitWord, BITS_PER_WORD}; + +pub const SUB_CHARS: [char; 10] = ['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉']; + +#[must_use] +pub fn one_indicies( + bitstring: &BitStringView, + word_offset: usize, + words_range_length: usize, +) -> Vec { + let mut res = Vec::::with_capacity(bitstring.len() * BITS_PER_WORD); + for word_idx in 0..words_range_length { + let mut word: BitWord = bitstring[word_offset + word_idx]; + let bit_idx_offset = word_idx * BITS_PER_WORD; + for bit_idx in 0..BITS_PER_WORD { + if word & 1 == 1 { + res.push(bit_idx + bit_idx_offset); + } + word >>= 1; + } + } + res +} + +#[must_use] +pub fn print_as_table(string_pairs: &Vec<(String, String)>, separator: &str) -> String { + let mut str_res = String::new(); + let mut left_max_width = 0; + let mut right_max_width = 0; + for (left, right) in string_pairs { + left_max_width = left_max_width.max(left.chars().count()); + right_max_width = right_max_width.max(right.chars().count()); + } + for (left, right) in string_pairs { + str_res.push_str(&format!( + "{left: String { + let mut res = String::new(); + for char in number.to_string().chars() { + let digit = char.to_digit(10).unwrap_or_default() as usize; + res.push(SUB_CHARS[digit]); + } + res +} + +/// . +/// +/// # Panics +/// +/// Panics if . +#[must_use] +pub fn phase_to_string(phase: u32) -> String { + let s = match phase { + 0 => "", + 1 => "𝑖", + 2 => "-", + 3 => "-𝑖", + _ => panic!("Unexpected phase"), + }; + String::from(s) +} diff --git a/source/paulimer/tests/bit_test.rs b/source/paulimer/tests/bit_test.rs new file mode 100644 index 0000000000..224f17d065 --- /dev/null +++ b/source/paulimer/tests/bit_test.rs @@ -0,0 +1,97 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use paulimer::{ + bits::{ + bitblock::BitBlock, BitVec, Bitwise, BitwiseBinaryOps, BitwiseNeutralElement, + IndexAssignable, IndexSet, + }, + NeutralElement, +}; +use std::any::type_name; + +/// # Panics +/// +/// Will panic +pub fn test_one_bit_index( + mut bits: T, + index: usize, +) -> T { + bits.clear_bits(); + assert!(bits.is_zero()); + bits.assign_index(index, true); + assert!(bits.index(index)); + assert!(bits.support().any(|elt| elt == index)); + assert_eq!(bits.support().count(), 1); + assert_eq!(bits.weight(), 1); + assert!(bits.parity()); + bits.negate_index(index); + assert!(!bits.index(index)); + assert_eq!(bits.support().count(), 0); + assert_eq!(bits.weight(), 0); + assert!(!bits.parity()); + + let mut other_bits = bits.neutral_element(); + bits.negate_index(index); + assert!(other_bits.is_zero()); + other_bits.neutral_element(); + other_bits.bitxor_assign(&bits); + assert_eq!(other_bits.support().count(), 1); + assert_eq!(other_bits.weight(), 1); + assert!(other_bits.parity()); + bits.clear_bits(); + + other_bits.negate_index(index + 1); + other_bits.bitand_assign(&bits); + assert_eq!(bits.weight(), 0); + assert!(!bits.parity()); + + bits +} + +/// # Panics +/// +/// Will panic +pub fn test_unary_bit_traits(size: usize, index: usize) +where + T::NeutralElementType: Bitwise + IndexAssignable + BitwiseNeutralElement, +{ + assert!(index + 1 < size); + println!( + "Testing: test_unary_bit_traits::<{}> size:{} index:{}", + type_name::(), + size, + index + ); + let item = T::neutral_element_of_size(size); + test_one_bit_index(item, index); +} + +macro_rules! call_test_per_uint { + ($function:ident,$uint:ty,$first:expr $(, $rest:expr)*) => { + $function::<$uint>($first,$($rest),*); + $function::<[$uint;ARRAY_SIZE]>($first,$($rest),*); + $function::>($first,$($rest),*); + $function::>($first,$($rest),*); + }; +} + +macro_rules! call_test { + ($function:ident,$first:expr $(, $rest:expr)*) => { + call_test_per_uint!($function,u16,$first,$($rest),*); + call_test_per_uint!($function,u32,$first,$($rest),*); + call_test_per_uint!($function,u64,$first,$($rest),*); + call_test_per_uint!($function,u128,$first,$($rest),*); + $function::($first,$($rest),*); + $function::($first,$($rest),*); + $function::($first,$($rest),*); + }; +} + +#[test] +fn bit_test() { + const ARRAY_SIZE: usize = 4; + let size = 10; + let index = 7; + call_test!(test_unary_bit_traits, size, index); +} diff --git a/source/paulimer/tests/bitblock_test.rs b/source/paulimer/tests/bitblock_test.rs new file mode 100644 index 0000000000..17a0f675a5 --- /dev/null +++ b/source/paulimer/tests/bitblock_test.rs @@ -0,0 +1,97 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use paulimer::bits::bitblock::BitBlock; +use paulimer::bits::WORD_COUNT_DEFAULT; +use proptest::prelude::*; + +proptest! { + #[test] + fn from_array(bits in arbitrary_bool_array()) { + let block = BitBlock::from_array(bits); + for index in 0..bits.len() { + assert_eq!(block[index], bits[index]); + } + } + + #[test] + fn set(block in arbitrary_bitblock(), index in 0..BITS) { + let mut clone = block.clone(); + for value in [true, false] { + clone.set(index, value); + assert_eq!(clone[index], value); + for index2 in 0..BITS { + if index != index2 { + assert_eq!(clone[index2], block[index2]); + } + } + } + } + + #[test] + fn xor(left in arbitrary_bitblock(), right in arbitrary_bitblock()) { + let xor = &left ^ &right; + for index in 0..BITS { + assert_eq!(xor[index], left[index] ^ right[index]); + } + } + + #[test] + fn xor_assign(mut left in arbitrary_bitblock(), right in arbitrary_bitblock()) { + let xor = &left ^ &right; + left ^= &right; + assert_eq!(left, xor); + } + + #[test] + fn and(left in arbitrary_bitblock(), right in arbitrary_bitblock()) { + let and = &left & &right; + for index in 0..BITS { + assert_eq!(and[index], left[index] & right[index]); + } + } + + #[test] + fn and_assign(mut left in arbitrary_bitblock(), right in arbitrary_bitblock()) { + let and = &left & &right; + left &= &right; + assert_eq!(left, and); + } + +} + +#[test] +fn zeros() { + let block = BitBlock::zeros(); + for index in 0..BITS { + assert!(!block[index], "{}", index); + } +} + +#[test] +fn ones() { + let block = BitBlock::ones(); + for index in 0..BITS { + assert!(block[index], "{}", index); + } +} + +#[test] +fn all() { + for value in [true, false] { + let block = BitBlock::all(value); + for index in 0..BITS { + assert_eq!(block[index], value, "{index}"); + } + } +} + +const BITS: usize = BitBlock::::BITS; + +fn arbitrary_bool_array() -> impl Strategy { + proptest::array::uniform::(proptest::bool::ANY) +} + +fn arbitrary_bitblock() -> impl Strategy { + arbitrary_bool_array().prop_map(BitBlock::from_array) +} diff --git a/source/paulimer/tests/bitmatrix_test.proptest-regressions b/source/paulimer/tests/bitmatrix_test.proptest-regressions new file mode 100644 index 0000000000..aacd258b6b --- /dev/null +++ b/source/paulimer/tests/bitmatrix_test.proptest-regressions @@ -0,0 +1,13 @@ +# Seeds for failure cases proptest has generated in the past. It is +# automatically read and these particular cases re-run before any +# novel cases are generated. +# +# It is recommended to check this file in to source control so that +# everyone who runs the test benefits from these saved cases. +cc c33fea26aaa8cbaa607f32edcecbbc467d346bfc97133731f20857c9f40055d8 # shrinks to matrix = BitMatrix { rows: [00] } +cc 071d36a7a48c1f8eed4a97ef0bb972cd30af40a3f5f34d840d6d4e117c29e2ee # shrinks to matrix = BitMatrix { rows: [] } +cc 35c9ae8f18e663d05200739c28d572913b1b90dc2a9f41122588462ac8fcc69b # shrinks to rowcount = 0, columncount = 1 +cc dce72d1bfb8a0e2988c9f9e518d888a909bf75ada0a192284ed84d8820b6ab8b # shrinks to mut matrix = BitMatrix { blocks: [BitBlock([6, 0, 0, 0, 0, 0, 0, 0]), BitBlock([0, 0, 0, 0, 0, 0, 0, 0]), BitBlock([9, 0, 0, 0, 0, 0, 0, 0])], rows: [0x7fa2f4002840, 0x7fa2f4002880, 0x7fa2f40028c0], columncount: 4 } +cc 9be9ec04ba2d054c43b373ee55cc64ca9a1bde2128adc7a162d59fc184f4fecb # shrinks to matrix = BitMatrix { blocks: [BitBlock { blocks: [3, 0, 0, 0, 0, 0, 0, 0] }, BitBlock { blocks: [2, 0, 0, 0, 0, 0, 0, 0] }], rows: [0x127b493ba80, 0x127b493ba40], columncount: 2 } +cc ec754a1a295ea19b35f679e1922e9710badff156bd679eac11487741973e3738 # shrinks to matrix = BitMatrix { blocks: [BitBlock { blocks: [1, 0, 0, 0, 0, 0, 0, 0] }, BitBlock { blocks: [1, 0, 0, 0, 0, 0, 0, 0] }], rows: [0x1b7dd165200, 0x1b7dd165240], columncount: 2 } +cc 1833a449cf1e22a3e71fc5515a25b05834254860b4e64507310b10ef8b662ff1 # shrinks to matrix = BitMatrix { blocks: [BitBlock { blocks: [1, 0, 0, 0, 0, 0, 0, 0] }, BitBlock { blocks: [2, 0, 0, 0, 0, 0, 0, 0] }], rows: [0x229e5980080, 0x229e5980040], columncount: 2 } diff --git a/source/paulimer/tests/bitmatrix_test.rs b/source/paulimer/tests/bitmatrix_test.rs new file mode 100644 index 0000000000..d0c297dae9 --- /dev/null +++ b/source/paulimer/tests/bitmatrix_test.rs @@ -0,0 +1,423 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use paulimer::bits::bitmatrix::{directly_summed, kernel_basis_matrix, rref_with_transforms}; +use paulimer::bits::tiny_matrix::{tiny_matrix_from_bitmatrix, tiny_matrix_rref}; +use paulimer::bits::{BitMatrix, BitVec, Bitwise, BitwiseBinaryOps, WORD_COUNT_DEFAULT}; +use proptest::prelude::*; +use rand::prelude::*; +use rand::Rng; +use rustc_hash::FxHashSet; +use sorted_iter::assume::AssumeSortedByItemExt; +use sorted_iter::SortedIterator; +use std::collections::BTreeMap; +use std::str::FromStr; + +proptest! { + #[test] + fn shape(rowcount in 0..100usize, columncount in 0..100usize) { + let matrix = BitMatrix::::with_shape(rowcount, columncount); + assert_eq!(matrix.rowcount(), rowcount); + assert_eq!(matrix.columncount(), columncount); + assert_eq!(matrix.shape(), (rowcount, columncount)); + } + + #[test] + fn zeros(rowcount in 0..100usize, columncount in 0..100usize) { + let matrix = BitMatrix::::zeros(rowcount, columncount); + for irow in 0..matrix.rowcount() { + for icol in 0..matrix.columncount() { + assert!(!matrix[(irow, icol)]); + } + } + } + + #[test] + fn indexing(matrix in arbitrary_bitmatrix(100)) { + for irow in 0..matrix.rowcount() { + for icol in 0..matrix.columncount() { + assert_eq!(matrix[(irow, icol)], matrix[[irow, icol]]); + } + } + } + + #[test] + fn clone(matrix in arbitrary_bitmatrix(100)) { + assert_eq!(matrix, matrix.clone()); + } + + #[test] + fn swap_rows(matrix in nonempty_bitmatrix(100), raw_row_indexes in (0..100usize, 0..100usize)) { + let row_indexes = [raw_row_indexes.0 % matrix.rowcount(), raw_row_indexes.1 % matrix.rowcount()]; + let mut swapped = matrix.clone(); + swapped.swap_rows(row_indexes[0], row_indexes[1]); + for column_index in 0..matrix.columncount() { + assert_eq!(matrix[[row_indexes[0], column_index]], swapped[[row_indexes[1], column_index]]); + } + let row_indexes = row_indexes.into_iter().collect::>(); + for row_index in (0..matrix.rowcount()).collect::>().difference(&row_indexes) { + for column_index in 0..matrix.columncount() { + assert_eq!(matrix[[*row_index, column_index]], swapped[[*row_index, column_index]]); + } + } + } + + #[test] + fn swap_columns(matrix in nonempty_bitmatrix(100), raw_column_indexes in (0..100usize, 0..100usize)) { + let column_indexes = [raw_column_indexes.0 % matrix.columncount(), raw_column_indexes.1 % matrix.columncount()]; + let mut swapped = matrix.clone(); + swapped.swap_columns(column_indexes[0], column_indexes[1]); + for row_index in 0..matrix.rowcount() { + assert_eq!(matrix[[row_index, column_indexes[0]]], swapped[[row_index, column_indexes[1]]]); + } + let column_indexes = column_indexes.into_iter().collect::>(); + for column_index in (0..matrix.columncount()).collect::>().difference(&column_indexes) { + for row_index in 0..matrix.rowcount() { + assert_eq!(matrix[[row_index, *column_index]], swapped[[row_index, *column_index]]); + } + } + } + + #[test] + fn addition((left, right) in equal_shape_bitmatrices(100)) { + let sum = &left + &right; + for irow in 0..left.rowcount() { + for icol in 0..right.columncount() { + let index = (irow, icol); + assert_eq!(sum[index], left[index] ^ right[index]); + } + } + assert_eq!(sum, &right + &left); + } + + #[test] + fn addition_inplace((mut left, right) in equal_shape_bitmatrices(100)) { + let sum = &left + &right; + left += &right; + assert_eq!(sum, left); + } + + #[test] + fn xor((left, right) in equal_shape_bitmatrices(100)) { + assert_eq!(&left ^ &right, &left + &right); + } + + #[test] + fn xor_inplace((mut left, right) in equal_shape_bitmatrices(100)) { + let xor = &left ^ &right; + left ^= &right; + assert_eq!(xor, left); + } + + #[test] + fn and((left, right) in equal_shape_bitmatrices(100)) { + let and = &left & &right; + for irow in 0..left.rowcount() { + for icol in 0..left.columncount() { + let index = (irow, icol); + assert_eq!(and[index], left[index] & right[index]); + } + } + assert_eq!(and, &right & &left); + } + + + #[test] + fn and_inplace((mut left, right) in equal_shape_bitmatrices(100)) { + let and = &left & &right; + left &= &right; + assert_eq!(and, left); + } + + #[test] + fn equality(left in arbitrary_bitmatrix(100), right in arbitrary_bitmatrix(100)) { + let mut are_equal = left.shape() == right.shape(); + if are_equal { + for irow in 0..left.rowcount() { + for icol in 0..right.columncount() { + let index = (irow, icol); + are_equal &= left[index] == right[index]; + } + } + } + assert_eq!(left == right, are_equal); + } + + #[test] + fn transpose(matrix in arbitrary_bitmatrix(100)) { + let transposed = matrix.transposed(); + for row in 0..matrix.rowcount() { + for column in 0..matrix.columncount() { + assert_eq!(matrix[(row, column)], transposed[(column, row)]); + } + } + } + + #[test] + fn inverse(matrix in invertible_bitmatrix(100)) { + let inverted = matrix.inverted(); + let identity = BitMatrix::identity(matrix.rowcount()); + assert_eq!(&matrix * &inverted, identity); + } + + #[test] + fn echelon_form(matrix in arbitrary_bitmatrix(100)) { + let mut echeloned = matrix.clone(); + let profile = echeloned.echelonize(); + assert!(is_rref(&echeloned, &profile)); + assert!(preserves_rowspan_of(&matrix, &echeloned)); + } + + #[test] + fn tiny_matrix_echelon_form(matrix in fixed_size_bitmatrix(32,60)) { + let mut echeloned = matrix.clone(); + let _ = echeloned.echelonize(); + let mut tiny1 = tiny_matrix_from_bitmatrix::<32>(&matrix); + tiny_matrix_rref::<32,60>(&mut tiny1); + let tiny2 = tiny_matrix_from_bitmatrix::<32>(&echeloned); + assert_eq!(tiny1,tiny2); + } + + #[test] + fn direct_sum(left in arbitrary_bitmatrix(100), right in arbitrary_bitmatrix(100)) { + let summed = directly_summed([&left, &right]); + let expected_shape = (left.rowcount() + right.rowcount(), left.columncount() + right.columncount()); + assert_eq!(expected_shape, summed.shape()); + for row_index in 0..left.rowcount() { + for column_index in 0..left.columncount() { + assert_eq!(left[(row_index, column_index)], summed[(row_index, column_index)]); + } + for column_index in left.columncount()..summed.columncount() { + assert!(!summed[(row_index, column_index)]); + } + } + for row_index in 0..right.rowcount() { + for column_index in 0..right.columncount() { + assert_eq!(right[(row_index, column_index)], summed[(left.rowcount() + row_index, left.columncount() + column_index)]); + } + for column_index in 0..left.columncount() { + assert!(!summed[(left.rowcount() + row_index, column_index)]); + } + } + } + +} + +macro_rules! bitmatrix{ + ($($t:tt)+) => { + $crate::BitMatrix::<{paulimer::bits::WORD_COUNT_DEFAULT}>::from_str(stringify!($($t)+)).unwrap() + }; +} + +prop_compose! { + fn arbitrary_bitmatrix(max_dimension: usize)(shape in (0..=max_dimension, 0..=max_dimension)) -> BitMatrix { + random_bitmatrix(shape.0, shape.1) + } +} + +prop_compose! { + fn fixed_size_bitmatrix(row_count: usize, column_count: usize)(_ in 0..column_count) -> BitMatrix { + random_bitmatrix(row_count, column_count) + } +} + +prop_compose! { + fn invertible_bitmatrix(max_dimension: usize)(dimension in 1..=max_dimension) -> BitMatrix { + let mut matrix = BitMatrix::identity(dimension); + for _ in 0..dimension^2 { + let from_index = thread_rng().gen_range(0..dimension); + let to_index = thread_rng().gen_range(0..dimension); + if from_index != to_index { + matrix.add_into_row(to_index, from_index); + } + } + for _ in 0..dimension.pow(2) { + let from_index = thread_rng().gen_range(0..dimension); + let to_index = thread_rng().gen_range(0..dimension); + matrix.swap_rows(from_index, to_index); + } + matrix + } +} + +prop_compose! { + fn nonempty_bitmatrix(max_dimension: usize)(shape in (1..=max_dimension, 1..=max_dimension)) -> BitMatrix { + random_bitmatrix(shape.0, shape.1) + } +} + +prop_compose! { + fn equal_shape_bitmatrices(max_dimension: usize)(shape in (1..=max_dimension, 1..=max_dimension)) -> (BitMatrix, BitMatrix) { + (random_bitmatrix(shape.0, shape.1), random_bitmatrix(shape.0, shape.1)) + } +} + +// #[test] +// fn reduce() { +// for _ in 0..100 { +// let array = random_bitmatrix(100, 100); +// let reduced = rref(array); +// assert!(is_rref(&reduced)); +// } + +// for _ in 0..100 { +// let array = random_bitmatrix(50, 100); +// let (reduced, profile) = rref_with_rank_profile(array); +// assert_eq!(profile.len(), reduced.rowcount()); +// assert!(is_rref(&reduced)); +// } + +// { +// let matrix = bitmatrix!( +// |10 011 01| +// |.. 111 01| +// |.. ... 10|); +// assert!(is_rref(&matrix)); +// let (reduced, profile) = rref_with_rank_profile(matrix); +// assert!(is_rref(&reduced)); +// assert_eq!(profile, vec![0, 2, 5]); +// } +// } + +#[test] +fn reduce_with_transforms() { + for _ in 0..100 { + check_rref_with_transforms_on_random_matrix(100, 100); + } + for _ in 0..100 { + check_rref_with_transforms_on_random_matrix(50, 100); + } +} + +fn check_rref_with_transforms_on_random_matrix(nrows: usize, ncols: usize) { + let array = random_bitmatrix(nrows, ncols); + let (reduced, t, t_inv_t, profile) = rref_with_transforms(array.clone()); + assert!(is_rref(&reduced, &profile)); + assert_eq!(t.dot(&array), reduced); + assert_eq!( + t.dot(&t_inv_t.transposed()), + BitMatrix::identity(array.rowcount()) + ); +} + +#[test] +fn test_dot() { + println!("0"); + let x = bitmatrix!( + |01| + |10|); + let id = bitmatrix!( + |10| + |01|); + println!("1"); + assert_eq!(x.dot(&x), id); + assert_eq!(x.dot(&id), x); + assert_eq!(id.dot(&x), x); + + // multiplication is associative + println!("2"); + for _ in 0..100 { + let a = random_bitmatrix(10, 10); + let b = random_bitmatrix(10, 10); + let c = random_bitmatrix(10, 10); + assert_eq!((a.dot(&b)).dot(&c), a.dot(&b.dot(&c))); + } + + println!("3"); + // multiplication by zero is zero + for _ in 0..100 { + let a = random_bitmatrix(10, 10); + let z = BitMatrix::zeros(10, 10); + assert_eq!(a.dot(&z), z); + } + + // multiplication by id + for _ in 0..100 { + let a = random_bitmatrix(3, 3); + let id = BitMatrix::identity(3); + assert_eq!(a.dot(&id), a); + } +} + +#[test] +fn test_kernel_basis() { + let num_cols = 100; + for _ in 0..100 { + let mut matrix = random_bitmatrix(50, 100); + let rrp = matrix.echelonize(); + let mut kernel_basis_matrix = kernel_basis_matrix(&matrix); + let prod = matrix.dot(&kernel_basis_matrix.transposed()); + assert!(prod.is_zero()); + let rrpc = kernel_basis_matrix.echelonize(); + assert_eq!(rrp.len() + rrpc.len(), num_cols); + } +} + +fn preserves_rowspan_of(matrix: &BitMatrix, rref_matrix: &BitMatrix) -> bool { + let profile = fast_profile_of(rref_matrix); + let mut profile_rows = BTreeMap::new(); + for (row_index, column_index) in profile.iter().enumerate() { + profile_rows.insert(column_index, row_index); + } + for row in matrix.rows() { + let mut reduced = BitVec::::from_view(&row); + let support = row + .support() + .assume_sorted_by_item() + .intersection(profile.iter().copied().assume_sorted_by_item()); + + for column_index in support { + let row_index = profile_rows[&column_index]; + let rref_row = BitVec::::from_view(&rref_matrix.row(row_index)); + reduced.bitxor_assign(&rref_row); + } + if reduced.weight() > 0 { + return false; + } + } + true +} + +fn is_rref(matrix: &BitMatrix, with_profile: &[usize]) -> bool { + let expected_profile = fast_profile_of(matrix); + (expected_profile == with_profile) && columns_are_pivots_of(matrix, with_profile) +} + +fn columns_are_pivots_of(matrix: &BitMatrix, column_indexes: &[usize]) -> bool { + for &column_index in column_indexes { + let column = matrix.column(column_index); + if column.weight() != 1 { + return false; + } + } + true +} + +fn fast_profile_of(matrix: &BitMatrix) -> Vec { + let mut profile = vec![]; + for row_index in 0..matrix.rowcount() { + let row = matrix.row(row_index); + let pivot = row.into_iter().position(|bit| bit); + if pivot.is_none() { + break; + } + profile.push(pivot.unwrap()); + } + profile +} + +fn random_bitmatrix(rowcount: usize, columncount: usize) -> BitMatrix { + let mut matrix = BitMatrix::with_shape(rowcount, columncount); + let mut bits = std::iter::from_fn(move || Some(thread_rng().gen::())); + for row_index in 0..rowcount { + for column_index in 0..columncount { + matrix.set((row_index, column_index), bits.next().expect("boom")); + } + } + for _ in 0..rowcount { + let from_index = thread_rng().gen_range(0..rowcount); + let to_index = thread_rng().gen_range(0..rowcount); + matrix.swap_rows(from_index, to_index); + } + matrix +} diff --git a/source/paulimer/tests/bitvec_test.proptest-regressions b/source/paulimer/tests/bitvec_test.proptest-regressions new file mode 100644 index 0000000000..b779086709 --- /dev/null +++ b/source/paulimer/tests/bitvec_test.proptest-regressions @@ -0,0 +1,8 @@ +# Seeds for failure cases proptest has generated in the past. It is +# automatically read and these particular cases re-run before any +# novel cases are generated. +# +# It is recommended to check this file in to source control so that +# everyone who runs the test benefits from these saved cases. +cc 2a44a7f64c190fb501353ac9d72fc2915d5a9c6a63a85cb8d06740e2d3a1eb0d # shrinks to bits = [true, true, true, false, true, true, true, true, true, true, false, false, true, false, false, true, false, true, true, true, false, true, true, false, true, false, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, false, true, false, false, true, false, true, true, false, true, true, true, true, true, true, true, true, true, false, true, true, false, true, false, false, false, false, false, false, false, false, true, false, false, false, true, true, true, true, false, false, false, false, true, false, false, true, true, false, false, false, false, false, true, true, true, true, false, false, false, false, true, true, false, false, true, false, false, true, false, true, false, true, true, false, true, true, false, false, false, false, true, false, false, false, true, true, false, false, false, true, false, false, true, true, false, false, true, true, false, true, false, true, true, true, false, true, false, false, true, true, false, false, true, true, false, true, false, false, true, true, true, true, true, true, true, true, true, false, false, false, true, true, true, false, false, true, false, true, false, false, true, false, true, false, false, false, false, true, false, true, false, true, true, true, true, false, true, true, false, false, true, false, false, true, false, false, false, false, true, true, true, true, false, false, false, false, true, true, true, true, false, true, false, false, false, false, true, false, false, false, false, false, false, false, true, false, false, true, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, false, false, false, true, true, false, false, true, true, false, false, false, false, false, false, false, false, false, true, false, true, true, false, true, false, true, false, false, true] +cc 26021575d20fa4cbb6be52e0d5671b43c4700bc3c45118a99a63137df9c0a403 # shrinks to bits = [true] diff --git a/source/paulimer/tests/bitvec_test.rs b/source/paulimer/tests/bitvec_test.rs new file mode 100644 index 0000000000..9882b7e37a --- /dev/null +++ b/source/paulimer/tests/bitvec_test.rs @@ -0,0 +1,75 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use paulimer::bits::BitVec; +use paulimer::bits::Bitwise; +use paulimer::bits::BitwiseBinaryOps; +use paulimer::bits::IndexAssignable; +use paulimer::bits::WORD_COUNT_DEFAULT; +use proptest::prelude::*; + +proptest! { + #[test] + fn from_iter(bits in prop::collection::vec(any::(), 0..2000)) { + let bitvec = BitVec::::from_iter(bits.clone()); + let actual: Vec = bitvec.into_iter().collect(); + assert_eq!(bits.support().collect::>(), actual.support().collect::>()); + } + + #[test] + fn index(bits in prop::collection::vec(any::(), 0..2000)) { + let bitvec = BitVec::::from_iter(bits.clone()); + for (index, expected) in bits.iter().enumerate() { + assert_eq!(bitvec.index(index), *expected); + } + } + + #[test] + fn weight(bits in arbitrary_bitvec(2000)) { + let ones = bits.into_iter().filter(|bit| *bit); + assert_eq!(ones.count(), bits.weight()); + } + + #[test] + fn support(bits in arbitrary_bitvec(2000)) { + let support: Vec = bits.support().collect(); + assert_eq!(support.len(), bits.weight()); + for index in support { + assert!(bits.index(index)); + } + } + + #[test] + fn assign(bits in prop::collection::vec(any::(), 0..10)) { + let mut bitvec = BitVec::::of_length(bits.len()); + for (index, bit) in bits.iter().enumerate() { + bitvec.assign_index(index, *bit); + } + let actual: Vec = bitvec.into_iter().take(bits.len()).collect(); + assert_eq!(bits, actual); + } + + #[test] + fn bitxor_assign((left, right) in equal_length_bitvecs(2000)) { + let mut xored = left.clone(); + xored.bitxor_assign(&right); + for (index, result) in xored.into_iter().enumerate() { + assert_eq!(result, left.index(index) ^ right.index(index)); + } + } + +} + +fn arbitrary_bitvec(max_length: usize) -> impl Strategy> { + prop::collection::vec(any::(), 0..max_length) + .prop_map(BitVec::::from_iter) +} + +fn equal_length_bitvecs(max_length: usize) -> impl Strategy { + (0..max_length).prop_flat_map(|length| { + ( + prop::collection::vec(any::(), length).prop_map(BitVec::from_iter), + prop::collection::vec(any::(), length).prop_map(BitVec::from_iter), + ) + }) +} diff --git a/source/paulimer/tests/clifford_test.proptest-regressions b/source/paulimer/tests/clifford_test.proptest-regressions new file mode 100644 index 0000000000..dde9a3343a --- /dev/null +++ b/source/paulimer/tests/clifford_test.proptest-regressions @@ -0,0 +1,16 @@ +# Seeds for failure cases proptest has generated in the past. It is +# automatically read and these particular cases re-run before any +# novel cases are generated. +# +# It is recommended to check this file in to source control so that +# everyone who runs the test benefits from these saved cases. +cc e62e10bef002d4cdb0b4b5c7c8b37ff3492f019b8110920239c62a1710d9fd1f # shrinks to dimension = 1 +cc 25c8e6a4aeb172c191bc4ca793ac6c8553755ad45633912a901e3f8f5730be76 # shrinks to images = [PauliUnitary { x_bits: [false], z_bits: [false], phase: u2(2) }, PauliUnitary { x_bits: [false], z_bits: [false], phase: u2(0) }] +cc 74f6faec3da7847d211a32c4800a0c13c7fbc36efb97de0390c1af7034006971 # shrinks to images = [PauliUnitary { x_bits: [false, false], z_bits: [false, false], phase: u2(3) }, PauliUnitary { x_bits: [true, true], z_bits: [false, false], phase: u2(2) }, PauliUnitary { x_bits: [true, false], z_bits: [true, true], phase: u2(0) }, PauliUnitary { x_bits: [false, true], z_bits: [false, true], phase: u2(3) }] +cc 9fe1a4c96512af1a78ec3c01fa33613774f6c2566ad1876187931088d34fb0c8 # shrinks to (left_pauli, right_pauli) = (PauliUnitary { x_bits: [true], z_bits: [false], phase: u2(3) }, PauliUnitary { x_bits: [false], z_bits: [false], phase: u2(1) }) +cc d1effd36661e845ccb788dfcfe0f66578c4493f44de514743db1adcd5d0a5d46 # shrinks to (left_pauli, right_pauli) = (PauliUnitary { x_bits: [false], z_bits: [true], phase: u2(2) }, PauliUnitary { x_bits: [false], z_bits: [true], phase: u2(1) }) +cc cdd6cdb5bd7b22351af88627f0c5bbeca22423a424a2c8e65e096e0eac43b5b2 # shrinks to (left_pauli, right_pauli) = (PauliUnitary { x_bits: [false], z_bits: [false], phase: u2(2) }, PauliUnitary { x_bits: [true], z_bits: [true], phase: u2(3) }) +cc 0f261b72835c28d2eb8a3a96d73f5b0690b7147f7ebb8d371630093d9ee3a5f7 # shrinks to clifford = CliffordUnitary { bits: BitMatrix { blocks: [BitBlock([1, 0, 0, 0, 0, 0, 0, 0]), BitBlock([1, 0, 0, 0, 0, 0, 0, 0]), BitBlock([0, 0, 0, 0, 0, 0, 0, 0]), BitBlock([1, 0, 0, 0, 0, 0, 0, 0])], rows: [0x7f17c0015ac0, 0x7f17c0015b00, 0x7f17c0015b40, 0x7f17c0015b80], columncount: 1 }, preimage_phase_exponents: [0, 3] } +cc 42f84a61487df56775c19841d919e7c0767f15e0a0bc7a6d6e923505c8f085a2 # shrinks to clifford = CliffordUnitary { bits: BitMatrix { blocks: [BitBlock([0, 0, 0, 0, 0, 0, 0, 0]), BitBlock([1, 0, 0, 0, 0, 0, 0, 0]), BitBlock([1, 0, 0, 0, 0, 0, 0, 0]), BitBlock([1, 0, 0, 0, 0, 0, 0, 0])], rows: [0x7f8e5c00f300, 0x7f8e5c00f340, 0x7f8e5c00f380, 0x7f8e5c00f3c0], columncount: 1 }, preimage_phase_exponents: [0, 1] } +cc 652ab4fcd08265ad4740cb9b591eb12f620df56c7a64410901fffaec30b89486 # shrinks to clifford = CliffordUnitary { bits: BitMatrix { blocks: [BitBlock([0, 0, 0, 0, 0, 0, 0, 0]), BitBlock([1, 0, 0, 0, 0, 0, 0, 0]), BitBlock([1, 0, 0, 0, 0, 0, 0, 0]), BitBlock([1, 0, 0, 0, 0, 0, 0, 0])], rows: [0x7ff6e400b980, 0x7ff6e400b9c0, 0x7ff6e400ba00, 0x7ff6e400ba40], columncount: 1 }, preimage_phase_exponents: [1, 2] } +cc 513f301fe05dcee3193f50dd4e7ad6290619ca92c4bea99acdc53674b2f42246 # shrinks to clifford = CliffordUnitary { bits: BitMatrix { blocks: [], rows: [], columncount: 0 }, preimage_phase_exponents: [] } diff --git a/source/paulimer/tests/clifford_test.rs b/source/paulimer/tests/clifford_test.rs new file mode 100644 index 0000000000..9483dac500 --- /dev/null +++ b/source/paulimer/tests/clifford_test.rs @@ -0,0 +1,1274 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use paulimer::bits::{BitMatrix, BitVec, Bitwise, IndexSet}; +use paulimer::clifford::generic_algos::{clifford_from_images, clifford_to_prepare_bell_states}; +use paulimer::clifford::{ + apply_qubit_clifford_by_axis, group_encoding_clifford_of, prepare_all_plus, prepare_all_zero, + random_clifford_via_operations_sampling, split_clifford_encoder_mod_pauli, split_phased_css, + split_qubit_cliffords_and_css, split_qubit_tensor_product_encoder, Clifford, CliffordMutable, + CliffordStringParsingError, MutablePreImages, PreimageViews, Swap, XOrZ, +}; +type CliffordUnitary = paulimer::clifford::CliffordUnitary; +type CliffordUnitaryModPauli = paulimer::clifford::CliffordUnitaryModPauli; + +use paulimer::pauli::{ + anti_commutes_with, apply_pauli_exponent, apply_root_x, apply_root_y, apply_root_z, + pauli_random, pauli_random_order_two, DensePauli, DensePauliProjective, PauliMutable, + SparsePauliProjective, +}; +use paulimer::pauli::{commutes_with, Pauli, PauliBinaryOps, PauliUnitary, Phase, SparsePauli}; + +use paulimer::operations::{css_operations, diagonal_operations}; +use paulimer::quantum_core::{x, y, z, PositionedPauliObservable}; +use proptest::prelude::*; +use rand::prelude::*; +use std::borrow::Borrow; +use std::ops::Range; +use std::str::FromStr; + +pub trait TestableClifford: + Clifford< + DensePauli: for<'life, 'life1> PartialEq<&'life [PositionedPauliObservable]> + + PartialEq + + std::fmt::Display + + std::fmt::Debug, + > + CliffordMutable::PhaseExponentValue> + + PartialEq + + Eq + + PreimageViews::PhaseExponentValue> + + MutablePreImages::PhaseExponentValue> + + FromStr + + std::fmt::Display + + std::fmt::Debug +{ + type SparsePauli: Pauli::PhaseExponentValue> + + for<'life> From<&'life [PositionedPauliObservable]> + + std::fmt::Display; + type DensePauli: Pauli::PhaseExponentValue> + + for<'life> PartialEq<&'life [PositionedPauliObservable]> + + std::fmt::Display; +} + +impl TestableClifford for CliffordUnitary { + type SparsePauli = SparsePauli; + type DensePauli = DensePauli; +} + +impl TestableClifford for CliffordUnitaryModPauli { + type SparsePauli = SparsePauliProjective; + type DensePauli = DensePauliProjective; +} + +fn is_pauli_x_up_to_phase(pauli: &impl Pauli, qubit_id: usize) -> bool { + pauli.z_bits().is_zero() && pauli.x_bits().weight() == 1 && pauli.x_bits().index(qubit_id) +} + +fn is_pauli_z_up_to_phase(pauli: &impl Pauli, qubit_id: usize) -> bool { + pauli.x_bits().is_zero() && pauli.z_bits().weight() == 1 && pauli.z_bits().index(qubit_id) +} + +fn are_identity_preimages_up_to_phase(clifford: &impl Clifford) -> bool { + for j in 0..clifford.num_qubits() { + if !is_pauli_x_up_to_phase(&clifford.preimage_x(j), j) { + return false; + } + if !is_pauli_z_up_to_phase(&clifford.preimage_z(j), j) { + return false; + } + } + true +} + +fn identity_preimages_with_dimension(dimension: usize) { + let id = CliffordUnitary::identity(dimension); + assert!(id.is_identity()); + let id_mod_pauli = CliffordUnitaryModPauli::identity(dimension); + assert!(are_identity_preimages_up_to_phase(&id_mod_pauli)); +} + +#[test] +fn identity_preimages() { + for dimension in 1..4 { + identity_preimages_with_dimension(dimension); + } +} + +proptest! { + #[test] + fn from_images(clifford in arbitrary_clifford(0..1)) { + let images = images_of(&clifford); + let from_images : CliffordUnitary = clifford_from_images(images.as_slice().iter()); + assert_eq!(images, images_of(&from_images)); + } + + #[test] + fn format_string_roundtrip(clifford in arbitrary_clifford(1..10)) { + format_string_roundtrip_generic_test(&clifford); + format_string_roundtrip_generic_test::(&clifford.into()); + } + + #[test] + fn clone(clifford in arbitrary_clifford(0..10)) { + let cloned = clifford.clone(); + assert_eq!(images_of(&cloned), images_of(&clifford)); + } + + #[test] + fn pauli_exponent_multiply(clifford in arbitrary_clifford(0..10)) { + let pauli = pauli_random_order_two::<::DensePauli>(clifford.num_qubits(),&mut thread_rng()); + let mut product = clifford.clone(); + product.left_mul_pauli_exp(&pauli); + let ipauli = pauli.clone() * Phase::from_exponent(1u8); + + let assert_image = |indicator: PauliUnitary, u8>| { + let power_image = product.image(&indicator); + let clifford_image = clifford.image(&indicator); + // println!("indicator={}, pauli={}, power_image={}, clifford_image={}", indicator, pauli, power_image, clifford_image); + if commutes_with(&clifford_image,&pauli) { + assert_eq!(clifford_image, power_image); + } else { + assert_eq!(ipauli.clone() * &clifford_image, power_image); + } + }; + + for index in 0..clifford.num_qubits() { + assert_image(x_at(index, clifford.num_qubits())); + assert_image(z_at(index, clifford.num_qubits())); + } + } + + #[test] + fn controlled_pauli_multiply(clifford in arbitrary_clifford(2..3)) { + + assert!(clifford.num_qubits() >= 2); + let mut control : ::DensePauli = pauli_random_order_two(clifford.num_qubits(),&mut thread_rng()); + while control.x_bits().is_zero() && control.z_bits().is_zero() { + control = pauli_random_order_two(clifford.num_qubits(),&mut thread_rng()); + } + let mut target : ::DensePauli = pauli_random_order_two(clifford.num_qubits(),&mut thread_rng()); + while !commutes_with(&control,&target) || (control.x_bits().is_zero() && control.z_bits().is_zero()) { + target = pauli_random_order_two(clifford.num_qubits(),&mut thread_rng()); + } + + let mut product = clifford.clone(); + assert!(control.is_order_two()); + assert!(target.is_order_two()); + product.left_mul_controlled_pauli(&control,&target); + + let images = images_of(&clifford); + let product_images = images_of(&product); + for (image, product_image) in images.iter().zip(product_images.iter()) { + let mut expected_image = image.clone(); + if anti_commutes_with(image,&control) { + expected_image.mul_assign_right(&target); + } + if anti_commutes_with(image, &target) { + expected_image.mul_assign_left(&control); + } + // println!("Q={}, P1={}, P2={}, expected={}, actual={}", image, control, target, expected_image, *product_image); + assert_eq!(expected_image, *product_image); + } + } + + #[test] + fn pauli_multiply(clifford in arbitrary_clifford(0..1)) { + let pauli = arbitrary_pauli_of_length(clifford.num_qubits()); + let product = &pauli * clifford.clone(); + + let assert_image_sign = |indicator: PauliUnitary, u8>| { + let product_image = product.image(&indicator); + let clifford_image = clifford.image(&indicator); + // println!("indicator={}, pauli={}, product_image={}, clifford_image={}", indicator, pauli, product_image, clifford_image); + if commutes_with(&clifford_image, &pauli) { + assert_eq!(clifford_image, product_image); + } else { + assert_eq!(-clifford_image, product_image); + } + }; + + for index in 0..clifford.num_qubits() { + assert_image_sign(x_at(index, clifford.num_qubits())); + assert_image_sign(z_at(index, clifford.num_qubits())); + } + } + + #[test] + fn composition((left, right) in composable_cliffords(0..10)) { + let composed = left.multiply_with(&right); + for index in 0..left.num_qubits() { + let x = x_at(index, left.num_qubits()); + let z = z_at(index, left.num_qubits()); + assert_eq!(composed.preimage(&x), right.preimage(&left.preimage(&x))); + assert_eq!(composed.preimage(&z), right.preimage(&left.preimage(&z))); + } + } + + #[test] + fn right_swap(clifford in arbitrary_clifford(2..10), mut index0 in 0..10usize, mut index1 in 0..10usize) { + index0 %= clifford.num_qubits(); + index1 %= clifford.num_qubits(); + let swapped = clifford.clone() * Swap(index0, index1); + let clifford_images = images_of(&clifford); + let swapped_images = images_of(&swapped); + assert_eq!(swapped_images[2*index0], clifford_images[2*index1]); + assert_eq!(swapped_images[2*index0+1], clifford_images[2*index1+1]); + assert_eq!(swapped_images[2*index1], clifford_images[2*index0]); + assert_eq!(swapped_images[2*index1+1], clifford_images[2*index0+1]); + for index in 0..clifford.num_qubits() { + if index != index0 && index != index1 { + assert_eq!(swapped_images[2*index], clifford_images[2*index]); + assert_eq!(swapped_images[2*index+1], clifford_images[2*index+1]); + } + } + } + + #[test] + fn left_swap(clifford in arbitrary_clifford(2..3), mut index0 in 0..10usize, mut index1 in 0..10usize) { + index0 %= clifford.num_qubits(); + index1 %= clifford.num_qubits(); + let mut swapped = clifford.clone(); + swapped.left_mul_swap(index0, index1); + let clifford_images = preimages_of(&clifford); + let swapped_images = preimages_of(&swapped); + assert_eq!(swapped_images[2*index0], clifford_images[2*index1]); + assert_eq!(swapped_images[2*index0+1], clifford_images[2*index1+1]); + assert_eq!(swapped_images[2*index1], clifford_images[2*index0]); + assert_eq!(swapped_images[2*index1+1], clifford_images[2*index0+1]); + for index in 0..clifford.num_qubits() { + if index != index0 && index != index1 { + assert_eq!(swapped_images[2*index], clifford_images[2*index]); + assert_eq!(swapped_images[2*index+1], clifford_images[2*index+1]); + } + } + } + + #[test] + fn preimage_inverts_image(clifford in arbitrary_clifford(0..10)) { + let clifford = CliffordUnitary::identity(clifford.num_qubits()); + for index in 0..clifford.num_qubits() { + let x = &x_at(index, clifford.num_qubits()); + let z = &z_at(index, clifford.num_qubits()); + let x_image = clifford.image(x); + let z_image = clifford.image(z); + let x_image_preimage = clifford.preimage(&x_image); + let z_image_preimage = clifford.preimage(&z_image); + assert!( x == x_image_preimage); + assert!( z == z_image_preimage); + } + } + + #[test] + fn split_clifford(clifford1 in arbitrary_clifford(1..5), clifford2 in arbitrary_clifford(1..5)) { + let c1 = CliffordUnitaryModPauli::from(clifford1); + let c2 = CliffordUnitaryModPauli::from(clifford2); + let qubit_count = c1.num_qubits() + c2.num_qubits(); + let mut c3 = random_diagonal_clifford::(qubit_count).multiply_with(&random_css_clifford(qubit_count)); + + let support = c1.qubits().collect::>(); + let support_complement = (c1.num_qubits()..c3.num_qubits()).collect::>(); + + c3.left_mul_clifford(&c1, &support); + c3.left_mul_clifford(&c2, &support_complement); + + if let Some((split_clifford1, split_clifford2)) = split_clifford_encoder_mod_pauli(&c3, &support, &support_complement) { + assert!(split_clifford1.is_valid()); + assert!(split_clifford2.is_valid()); + + assert_eq!(split_clifford1.num_qubits(), c1.num_qubits()); + assert_eq!(split_clifford2.num_qubits(), c2.num_qubits()); + + for qubit_index in split_clifford1.qubits() { + assert!(c3.preimage(&split_clifford1.image_z(qubit_index)).x_bits().is_zero()); + } + + // tensor product of split_clifford1, split_clifford2 encode the same state as c4 + let mut c4 = CliffordUnitaryModPauli::identity(qubit_count); + c4.left_mul_clifford(&split_clifford1, &support); + c4.left_mul_clifford(&split_clifford2, &support_complement); + for qubit_index in c4.qubits() { + assert!(c3.preimage(&c4.image_z(qubit_index)).x_bits().is_zero()); + } + + } + else { + panic!("Clifford should split") + } + } + + #[test] + fn identity_dimension(dimension in 0..1000usize) { + let identity = CliffordUnitary::identity(dimension); + assert_eq!(dimension, identity.num_qubits()); + } + + #[test] + fn identity_multiplication_is_trivial(clifford in arbitrary_clifford(0..10)) { + let identity = CliffordUnitary::identity(clifford.num_qubits()); + assert_eq!(clifford, clifford.multiply_with(&identity)); + assert_eq!(clifford, identity.multiply_with(&clifford)); + } + + #[test] + fn group_encoding_clifford_of_test(clifford in arbitrary_clifford(1..20), qubit_count in 1usize..20 ) { + let num_images = qubit_count.min(clifford.num_qubits()); + let images = (0 .. num_images).map(|id| clifford.image_z(id) ).collect::>(); + let encoding_clifford = group_encoding_clifford_of(&images,clifford.num_qubits()); + for image in images { + let preimage = encoding_clifford.preimage(&image); + assert!(preimage.x_bits().is_zero()); + assert!(preimage.z_bits().max_bit_id().unwrap() < num_images); + assert_eq!(preimage.xz_phase_exponent(),0); + } + } + + #[test] + fn left_mul_root_and_apply_root_are_consistent(qubit_count in 1..10usize) { + check_left_mul_root_and_apply_root_are_consistent(qubit_count, ::left_mul_root_x, apply_root_x::); + check_left_mul_root_and_apply_root_are_consistent(qubit_count, ::left_mul_root_y, apply_root_y::); + check_left_mul_root_and_apply_root_are_consistent(qubit_count, ::left_mul_root_z, apply_root_z::); + } + + #[test] + fn left_mul_pauli_exp_and_apply_pauli_exp_are_consistent(clifford in arbitrary_clifford(1..20)) { + let identity = CliffordUnitary::identity(clifford.num_qubits()); + let mut pauli_exp = CliffordUnitary::identity(clifford.num_qubits()); + let exp = clifford.image_z(0); + pauli_exp.left_mul_pauli_exp(&exp); + for qubit_index in 0 .. clifford.num_qubits() { + let mut image_z = identity.image_z(qubit_index); + apply_pauli_exponent(&mut image_z, &exp); + assert_eq!(image_z, pauli_exp.image_z(qubit_index)); + + let mut image_x = identity.image_x(qubit_index); + apply_pauli_exponent(&mut image_x, &exp); + assert_eq!(image_x, pauli_exp.image_x(qubit_index)); + } + } + + #[test] + fn inverse(clifford in arbitrary_clifford(1..2)) { + let inverse = clifford.inverse(); + let identity = CliffordUnitary::identity(clifford.num_qubits()); + assert_eq!(identity, clifford.multiply_with(&inverse)); + } + + #[test] + fn is_diagonal(clifford in arbitrary_diagonal_clifford(1..15usize)) { + generic_diagonal_clifford_test::(&clifford.clone().into()); + generic_diagonal_clifford_test::(&clifford); + + } + + #[test] + fn diagonal_resource_state_encoder_test(qubit_count in 1..15usize) { + assert!(prepare_all_plus(qubit_count).is_diagonal_resource_encoder(XOrZ::Z)); + assert!(prepare_all_zero(qubit_count).is_diagonal_resource_encoder(XOrZ::X)); + assert!(prepare_all_plus(qubit_count).unitary_from_diagonal_resource_state(XOrZ::Z).unwrap().is_identity()); + assert!(prepare_all_zero(qubit_count).unitary_from_diagonal_resource_state(XOrZ::X).unwrap().is_identity()); + } + + #[test] + fn is_css(clifford in arbitrary_css_clifford(2..10usize)) { + generic_is_css_clifford_test::(&clifford); + let clifford_mod_pauli: CliffordUnitaryModPauli = clifford.into(); + generic_is_css_clifford_test::(&clifford_mod_pauli); + let qubit_count = clifford_mod_pauli.num_qubits(); + assert!(prepare_all_plus(qubit_count).is_diagonal_resource_encoder(XOrZ::Z)); + assert!(clifford_mod_pauli.multiply_with(&prepare_all_plus(qubit_count)).is_diagonal_resource_encoder(XOrZ::Z)); + assert!(clifford_mod_pauli.multiply_with(&prepare_all_zero(qubit_count)).is_diagonal_resource_encoder(XOrZ::X)); + } + + #[test] + fn is_phased_css_test( (css,diagonal) in composable_css_diagonal_cliffords(2..10usize)) { + let c1 : CliffordUnitaryModPauli = css.multiply_with(&diagonal).into(); + let c2 : CliffordUnitaryModPauli = diagonal.multiply_with(&css).into(); + assert!(split_phased_css(&css.clone().into()).is_some()); + assert!(split_phased_css(&diagonal.clone().into()).is_some()); + if let Some((diag,extracted_css)) = split_phased_css(&c2) { + assert_eq!(CliffordUnitaryModPauli::from(diagonal),diag); + assert_eq!(CliffordUnitaryModPauli::from(css),extracted_css); + } + assert!(split_phased_css(&c1).is_some()); + } + + #[test] + fn is_qubit_css_test( (css,qubit) in composable_css_qubit_cliffords(2..10usize)) { + let c2 : CliffordUnitaryModPauli = qubit.multiply_with(&css).into(); + assert!(split_qubit_cliffords_and_css(&css.clone().into()).is_some()); + assert!(split_qubit_cliffords_and_css(&qubit.clone().into()).is_some()); + if let Some((extracted_qubit,extracted_css)) = split_qubit_cliffords_and_css(&c2) { + assert_eq!(CliffordUnitaryModPauli::from(qubit),extracted_qubit); + assert_eq!(CliffordUnitaryModPauli::from(css),extracted_css); + } + } + + #[test] + fn qubit_cliffords_recognition_test( qubit_cliffords in arbitrary_qubit_cliffords(1..10usize)) { + let qubit_count = qubit_cliffords.num_qubits(); + let c : CliffordUnitaryModPauli = qubit_cliffords.into(); + let mut r = CliffordUnitaryModPauli::identity(qubit_count); + let plus = prepare_all_plus(qubit_count); + let zero = prepare_all_zero(qubit_count); + let plus_axes = split_qubit_tensor_product_encoder(&c.multiply_with(&plus)).unwrap(); + let zero_axes = split_qubit_tensor_product_encoder(&c.multiply_with(&zero)).unwrap(); + for (qubit_index,(zero,plus)) in std::iter::zip(zero_axes, plus_axes).enumerate() { + apply_qubit_clifford_by_axis(&mut r, qubit_index, zero, plus); + } + assert_eq!(c,r); + } +} + +prop_compose! { + fn arbitrary_clifford(dimension_range: Range)(dimension in dimension_range) -> CliffordUnitary { + arbitrary_clifford_of_dimension(dimension) + } +} + +prop_compose! { + fn arbitrary_css_clifford(dimension_range: Range)(dimension in dimension_range) -> CliffordUnitary { + let mut clifford: CliffordUnitary = random_css_clifford(dimension); + let pauli = pauli_random_order_two::<::DensePauli>(clifford.num_qubits(),&mut thread_rng()); + clifford.left_mul_pauli(&pauli); + clifford + } +} + +prop_compose! { + fn arbitrary_diagonal_clifford(dimension_range: Range)(dimension in dimension_range) -> CliffordUnitary { + let mut clifford: CliffordUnitary= random_diagonal_clifford(dimension); + let pauli = pauli_random_order_two::<::DensePauli>(clifford.num_qubits(),&mut thread_rng()); + clifford.left_mul_pauli(&pauli); + clifford + } +} + +prop_compose! { + fn composable_cliffords(dimension_range: Range)(dimension in dimension_range) -> (CliffordUnitary, CliffordUnitary) { + (arbitrary_clifford_of_dimension(dimension), arbitrary_clifford_of_dimension(dimension)) + } +} + +prop_compose! { + fn composable_css_diagonal_cliffords(dimension_range: Range)(dimension in dimension_range) -> (CliffordUnitary, CliffordUnitary) { + (arbitrary_css_clifford_of_dimension(dimension), arbitrary_diagonal_clifford_of_dimension(dimension)) + } +} + +prop_compose! { + fn composable_css_qubit_cliffords(dimension_range: Range)(dimension in dimension_range) -> (CliffordUnitary, CliffordUnitary) { + (arbitrary_css_clifford_of_dimension(dimension), arbitrary_qubit_cliffords_of_dimension(dimension)) + } +} + +prop_compose! { + fn arbitrary_qubit_cliffords(dimension_range: Range)(dimension in dimension_range) -> CliffordUnitary { + arbitrary_qubit_cliffords_of_dimension(dimension) + } +} + +prop_compose! { + fn arbitrary_images(max_dimension: usize)(dimension in 0..=max_dimension) -> Vec> { + let images: Vec> = std::iter::from_fn(|| Some(arbitrary_pauli_of_length(dimension))).take(dimension*2).collect(); + images + } +} + +prop_compose! { + fn arbitrary_pauli(max_dimension: usize)(dimension in 0..=max_dimension) -> PauliUnitary { + arbitrary_pauli_of_length(dimension) + } +} + +fn arbitrary_clifford_of_dimension(dimension: usize) -> CliffordUnitary { + CliffordUnitary::random(dimension, &mut thread_rng()) +} + +fn arbitrary_css_clifford_of_dimension(dimension: usize) -> CliffordUnitary { + let mut clifford: CliffordUnitary = random_css_clifford(dimension); + let pauli = pauli_random_order_two::< + ::DensePauli, + >(clifford.num_qubits(), &mut thread_rng()); + clifford.left_mul_pauli(&pauli); + clifford +} + +fn arbitrary_qubit_cliffords_of_dimension(dimension: usize) -> CliffordUnitary { + let mut clifford: CliffordUnitary = CliffordUnitary::identity(dimension); + for qubit_index in clifford.qubits() { + let qubit_random_clifford = arbitrary_clifford_of_dimension(1); + clifford.left_mul_clifford(&qubit_random_clifford, &[qubit_index]); + } + clifford +} + +fn arbitrary_diagonal_clifford_of_dimension(dimension: usize) -> CliffordUnitary { + let mut clifford: CliffordUnitary = random_diagonal_clifford(dimension); + let pauli = pauli_random_order_two::< + ::DensePauli, + >(clifford.num_qubits(), &mut thread_rng()); + clifford.left_mul_pauli(&pauli); + clifford +} + +fn arbitrary_pauli_of_length(length: usize) -> PauliUnitary { + pauli_random(length, &mut thread_rng()) +} + +fn images_of(clifford: &CliffordLike) -> Vec { + let mut images = vec![]; + for qubit_index in clifford.qubits() { + images.push(clifford.image_x(qubit_index)); + images.push(clifford.image_z(qubit_index)); + } + images +} + +fn preimages_of(clifford: &CliffordLike) -> Vec { + let mut preimages = vec![]; + for qubit_index in clifford.qubits() { + preimages.push(clifford.preimage_x(qubit_index)); + preimages.push(clifford.preimage_z(qubit_index)); + } + preimages +} + +fn x_at(index: usize, length: usize) -> PauliUnitary, u8> { + let zeros = vec![false; length]; + let mut bits = zeros.clone(); + bits[index] = true; + PauliUnitary::from_bits(bits, zeros, 0u8) +} + +fn z_at(index: usize, length: usize) -> PauliUnitary, u8> { + let zeros = vec![false; length]; + let mut bits = zeros.clone(); + bits[index] = true; + PauliUnitary::from_bits(zeros, bits, 0u8) +} + +/// One and two-qubit Clifford gates tests +macro_rules! generic_qubit_unitary_test_macro { + ($func:ident, $image_func:expr) => { + for num_qubits in 0..6 { + for qubit_index in 0..num_qubits { + generic_qubit_unitary_test( + num_qubits, + qubit_index, + CliffordUnitary::$func, + $image_func, + ); + generic_qubit_unitary_test( + num_qubits, + qubit_index, + CliffordUnitaryModPauli::$func, + $image_func, + ); + } + } + }; +} + +macro_rules! generic_two_qubit_unitary_test_macro { + ($func:ident, $image_func:expr) => { + for num_qubits in 0..6 { + for qubit_index1 in 0..num_qubits { + for qubit_index2 in 0..num_qubits { + if qubit_index1 != qubit_index2 { + generic_two_qubit_unitary_test( + num_qubits, + qubit_index1, + qubit_index2, + CliffordUnitary::$func, + $image_func, + ); + generic_two_qubit_unitary_test( + num_qubits, + qubit_index1, + qubit_index2, + CliffordUnitaryModPauli::$func, + $image_func, + ); + } + } + } + } + }; +} + +#[test] +fn hadamard_test() { + generic_qubit_unitary_test_macro!(left_mul_hadamard, h_images); +} + +#[test] +fn root_x_test() { + generic_qubit_unitary_test_macro!(left_mul_root_x, root_x_images); + generic_qubit_unitary_test_macro!(left_mul_root_x_inverse, root_x_inv_images); +} + +#[test] +fn root_z_test() { + generic_qubit_unitary_test_macro!(left_mul_root_z, root_z_images); + generic_qubit_unitary_test_macro!(left_mul_root_z_inverse, root_z_inv_images); +} + +#[test] +fn root_y_test() { + generic_qubit_unitary_test_macro!(left_mul_root_y, root_y_images); + generic_qubit_unitary_test_macro!(left_mul_root_y_inverse, root_y_inv_images); +} + +#[test] +fn xyz_test() { + generic_qubit_unitary_test_macro!(left_mul_x, x_images); + generic_qubit_unitary_test_macro!(left_mul_y, y_images); + generic_qubit_unitary_test_macro!(left_mul_z, z_images); +} + +#[test] +fn cx_test() { + generic_two_qubit_unitary_test_macro!(left_mul_cx, cx_images); +} + +#[test] +fn cz_test() { + generic_two_qubit_unitary_test_macro!(left_mul_cz, cz_images); +} + +#[test] +fn swap_test() { + generic_two_qubit_unitary_test_macro!(left_mul_swap, swap_images); +} + +#[test] +fn prepare_bell_test() { + generic_two_qubit_unitary_test_macro!(left_mul_prepare_bell, prepare_bell_images); +} + +type ImageTable = Vec<( + Vec, + Vec, +)>; + +fn cx_images(c: usize, t: usize) -> ImageTable { + vec![ + (vec![x(c)], vec![x(c), x(t)]), + (vec![z(c)], vec![z(c)]), + (vec![x(t)], vec![x(t)]), + (vec![z(t)], vec![z(c), z(t)]), + (vec![y(t)], vec![z(c), y(t)]), + (vec![y(c)], vec![y(c), x(t)]), + ] +} + +fn cz_images(c: usize, t: usize) -> ImageTable { + vec![ + (vec![x(c)], vec![x(c), z(t)]), + (vec![z(c)], vec![z(c)]), + (vec![x(t)], vec![z(c), x(t)]), + (vec![z(t)], vec![z(t)]), + (vec![y(t)], vec![z(c), y(t)]), + (vec![y(c)], vec![y(c), z(t)]), + ] +} + +fn swap_images(q1: usize, q2: usize) -> ImageTable { + vec![ + (vec![x(q1)], vec![x(q2)]), + (vec![z(q1)], vec![z(q2)]), + (vec![y(q1)], vec![y(q2)]), + (vec![-x(q1), z(q2)], vec![-x(q2), z(q1)]), + ] +} + +fn prepare_bell_images(q1: usize, q2: usize) -> ImageTable { + vec![ + (vec![z(q1)], vec![x(q1), x(q2)]), + (vec![x(q1)], vec![z(q1)]), + (vec![z(q2)], vec![z(q1), z(q2)]), + (vec![x(q2)], vec![x(q2)]), + (vec![z(q1), z(q2)], vec![-y(q1), y(q2)]), + ] +} + +fn x_images(q: usize) -> ImageTable { + vec![ + (vec![z(q)], vec![-z(q)]), + (vec![x(q)], vec![x(q)]), + (vec![y(q)], vec![-y(q)]), + ] +} + +fn y_images(q: usize) -> ImageTable { + vec![ + (vec![z(q)], vec![-z(q)]), + (vec![x(q)], vec![-x(q)]), + (vec![y(q)], vec![y(q)]), + ] +} + +fn z_images(q: usize) -> ImageTable { + vec![ + (vec![z(q)], vec![z(q)]), + (vec![x(q)], vec![-x(q)]), + (vec![y(q)], vec![-y(q)]), + ] +} + +fn h_images(q: usize) -> ImageTable { + vec![ + (vec![x(q)], vec![z(q)]), + (vec![z(q)], vec![x(q)]), + (vec![y(q)], vec![-y(q)]), + ] +} + +fn root_z_images(q: usize) -> ImageTable { + vec![ + (vec![z(q)], vec![z(q)]), + (vec![x(q)], vec![y(q)]), + (vec![y(q)], vec![-x(q)]), + ] +} + +fn root_z_inv_images(q: usize) -> ImageTable { + vec![ + (vec![z(q)], vec![z(q)]), + (vec![x(q)], vec![-y(q)]), + (vec![y(q)], vec![x(q)]), + ] +} + +fn root_x_images(q: usize) -> ImageTable { + vec![ + (vec![z(q)], vec![-y(q)]), + (vec![x(q)], vec![x(q)]), + (vec![y(q)], vec![z(q)]), + ] +} + +fn root_x_inv_images(q: usize) -> ImageTable { + vec![ + (vec![z(q)], vec![y(q)]), + (vec![x(q)], vec![x(q)]), + (vec![y(q)], vec![-z(q)]), + ] +} + +fn root_y_images(q: usize) -> ImageTable { + vec![ + (vec![z(q)], vec![x(q)]), + (vec![x(q)], vec![-z(q)]), + (vec![y(q)], vec![y(q)]), + ] +} + +fn root_y_inv_images(q: usize) -> ImageTable { + vec![ + (vec![z(q)], vec![-x(q)]), + (vec![x(q)], vec![z(q)]), + (vec![y(q)], vec![y(q)]), + ] +} + +fn check_images(c: &CliffordLike, image_table: &ImageTable) { + let sparse = sparse::; + for (p, im_p) in image_table { + assert!(c.image(&sparse(p)) == im_p.as_slice()); + assert!(c.preimage(&sparse(im_p)) == p.as_slice()); + } +} + +fn generic_qubit_unitary_test( + num_qubits: usize, + qubit_index: usize, + apply_transformation: impl FnOnce(&mut CliffordLike, usize), + images: impl Fn(usize) -> ImageTable, +) { + let mut c = CliffordLike::identity(num_qubits); + apply_transformation(&mut c, qubit_index); + assert!(c.is_valid()); + check_images(&c, &images(qubit_index)); + for j in c.qubits() { + if j != qubit_index { + assert_identity_on(&c, j); + } + } +} + +fn generic_two_qubit_unitary_test( + num_qubits: usize, + qubit_index1: usize, + qubit_index2: usize, + apply_transformation: impl FnOnce(&mut CliffordLike, usize, usize), + images: impl Fn(usize, usize) -> ImageTable, +) { + let mut c = CliffordLike::identity(num_qubits); + apply_transformation(&mut c, qubit_index1, qubit_index2); + assert!(c.is_valid()); + check_images(&c, &images(qubit_index1, qubit_index2)); + for j in c.qubits() { + if j != qubit_index1 && j != qubit_index2 { + assert_identity_on(&c, j); + } + } +} + +fn assert_identity_on(c: &impl Clifford, qubit_index: usize) { + assert!(c.image_x(qubit_index).is_pauli_x(qubit_index)); + assert!(c.image_z(qubit_index).is_pauli_z(qubit_index)); + assert!(c.preimage_x(qubit_index).is_pauli_x(qubit_index)); + assert!(c.preimage_z(qubit_index).is_pauli_z(qubit_index)); +} + +fn generic_prepare_bell_states_test() { + let c = clifford_to_prepare_bell_states::(1); + assert!(c.is_valid()); + assert!(c.image_z(0) == [x(0), x(1)].borrow()); + assert!(c.image_z(1) == [z(0), z(1)].borrow()); +} + +#[test] +fn clifford_to_prepare_bell_states_test() { + generic_prepare_bell_states_test::(); + generic_prepare_bell_states_test::(); +} + +fn is_identity_by_images(clifford: &impl Clifford) -> bool { + for qubit_id in 0..clifford.num_qubits() { + if !clifford.image_z(qubit_id).is_pauli_z(qubit_id) { + return false; + } + if !clifford.image_x(qubit_id).is_pauli_x(qubit_id) { + return false; + } + } + true +} + +fn generic_clifford_identity_test(max_qubits: usize) { + for j in 0..max_qubits { + let id = CliffordLike::identity(j); + assert!(id.is_valid()); + assert!(id.is_identity()); + assert!(is_identity_by_images(&id)); + } +} + +#[test] +fn clifford_identity_test() { + let max_qubits = 10usize; + generic_clifford_identity_test::(max_qubits); + generic_clifford_identity_test::(max_qubits); +} + +fn two_qubit_clifford( + transformation: impl FnOnce(&mut CliffordLike, usize, usize), +) -> CliffordLike { + let mut res = CliffordLike::identity(2); + transformation(&mut res, 0, 1); + res +} + +fn one_qubit_clifford( + transformation: impl FnOnce(&mut CliffordLike, usize), +) -> CliffordLike { + let mut res = CliffordLike::identity(1); + transformation(&mut res, 0); + res +} + +fn clifford_examples() -> Vec { + vec![ + one_qubit_clifford(CliffordLike::left_mul_x), + one_qubit_clifford(CliffordLike::left_mul_y), + one_qubit_clifford(CliffordLike::left_mul_z), + one_qubit_clifford(CliffordLike::left_mul_hadamard), + one_qubit_clifford(CliffordLike::left_mul_root_x), + one_qubit_clifford(CliffordLike::left_mul_root_y), + one_qubit_clifford(CliffordLike::left_mul_root_z), + one_qubit_clifford(CliffordLike::left_mul_root_x_inverse), + one_qubit_clifford(CliffordLike::left_mul_root_y_inverse), + one_qubit_clifford(CliffordLike::left_mul_root_z_inverse), + two_qubit_clifford(CliffordLike::left_mul_cx), + two_qubit_clifford(CliffordLike::left_mul_cz), + two_qubit_clifford(CliffordLike::left_mul_swap), + two_qubit_clifford(CliffordLike::left_mul_prepare_bell), + ] +} + +fn clifford_order2_examples() -> Vec { + vec![ + one_qubit_clifford(CliffordLike::left_mul_x), + one_qubit_clifford(CliffordLike::left_mul_y), + one_qubit_clifford(CliffordLike::left_mul_z), + one_qubit_clifford(CliffordLike::left_mul_hadamard), + two_qubit_clifford(CliffordLike::left_mul_cx), + two_qubit_clifford(CliffordLike::left_mul_cz), + two_qubit_clifford(CliffordLike::left_mul_swap), + ] +} + +fn assert_images_consistent(clifford: &CliffordLike) { + let sparse = sparse::; + for qubit_index in clifford.qubits() { + let im_x = clifford.image_x(qubit_index); + let im_z = clifford.image_z(qubit_index); + assert!(clifford.image_x_bits(&IndexSet::singleton(qubit_index)) == im_x); + assert!(clifford.image_z_bits(&IndexSet::singleton(qubit_index)) == im_z); + assert!(clifford.image(&sparse(&[x(qubit_index)])) == im_x); + assert!(clifford.image(&sparse(&[z(qubit_index)])) == im_z); + } +} + +fn assert_preimages_consistent(clifford: &CliffordLike) { + let sparse = sparse::; + for qubit_index in clifford.qubits() { + let pre_im_x = clifford.preimage_x(qubit_index); + let pre_im_z = clifford.preimage_z(qubit_index); + assert!(clifford.preimage_x_bits(&IndexSet::singleton(qubit_index)) == pre_im_x); + assert!(clifford.preimage_z_bits(&IndexSet::singleton(qubit_index)) == pre_im_z); + assert!(clifford.preimage(&sparse(&[x(qubit_index)])) == pre_im_x); + assert!(clifford.preimage(&sparse(&[z(qubit_index)])) == pre_im_z); + } +} + +fn assert_inverse_and_multiply_are_consistent( + clifford: &CliffordLike, +) { + let inv = clifford.inverse(); + assert!(inv.multiply_with(clifford).is_identity()); + assert!(clifford.multiply_with(&inv).is_identity()); +} + +fn generic_consistency_test() { + let test_cases = clifford_examples::(); + for c in test_cases { + assert!(c.is_valid()); + assert_images_consistent(&c); + assert_preimages_consistent(&c); + assert_inverse_and_multiply_are_consistent(&c); + } +} + +#[test] +pub fn clifford_consistency_test() { + generic_consistency_test::(); + generic_consistency_test::(); +} + +fn generic_multiply_test() { + let examples = clifford_order2_examples::(); + for clifford in examples { + let r = clifford.multiply_with(&clifford); + assert!(r.is_valid()); + assert!(r.is_identity()); + } +} + +#[test] +pub fn clifford_multiply_test() { + generic_multiply_test::(); + generic_multiply_test::(); +} + +fn compare_clifford_transformations( + num_qubits: usize, + apply_transformation1: impl FnOnce(&mut CliffordLike), + apply_transformation2: impl FnOnce(&mut CliffordLike), +) { + let mut c1 = CliffordLike::identity(num_qubits); + let mut c2 = CliffordLike::identity(num_qubits); + apply_transformation1(&mut c1); + apply_transformation2(&mut c2); + assert!(c1.is_valid()); + assert!(c2.is_valid()); + assert!(c1 == c2); +} + +fn sparse( + observable: &[PositionedPauliObservable], +) -> ::SparsePauli { + CliffordLike::SparsePauli::from(observable) +} + +fn apply_exp_zz(clifford: &mut CliffordLike) { + clifford.left_mul_pauli_exp(&sparse::(&[z(0), z(1)])); +} + +fn apply_exp_xx(clifford: &mut CliffordLike) { + clifford.left_mul_pauli_exp(&sparse::(&[x(0), x(1)])); +} + +fn apply_cz(clifford: &mut CliffordLike) { + clifford.left_mul_cz(0, 1); +} + +fn apply_cz2(clifford: &mut CliffordLike) { + let z = |j| CliffordLike::SparsePauli::from(&[z(j)]); + clifford.left_mul_controlled_pauli(&z(0), &z(1)); +} + +fn apply_cz3(clifford: &mut CliffordLike) { + let sparse = sparse::; + clifford.left_mul_pauli_exp(&sparse(&[-z(0)])); + clifford.left_mul_pauli_exp(&sparse(&[z(0), z(1)])); + clifford.left_mul_pauli_exp(&sparse(&[-z(1)])); +} + +fn apply_exp_zz_via_cx(clifford: &mut impl TestableClifford) { + clifford.left_mul_cx(1, 0); + clifford.left_mul_root_z_inverse(0); + clifford.left_mul_cx(1, 0); +} + +fn apply_exp_xx_via_cx(clifford: &mut impl TestableClifford) { + clifford.left_mul_cx(1, 0); + clifford.left_mul_root_x_inverse(1); + clifford.left_mul_cx(1, 0); +} + +fn root_xyz_identities() { + let mut clifford = CliffordLike::identity(3); + let sparse = sparse::; + clifford.left_mul_pauli_exp(&sparse(&[-z(0)])); + clifford.left_mul_root_z_inverse(0); + assert!(clifford.is_identity()); + clifford.left_mul_pauli_exp(&sparse(&[-x(1)])); + clifford.left_mul_root_x_inverse(1); + assert!(clifford.is_identity()); + clifford.left_mul_pauli_exp(&sparse(&[-y(2)])); + clifford.left_mul_root_y_inverse(2); + assert!(clifford.is_identity()); + clifford.left_mul_hadamard(2); + clifford.left_mul_pauli_exp(&sparse(&[-z(2)])); + clifford.left_mul_hadamard(2); + clifford.left_mul_root_x_inverse(2); + assert!(clifford.is_identity()); +} + +fn generic_clifford_identities_test() { + compare_clifford_transformations::(2, apply_exp_zz_via_cx, apply_exp_zz); + compare_clifford_transformations::(2, apply_exp_xx_via_cx, apply_exp_xx); + compare_clifford_transformations::(2, apply_cz, apply_cz2); + compare_clifford_transformations::(2, apply_cz, apply_cz3); + root_xyz_identities::(); +} + +fn controlled_pauli_via_pauli_exp_test( + control: &[PositionedPauliObservable], + target: &[PositionedPauliObservable], +) { + let mut control_sparse: SparsePauli = control.into(); + let mut target_sparse: SparsePauli = target.into(); + + let mut p1p2 = control_sparse.clone(); + p1p2.mul_assign_right(&target_sparse); + + let num_qubits = + std::cmp::max(control_sparse.max_qubit_id(), target_sparse.max_qubit_id()).unwrap() + 1; + let mut clifford1 = CliffordUnitary::identity(num_qubits); + let mut clifford2 = CliffordUnitary::identity(num_qubits); + clifford1.left_mul_controlled_pauli(&control_sparse, &target_sparse); + clifford2.left_mul_pauli_exp(&p1p2); + control_sparse.add_assign_phase_exp(2); + clifford2.left_mul_pauli_exp(&control_sparse); + target_sparse.add_assign_phase_exp(2); + clifford2.left_mul_pauli_exp(&target_sparse); + assert_eq!(clifford1, clifford2); +} + +#[test] +fn clifford_identities_test() { + controlled_pauli_via_pauli_exp_test(&[z(0)], &[z(1)]); + controlled_pauli_via_pauli_exp_test(&[z(0)], &[x(1)]); + controlled_pauli_via_pauli_exp_test(&[y(0), x(1)], &[z(0), z(1)]); + controlled_pauli_via_pauli_exp_test(&[x(0), x(1)], &[z(0), z(1)]); + generic_clifford_identities_test::(); + generic_clifford_identities_test::(); +} + +fn generic_random_tensor_test( + num_qubits1: usize, + num_qubits2: usize, +) { + let id1 = CliffordLike::identity(num_qubits1); + let id2 = CliffordLike::identity(num_qubits2); + let r1 = CliffordLike::random(num_qubits1, &mut thread_rng()); + let r2 = CliffordLike::random(num_qubits2, &mut thread_rng()); + assert!((r1.tensor(&id2)).multiply_with(&(id1.tensor(&r2))) == r1.tensor(&r2)); +} + +fn generic_tensor_test() { + let mut c1 = CliffordLike::identity(2); + c1.left_mul_cx(0, 1); + let mut c2 = CliffordLike::identity(2); + c2.left_mul_cz(0, 1); + let mut c1xc2 = CliffordLike::identity(4); + c1xc2.left_mul_cx(0, 1); + c1xc2.left_mul_cz(2, 3); + assert!(c1xc2 == c1.tensor(&c2)); + + for _ in 0..10 { + generic_random_tensor_test::(5, 10); + } +} + +#[test] +fn tensor_test() { + generic_tensor_test::(); + generic_tensor_test::(); +} + +fn are_bits_equal_to_col(bitstring: &impl Bitwise, matrix: &BitMatrix, col: usize) -> bool { + for j in 0..matrix.columncount() { + if matrix[(j, col)] != bitstring.index(j) { + return false; + } + } + true +} + +/// # Panics +/// +/// Will panic +pub fn random_bitmatrix(rowcount: usize, columncount: usize) -> BitMatrix { + let mut matrix = BitMatrix::with_shape(rowcount, columncount); + let mut bits = std::iter::from_fn(move || Some(rand::Rng::gen::(&mut thread_rng()))); + for row_index in 0..rowcount { + for column_index in 0..columncount { + matrix.set((row_index, column_index), bits.next().expect("boom")); + } + } + matrix +} + +#[test] +fn css_clifford_test() { + let mut num_tests = 0; + while num_tests < 100 { + let num_qubits = 10; + let a = random_bitmatrix(num_qubits, num_qubits); + if a.rank() == a.rowcount() { + num_tests += 1; + let a_inv_t = a.inverted().transposed(); + let c = CliffordUnitary::from_css_preimage_indicators(&a, &a_inv_t); + assert!(c.is_valid()); + for k in c.qubits() { + assert!(c.preimage_z(k).x_bits().is_zero()); + assert!(c.preimage_z(k).z_bits() == &a_inv_t.row(k)); + assert!(c.image_z(k).x_bits().is_zero()); + assert!(are_bits_equal_to_col(c.image_z(k).z_bits(), &a, k)); + + assert!(c.preimage_x(k).z_bits().is_zero()); + assert!(c.preimage_x(k).x_bits() == &a.row(k)); + assert!(c.image_x(k).z_bits().is_zero()); + assert!(are_bits_equal_to_col(c.image_x(k).x_bits(), &a_inv_t, k)); + } + } + } +} + +fn left_mul_clifford_generic_test() { + let mut clifford1 = CliffordLike::identity(4); + let mut clifford2 = CliffordLike::identity(2); + clifford1.left_mul_cx(1, 2); + clifford2.left_mul_cx(0, 1); + clifford1.left_mul_clifford(&clifford2, &[1, 2]); + assert! {clifford1.is_identity()} + clifford1.left_mul_cx(2, 3); + clifford1.left_mul_clifford(&clifford2, &[2, 3]); +} + +#[test] +fn left_mul_clifford_test() { + left_mul_clifford_generic_test::(); + left_mul_clifford_generic_test::(); +} + +fn left_mul_permutation_generic_test() { + let mut clifford1 = CliffordLike::identity(3); + clifford1.left_mul_swap(0, 1); + clifford1.left_mul_swap(1, 2); + clifford1.left_mul_permutation(&[2, 0, 1], &[0, 1, 2]); + assert!(clifford1.is_identity()); +} + +#[test] +fn left_mul_permutation_test() { + left_mul_permutation_generic_test::(); + left_mul_permutation_generic_test::(); +} + +fn format_string_roundtrip_generic_test(clifford: &CliffordLike) { + let sparse_str = format!("{clifford}"); + let dense_str = format!("{clifford:#}"); + let clifford1 = sparse_str.parse::().expect(&sparse_str); + let clifford2 = dense_str.parse::().expect(&dense_str); + assert_eq!(clifford, &clifford1); + assert_eq!(clifford, &clifford2); +} + +fn random_diagonal_clifford(qubit_count: usize) -> CliffordLike { + let generators = diagonal_operations(qubit_count); + random_clifford_via_operations_sampling(qubit_count, qubit_count * qubit_count, &generators) +} + +fn random_css_clifford(qubit_count: usize) -> CliffordLike { + let generators = css_operations(qubit_count); + random_clifford_via_operations_sampling(qubit_count, qubit_count * qubit_count, &generators) +} + +fn generic_diagonal_clifford_test(c: &CliffordLike) { + use XOrZ::{X, Z}; + assert!(c.is_diagonal(Z)); + assert!(c.inverse().is_diagonal(Z)); + + let qubit_count = c.num_qubits(); + let mut c2 = CliffordLike::identity(qubit_count); + transverse_h(&mut c2); + c2.left_mul_clifford(c, &c.qubits().collect::>()); + assert!(c2.is_diagonal_resource_encoder(Z)); + let c3 = c2.unitary_from_diagonal_resource_state(Z).unwrap(); + assert!(c3.is_valid()); + assert!(c3.is_diagonal(Z)); + for qubit_index in c3.qubits() { + assert_eq!(c3.image_x(qubit_index), c2.image_z(qubit_index)); + } + + transverse_h(&mut c2); + assert!(c2.is_diagonal(X)); + assert!(c2.inverse().is_diagonal(X)); + assert!(c2.is_diagonal_resource_encoder(X)); + let c4 = c2.unitary_from_diagonal_resource_state(X).unwrap(); + assert!(c4.is_valid()); + assert!(c4.is_diagonal(X)); + for qubit_index in c4.qubits() { + assert_eq!(c4.image_z(qubit_index), c2.image_z(qubit_index)); + } +} + +fn generic_is_css_clifford_test(c: &CliffordLike) { + assert!(c.is_css()); +} + +fn transverse_h(clifford: &mut CliffordLike) { + for qubit_index in clifford.qubits() { + clifford.left_mul_hadamard(qubit_index); + } +} + +fn check_left_mul_root_and_apply_root_are_consistent( + qubit_count: usize, + left_mul_root: fn(&mut CliffordUnitary, usize), + apply_root: fn(&mut DensePauli, usize), +) { + let mut clifford = CliffordUnitary::identity(qubit_count); + for target_qubit in 0..qubit_count { + let mut image = clifford.image_z(target_qubit); + left_mul_root(&mut clifford, target_qubit); + apply_root(&mut image, target_qubit); + assert_eq!(image, clifford.image_z(target_qubit)); + } +} diff --git a/source/paulimer/tests/pauli_test.proptest-regressions b/source/paulimer/tests/pauli_test.proptest-regressions new file mode 100644 index 0000000000..72a61bac59 --- /dev/null +++ b/source/paulimer/tests/pauli_test.proptest-regressions @@ -0,0 +1,14 @@ +# Seeds for failure cases proptest has generated in the past. It is +# automatically read and these particular cases re-run before any +# novel cases are generated. +# +# It is recommended to check this file in to source control so that +# everyone who runs the test benefits from these saved cases. +cc 6003882f847f4ebc8f528cb7e1d0e4eec1c99a263f72708cfd30e1dc9cda9416 # shrinks to pauli = PauliUnitary { x_bits: [], z_bits: [], phase: 2 } +cc a6ed12aac5c037c203ecea48385258bb91d09c50c97f6b70659360f8bd41448c # shrinks to pauli = PauliUnitary { x_bits: [false, false, false, true, false, true, true, false, false, true, false, true, false, false, true], z_bits: [true, false, true, true, false, true, false, false, false, false, true, true, false, false, false], phase: 1 } +cc bfd8c6e0cc10b890be221439d9a554f388f490d5bc8bc780227858e4e128d677 # shrinks to pauli = PauliUnitary { x_bits: [false, false, true, false, false, true, true, true, true, true, false, false, true, false, false, false, true, false, false, false, false, false, true, false, false, true, true, false, false, false, true, true, false, true, true, true, false, false, true, true, false, true, false, true, true, true, false, true, false, true, false, false, false, true, true, false, false, true, false, true, true, false, false, true, true, true, true, false, false, false, false, true, true, true, true, true, true, true, false, false, false, true, true, false, false, false, false, true, false, false, true, false, false, false, true, false, false, true, false, false, true, false, true, true, true, false, false, true, true, false, true, true, true, true, false, true, false, true, true, false, true, true, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, false, false, false, false, false, false, true, false, true, false, false, true, false, false, true, true, false, true, false, false, false, false, false, true, true, true, false, false, true, true, false, false, false, false, false, false, true, true, false, true, true, true, true, false, false, false, true, false, false, true, true, false, false, true, true, false, true, false, false, false, true, false, true, false, false, true, true, false, true, false, false, false, true, true, true, false, false, false, true, true, false, true, false, true, false, true, true, true, false, false, true, false, true, true, true, false, true, false, false, true, true, false, true, false, false, true, false, true, true, false, true, true, false, false, false, true, false, true, true, true, true, false, false, true, true, false, true, true, true, true, false, true, true, false, true, true, true, false, true, false, false, false, false, false, false, false, true, false, false, true, false, true, false, false, false, false, false, true, true, true, true, false, false, true, false, true, true, true, false, false, false, true, false, false, false, false, true, true, false, false, false, false, true, false, false, false, true, false, true, false, false, true, false, true, false, true, false, false, true, false, true, true, true, true, false, true, false, true, false, true, true, false, true, false, false, true, false, false, false, false, false, true, false, true, true, true, false, true, false, true, true, false, true, false, true, true, false, false, true, true, true, false, true, false, true, false, true, true, true, false, false, true, false, true, false, false, false, false, false, false, true, true, true, false, true, true, true, false, false, false, false, true, false, false, false, false, false, true, false, true, true, false, false, false, false, false, true, true, true, true, false, false, false, true, false, true, true, true, true, false, true, false, false, false, false, true, true, false, true, true, false, true, false, true, true, false, true, true, false, false, false, false, false, false, false, false, false, true, false, false, true, false, false, false, true, true, false, true, false, true, false, false, false, false, true, true, true, false, true, false, false, true, true, true, false, false, false, true, true, false, false, false, true, true, true, false, false, false, true, false, true, false, false, true, false, false, false, false, true, true, false, false, true, true, false, false, true, false, false, true, true, false, false, true, false, true, false, true, true, true, true, false, false, true, false, true, true, true, false, false, true, false, false, true, false, false, false, false, true, false, true, false, false, false, false, false, false, false, true, true, true, true, true, false, false, false, true, false, false, false, true, false, false, false], z_bits: [true, true, true, false, false, true, false, false, true, false, false, false, false, false, true, true, false, true, false, true, false, true, true, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, false, false, true, true, false, true, false, false, false, true, true, false, true, false, true, true, true, false, true, false, false, true, false, true, true, false, false, false, false, true, false, true, true, true, true, true, false, true, false, true, false, false, false, true, false, false, false, false, true, false, true, true, true, false, true, false, false, true, false, false, true, false, false, false, true, true, false, true, true, true, true, true, true, false, false, true, true, true, false, true, false, false, true, false, false, false, false, false, false, true, false, false, false, true, true, true, false, true, true, false, true, true, false, false, false, false, true, false, false, false, true, false, true, false, true, false, true, false, false, true, false, false, false, true, false, true, false, true, true, false, false, true, true, false, true, true, false, false, false, false, false, true, false, false, false, false, false, true, true, true, true, true, true, false, true, false, false, false, true, false, true, true, false, true, false, false, false, true, true, false, true, false, false, false, false, false, true, false, false, true, false, false, true, true, true, false, false, false, true, true, false, false, true, true, true, true, false, false, false, true, false, false, false, false, false, true, true, false, false, true, true, false, false, true, false, true, true, true, false, false, true, false, true, true, false, true, true, true, true, true, false, true, true, true, false, false, false, false, true, true, false, true, true, true, false, true, true, true, true, true, true, true, true, false, true, false, true, false, true, true, false, false, false, false, false, false, true, true, false, false, false, true, false, true, true, false, false, true, true, false, false, true, false, false, true, false, false, false, false, true, true, false, true, true, false, true, true, true, false, false, true, true, true, true, true, true, false, false, true, true, true, false, true, true, false, true, false, true, true, true, false, true, true, false, false, true, false, true, true, false, false, false, true, true, false, false, true, true, false, true, false, false, true, false, true, true, false, true, true, false, true, true, false, false, false, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, true, true, false, false, true, false, false, true, false, false, true, true, false, true, false, false, false, false, true, false, true, false, false, true, false, false, true, true, false, true, true, true, false, false, false, true, true, false, true, false, false, true, false, false, false, true, false, true, true, true, true, true, false, true, false, true, false, false, false, true, true, true, true, true, true, true, true, false, true, true, true, false, true, false, false, false, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, true, true, false, true, false, false, true, true, true, true, false, false, false, true, false, true, false, true, true, true, true, true, true, false, false, true, false, false, true, false, true, true, false, true, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, true, false, false, false, false, true, true, true, false, false, true, true, false, false, true, true, false, true, false, true, false, true, false, true, true, false, true, false, false, true, true], phase: 1 } +cc f8794a05bcee3164a24a64dbaa7c1ec46bf2c9025f1e22918114ad26084cccd6 # shrinks to (left, right) = (PauliUnitary { x_bits: [], z_bits: [], phase: u2(2) }, PauliUnitary { x_bits: [], z_bits: [], phase: u2(2) }) +cc 23d38404b466f9506b31788ddc6952db9b17ee65332407f662135757cee08c6c # shrinks to (mut left, right) = (PauliUnitary { x_bits: [true], z_bits: [true], phase: u2(2) }, PauliUnitary { x_bits: [false], z_bits: [true], phase: u2(2) }) +cc 4a326f209cee8a336a0e4b08bc09a6cc5627295b8210fc6922c51548cf3472a4 # shrinks to (left, right) = (PauliUnitary { x_bits: [true], z_bits: [false], phase: u2(0) }, PauliUnitary { x_bits: [false], z_bits: [false], phase: u2(2) }) +cc f9bf310f572135426fb835b1040ddb4cad63511832ae1df66d3b52c5bafb3ede # shrinks to (left, right) = (PauliUnitary { x_bits: [true], z_bits: [false], phase: u2(2) }, PauliUnitary { x_bits: [true], z_bits: [true], phase: u2(2) }) +cc d53c5650d52066db1d8c9a4d2c589cc42e90bf053e97c4d9029ff116553560d8 # shrinks to (left, right) = (PauliUnitary { x_bits: [false], z_bits: [false], phase: u2(0) }, PauliUnitary { x_bits: [true], z_bits: [false], phase: u2(2) }) diff --git a/source/paulimer/tests/pauli_test.rs b/source/paulimer/tests/pauli_test.rs new file mode 100644 index 0000000000..8922668b8f --- /dev/null +++ b/source/paulimer/tests/pauli_test.rs @@ -0,0 +1,204 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use core::fmt; +use std::str::FromStr; + +use paulimer::quantum_core::{x, y, z}; +use paulimer::{ + bits::MutableBitView, + pauli::{ + commutes_with, generic::PhaseExponent, DensePauli, DensePauliProjective, Pauli, + PauliBinaryOps, PauliUnitary, Phase, SparsePauli, SparsePauliProjective, + }, +}; +use proptest::prelude::*; +use rand::thread_rng; + +proptest! { + #[test] + fn from_bits(pauli in arbitrary_pauli(1000)) { + let from_bits = PauliUnitary::from_bits(pauli.x_bits().clone(), pauli.z_bits().clone(), pauli.xz_phase_exponent()); + assert_eq!(pauli.x_bits(), from_bits.x_bits()); + assert_eq!(pauli.z_bits(), from_bits.z_bits()); + assert_eq!(pauli.xz_phase_exponent(), from_bits.xz_phase_exponent()); + assert_eq!(pauli, from_bits); + } + + #[test] + fn from_references(pauli in arbitrary_pauli(1000)) { + let from_reference = PauliUnitary::from_bits(pauli.x_bits().as_slice(), pauli.z_bits().as_slice(), pauli.xz_phase_exponent()); + assert_eq!(pauli.x_bits(), from_reference.x_bits()); + assert_eq!(pauli.z_bits(), from_reference.z_bits()); + assert_eq!(pauli.xz_phase_exponent(), from_reference.xz_phase_exponent()); + assert_eq!(pauli, from_reference); + } + + #[test] + fn is_hermitian(pauli in arbitrary_pauli(1000)) { + let square = pauli.clone() * &pauli; + let expect_hermitian = square.xz_phase_exponent().value() == 0; + assert_eq!(pauli.is_order_two(), expect_hermitian); + } + + #[test] + fn commutes_with_matches_explicit_commutator((left, right) in equal_length_paulis(1)) { + let leftright = left.clone() * &right; + let rightleft = right.clone() * &left; + let expect_commutes_with = leftright == rightleft; + assert_eq!(commutes_with(&left,&right), expect_commutes_with); + } + + #[test] + fn cayley_table(length in 1..1000usize, mut index in 0..999usize) { + index %= length; + let zeros = vec![false; length]; + let mut bits = zeros.clone(); + bits[index] = true; + let identity = PauliUnitary::from_bits(zeros.clone(), zeros.clone(), 0u8); + let i = &PauliUnitary::from_bits(zeros.clone(), zeros.clone(), 1u8); + let neg = &PauliUnitary::from_bits(zeros.clone(), zeros.clone(), 2u8); + let x = &PauliUnitary::from_bits(bits.clone(), zeros.clone(), 0u8); + let z = &PauliUnitary::from_bits(zeros.clone(), bits.clone(), 0u8); + let y = &PauliUnitary::from_bits(bits.clone(), bits.clone(), 1u8); + + assert_eq!(x.clone() * x, identity); + assert_eq!(y.clone() * y, identity); + assert_eq!(z.clone() * z, identity); + + assert_eq!(x * x, identity); + assert_eq!(y * y, identity); + assert_eq!(z * z, identity); + + assert_eq!(z.clone() * x, y.clone() * i); + assert_eq!(x.clone() * z, y.clone() * i * neg); + assert_eq!(y.clone() * z, x.clone() * i); + assert_eq!(z.clone() * y, x.clone() * i * neg); + assert_eq!(x.clone() * y, z.clone() * i); + assert_eq!(y.clone() * x, z.clone() * i * neg); + + assert_eq!(z * x, i * y ); + assert_eq!(x * z, -i * y ); + assert_eq!(y * z, i * x); + assert_eq!(z * y, -i * x); + assert_eq!(x * y, i * z ); + assert_eq!(y * x, -i * z); + + assert_eq!(i * x * z, y); + } + + #[test] + fn unsigned_int_paulis(index in 0..32usize) { + let one_bit = 1u32 << index; + let zero_bit = 0u32; + let x = &PauliUnitary::from_bits(one_bit, zero_bit, 0u8); + let z = &PauliUnitary::from_bits(zero_bit, one_bit, 0u8); + let y = &PauliUnitary::from_bits(one_bit, one_bit, 1u8); + let i = &PauliUnitary::from_bits(zero_bit, zero_bit, 1u8); + assert_eq!(i * x * z, y); + } + + #[test] + fn mul_assign((mut left, right) in equal_length_paulis(1000)) { + let product = left.clone() * &right; + left *= &right; + assert_eq!(left, product); + } + + #[test] + fn mul_assign_phase(mut pauli in arbitrary_pauli(1000), raw_exponent in 0..4u8) { + let original = pauli.clone(); + let exponent = raw_exponent; + pauli *= Phase::from_exponent(exponent); + assert_eq!(original.x_bits(), pauli.x_bits()); + assert_eq!(original.z_bits(), pauli.z_bits()); + assert_eq!( + original.xz_phase_exponent().raw_value().wrapping_add(exponent) % 4u8, + pauli.xz_phase_exponent().value() + ); + } + + #[test] + fn format_round_trip(pauli in arbitrary_pauli(50)) { + let str_sparse = format!("{pauli}"); + let str_dense = format!("{pauli:#}"); + test_round_trip::(&str_sparse, &str_dense, true); + test_round_trip::(&str_sparse, &str_dense, true); + test_round_trip::(&str_sparse, &str_dense, false); + test_round_trip::(&str_sparse, &str_dense, false); + } + + #[test] + fn left_multiply((left, right) in equal_length_paulis(1000)) { + let right_product = left.clone() * &right; + let left_product = &left * right; + assert_eq!(right_product, left_product); + } + + +} + +prop_compose! { + fn arbitrary_pauli(max_dimension: usize)(dimension in 0..max_dimension) -> PauliUnitary, u8>{ + arbitrary_pauli_of_length(dimension) + } +} +prop_compose! { + fn equal_length_paulis(max_dimension: usize)(dimension in 0..max_dimension) -> (PauliUnitary, u8>, PauliUnitary, u8>){ + (arbitrary_pauli_of_length(dimension), arbitrary_pauli_of_length(dimension)) + } +} + +fn arbitrary_pauli_of_length(length: usize) -> PauliUnitary, u8> { + paulimer::pauli::pauli_random(length, &mut thread_rng()) +} + +#[test] +fn pauli_product_test() { + let target: DensePauli = [z(0), z(1)].into(); + let preimage: DensePauli = [x(0)].into(); + let mut phase = preimage.xz_phase_exponent().raw_value(); + + let (mut x_bits, mut z_bits) = preimage.to_xz_bits(); + let mut preimage_view = PauliUnitary::::from_bits( + x_bits.as_view_mut(), + z_bits.as_view_mut(), + &mut phase, + ); + + let control: DensePauli = [y(0), x(1)].into(); + let preimage_r: DensePauli = [-y(1)].into(); + preimage_view.mul_assign_right(&target); + println!("{preimage_view}"); + preimage_view.mul_assign_left(&control); + assert!(preimage_view == preimage_r); +} + +fn test_round_trip + Eq + fmt::Debug + fmt::Display>( + str_sparse: &str, + str_dense: &str, + with_phases: bool, +) { + let pauli1 = str_sparse.parse::().expect(str_sparse); + let pauli2 = str_dense.parse::().expect(str_dense); + assert_eq!(pauli1, pauli2); + + let str_sparse_1 = format!("{pauli1}"); + let str_dense_1 = format!("{pauli1:#}"); + + let str_sparse_2 = format!("{pauli2}"); + let str_dense_2 = format!("{pauli2:#}"); + + assert_eq!(str_dense_2, str_dense_1); + assert_eq!(str_sparse_2, str_sparse_1); + + if with_phases { + assert_eq!(str_dense, str_dense_2); + assert_eq!(str_sparse, str_sparse_2); + } + + let pauli3 = str_sparse_2.parse::().expect(str_sparse); + let pauli4 = str_dense_2.parse::().expect(str_dense); + assert_eq!(pauli1, pauli3); + assert_eq!(pauli1, pauli4); +} diff --git a/source/paulimer/tests/simulation_test.rs b/source/paulimer/tests/simulation_test.rs new file mode 100644 index 0000000000..d3931284a6 --- /dev/null +++ b/source/paulimer/tests/simulation_test.rs @@ -0,0 +1,127 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use paulimer::bits::BitMatrix; +use paulimer::bits::BitView; +use paulimer::bits::Bitwise; +use paulimer::quantum_core::{x, z, PositionedPauliObservable}; +use paulimer::{outcome_specific_simulation::OutcomeSpecificSimulation, Simulation, UnitaryOp}; + +fn measure_and_fix( + sim: &mut impl Simulation, + observable: &[PositionedPauliObservable], + fix: &[PositionedPauliObservable], +) { + sim.assert_stabilizer(fix); + let r = sim.measure(observable); + sim.assert_stabilizer_up_to_sign(observable); + sim.conditional_pauli(fix, &[r], true); + sim.assert_stabilizer(observable); +} + +fn cx_via_measure(sim: &mut impl Simulation, control: usize, target: usize, helper: usize) { + let (q0, q1, q2) = (control, helper, target); + measure_and_fix(sim, &[x(q1)], &[z(q1)]); + measure_and_fix(sim, &[z(q0), z(q1)], &[x(q1)]); + measure_and_fix(sim, &[x(q1), x(q2)], &[z(q0), z(q1)]); + measure_and_fix(sim, &[z(q1)], &[x(q1), x(q2)]); +} + +fn cz_via_measure(sim: &mut impl Simulation, control: usize, target: usize, helper: usize) { + let (q0, q1, q2) = (control, helper, target); + measure_and_fix(sim, &[x(q1)], &[z(q1)]); + measure_and_fix(sim, &[z(q0), z(q1)], &[x(q1)]); + measure_and_fix(sim, &[x(q1), z(q2)], &[z(q0), z(q1)]); + measure_and_fix(sim, &[z(q1)], &[x(q1), z(q2)]); +} + +fn prep_bell_state(sim: &mut impl Simulation, target: (usize, usize)) { + let (q0, q1) = target; + measure_and_fix(sim, &[x(q0)], &[z(q0)]); + measure_and_fix(sim, &[x(q1)], &[z(q1)]); + measure_and_fix(sim, &[z(q0), z(q1)], &[x(q0)]); +} + +fn assert_bell(sim: &impl Simulation, target: (usize, usize)) { + let (q0, q1) = target; + sim.assert_stabilizer(&[x(q0), x(q1)]); + sim.assert_stabilizer(&[z(q0), z(q1)]); +} + +fn cx_cz_test() { + // just run cnot via measure circuit + { + let mut sim = SimulationKind::with_capacity(3, 4, 4); + cx_via_measure(&mut sim, 0, 1, 2); + assert_eq!(sim.num_random_outcomes(), 4); + assert_eq!(sim.random_outcome_indicator().len(), 4); + } + // test that cnot via measurement followed by a builtin cnot is identity + { + let mut sim = SimulationKind::with_capacity(5, 10, 10); + let (control, helper, target, target_ref, control_ref) = (0, 1, 2, 3, 4usize); + prep_bell_state(&mut sim, (control, control_ref)); + prep_bell_state(&mut sim, (target, target_ref)); + assert_bell(&sim, (control, control_ref)); + assert_bell(&sim, (target, target_ref)); + cx_via_measure(&mut sim, control, target, helper); + + sim.assert_stabilizer(&[z(helper)]); + // check that we get a Choi state of a cnot by listing its stabilizers + sim.assert_stabilizer(&[z(control_ref), z(control)]); + sim.assert_stabilizer(&[x(control_ref), x(control), x(target)]); + sim.assert_stabilizer(&[z(target_ref), z(control), z(target)]); + sim.assert_stabilizer(&[x(target_ref), x(target)]); + + sim.apply_unitary(UnitaryOp::ControlledX, &[control, target]); + // println!("{}",clifford_images_as_sparse_string(sim.clifford())); + assert_bell(&sim, (control, control_ref)); + assert_bell(&sim, (target, target_ref)); + } + // test that cz via measurement followed by a builtin cz is identity + { + let mut sim = SimulationKind::with_capacity(5, 10, 10); + let (control, helper, target, target_ref, control_ref) = (0, 1, 2, 3, 4usize); + prep_bell_state(&mut sim, (control, control_ref)); + prep_bell_state(&mut sim, (target, target_ref)); + cz_via_measure(&mut sim, control, target, helper); + sim.apply_unitary(UnitaryOp::ControlledZ, &[control, target]); + assert_bell(&sim, (control, control_ref)); + assert_bell(&sim, (target, target_ref)); + } +} + +#[test] +fn cx_cz_outcome_specific_test() { + cx_cz_test::(); +} + +#[must_use] +pub fn is_column_reduced_with_profile(matrix: &BitMatrix, rank_profile: &[usize]) -> bool { + for (col, row) in rank_profile.iter().enumerate() { + if !is_standard_basis_element(&matrix.row(*row), col) { + return false; + } + } + let mut current_pivot_pos = 0; + for row in 0..matrix.rowcount() { + if current_pivot_pos < rank_profile.len() - 1 && row >= rank_profile[current_pivot_pos + 1] + { + current_pivot_pos += 1; + } + if !is_supported_on_first_k_bits(&matrix.row(row), current_pivot_pos + 1) { + return false; + } + } + true +} + +#[must_use] +pub fn is_standard_basis_element(bitstring: &BitView, pos: usize) -> bool { + bitstring.index(pos) && bitstring.weight() == 1 +} + +#[must_use] +pub fn is_supported_on_first_k_bits(bitstring: &BitView, k: usize) -> bool { + (k..bitstring.len()).all(|index| !bitstring.index(index)) +} diff --git a/source/paulimer/tests/utils_tests.rs b/source/paulimer/tests/utils_tests.rs new file mode 100644 index 0000000000..c2de1841a4 --- /dev/null +++ b/source/paulimer/tests/utils_tests.rs @@ -0,0 +1,10 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +// use paulimer::utils::subscript_digits; + +// #[test] +// fn subscript_digits_test() { +// assert_eq!(subscript_digits(12), "₁₂"); +// assert_eq!(subscript_digits(11221), "₁₁₂₂₁"); +// } diff --git a/source/pip/Cargo.toml b/source/pip/Cargo.toml index feb781585a..a5bee271a3 100644 --- a/source/pip/Cargo.toml +++ b/source/pip/Cargo.toml @@ -13,12 +13,16 @@ license.workspace = true noisy_simulator = { path = "../noisy_simulator" } num-bigint = { workspace = true } num-complex = { workspace = true } +num-traits = { workspace = true } qsc = { path = "../compiler/qsc" } +qdk_simulators = { path = "../simulators" } resource_estimator = { path = "../resource_estimator" } miette = { workspace = true, features = ["fancy"] } rustc-hash = { workspace = true } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } +rayon = { workspace = true } +rand = { workspace = true } [lints] workspace = true @@ -27,12 +31,23 @@ workspace = true allocator = { path = "../allocator" } [target.'cfg(not(any(target_os = "windows")))'.dependencies] -pyo3 = { workspace = true, features = ["abi3-py310", "extension-module", "num-bigint", "num-complex"] } +pyo3 = { workspace = true, features = [ + "abi3-py310", + "extension-module", + "num-bigint", + "num-complex", +] } [target.'cfg(any(target_os = "windows"))'.dependencies] # generate-import-lib: skip requiring Python 3 distribution # files to be present on the (cross-)compile host system. -pyo3 = { workspace = true, features = ["abi3-py310", "extension-module", "generate-import-lib", "num-bigint", "num-complex"] } +pyo3 = { workspace = true, features = [ + "abi3-py310", + "extension-module", + "generate-import-lib", + "num-bigint", + "num-complex", +] } [lib] crate-type = ["cdylib"] diff --git a/source/pip/pyproject.toml b/source/pip/pyproject.toml index d2bae17056..59bda36019 100644 --- a/source/pip/pyproject.toml +++ b/source/pip/pyproject.toml @@ -10,6 +10,7 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python", "Programming Language :: Rust", "Operating System :: MacOS", diff --git a/source/pip/qsharp/_device/__init__.py b/source/pip/qsharp/_device/__init__.py new file mode 100644 index 0000000000..59041732f4 --- /dev/null +++ b/source/pip/qsharp/_device/__init__.py @@ -0,0 +1,8 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from ._device import Device + +__all__ = [ + "Device", +] diff --git a/source/pip/qsharp/_device/_atom/__init__.py b/source/pip/qsharp/_device/_atom/__init__.py new file mode 100644 index 0000000000..abb5ec4d5e --- /dev/null +++ b/source/pip/qsharp/_device/_atom/__init__.py @@ -0,0 +1,295 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from .._device import Device, Zone, ZoneType +from ..._simulation import NoiseConfig, run_qir_clifford, run_qir_cpu, run_qir_gpu +from ..._native import try_create_gpu_adapter +from ..._qsharp import QirInputData +from ... import telemetry_events + +from typing import List, Literal, Optional +import time + + +class NeutralAtomDevice(Device): + """ + Representation of a neutral atom device quantum computer. + """ + + def __init__( + self, + column_count: int = 40, + register_zone_row_count: int = 25, + interaction_zone_row_count: int = 2, + measurement_zone_row_count: int = 2, + ): + default_layout = ( + column_count == 40 + and register_zone_row_count == 25 + and interaction_zone_row_count == 2 + and measurement_zone_row_count == 2 + ) + telemetry_events.on_neutral_atom_init(default_layout) + + super().__init__( + column_count, + [ + Zone("Register 1", register_zone_row_count, ZoneType.REG), + Zone("Interaction Zone", interaction_zone_row_count, ZoneType.INTER), + Zone("Measurement Zone", measurement_zone_row_count, ZoneType.MEAS), + ], + ) + + def _init_home_locs(self): + # Set up the home locations for qubits in the NeutralAtomDevice layout. + assert len(self.zones) == 3 + assert ( + self.zones[0].type == ZoneType.REG + and self.zones[1].type == ZoneType.INTER + and self.zones[2].type == ZoneType.MEAS + ) + rz1_rows = range(self.zones[0].row_count - 1, -1, -1) + self.home_locs = [] + for row in range(self.zones[0].row_count): + for col in range(self.column_count): + self.home_locs.append((rz1_rows[row], col)) + + def compile( + self, + program: str | QirInputData, + verbose: bool = False, + ) -> QirInputData: + """ + Compile a QIR program for the NeutralAtomDevice device. This includes decomposing gates to the native gate set, + optimizing sequences of single qubit gates, pruning unused functions, and reordering instructions to + enable better scheduling during execution. + + :param program: The QIR program to compile, either as a string or as QirInputData. + :param verbose: If true, print detailed information about each compilation step. + :returns QirInputData: The compiled QIR program. + """ + + from ._optimize import ( + OptimizeSingleQubitGates, + PruneUnusedFunctions, + ) + from ._decomp import ( + DecomposeMultiQubitToCZ, + DecomposeSingleRotationToRz, + DecomposeSingleQubitToRzSX, + ReplaceResetWithMResetZ, + ) + from ._reorder import Reorder + from pyqir import Module, Context + + start_time = time.monotonic() + all_start_time = start_time + telemetry_events.on_neutral_atom_compile() + + name = "" + if isinstance(program, QirInputData): + name = program._name + + if verbose: + print(f"Compiling program {name} for NeutralAtomDevice device...") + + module = Module.from_ir(Context(), str(program)) + if verbose: + end_time = time.monotonic() + print(f" Loaded module in {end_time - start_time:.2f} seconds") + start_time = end_time + + OptimizeSingleQubitGates().run(module) + if verbose: + end_time = time.monotonic() + print( + f" Optimized single qubit gates in {end_time - start_time:.2f} seconds" + ) + start_time = end_time + + DecomposeMultiQubitToCZ().run(module) + if verbose: + end_time = time.monotonic() + print( + f" Decomposed multi-qubit gates to CZ in {end_time - start_time:.2f} seconds" + ) + start_time = end_time + + OptimizeSingleQubitGates().run(module) + if verbose: + end_time = time.monotonic() + print( + f" Optimized single qubit gates in {end_time - start_time:.2f} seconds" + ) + start_time = end_time + + DecomposeSingleRotationToRz().run(module) + if verbose: + end_time = time.monotonic() + print( + f" Decomposed single rotations to Rz in {end_time - start_time:.2f} seconds" + ) + start_time = end_time + + OptimizeSingleQubitGates().run(module) + if verbose: + end_time = time.monotonic() + print( + f" Optimized single qubit gates in {end_time - start_time:.2f} seconds" + ) + start_time = end_time + + DecomposeSingleQubitToRzSX().run(module) + if verbose: + end_time = time.monotonic() + print( + f" Decomposed single qubit gates to Rz and SX in {end_time - start_time:.2f} seconds" + ) + start_time = end_time + + OptimizeSingleQubitGates().run(module) + if verbose: + end_time = time.monotonic() + print( + f" Optimized single qubit gates in {end_time - start_time:.2f} seconds" + ) + start_time = end_time + + ReplaceResetWithMResetZ().run(module) + if verbose: + end_time = time.monotonic() + print( + f" Replaced resets with mresetz in {end_time - start_time:.2f} seconds" + ) + start_time = end_time + + PruneUnusedFunctions().run(module) + if verbose: + end_time = time.monotonic() + print(f" Pruned unused functions in {end_time - start_time:.2f} seconds") + start_time = end_time + + Reorder(self).run(module) + if verbose: + end_time = time.monotonic() + print(f" Reordered instructions in {end_time - start_time:.2f} seconds") + start_time = end_time + + end_time = time.monotonic() + telemetry_events.on_neutral_atom_compile_end((end_time - all_start_time) * 1000) + if verbose: + print( + f"Finished compiling program {name} in {end_time - all_start_time:.2f} seconds" + ) + + return QirInputData(name, str(module)) + + def show_trace(self, qir: str | QirInputData): + """ + Visualize the execution trace of a QIR program on the NeutralAtomDevice device using the Atoms widget. + This includes approximate layout and scheduling of the program to show the parallelism of gates and + movement of qubits during execution. + + :param qir: The QIR program to visualize, either as a string or as QirInputData. + """ + + try: + from qsharp_widgets import Atoms + except ImportError: + raise ImportError( + "The qsharp-widgets package is required for showing atom trace visualization. " + "Please install it via 'pip install \"qdk[jupyter]\"' or 'pip install qsharp-widgets'." + ) + from ._trace import Trace + from ._validate import ValidateNoConditionalBranches + from ._scheduler import Schedule + from pyqir import Module, Context + from IPython.display import display + + start_time = time.monotonic() + telemetry_events.on_neutral_atom_trace() + + # Compile and visualize the trace in one step. + compiled = self.compile(qir) + module = Module.from_ir(Context(), str(compiled)) + ValidateNoConditionalBranches().run(module) + Schedule(self).run(module) + tracer = Trace(self) + tracer.run(module) + display(Atoms(machine_layout=self.get_layout(), trace_data=tracer.trace)) + + end_time = time.monotonic() + telemetry_events.on_neutral_atom_trace_end((end_time - start_time) * 1000) + + def simulate( + self, + qir: str | QirInputData, + shots=1, + noise: NoiseConfig | None = None, + type: Optional[Literal["clifford", "cpu", "gpu"]] = None, + ) -> List: + """ + Simulate a QIR program on the NeutralAtomDevice device. This includes approximate layout and scheduling of the program + to model the parallelism of gates and movement of qubits during execution. The simulation can optionally + include noise based on a provided noise configuration. + + :param qir: The QIR program to simulate, either as a string or as QirInputData. + :param shots: The number of shots to simulate. Defaults to 1. + :param noise: An optional NoiseConfig to include noise in the simulation. + :param type: The type of simulator to use: + Use `"clifford"` if your QIR only contains Clifford gates and measurements. + Use `"gpu"` if you have a GPU available in your system. + Use `"cpu"` as a fallback option if you don't have a GPU in your system. + If `None` (default), the GPU simulator will be tried first, falling back to + CPU if a suitable GPU device could not be located. + :returns: The results of each shot of the simulation as a list. + """ + + from ._validate import ValidateNoConditionalBranches + from ._scheduler import Schedule + from ._decomp import DecomposeRzAnglesToCliffordGates + from pyqir import Module, Context + + start_time = time.monotonic() + + using_noise = noise is not None + if noise is None: + noise = NoiseConfig() + + compiled = self.compile(qir) + module = Module.from_ir(Context(), str(compiled)) + ValidateNoConditionalBranches().run(module) + Schedule(self).run(module) + + if type is None: + try: + try_create_gpu_adapter() + type = "gpu" + except OSError: + type = "cpu" + + telemetry_events.on_neutral_atom_simulate(shots, using_noise, type) + + match type: + case "clifford": + DecomposeRzAnglesToCliffordGates().run(module) + result = run_qir_clifford( + str(module), + shots, + noise, + ) + case "cpu": + result = run_qir_cpu(str(module), shots, noise) + case "gpu": + result = run_qir_gpu(str(module), shots, noise) + case _: + raise ValueError(f"Simulation type {type} is not supported") + + end_time = time.monotonic() + telemetry_events.on_neutral_atom_simulate_end( + (end_time - start_time) * 1000, shots, using_noise, type + ) + return result + + +__all__ = ["NeutralAtomDevice"] diff --git a/source/pip/qsharp/_device/_atom/_decomp.py b/source/pip/qsharp/_device/_atom/_decomp.py new file mode 100644 index 0000000000..56451113de --- /dev/null +++ b/source/pip/qsharp/_device/_atom/_decomp.py @@ -0,0 +1,511 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from pyqir import ( + FloatConstant, + const, + Function, + FunctionType, + Type, + qubit_type, + result_type, + result, + Context, + Linkage, + QirModuleVisitor, + required_num_results, +) +from math import pi +from ._utils import TOLERANCE + + +class DecomposeMultiQubitToCZ(QirModuleVisitor): + """ + Decomposes all multi-qubit gates to CZ gates and single qubit gates. + """ + + h_func: Function + s_func: Function + sadj_func: Function + t_func: Function + tadj_func: Function + rz_func: Function + cz_func: Function + + def _on_module(self, module): + void = Type.void(module.context) + qubit_ty = qubit_type(module.context) + self.double_ty = Type.double(module.context) + # Find or create all the needed functions. + for func in module.functions: + match func.name: + case "__quantum__qis__h__body": + self.h_func = func + case "__quantum__qis__s__body": + self.s_func = func + case "__quantum__qis__s__adj": + self.sadj_func = func + case "__quantum__qis__t__body": + self.t_func = func + case "__quantum__qis__t__adj": + self.tadj_func = func + case "__quantum__qis__rz__body": + self.rz_func = func + case "__quantum__qis__cz__body": + self.cz_func = func + if not hasattr(self, "h_func"): + self.h_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__h__body", + module, + ) + if not hasattr(self, "s_func"): + self.s_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__s__body", + module, + ) + if not hasattr(self, "sadj_func"): + self.sadj_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__s__adj", + module, + ) + if not hasattr(self, "t_func"): + self.t_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__t__body", + module, + ) + if not hasattr(self, "tadj_func"): + self.tadj_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__t__adj", + module, + ) + if not hasattr(self, "rz_func"): + self.rz_func = Function( + FunctionType(void, [self.double_ty, qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__rz__body", + module, + ) + if not hasattr(self, "cz_func"): + self.cz_func = Function( + FunctionType(void, [qubit_ty, qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__cz__body", + module, + ) + super()._on_module(module) + + def _on_qis_ccx(self, call, ctrl1, ctrl2, target): + self.builder.insert_before(call) + self.builder.call(self.h_func, [target]) + self.builder.call(self.tadj_func, [ctrl1]) + self.builder.call(self.tadj_func, [ctrl2]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.cz_func, [target, ctrl1]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.t_func, [ctrl1]) + self.builder.call(self.h_func, [target]) + self.builder.call(self.cz_func, [ctrl2, target]) + self.builder.call(self.h_func, [target]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.cz_func, [ctrl2, ctrl1]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.t_func, [target]) + self.builder.call(self.tadj_func, [ctrl1]) + self.builder.call(self.h_func, [target]) + self.builder.call(self.cz_func, [ctrl2, target]) + self.builder.call(self.h_func, [target]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.cz_func, [target, ctrl1]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.tadj_func, [target]) + self.builder.call(self.t_func, [ctrl1]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.cz_func, [ctrl2, ctrl1]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.h_func, [target]) + call.erase() + + def _on_qis_cx(self, call, ctrl, target): + self.builder.insert_before(call) + self.builder.call(self.h_func, [target]) + self.builder.call(self.cz_func, [ctrl, target]) + self.builder.call(self.h_func, [target]) + call.erase() + + def _on_qis_cy(self, call, ctrl, target): + self.builder.insert_before(call) + self.builder.call(self.sadj_func, [target]) + self.builder.call(self.h_func, [target]) + self.builder.call(self.cz_func, [ctrl, target]) + self.builder.call(self.h_func, [target]) + self.builder.call(self.s_func, [target]) + call.erase() + + def _on_qis_rxx(self, call, angle, target1, target2): + self.builder.insert_before(call) + self.builder.call(self.h_func, [target2]) + self.builder.call(self.cz_func, [target2, target1]) + self.builder.call(self.h_func, [target1]) + self.builder.call(self.rz_func, [angle, target1]) + self.builder.call(self.h_func, [target1]) + self.builder.call(self.cz_func, [target2, target1]) + self.builder.call(self.h_func, [target2]) + call.erase() + + def _on_qis_ryy(self, call, angle, target1, target2): + self.builder.insert_before(call) + self.builder.call(self.sadj_func, [target1]) + self.builder.call(self.sadj_func, [target2]) + self.builder.call(self.h_func, [target2]) + self.builder.call(self.cz_func, [target2, target1]) + self.builder.call(self.h_func, [target1]) + self.builder.call(self.rz_func, [angle, target1]) + self.builder.call(self.h_func, [target1]) + self.builder.call(self.cz_func, [target2, target1]) + self.builder.call(self.h_func, [target2]) + self.builder.call(self.s_func, [target2]) + self.builder.call(self.s_func, [target1]) + call.erase() + + def _on_qis_rzz(self, call, angle, target1, target2): + self.builder.insert_before(call) + self.builder.call(self.h_func, [target1]) + self.builder.call(self.cz_func, [target2, target1]) + self.builder.call(self.h_func, [target1]) + self.builder.call(self.rz_func, [angle, target1]) + self.builder.call(self.h_func, [target1]) + self.builder.call(self.cz_func, [target2, target1]) + self.builder.call(self.h_func, [target1]) + call.erase() + + def _on_qis_swap(self, call, target1, target2): + self.builder.insert_before(call) + self.builder.call(self.h_func, [target2]) + self.builder.call(self.cz_func, [target1, target2]) + self.builder.call(self.h_func, [target2]) + self.builder.call(self.h_func, [target1]) + self.builder.call(self.cz_func, [target2, target1]) + self.builder.call(self.h_func, [target1]) + self.builder.call(self.h_func, [target2]) + self.builder.call(self.cz_func, [target1, target2]) + self.builder.call(self.h_func, [target2]) + call.erase() + + +class DecomposeSingleRotationToRz(QirModuleVisitor): + """ + Decomposes all single qubit rotations to Rz gates. + """ + + h_func: Function + s_func: Function + sadj_func: Function + rz_func: Function + + def _on_module(self, module): + void = Type.void(module.context) + qubit_ty = qubit_type(module.context) + self.double_ty = Type.double(module.context) + # Find or create all the needed functions. + for func in module.functions: + match func.name: + case "__quantum__qis__h__body": + self.h_func = func + case "__quantum__qis__s__body": + self.s_func = func + case "__quantum__qis__s__adj": + self.sadj_func = func + case "__quantum__qis__rz__body": + self.rz_func = func + if not hasattr(self, "h_func"): + self.h_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__h__body", + module, + ) + if not hasattr(self, "s_func"): + self.s_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__s__body", + module, + ) + if not hasattr(self, "sadj_func"): + self.sadj_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__s__adj", + module, + ) + if not hasattr(self, "rz_func"): + self.rz_func = Function( + FunctionType(void, [self.double_ty, qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__rz__body", + module, + ) + super()._on_module(module) + + def _on_qis_rx(self, call, angle, target): + self.builder.insert_before(call) + self.builder.call(self.h_func, [target]) + self.builder.call( + self.rz_func, + [angle, target], + ) + self.builder.call(self.h_func, [target]) + call.erase() + + def _on_qis_ry(self, call, angle, target): + self.builder.insert_before(call) + self.builder.call(self.sadj_func, [target]) + self.builder.call(self.h_func, [target]) + self.builder.call( + self.rz_func, + [angle, target], + ) + self.builder.call(self.h_func, [target]) + self.builder.call(self.s_func, [target]) + call.erase() + + +class DecomposeSingleQubitToRzSX(QirModuleVisitor): + """ + Decomposes all single qubit gates to Rz and Sx gates. + """ + + sx_func: Function + rz_func: Function + + def _on_module(self, module): + void = Type.void(module.context) + qubit_ty = qubit_type(module.context) + self.double_ty = Type.double(module.context) + # Find or create all the needed functions. + for func in module.functions: + match func.name: + case "__quantum__qis__sx__body": + self.sx_func = func + case "__quantum__qis__rz__body": + self.rz_func = func + if not hasattr(self, "sx_func"): + self.sx_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__sx__body", + module, + ) + if not hasattr(self, "rz_func"): + self.rz_func = Function( + FunctionType(void, [self.double_ty, qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__rz__body", + module, + ) + super()._on_module(module) + + def _on_qis_h(self, call, target): + self.builder.insert_before(call) + self.builder.call( + self.rz_func, + [const(self.double_ty, pi / 2), target], + ) + self.builder.call(self.sx_func, [target]) + self.builder.call( + self.rz_func, + [const(self.double_ty, pi / 2), target], + ) + call.erase() + + def _on_qis_s(self, call, target): + self.builder.insert_before(call) + self.builder.call( + self.rz_func, + [const(self.double_ty, pi / 2), target], + ) + call.erase() + + def _on_qis_s_adj(self, call, target): + self.builder.insert_before(call) + self.builder.call( + self.rz_func, + [const(self.double_ty, -pi / 2), target], + ) + call.erase() + + def _on_qis_t(self, call, target): + self.builder.insert_before(call) + self.builder.call( + self.rz_func, + [const(self.double_ty, pi / 4), target], + ) + call.erase() + + def _on_qis_t_adj(self, call, target): + self.builder.insert_before(call) + self.builder.call( + self.rz_func, + [const(self.double_ty, -pi / 4), target], + ) + call.erase() + + def _on_qis_x(self, call, target): + self.builder.insert_before(call) + self.builder.call(self.sx_func, [target]) + self.builder.call(self.sx_func, [target]) + call.erase() + + def _on_qis_y(self, call, target): + self.builder.insert_before(call) + self.builder.call(self.sx_func, [target]) + self.builder.call(self.sx_func, [target]) + self.builder.call( + self.rz_func, + [const(self.double_ty, pi), target], + ) + call.erase() + + def _on_qis_z(self, call, target): + self.builder.insert_before(call) + self.builder.call( + self.rz_func, + [const(self.double_ty, pi), target], + ) + call.erase() + + +class DecomposeRzAnglesToCliffordGates(QirModuleVisitor): + """ + Ensure that the module only contains Clifford gates instead of rotation angles. + """ + + THREE_PI_OVER_2 = 3 * pi / 2 + PI_OVER_2 = pi / 2 + TWO_PI = 2 * pi + + z_func: Function + s_func: Function + sadj_func: Function + + def _on_module(self, module): + void = Type.void(module.context) + qubit_ty = qubit_type(module.context) + self.double_ty = Type.double(module.context) + # Find or create all the needed functions. + for func in module.functions: + match func.name: + case "__quantum__qis__s__body": + self.s_func = func + case "__quantum__qis__s__adj": + self.sadj_func = func + case "__quantum__qis__z__body": + self.z_func = func + + if not hasattr(self, "s_func"): + self.s_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__s__body", + module, + ) + if not hasattr(self, "sadj_func"): + self.sadj_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__s__adj", + module, + ) + if not hasattr(self, "z_func"): + self.z_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__z__body", + module, + ) + + super()._on_module(module) + + def _on_qis_rz(self, call, angle, target): + if not isinstance(angle, FloatConstant): + raise ValueError("Angle used in RZ must be a constant") + angle = angle.value + + self.builder.insert_before(call) + + if ( + abs(angle - self.THREE_PI_OVER_2) < TOLERANCE + or abs(angle + self.PI_OVER_2) < TOLERANCE + ): + self.builder.call(self.sadj_func, [target]) + elif abs(angle - pi) < TOLERANCE or abs(angle + pi) < TOLERANCE: + self.builder.call(self.z_func, [target]) + elif ( + abs(angle - self.PI_OVER_2) < TOLERANCE + or abs(angle + self.THREE_PI_OVER_2) < TOLERANCE + ): + self.builder.call(self.s_func, [target]) + elif ( + angle < TOLERANCE + or abs(angle - self.TWO_PI) < TOLERANCE + or abs(angle + self.TWO_PI) < TOLERANCE + ): + # I, drop it + pass + else: + raise ValueError( + f"Angle {angle} used in RZ is not a Clifford compatible rotation angle" + ) + + call.erase() + + +class ReplaceResetWithMResetZ(QirModuleVisitor): + """ + Replaces all reset operations with a call to mresetz using a new, ignored result identifier. + """ + + context: Context + mresetz_func: Function + next_result_id: int + + def _on_module(self, module): + self.context = module.context + void = Type.void(self.context) + qubit_ty = qubit_type(self.context) + result_ty = result_type(self.context) + # Find or create the intrinsic mresetz function + for func in module.functions: + match func.name: + case "__quantum__qis__mresetz__body": + self.mresetz_func = func + if not hasattr(self, "mresetz_func"): + self.mresetz_func = Function( + FunctionType(void, [qubit_ty, result_ty]), + Linkage.EXTERNAL, + "__quantum__qis__mresetz__body", + module, + ) + super()._on_module(module) + + def _on_function(self, function): + self.next_result_id = required_num_results(function) or 0 + super()._on_function(function) + + def _on_qis_reset(self, call, target): + self.builder.insert_before(call) + # Create a new result identifier to ignore the measurement result + result_id = result(self.context, self.next_result_id) + self.next_result_id += 1 + self.builder.call(self.mresetz_func, [target, result_id]) + call.erase() diff --git a/source/pip/qsharp/_device/_atom/_optimize.py b/source/pip/qsharp/_device/_atom/_optimize.py new file mode 100644 index 0000000000..a6f6058fc6 --- /dev/null +++ b/source/pip/qsharp/_device/_atom/_optimize.py @@ -0,0 +1,316 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from pyqir import ( + Type, + Function, + FunctionType, + FloatConstant, + Linkage, + const, + qubit_type, + qubit_id, + result_type, + is_entry_point, + QirModuleVisitor, +) +from math import pi + +from ._utils import TOLERANCE + + +class OptimizeSingleQubitGates(QirModuleVisitor): + """ + Optimizes single qubit gates by looking for sequences of a gate and its adjoint on a given qubit. + Will also try to replace certain patterns with simpler gates. + """ + + sx_func: Function + mresetz_func: Function + + def _on_module(self, module): + void = Type.void(module.context) + qubit_ty = qubit_type(module.context) + result_ty = result_type(module.context) + self.double_ty = Type.double(module.context) + self.used_qubits = set() + # Find or create the intrinsic gate functions + for func in module.functions: + match func.name: + case "__quantum__qis__mresetz__body": + self.mresetz_func = func + case "__quantum__qis__sx__body": + self.sx_func = func + if not hasattr(self, "sx_fun"): + self.sx_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__sx__body", + module, + ) + if not hasattr(self, "mresetz_func"): + self.mresetz_func = Function( + FunctionType(void, [qubit_ty, result_ty]), + Linkage.EXTERNAL, + "__quantum__qis__mresetz__body", + module, + ) + super()._on_module(module) + + def _drop_ops(self, qubits): + # Since instructions are only removed when they are canceled out by their adjoint or folded with another + # instruction, we can just pop the entries for these qubits so they start fresh with the next gates. + for qubit in qubits: + q = qubit_id(qubit) + self.qubit_ops.pop(q, None) + self.last_meas.pop(q, None) + self.used_qubits.add(q) + + def _schedule_gate(self, instr, key, name, adj): + if key in self.qubit_ops: + # There are previous operations on this qubit, so check if the last one was the adjoint of this one. + if self.qubit_ops[key][-1][1] == adj: + (other_instr, _) = self.qubit_ops[key].pop() + # Erase the adjoint instruction and the current instruction since they cancel out. + other_instr.erase() + instr.erase() + elif ( + len(self.qubit_ops[key]) > 1 + and name == "h" + and self.qubit_ops[key][-1][1] == "s" + and self.qubit_ops[key][-2][1] == "h" + ): + # We have a sequence of h s h, which can be replaced with a single sx. + self.builder.insert_before(instr) + self.builder.call(self.sx_func, [instr.args[0]]) + instr.erase() + (other_instr, _) = self.qubit_ops[key].pop() + other_instr.erase() + (other_instr, _) = self.qubit_ops[key].pop() + other_instr.erase() + else: + # The last operation was not the adjoint of this one, so add this instruction to the list. + self.qubit_ops[key].append((instr, name)) + self.used_qubits.add(key) + self.last_meas.pop(key, None) + + if len(self.qubit_ops[key]) == 0: + # There are no more operations on this qubit, so pop it's entry to avoid having empty lists in the dict. + self.qubit_ops.pop(key) + + else: + # No previous operations on this qubit, so create a new list from this instruction. + self.qubit_ops[key] = [(instr, name)] + self.used_qubits.add(key) + self.last_meas.pop(key, None) + + def _schedule_rotation(self, instr, key, name): + if isinstance(instr.args[0], FloatConstant): + # The angle is constant, so we can try to fold this rotation with other instances of the same rotation + # tht are constant. + if key in self.qubit_ops: + if self.qubit_ops[key][-1][1] == name and isinstance( + self.qubit_ops[key][-1][0].args[0], FloatConstant + ): + # The last operation on this qubit was also a rotation of the same type by a constant angle. + (other_instr, _) = self.qubit_ops[key].pop() + new_angle = instr.args[0].value + other_instr.args[0].value + sign = -1 if new_angle < 0 else 1 + abs_new_angle = abs(new_angle) + # Normalize the angle to be within 0 to 2*pi + while abs_new_angle > 2 * pi: + abs_new_angle -= 2 * pi + new_angle = sign * abs_new_angle + if ( + abs(new_angle) > TOLERANCE + and abs(abs(new_angle) - (2 * pi)) > TOLERANCE + ): + # Create a new rotation instruction with the sum of the angles, + # and insert it, but only if the angle is above our threshold. + self.builder.insert_before(instr) + new_instr = self.builder.call( + instr.callee, + [const(self.double_ty, new_angle), instr.args[1]], + ) + self.qubit_ops[key].append((new_instr, name)) + self.used_qubits.add(key) + self.last_meas.pop(key, None) + # Erase the old instructions the new rotation replaces. + other_instr.erase() + instr.erase() + else: + # Can't fold this rotation with the previous one, so just add it to the list. + self.qubit_ops[key].append((instr, name)) + self.used_qubits.add(key) + self.last_meas.pop(key, None) + + if len(self.qubit_ops[key]) == 0: + # There are no more operations on this qubit, so pop it's entry to avoid having empty lists in the dict. + self.qubit_ops.pop(key) + + else: + # No previous operations on this qubit, so create a new list from this instruction. + self.qubit_ops[key] = [(instr, name)] + self.used_qubits.add(key) + self.last_meas.pop(key, None) + else: + # This angle is not constant, so append it to the list of operations on this qubit. + if key in self.qubit_ops: + self.qubit_ops[key].append((instr, name)) + else: + self.qubit_ops[key] = [(instr, name)] + self.used_qubits.add(key) + self.last_meas.pop(key, None) + + def _on_function(self, function): + self.last_meas = {} + self.qubit_ops = {} + super()._on_function(function) + # At the end of a function, if there are any remaining entries in self.last_meas, it means + # that there were measurements on qubits that were never reset. Convert those into mresetz. + for key, (instr, target, result) in self.last_meas.items(): + self.builder.insert_before(instr) + self.builder.call( + self.mresetz_func, + [target, result], + ) + instr.erase() + for key in self.qubit_ops: + if self.qubit_ops[key][-1][1] == "reset": + # The last operation on this qubit was a reset, so we can drop it. + (instr, _) = self.qubit_ops[key].pop() + instr.erase() + + def _on_block(self, block): + # Each block is independent, so start from an empty list of operations per qubit. + self.qubit_ops = {} + self.last_meas = {} + super()._on_block(block) + + def _on_call_instr(self, call): + if call.callee.name == "__quantum__qis__sx__body": + self._drop_ops([call.args[0]]) + elif call.callee.name == "__quantum__qis__move__body": + self._drop_ops([call.args[0]]) + elif call.callee.name == "__quantum__qis__barrier__body": + # Don't optimize across barrier calls. Treat this as a drop of all tracked gates, + # which effectively flushes all scheduled operations. + self.qubit_ops = {} + self.last_meas = {} + else: + super()._on_call_instr(call) + + def _on_qis_h(self, call, target): + self._schedule_gate(call, qubit_id(target), "h", "h") + + def _on_qis_s(self, call, target): + self._schedule_gate(call, qubit_id(target), "s", "s_adj") + + def _on_qis_s_adj(self, call, target): + self._schedule_gate(call, qubit_id(target), "s_adj", "s") + + def _on_qis_t(self, call, target): + self._schedule_gate(call, qubit_id(target), "t", "t_adj") + + def _on_qis_t_adj(self, call, target): + self._schedule_gate(call, qubit_id(target), "t_adj", "t") + + def _on_qis_x(self, call, target): + self._schedule_gate(call, qubit_id(target), "x", "x") + + def _on_qis_y(self, call, target): + self._schedule_gate(call, qubit_id(target), "y", "y") + + def _on_qis_z(self, call, target): + self._schedule_gate(call, qubit_id(target), "z", "z") + + def _on_qis_rx(self, call, angle, target): + self._schedule_rotation(call, qubit_id(target), "rx") + + def _on_qis_rxx(self, call, angle, target1, target2): + self._drop_ops([target1, target2]) + + def _on_qis_ry(self, call, angle, target): + self._schedule_rotation(call, qubit_id(target), "ry") + + def _on_qis_ryy(self, call, angle, target1, target2): + self._drop_ops([target1, target2]) + + def _on_qis_rz(self, call, angle, target): + self._schedule_rotation(call, qubit_id(target), "rz") + + def _on_qis_rzz(self, call, angle, target1, target2): + self._drop_ops([target1, target2]) + + def _on_qis_ccx(self, call, ctrl1, ctrl2, target): + self._drop_ops([ctrl1, ctrl2, target]) + + def _on_qis_cx(self, call, target1, target2): + self._drop_ops([target1, target2]) + + def _on_qis_cy(self, call, target1, target2): + self._drop_ops([target1, target2]) + + def _on_qis_cz(self, call, target1, target2): + self._drop_ops([target1, target2]) + + def _on_qis_swap(self, call, target1, target2): + self._drop_ops([target1, target2]) + + def _on_qis_m(self, call, target, result): + self._drop_ops([target]) + self.last_meas[qubit_id(target)] = (call, target, result) + + def _on_qis_mz(self, call, target, result): + self._on_qis_m(call, target, result) + + def _on_qis_mresetz(self, call, target, result): + self._on_qis_m(call, target, result) + + def _on_qis_reset(self, call, target): + id = qubit_id(target) + if id in self.last_meas: + # Since the last operation on this qubit was a measurement, + # we can combine that measurement with the reset. + (instr, target, result) = self.last_meas.pop(id) + instr.erase() + self.builder.insert_before(call) + new_call = self.builder.call( + self.mresetz_func, + [target, result], + ) + call.erase() + self.last_meas[qubit_id(target)] = (new_call, target, result) + elif not id in self.used_qubits: + # This qubit was never used, so we can just erase the reset instruction. + call.erase() + elif id in self.qubit_ops and self.qubit_ops[id][-1][1] == "reset": + # The last operation on this qubit was also a reset, so we drop the current, + # extra one. + call.erase() + else: + self._drop_ops([target]) + self._schedule_gate(call, id, "reset", "") + + +class PruneUnusedFunctions(QirModuleVisitor): + def _on_module(self, module): + # Assume every non-entry point function is unused. + self.funcs_to_drop = [f for f in module.functions if not is_entry_point(f)] + super()._on_module(module) + # Delete all unused functions. + for func in self.funcs_to_drop: + func.delete() + + def _on_call_instr(self, call): + # Remove calls to initialization and barrier functions, since they aren't handled + # by most of the stack. + if call.callee.name == "__quantum__rt__initialize": + call.erase() + elif call.callee.name == "__quantum__qis__barrier__body": + call.erase() + elif call.callee in self.funcs_to_drop: + # This function is used in a call, so remove it from the list of + # functions to drop. + assert isinstance(call.callee, Function) + self.funcs_to_drop.remove(call.callee) diff --git a/source/pip/qsharp/_device/_atom/_reorder.py b/source/pip/qsharp/_device/_atom/_reorder.py new file mode 100644 index 0000000000..3efed6a4f0 --- /dev/null +++ b/source/pip/qsharp/_device/_atom/_reorder.py @@ -0,0 +1,114 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from ._utils import as_qis_gate, get_used_values, uses_any_value +from .._device import Device +from pyqir import ( + Call, + Instruction, + Function, + QirModuleVisitor, +) + + +def is_output_recording(instr: Instruction): + if isinstance(instr, Call): + return instr.callee.name.endswith("_record_output") + return False + + +def is_irreversible(instr: Instruction): + if isinstance(instr, Call) and isinstance(instr.callee, Function): + return "irreversible" in instr.callee.attributes.func + return False + + +class Reorder(QirModuleVisitor): + """ + Reorder instructions within a block to find contiguous sequences of the same gate on + different qubits. This enables both layout and scheduling at a later stage. + """ + + def __init__(self, device: Device): + super().__init__() + self.device = device + + def instr_key(self, instr: Instruction): + gate = as_qis_gate(instr) + if gate != {}: + qubits = sorted(map(self.device.get_ordering, gate["qubit_args"])) + return qubits[0] + return 0 + + def _on_block(self, block): + # The instructions are collected into an ordered list of steps, where each step + # contains instructions of the same type that do not depend on each other. + steps = [] + + # A list of all values or resultsused in the current step. This is used to determine if an instruction + # can be added to the current step or if it needs to go into a new step by checking dependencies. + values_used_in_step = [] + results_used_in_step = [] + + # Output recording instructions and terminator must be treated separately, as those + # must be at the end of the block. + output_recording = [] + terminator = block.terminator + if terminator: + terminator.remove() + + for instr in block.instructions: + # Remove the instruction from the block, which keeps it alive in the module + # and available for later insertion. + instr.remove() + if is_output_recording(instr): + # Gather output recording instructions to be placed at the end of the block just before + # the terminator. + output_recording.append(instr) + else: + # Find the last step that contains instructions that the current instruction + # depends on. We want to insert the current instruction on the earliest possible + # step without violating dependencies. + last_dependent_step_idx = len(steps) - 1 + (used_values, used_results) = get_used_values(instr) + while last_dependent_step_idx >= 0: + if uses_any_value( + used_values, values_used_in_step[last_dependent_step_idx] + ) or uses_any_value( + used_results, results_used_in_step[last_dependent_step_idx] + ): + break + last_dependent_step_idx -= 1 + + if isinstance(instr, Call): + while ( + last_dependent_step_idx < len(steps) - 1 + and isinstance(steps[last_dependent_step_idx + 1][0], Call) + and instr.callee != steps[last_dependent_step_idx + 1][0].callee + ): + last_dependent_step_idx += 1 + + if last_dependent_step_idx == len(steps) - 1: + # The current instruction depends on the last step, so add it to a new step at the end. + steps.append([instr]) + values_used_in_step.append(set(used_values)) + results_used_in_step.append(set(used_results)) + else: + # The last dependent step is before the end, so add the current instruction to the + # step after it. + steps[last_dependent_step_idx + 1].append(instr) + values_used_in_step[last_dependent_step_idx + 1].update(used_values) + results_used_in_step[last_dependent_step_idx + 1].update( + used_results + ) + + # Insert the instructions back into the block in the correct order. + self.builder.insert_at_end(block) + for step in steps: + for instr in sorted(step, key=self.instr_key): + self.builder.instr(instr) + # Add output recording instructions and terminator at the end of the block. + for instr in output_recording: + self.builder.instr(instr) + if terminator: + self.builder.instr(terminator) diff --git a/source/pip/qsharp/_device/_atom/_scheduler.py b/source/pip/qsharp/_device/_atom/_scheduler.py new file mode 100644 index 0000000000..77282010fb --- /dev/null +++ b/source/pip/qsharp/_device/_atom/_scheduler.py @@ -0,0 +1,949 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from ._utils import as_qis_gate, get_used_values, uses_any_value +from pyqir import ( + Call, + Instruction, + Function, + QirModuleVisitor, + FunctionType, + Type, + Linkage, + qubit_type, + qubit_id, + IntType, + Value, +) +from .._device import Device, Zone, ZoneType +from collections import defaultdict +from dataclasses import dataclass +from itertools import chain +from typing import Iterable, TypeAlias, Optional +from fractions import Fraction +from functools import lru_cache + +QubitId: TypeAlias = Value +Location: TypeAlias = tuple[int, int] +MoveGroupScaleFactor: TypeAlias = tuple[bool | Fraction, bool | Fraction] +MOVE_GROUPS_PER_PARALLEL_SECTION = 1 + + +@dataclass +class Move: + __slots__ = ("qubit_id_ptr", "src_loc", "dst_loc") + + qubit_id_ptr: Value + src_loc: Location + dst_loc: Location + + def __hash__(self): + return hash(self.qubit_id_ptr) + + def __str__(self): + return f"Move Qubit({self.qubit_id}): {self.src_loc} -> {self.dst_loc}" + + def __repr__(self): + return self.__str__() + + @property + def qubit_id(self) -> int: + q_id = qubit_id(self.qubit_id_ptr) + assert q_id is not None, "Qubit id should be known" + return q_id + + def parity(self): + return move_parity(self.src_loc, self.dst_loc) + + def direction(self): + return move_direction(self.src_loc, self.dst_loc) + + +@dataclass +class PartialMove: + """A move missing its destination location.""" + + __slots__ = ("qubit_id_ptr", "src_loc") + + qubit_id_ptr: Value + src_loc: Location + + @property + def qubit_id(self) -> int: + q_id = qubit_id(self.qubit_id_ptr) + assert q_id is not None, "Qubit id should be known" + return q_id + + def into_move(self, dst_loc: Location) -> Move: + return Move(self.qubit_id_ptr, self.src_loc, dst_loc) + + +PartialMovePair: TypeAlias = tuple[PartialMove, PartialMove] + + +def move_parity(source: Location, destination: Location) -> tuple[int, int]: + """Returns a tuple representing the parities of the source and destination columns of a move.""" + return (source[1] % 2, destination[1] % 2) + + +def move_direction(source: Location, destination: Location) -> tuple[int, int]: + """Returns a tuple representing if the move is up or down, and left or right.""" + return (int(source[0] < destination[0]), int(source[1] < destination[1])) + + +def index_from_parity_and_direction(ud: int, lr: int) -> int: + return 2 * ud + lr + + +def is_invalid_move_pair(move1: Move, move2: Move) -> bool: + """ + Returns true if the two moves are incompatible, i.e., if they have the same + source row then they must have the same destination row, and if they have the + same source column then they must have the same destination column. + """ + + source_row_diff = move1.src_loc[0] - move2.src_loc[0] + destination_row_diff = move1.dst_loc[0] - move2.dst_loc[0] + source_col_diff = move1.src_loc[1] - move2.src_loc[1] + destination_col_diff = move1.dst_loc[1] - move2.dst_loc[1] + + return ( + (source_row_diff == 0 and destination_row_diff != 0) + or (source_row_diff != 0 and destination_row_diff == 0) + or (source_col_diff == 0 and destination_col_diff != 0) + or (source_col_diff != 0 and destination_col_diff == 0) + ) + + +@lru_cache(maxsize=1 << 14) +def scale_factor_helper(source_diff, destination_diff): + if destination_diff == 0: + return True + if (s := Fraction(source_diff, destination_diff)) >= 0: + return s + + +def scale_factor(move1: Move, move2: Move) -> Optional[MoveGroupScaleFactor]: + """ + Returns a tuple of two elements, representing the row displacement ratio and column + displacement ratio between the moves. + """ + + if is_invalid_move_pair(move1, move2): + return None + + source_row_diff = move1.src_loc[0] - move2.src_loc[0] + destination_row_diff = move1.dst_loc[0] - move2.dst_loc[0] + source_col_diff = move1.src_loc[1] - move2.src_loc[1] + destination_col_diff = move1.dst_loc[1] - move2.dst_loc[1] + row_scale_factor = scale_factor_helper(source_row_diff, destination_row_diff) + col_scale_factor = scale_factor_helper(source_col_diff, destination_col_diff) + + if row_scale_factor is not None and col_scale_factor is not None: + return row_scale_factor, col_scale_factor + + +class MoveGroup: + """ + Represents a group of moves that can be done at the same time. + + Attributes: + moves (set): A set of moves that can be performed in parallel. + scale_factor (Optional[tuple[Fraction, Fraction]]): A tuple of fractions + representing the scale factors in the row and col axes between + moves. `None`, if there is a single element in the move set. + ref_move (Move): A move used as a representative of the group, used + to test compatibility of other moves with the group. + """ + + __slots__ = ("moves", "scale_factor", "ref_move") + + def __init__(self, moves: Iterable[Move]): + self.moves = set(moves) + self.scale_factor = scale_factor(*moves) if len(self.moves) > 1 else None + self.ref_move = next(iter(moves)) + + def __len__(self) -> int: + return len(self.moves) + + def add(self, move: Move): + """ + Adds a move to this move group. + + Args: + move (Move): The move to add. + """ + + # A move group with a single move doesn't have an associated scale factor. + # Therefore, we cannot test if a move is compatible with it, which means + # we cannot add moves to it. + assert ( + self.scale_factor + ), "cannot add to move group candidate with a single move" + self.moves.add(move) + + def remove(self, move: Move): + self.moves.remove(move) + + def discard(self, move: Move): + self.moves.discard(move) + + +class MoveGroupPool: + """A data structure that takes individual moves as input and organizes them + into groups of moves that can be executed in parallel. + + Attributes: + moves: A set containing all the moves in the move-group pool. + move_group_candidates: A dict organizing the move-group candidates + by scale factor. + parity: The parity of source and destination columns of all the moves + in this pool. + direction: The up/down and left/right direction of all the moves + in this pool. + """ + + def __init__(self): + """Initializes a move-group pool for moves of the given `parity` and `direction`. + Args: + parity: The parity of source and destination columns of all the moves + in this pool. + direction: The up/down and left/right direction of all the moves + in this pool. + """ + self.moves: Optional[list[Move]] = [] + self.move_group_candidates: dict[MoveGroupScaleFactor, list[MoveGroup]] = ( + defaultdict(list) + ) + self.single_moves: set[Move] | list[Move] = set() + + def move_group_candidates_iter(self) -> Iterable[MoveGroup]: + return chain(*self.move_group_candidates.values()) + + def is_empty(self) -> bool: + """Returns `True` if there are no moves left, `False` otherwise.""" + return ( + not any(s.moves for s in self.move_group_candidates_iter()) + and not self.single_moves + ) + + def largest_move_group_candidate(self) -> Optional[MoveGroup]: + try: + return max(self.move_group_candidates_iter(), key=len) + except ValueError: + return None + + def add(self, move: Move): + """Adds a move to the move-group pool. + Args: + move: The move to add. It must be of the same parity and direction as + the rest of the moves in this pool. + """ + assert self.moves is not None + + move_added = False + + # Add the move to all the groups it is compatible with + for group_scale_factor, groups in self.move_group_candidates.items(): + for group in groups: + if scale_factor(move, group.ref_move) == group_scale_factor: + group.add(move) + move_added = True + + # Build a table organizing the moves by scale factor with respect to `move`. + moves_by_scale: dict[MoveGroupScaleFactor, list[Move]] = defaultdict(list) + for move2 in self.moves: + s = scale_factor(move, move2) + if s is None: + continue + moves_by_scale[s].append(move2) + + # Try to create new candidates having the new move as the ref_move. + for s, moves in moves_by_scale.items(): + candidates_with_same_scale_factor = self.move_group_candidates[s] + for move2 in moves: + for group in candidates_with_same_scale_factor: + if move2 in group.moves: + # This pair already belongs to an existing move group candidate, + # so we don't need to create a new one. + break + else: + # Create a new move group candidate. + new_candidate = MoveGroup((move, move2)) + + # Add previous moves to the new candidate. + new_candidate.moves.update(moves_by_scale[s]) + + candidates_with_same_scale_factor.append(new_candidate) + move_added = True + + # This case triggers if `move` is not compatible with any move in `self.moves`. + if not move_added: + assert isinstance(self.single_moves, set) + self.single_moves.add(move) + + self.moves.append(move) + + def try_take(self, number_of_moves: int) -> list[Move]: + """Take up to `number_of_moves` from the largest move group candidate. + Args: + number_of_moves: The number of moves to take from this pool. + """ + # Once we start taking moves from the MoveGroupPool, we don't need to add + # new moves. So we set `self.moves` to `None` as a safety measure. + if self.moves is not None: + self.moves = None + + if largest_move_group_candidate := self.largest_move_group_candidate(): + # Ensure moves are sorted by qubit ID to have a deterministic order. + moves = sorted( + largest_move_group_candidate.moves, key=lambda m: m.qubit_id + )[:number_of_moves] + moves_set = set(moves) + # Remove the taken moves from all candidates. + for group in self.move_group_candidates_iter(): + group.moves -= moves_set + assert isinstance(self.single_moves, set) + self.single_moves -= moves_set + return moves + else: + if isinstance(self.single_moves, set): + self.single_moves = sorted( + self.single_moves, key=lambda m: m.qubit_id, reverse=True + ) + if m := self.single_moves.pop(): + return [m] + else: + return [] + + def take_largest_candidate(self) -> list[Move]: + """Take all the moves from the largest move group candidate.""" + # Once we start taking moves from the MoveGroupPool, we don't need to add + # new moves. So we set `self.moves` to `None` as a safety measure. + if self.moves is not None: + self.moves = None + + if largest_move_group_candidate := self.largest_move_group_candidate(): + # Ensure moves are sorted by qubit ID to have a deterministic order. + moves = sorted(largest_move_group_candidate.moves, key=lambda m: m.qubit_id) + moves_set = largest_move_group_candidate.moves + # Remove the taken moves from all candidates. + for group in self.move_group_candidates_iter(): + if group is not largest_move_group_candidate: + group.moves -= moves_set + assert isinstance(self.single_moves, set) + self.single_moves -= moves_set + moves_set.clear() + return moves + else: + if isinstance(self.single_moves, set): + self.single_moves = sorted( + self.single_moves, key=lambda m: m.qubit_id, reverse=True + ) + if m := self.single_moves.pop(): + return [m] + else: + return [] + + +class MoveScheduler: + """ + Takes a device, a target zone, and a list of qubits to move to that + target zone and builds an iterator that returns groups of moves + that can be executed in parallel. + + Attributes: + device: An object containing information about the device. + zone: The zone the moves will be scheduled to. + available_dst_locations: The available destinations in the `zone`. + partial_moves: The moves that haven't been assigned a destination location. + disjoint_pools: A list containing one pool of move-groups for each parity and direction. + """ + + def __init__( + self, + device: Device, + zone: Zone, + qubits_to_move: list[QubitId | tuple[QubitId, QubitId]], + ): + """Initializes the move scheduler from a device, a target zone, + and a list of qubits to move to that target zone. + Args: + device: An object containing information about the device. + zone: The zone the moves will be scheduled to. + qubits_to_move: A list of qubits to move. + """ + self.device = device + self.zone = zone + self.available_dst_locations = self.build_zone_locations(zone) + self.move_group_pool = MoveGroupPool() + + # Step through the partial moves and push them to the largest + # candidate they are compatible with. + partial_moves = self.qubits_to_partial_moves(qubits_to_move) + for partial_move in partial_moves: + if isinstance(partial_move, PartialMove): + self.add_to_largest_compatible_move_group(partial_move) + else: + self.add_pair_to_largest_compatible_move_group(partial_move) + + def build_zone_locations(self, zone: Zone) -> dict[Location, None]: + zone_row_offset = zone.offset // self.device.column_count + # We use a dict with None values instead of a set to preserve order. + return { + (row, col): None + for row in range( + zone_row_offset, + zone_row_offset + zone.row_count, + ) + for col in range(self.device.column_count) + } + + def qubits_to_partial_moves( + self, qubits_to_move: list[QubitId | tuple[QubitId, QubitId]] + ) -> list[PartialMove | PartialMovePair]: + partial_moves = [] + for elt in qubits_to_move: + if isinstance(elt, tuple): + q_id1 = qubit_id(elt[0]) + q_id2 = qubit_id(elt[1]) + assert q_id1 is not None + assert q_id2 is not None + mov1 = PartialMove(elt[0], self.device.get_home_loc(q_id1)) + mov2 = PartialMove(elt[1], self.device.get_home_loc(q_id2)) + partial_moves.append((mov1, mov2)) + else: + q_id = qubit_id(elt) + assert q_id is not None + mov = PartialMove(elt, self.device.get_home_loc(q_id)) + partial_moves.append(mov) + + def sort_key(partial_move: PartialMove | PartialMovePair): + if isinstance(partial_move, PartialMove): + return self.device.get_ordering(partial_move.qubit_id) + else: + return self.device.get_ordering(partial_move[0].qubit_id) + + return sorted(partial_moves, key=sort_key) + + def is_empty(self): + """ + Returns `True` if all moves were scheduled. + That is, there are no partial moves and all disjoint pools are empty. + """ + return self.move_group_pool.is_empty() + + def largest_move_group_pool(self) -> MoveGroupPool: + return self.move_group_pool + + def add_to_largest_compatible_move_group( + self, partial_move: PartialMove + ) -> MoveGroupPool: + zone_row_offset = self.zone.offset // self.device.column_count + + # Heuristic: Prefer moves that are straight up or down. + for row in range(zone_row_offset, zone_row_offset + self.zone.row_count): + dst_loc = (row, partial_move.src_loc[1]) + if dst_loc in self.available_dst_locations: + move = partial_move.into_move(dst_loc) + pool = self.move_group_pool + pool.add(move) + del self.available_dst_locations[move.dst_loc] + return pool + + if move := self.get_compatible_move(self.move_group_pool, partial_move): + self.move_group_pool.add(move) + del self.available_dst_locations[move.dst_loc] + return self.move_group_pool + + raise Exception("not enough IZ space to schedule all moves") + + def add_pair_to_largest_compatible_move_group( + self, partial_move_pair: PartialMovePair + ) -> MoveGroupPool: + zone_row_offset = self.zone.offset // self.device.column_count + partial_move = partial_move_pair[0] + + # Heuristic: Prefer moves that are straight up or down. + if partial_move.src_loc[1] % 2 == 0: + for row in range(zone_row_offset, zone_row_offset + self.zone.row_count): + dst_loc1 = (row, partial_move.src_loc[1]) + dst_loc2 = (row, partial_move.src_loc[1] + 1) + if ( + dst_loc1 in self.available_dst_locations + and dst_loc2 in self.available_dst_locations + ): + move1 = partial_move.into_move(dst_loc1) + move2 = partial_move_pair[1].into_move(dst_loc2) + pool1 = self.move_group_pool + pool2 = self.move_group_pool + pool1.add(move1) + pool2.add(move2) + del self.available_dst_locations[dst_loc1] + del self.available_dst_locations[dst_loc2] + return pool1 + + if move1 := self.get_compatible_move( + self.move_group_pool, partial_move, is_pair=True + ): + # Push the move corresponding to the first qubit of the CZ pair. + self.move_group_pool.add(move1) + + # Build the move corresponding to the second qubit of the CZ pair. + dest2 = (move1.dst_loc[0], move1.dst_loc[1] + 1) + move2 = partial_move_pair[1].into_move(dest2) + self.move_group_pool.add(move2) + del self.available_dst_locations[move1.dst_loc] + del self.available_dst_locations[move2.dst_loc] + return self.move_group_pool + raise Exception("not enough IZ space to schedule all moves") + + def get_destination( + self, + partial_move: PartialMove, + scale_factor: MoveGroupScaleFactor, + group: MoveGroup, + ) -> Optional[Location]: + """ + Returns an available destination location that would make `partial_move` + fit in the given group, or `None` if no such location exists. + """ + row_scale_factor, col_scale_factor = scale_factor + + if row_scale_factor is True: + dst_row = group.ref_move.dst_loc[0] + else: + # We compute the destination row by solving this equation for `dst_row`: + # src_row_diff / (group.ref_move.dst_loc[0] - dst_row) == row_scale_factor + src_row_diff = group.ref_move.src_loc[0] - partial_move.src_loc[0] + dst_row = group.ref_move.dst_loc[0] - src_row_diff / row_scale_factor + assert isinstance(dst_row, Fraction) + if dst_row.denominator == 1: + dst_row = dst_row.numerator + else: + return None + + if col_scale_factor is True: + dst_col = group.ref_move.dst_loc[1] + else: + # We compute the destination col by solving this equation for `dst_col`: + # src_col_diff / (group.ref_move.dst_loc[1] - dst_col) == col_scale_factor + src_col_diff = group.ref_move.src_loc[1] - partial_move.src_loc[1] + dst_col = group.ref_move.dst_loc[1] - src_col_diff / col_scale_factor + assert isinstance(dst_col, Fraction) + if dst_col.denominator == 1: + dst_col = dst_col.numerator + else: + return None + + loc = (dst_row, dst_col) + if loc in self.available_dst_locations: + return loc + + def get_compatible_move( + self, + pool: MoveGroupPool, + partial_move: PartialMove, + is_pair=False, + ) -> Optional[Move]: + # First, try finding a large enough group to place the partial move in. + if self.zone.type != ZoneType.MEAS: + GROUP_SIZE_THRESHOLD = self.device.column_count // 4 + best_destination: Optional[Location] = None + best_destination_group_len = 0 + for scale, groups in pool.move_group_candidates.items(): + for group in sorted(groups, key=len, reverse=True): + if ( + len(group) < GROUP_SIZE_THRESHOLD + or len(group) < best_destination_group_len + ): + break + if destination := self.get_destination(partial_move, scale, group): + if (not is_pair) or destination[1] % 2 == 0: + best_destination = destination + best_destination_group_len = len(group) + break + if best_destination: + return partial_move.into_move(best_destination) + + # If we didn't find a group to place the partial_move in, + # just pick the next available IZ location. + for destination in self.available_dst_locations: + if (not is_pair) or destination[1] % 2 == 0: + return partial_move.into_move(destination) + + def __iter__(self): + return self + + def __next__(self) -> list[Move]: + # If there are no moves left to schedule, stop the iteration. + if self.is_empty(): + raise StopIteration + + # Try_get from the largest candidate. + return self.largest_move_group_pool().take_largest_candidate() + + +class Schedule(QirModuleVisitor): + """ + Schedule instructions within a block, adding appropriate moves to the interaction zone to perform operations + """ + + begin_func: Function + end_func: Function + move_funcs: list[Function] + + def __init__(self, device: Device): + super().__init__() + self.device = device + self.num_qubits = len(self.device.home_locs) + self.pending_moves: list[list[Move]] = [] + + def _on_module(self, module): + i64_ty = IntType(module.context, 64) + # Find or create the necessary runtime functions. + for func in module.functions: + if func.name == "__quantum__rt__begin_parallel": + self.begin_func = func + elif func.name == "__quantum__rt__end_parallel": + self.end_func = func + if not hasattr(self, "begin_func"): + self.begin_func = Function( + FunctionType( + Type.void(module.context), + [], + ), + Linkage.EXTERNAL, + "__quantum__rt__begin_parallel", + module, + ) + if not hasattr(self, "end_func"): + self.end_func = Function( + FunctionType( + Type.void(module.context), + [], + ), + Linkage.EXTERNAL, + "__quantum__rt__end_parallel", + module, + ) + self.move_func = Function( + FunctionType( + Type.void(module.context), + [qubit_type(module.context), i64_ty, i64_ty], + ), + Linkage.EXTERNAL, + "__quantum__qis__move__body", + module, + ) + + super()._on_module(module) + + def _on_block(self, block): + # Use only the first interaction and measurement zone; more could be supported in future. + interaction_zone = self.device.get_interaction_zones()[0] + measurement_zone = self.device.get_measurement_zones()[0] + max_iz_pairs = (self.device.column_count // 2) * interaction_zone.row_count + max_measurements = self.device.column_count * measurement_zone.row_count + + # Track pending/queued single qubit operations by qubit id. + self.single_qubit_ops = [[] for _ in range(self.num_qubits)] + + # Track pending CZ operations. + self.curr_cz_ops = [] + + # Track pending measurements. + self.measurements = [] + + # Track pending qubits to move to an interaction or measurement zone. + self.pending_qubits_to_move: list[QubitId | tuple[QubitId, QubitId]] = [] + + # Track values used in CZ ops and measurements to avoid putting operations on the + # same qubit in the same batch. + self.vals_used_in_cz_ops = set() + self.vals_used_in_measurements = set() + + instructions = [instr for instr in block.instructions] + for instr in instructions: + gate = as_qis_gate(instr) + if ( + gate != {} + and len(gate["qubit_args"]) == 1 + and len(gate["result_args"]) == 0 + ): + # This is a single qubit gate; queue it up for later execution when this qubit is needed for CZ or measurement. + + # If this qubit is involved in pending moves, that implies a CZ or measurement is pending, so flush now. + if any( + ( + gate["qubit_args"][0] == qubit_id(q) + if isinstance(q, QubitId) + else ( + gate["qubit_args"][0] == qubit_id(q[0]) + or gate["qubit_args"][0] == qubit_id(q[1]) + ) + ) + for q in self.pending_qubits_to_move + ): + self.flush_pending(instr) + + # Remove the instruction from the block and queue by the qubit id. + instr.remove() + self.single_qubit_ops[gate["qubit_args"][0]].append((instr, gate)) + + elif gate != {} and len(gate["qubit_args"]) == 2: + # This is a CZ gate; queue it up to be executed in the next available interaction zone row. + + # Pick next available interaction zone pair for these qubits. If none, flush the current set and start a fresh set. + # Create move instructions to move qubits to interaction zone and save them in pending moves for later insertion. + assert isinstance(instr, Call) + (vals_used, _) = get_used_values(instr) + if ( + self.measurements + or uses_any_value(vals_used, self.vals_used_in_cz_ops) + or len(self.curr_cz_ops) >= max_iz_pairs + ): + self.flush_pending(instr) + instr.remove() + self.curr_cz_ops.append(instr) + self.vals_used_in_cz_ops.update(vals_used) + + # Prefer using matching relative column ordering to home locations to reduce move crossings. + if ( + self.device.get_home_loc(gate["qubit_args"][0])[1] + > self.device.get_home_loc(gate["qubit_args"][1])[1] + ): + self.pending_qubits_to_move.append((instr.args[1], instr.args[0])) + else: + self.pending_qubits_to_move.append((instr.args[0], instr.args[1])) + + elif gate != {} and len(gate["result_args"]) == 1: + # This is a measurement; queue it up to be executed in the measurement zone. + + # Pick next available measurement zone location for this qubit. If none, flush the current set and start a fresh set. + # Create move instructions to move qubit to measurement zone and save them in pending moves for later insertion. + assert isinstance(instr, Call) + (vals_used, _) = get_used_values(instr) + if ( + not self.measurements + or len(self.measurements) >= max_measurements + or uses_any_value(vals_used, self.vals_used_in_measurements) + ): + self.flush_pending(instr) + if len(self.single_qubit_ops[gate["qubit_args"][0]]) > 0: + # There are still pending single qubits ops for the qubit we want to measure, + # so trigger another flush. + # We need to cache and restore the measurements and pending moves that have already + # been queued so that this flush affects the single qubit ops but not the measurements. + temp_meas = self.measurements + self.measurements = [] + temp_moves = self.pending_qubits_to_move + self.pending_qubits_to_move = [] + self.flush_pending(instr) + self.measurements = temp_meas + self.pending_qubits_to_move = temp_moves + + # Remove the measurement from the block and queue it. + instr.remove() + self.measurements.append((instr, gate)) + self.vals_used_in_measurements.update(vals_used) + self.pending_qubits_to_move.append(instr.args[0]) + else: + # This is not a gate or measurement; flush any pending operations and leave the instruction in place. + # This uses a while loop to ensure all pending operations are flushed before the instruction. + while self.any_pending_ops(): + self.flush_pending(instr) + + def any_pending_single_qubit_ops(self): + return any(ops for ops in self.single_qubit_ops) + + def any_pending_czs(self): + return bool(self.curr_cz_ops) + + def any_pending_measurements(self): + return bool(self.measurements) + + def any_pending_ops(self): + return ( + self.any_pending_czs() + or self.any_pending_single_qubit_ops() + or self.any_pending_measurements() + ) + + def flush_pending(self, insert_before: Instruction): + interaction_zone = self.device.get_interaction_zones()[0] + self.builder.insert_before(insert_before) + # If cz ops pending, insert accumulated moves, single qubits ops matching cz rows, then the cz ops, then move back. + if self.curr_cz_ops: + self.schedule_pending_moves(interaction_zone) + self.insert_moves() + qubits_by_row = self.target_qubits_by_row(interaction_zone) + for qubits_in_row in qubits_by_row: + self.flush_single_qubit_ops(qubits_in_row) + self.builder.call(self.begin_func, []) + for cz_op in self.curr_cz_ops: + self.builder.instr(cz_op) + self.builder.call(self.end_func, []) + self.curr_cz_ops = [] + self.insert_moves_back() + self.vals_used_in_cz_ops = set() + return + # If measurements pending, insert accumulated moves, then measurements, then move back. + elif len(self.measurements) > 0: + self.schedule_pending_moves(self.device.get_measurement_zones()[0]) + self.insert_moves() + self.builder.call(self.begin_func, []) + for meas_op, meas_gate in self.measurements: + self.builder.instr(meas_op) + self.builder.call(self.end_func, []) + self.measurements = [] + self.vals_used_in_measurements = set() + self.insert_moves_back() + return + # Else, create movements for remaining single qubit ops to the first interaction zone, + # insert those moves, then the ops, then move back. + else: + while self.any_pending_single_qubit_ops(): + target_qubits_by_row = [[] for _ in range(interaction_zone.row_count)] + curr_row = 0 + for q in range(self.num_qubits): + if len(self.single_qubit_ops[q]) > 0: + target_qubits_by_row[curr_row].append(q) + if ( + len(target_qubits_by_row[curr_row]) + >= self.device.column_count + ): + curr_row += 1 + if curr_row >= interaction_zone.row_count: + break + for target_qubits in target_qubits_by_row: + for q in target_qubits: + qubit = self.single_qubit_ops[q][0][0].args[0] + if self.single_qubit_ops[q][0][1]["gate"] == "rz": + qubit = self.single_qubit_ops[q][0][0].args[1] + self.pending_qubits_to_move.append(qubit) + self.schedule_pending_moves(interaction_zone) + self.insert_moves() + qubits_by_row = self.target_qubits_by_row(interaction_zone) + for qubits_in_row in qubits_by_row: + self.flush_single_qubit_ops(qubits_in_row) + self.insert_moves_back() + return + + def target_qubits_by_row(self, zone: Zone) -> list[list[int]]: + zone_row_offset = zone.offset // self.device.column_count + qubits_by_row: list[list[int]] = [[] for _ in range(zone.row_count)] + for group in self.pending_moves: + for move in group: + row_idx = move.dst_loc[0] - zone_row_offset + qubits_by_row[row_idx].append(move.qubit_id) + # Organize qubits in each row by qubit_id, so that parallel sections + # of single-qubit ops in the generated QIR are easier to read. + for row in qubits_by_row: + row.sort() + return qubits_by_row + + def schedule_pending_moves(self, zone: Zone): + move_scheduler = MoveScheduler(self.device, zone, self.pending_qubits_to_move) + for move_group in move_scheduler: + self.pending_moves.append(move_group) + # self.verify_that_all_moves_were_scheduled() + self.pending_qubits_to_move = [] + + def verify_that_all_moves_were_scheduled(self): + moves_to_schedule = sum( + len(x) if isinstance(x, tuple) else 1 for x in self.pending_qubits_to_move + ) + scheduled_moves = sum(len(group) for group in self.pending_moves) + assert ( + moves_to_schedule == scheduled_moves + ), f"{moves_to_schedule} != {scheduled_moves}" + + def insert_moves(self): + """ + For each pending move, insert a call to the move function that moves the + given qubit to the given (row, col) location. + """ + move_group_id = 0 + for move_group in self.pending_moves: + # We can execute `MOVE_GROUPS_PER_PARALLEL_SECTION`, if + # this is the first one, start a parallel section. + if move_group_id == 0: + self.builder.call(self.begin_func, []) + + # Insert all the moves in a group using the same move function. + for move in move_group: + self.builder.call(self.move_func, (move.qubit_id_ptr, *move.dst_loc)) + + # There `MOVE_GROUPS_PER_PARALLEL_SECTION` move groups, + # so we increment the id modulo `MOVE_GROUPS_PER_PARALLEL_SECTION`. + move_group_id = (move_group_id + 1) % MOVE_GROUPS_PER_PARALLEL_SECTION + + # We can execute `MOVE_GROUPS_PER_PARALLEL_SECTION`, if + # this is the last one, end the parallel section. + if move_group_id == 0: + self.builder.call(self.end_func, []) + + # End the parallel section if it hasn't been ended. + if move_group_id != 0: + self.builder.call(self.end_func, []) + + def insert_moves_back(self): + move_group_id = 0 + for move_group in self.pending_moves: + # We can execute `MOVE_GROUPS_PER_PARALLEL_SECTION`, if + # this is the first one, start a parallel section. + if move_group_id == 0: + self.builder.call(self.begin_func, []) + + # Insert all the moves in a group using the same move function. + for move in move_group: + self.builder.call(self.move_func, (move.qubit_id_ptr, *move.src_loc)) + + # There `MOVE_GROUPS_PER_PARALLEL_SECTION` move groups, + # so we increment the id modulo `MOVE_GROUPS_PER_PARALLEL_SECTION`. + move_group_id = (move_group_id + 1) % MOVE_GROUPS_PER_PARALLEL_SECTION + + # We can execute `MOVE_GROUPS_PER_PARALLEL_SECTION`, if + # this is the last one, end the parallel section. + if move_group_id == 0: + self.builder.call(self.end_func, []) + + # End the parallel section if it hasn't been ended. + if move_group_id != 0: + self.builder.call(self.end_func, []) + + # Clear pending moves. + self.pending_moves = [] + + def flush_single_qubit_ops(self, target_qubits): + # Flush all pending single qubit ops for the given target qubits, combining + # consecutive ops of the same type into a single parallel region by row in + # the interaction zone. + ops_to_flush = [] + for q in target_qubits: + ops_to_flush.append(list(reversed(self.single_qubit_ops[q]))) + self.single_qubit_ops[q] = [] + while any(len(q_ops) > 0 for q_ops in ops_to_flush): + rz_ops = [] + for q_ops in ops_to_flush: + if len(q_ops) == 0: + continue + if q_ops[-1][1]["gate"] == "rz": + rz_ops.append(q_ops.pop()[0]) + if len(rz_ops) > 0: + self.builder.call(self.begin_func, []) + for rz_op in rz_ops: + self.builder.instr(rz_op) + self.builder.call(self.end_func, []) + sx_ops = [] + for q_ops in ops_to_flush: + if len(q_ops) == 0: + continue + if q_ops[-1][1]["gate"] == "sx": + sx_ops.append(q_ops.pop()[0]) + if len(sx_ops) > 0: + self.builder.call(self.begin_func, []) + for sx_op in sx_ops: + self.builder.instr(sx_op) + self.builder.call(self.end_func, []) diff --git a/source/pip/qsharp/_device/_atom/_trace.py b/source/pip/qsharp/_device/_atom/_trace.py new file mode 100644 index 0000000000..7bae2649d1 --- /dev/null +++ b/source/pip/qsharp/_device/_atom/_trace.py @@ -0,0 +1,76 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from pyqir import QirModuleVisitor, qubit_id, required_num_qubits +from .._device import Device + + +class Trace(QirModuleVisitor): + + def __init__( + self, + device: Device, + ): + self.in_parallel = False + self.trace = { + "qubits": device.home_locs, + "steps": [], + } + self.q_cols = {} + super().__init__() + + def _next_step(self): + self.trace["steps"].append({"id": len(self.trace["steps"]), "ops": []}) + + def _on_function(self, function): + num_qubits = required_num_qubits(function) + if num_qubits: + self.trace["qubits"] = self.trace["qubits"][:num_qubits] + super()._on_function(function) + + def _on_call_instr(self, call): + if call.callee.name == "__quantum__rt__begin_parallel": + self._next_step() + self.in_parallel = True + elif call.callee.name == "__quantum__rt__end_parallel": + self.in_parallel = False + elif call.callee.name == "__quantum__qis__move__body": + self._on_qis_move(call, call.args[0], call.args[1], call.args[2]) + elif call.callee.name == "__quantum__qis__sx__body": + self._on_qis_sx(call, call.args[0]) + else: + super()._on_call_instr(call) + + def _on_qis_move(self, call, qubit, row, col): + if not self.in_parallel: + self._next_step() + q = qubit_id(qubit) + self.q_cols[q] = col.value + self.trace["steps"][-1]["ops"].append(f"move({row.value}, {col.value}) {q}") + + def _on_qis_sx(self, call, qubit): + if not self.in_parallel: + self._next_step() + q = qubit_id(qubit) + self.trace["steps"][-1]["ops"].append(f"sx {q}") + + def _on_qis_rz(self, call, angle, qubit): + if not self.in_parallel: + self._next_step() + q = qubit_id(qubit) + self.trace["steps"][-1]["ops"].append(f"rz({angle.value}) {q}") + + def _on_qis_cz(self, call, qubit1, qubit2): + if not self.in_parallel: + self._next_step() + q1 = qubit_id(qubit1) + q2 = qubit_id(qubit2) + if self.q_cols.get(q1, -1) > self.q_cols.get(q2, -1): + q1, q2 = q2, q1 + self.trace["steps"][-1]["ops"].append(f"cz {q1}, {q2}") + + def _on_qis_mresetz(self, call, target, result): + if not self.in_parallel: + self._next_step() + q = qubit_id(target) + self.trace["steps"][-1]["ops"].append(f"mz {q}") diff --git a/source/pip/qsharp/_device/_atom/_utils.py b/source/pip/qsharp/_device/_atom/_utils.py new file mode 100644 index 0000000000..683f5cd5f4 --- /dev/null +++ b/source/pip/qsharp/_device/_atom/_utils.py @@ -0,0 +1,78 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from pyqir import ( + Instruction, + Call, + Constant, + Value, + qubit_id, + is_qubit_type, + result_id, + is_result_type, +) +from typing import Dict + +TOLERANCE: float = 1.1920929e-7 # Machine epsilon for 32-bit IEEE FP numbers. + + +# If this is a call to a __qis__ gate, return a dict describing the gate and its arguments. +def as_qis_gate(instr: Instruction) -> Dict: + if isinstance(instr, Call) and instr.callee.name.startswith("__quantum__qis__"): + parts = instr.callee.name.split("__") + return { + "gate": parts[3] + ("_adj" if parts[4] == "adj" else ""), + "qubit_args": [ + qubit_id(arg) for arg in instr.args if qubit_id(arg) is not None + ], + "result_args": [ + result_id(arg) for arg in instr.args if result_id(arg) is not None + ], + "other_args": [ + arg + for arg in instr.args + if qubit_id(arg) is None and result_id(arg) is None + ], + } + return {} + + +# Returns all values and, separately, all measurement results used by the instruction. +def get_used_values(instr: Instruction) -> tuple[list[Value], list[Value]]: + vals = [] + meas_results = [] + if isinstance(instr, Call): + vals = instr.args + if ( + instr.callee.name == "__quantum__qis__mresetz__body" + or instr.callee.name == "__quantum__qis__m__body" + or instr.callee.name == "__quantum__qis__mz__body" + ): + # Measurement uses a result as the second argument + meas_results += vals[1:] + vals = vals[:1] + elif ( + instr.callee.name == "__quantum__qis__read_result__body" + or instr.callee.name == "__quantum__rt__read_result" + or instr.callee.name == "__quantum__rt__read_atom_result" + ): + # Read result uses a result as the first argument + meas_results += vals + vals = [] + else: + vals = instr.operands + vals.append(instr) + return (vals, meas_results) + + +# Returns true if any of the used values are in the existing values. +# Useful for determining if an instruction depends on any instructions in a set. +def uses_any_value(used_values, existing_values) -> bool: + return any( + [ + val in existing_values + for val in used_values + if not isinstance(val, Constant) + or (is_qubit_type(val.type) or is_result_type(val.type)) + ] + ) diff --git a/source/pip/qsharp/_device/_atom/_validate.py b/source/pip/qsharp/_device/_atom/_validate.py new file mode 100644 index 0000000000..0ebab719f8 --- /dev/null +++ b/source/pip/qsharp/_device/_atom/_validate.py @@ -0,0 +1,45 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from pyqir import QirModuleVisitor, is_entry_point, Opcode + + +class ValidateAllowedIntrinsics(QirModuleVisitor): + """ + Ensure that the module only contains allowed intrinsics. + """ + + def _on_function(self, function): + name = function.name + if ( + not is_entry_point(function) + and not name.endswith("_record_output") + and name + not in [ + "__quantum__rt__begin_parallel", + "__quantum__rt__end_parallel", + "__quantum__qis__read_result__body", + "__quantum__rt__read_result", + "__quantum__qis__move__body", + "__quantum__qis__cz__body", + "__quantum__qis__sx__body", + "__quantum__qis__rz__body", + "__quantum__qis__mresetz__body", + ] + ): + raise ValueError(f"{name} is not a supported intrinsic") + + +class ValidateNoConditionalBranches(QirModuleVisitor): + """ + Ensure that the function(s) only use unconditional branches. + """ + + def _on_block(self, block): + if ( + block.terminator + and block.terminator.opcode == Opcode.BR + and len(block.terminator.operands) > 1 + ): + raise ValueError("programs with branching control flow are not supported") + super()._on_block(block) diff --git a/source/pip/qsharp/_device/_device.py b/source/pip/qsharp/_device/_device.py new file mode 100644 index 0000000000..5cc091e71c --- /dev/null +++ b/source/pip/qsharp/_device/_device.py @@ -0,0 +1,144 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from enum import Enum +from .._qsharp import QirInputData + + +class ZoneType(Enum): + """ + Enum representing different types of zones in the device layout. + """ + + REG = "register" + INTER = "interaction" + MEAS = "measurement" + + +class Zone: + """ + Represents a zone in the device layout. + """ + + offset: int = 0 + + def __init__(self, name: str, row_count: int, type: ZoneType): + self.name = name + self.row_count = row_count + self.type = type + + def set_offset(self, offset: int): + self.offset = offset + + +class Device: + """ + Represents a quantum device with specific layout expressed as zones. + """ + + def __init__(self, column_count: int, zones: list[Zone]): + self.column_count = column_count + self.zones = zones + offset = 0 + # Ensure the zones have correct offsets set based on their ordering when passed in. + for zone in self.zones: + zone.set_offset(offset) + offset += zone.row_count * self.column_count + + self.home_locs = [] + self._init_home_locs() + + def _init_home_locs(self): + """ + Initialize the home locations of qubits in the device layout. + """ + raise NotImplementedError("Subclasses must implement _init_home_locs") + + def get_home_loc(self, qubit_id: int) -> tuple[int, int]: + """ + Get the home location (row, column) of the qubit with the given id. + + Args: + qubit_id (int): The id of the qubit. + + Returns: + tuple[int, int]: The (row, column) location of the qubit. + """ + if qubit_id < 0 or qubit_id >= len(self.home_locs): + raise ValueError(f"Qubit id {qubit_id} is out of range") + return self.home_locs[qubit_id] + + def get_ordering(self, qubit_id: int) -> int: + """ + Get the ordering index of the qubit with the given id. + + Args: + qubit_id (int): The id of the qubit. + + Returns: + int: The ordering index of the qubit. + """ + if qubit_id < 0 or qubit_id >= len(self.home_locs): + raise ValueError(f"Qubit id {qubit_id} is out of range") + row, col = self.home_locs[qubit_id] + return row * self.column_count + col + + def get_register_zones(self) -> list[Zone]: + """ + Get the register zones in the device. + + Returns: + list[Zone]: The register zones. + """ + return [zone for zone in self.zones if zone.type == ZoneType.REG] + + def get_interaction_zones(self) -> list[Zone]: + """ + Get the interaction zones in the device. + + Returns: + list[Zone]: The interaction zones. + """ + return [zone for zone in self.zones if zone.type == ZoneType.INTER] + + def get_measurement_zones(self) -> list[Zone]: + """ + Get the measurement zones in the device. + + Returns: + list[Zone]: The measurement zones. + """ + return [zone for zone in self.zones if zone.type == ZoneType.MEAS] + + def compile(self, program: str) -> QirInputData: + """ + Compile the given program for the device. + + Args: + program (str): The program to compile. + """ + raise NotImplementedError("Subclasses must implement compile") + + def as_dict(self) -> dict: + """ + Get the device layout as a dictionary. + + Returns: + dict: The device layout as a dictionary. + """ + return { + "cols": self.column_count, + "zones": [ + {"title": zone.name, "rows": zone.row_count, "kind": zone.type.value} + for zone in self.zones + ], + } + + def get_layout(self) -> dict: + """ + Get the device layout as a dictionary. + + Returns: + dict: The device layout as a dictionary. + """ + return self.as_dict() diff --git a/source/pip/qsharp/_native.pyi b/source/pip/qsharp/_native.pyi index fe48ee1aec..f7b0124233 100644 --- a/source/pip/qsharp/_native.pyi +++ b/source/pip/qsharp/_native.pyi @@ -2,7 +2,7 @@ # Licensed under the MIT License. from enum import Enum -from typing import Any, Callable, Optional, Dict, List, Tuple +from typing import Any, Callable, Optional, Dict, List, Tuple, TypedDict, overload # pylint: disable=unused-argument # E302 is fighting with the formatter for number of blank lines @@ -757,3 +757,304 @@ class UdtIR: name: str fields: List[Tuple[str, TypeIR]] + +class QirInstructionId(Enum): + I: QirInstructionId + H: QirInstructionId + X: QirInstructionId + Y: QirInstructionId + Z: QirInstructionId + S: QirInstructionId + SAdj: QirInstructionId + SX: QirInstructionId + SXAdj: QirInstructionId + T: QirInstructionId + TAdj: QirInstructionId + CNOT: QirInstructionId + CX: QirInstructionId + CY: QirInstructionId + CZ: QirInstructionId + CCX: QirInstructionId + SWAP: QirInstructionId + RX: QirInstructionId + RY: QirInstructionId + RZ: QirInstructionId + RXX: QirInstructionId + RYY: QirInstructionId + RZZ: QirInstructionId + RESET: QirInstructionId + M: QirInstructionId + MResetZ: QirInstructionId + MZ: QirInstructionId + Move: QirInstructionId + ReadResult: QirInstructionId + ResultRecordOutput: QirInstructionId + BoolRecordOutput: QirInstructionId + IntRecordOutput: QirInstructionId + DoubleRecordOutput: QirInstructionId + TupleRecordOutput: QirInstructionId + ArrayRecordOutput: QirInstructionId + CorrelatedNoise: QirInstructionId + +class QirInstruction: ... + +class IdleNoiseParams: + s_probability: float + +class NoiseTable: + loss: float + + def __init__(self, num_qubits: int): + """ + Initializes a new noise table for an operation that targets `num_qubits` qubits. + """ + + def __getattr__(self, name: str) -> float: + """ + Defining __getattr__ allows getting noise like this + + noise_table.ziz + + for arbitrary pauli fields. + """ + + def __setattr__(self, name: str, value: float): + """ + Defining __setattr__ allows setting noise like this + + noise_table = NoiseTable(3) + noise_table.ziz = 0.005 + + for arbitrary pauli fields. Setting an element that was + previously set overrides that entry with the new value. + """ + + @overload + def set_pauli_noise(self, lst: list[tuple[str, float]]): + """ + The correlated pauli noise to use in simulation. Setting an element + that was previously set overrides that entry with the new value. + + Example: + noise_table = NoiseTable(2) + noise_table.set_pauli_noise([("XI", 1e-10), ("XZ", 1e-8)]) + """ + + @overload + def set_pauli_noise(self, pauli_strings: list[str], values: list[float]): + """ + The correlated pauli noise to use in simulation. Setting an element + that was previously set overrides that entry with the new value. + + Example: + noise_table = NoiseTable(2) + noise_table.set_pauli_noise(["XI", "XZ"], [1e-10, 3.7e-8]) + """ + + @overload + def set_pauli_noise(self, pauli_string: str, value: float): + """ + The correlated pauli noise to use in simulation. Setting an element + that was previously set overrides that entry with the new value. + + Example: + noise_table = NoiseTable(2) + noise_table.set_pauli_noise("XZ", 1e-10) + """ + + def set_depolarizing(self, value: float): + """ + The depolarizing noise to use in simulation. + """ + + def set_bitflip(self, value: float): + """ + The bit flip noise to use in simulation. + """ + + def set_phaseflip(self, value: float): + """ + The phase flip noise to use in simulation. + """ + +class NoiseIntrinsicsTable: + def __contains__(self, name: str) -> bool: + """ + This enables support for `in` membership checks. + """ + + def __getitem__(self, name: str) -> NoiseTable: + """ + Defining __getitem__ allows getting intrinsic noise tables like this: + noise_config = NoiseConfig() + my_intrinsic_noise_table = noise_config.intrinsics["my_intrinsic"] + """ + + def __setitem__(self, name: str, value: float): + """ + Defining __setitem__ allows setting intrinsic noise tables like this: + noise_config = NoiseConfig() + my_intrinsic_noise_table = NoiseTable(3) + my_intrinsic_noise_table.ziz = 0.01 + noise_config.intrinsics["my_intrinsic"] = my_intrinsic_noise_table + """ + + def get_intrinsic_id(self, name: str) -> int: + """ + Each intrinsic inserted in the table is assigned an integer id. + This method returns that id given an intrinsic's name. + """ + +class NoiseConfig: + x: NoiseTable + y: NoiseTable + z: NoiseTable + h: NoiseTable + s: NoiseTable + s_adj: NoiseTable + t: NoiseTable + t_adj: NoiseTable + sx: NoiseTable + sx_adj: NoiseTable + rx: NoiseTable + ry: NoiseTable + rz: NoiseTable + cx: NoiseTable + cz: NoiseTable + rxx: NoiseTable + ryy: NoiseTable + rzz: NoiseTable + swap: NoiseTable + mov: NoiseTable + mresetz: NoiseTable + # idle: IdleNoiseParams + intrinsics: NoiseIntrinsicsTable + + def intrinsic(self, name: str, num_qubits: int) -> NoiseTable: + """ + The noise table for a custom intrinsic. + """ + +def run_clifford( + input: List[QirInstruction], + num_qubits: int, + num_results: int, + shots: int, + noise: Optional[NoiseConfig], + seed: Optional[int], +) -> List[str]: + """ + Run the given list of QIR instructions in a Clifford simulator, + using the given `NoiseConfig`, if any. + + Returns a list of result strings. Each result string is composed + of '0's, '1's, and 'L's, representing if each measurement result + was a Zero, One, or Loss respectively. + """ + ... + +def run_cpu_full_state( + input: List[QirInstruction], + num_qubits: int, + num_results: int, + shots: int, + noise: Optional[NoiseConfig], + seed: Optional[int], +) -> List[str]: + """ + Run the given list of QIR instructions in a CPU full-state simulator, + using the given `NoiseConfig`, if any. + + Returns a list of result strings. Each result string is composed + of '0's, '1's, and 'L's, representing if each measurement result + was a Zero, One, or Loss respectively. + """ + ... + +def try_create_gpu_adapter() -> str: + """ + Checks if a compatible GPU adapter is available on the system. + + This function attempts to request a GPU adapter to determine if GPU-accelerated + quantum simulation is supported. It's useful for capability detection before + attempting to run GPU-based simulations. + + # Errors + + Raises `OSError` if: + - No compatible GPU is found + - GPU drivers are missing or not functioning properly + """ + pass + +def run_parallel_shots( + input: List[QirInstruction], + shots: int, + qubit_count: int, + result_count: int, + noise: Optional[NoiseConfig], + seed: Optional[int], +) -> List[str]: + """ """ + ... + +# This is a little clunky, but until we move to Python 3.11 as a minimum, the NotRequired annotation +# for Dict fields that may be missing is not availalble. See https://peps.python.org/pep-0655/#motivation +class _GpuShotResultsBase(TypedDict): + shot_results: List[str] + """Bit strings for each shot ('0', '1', or 'L' for lost qubits).""" + + shot_result_codes: List[int] + """Result codes for each shot. 0 = Success, else Failure (Specific codes are an internal detail).""" + +class GpuShotResults(_GpuShotResultsBase, total=False): + """ + Results from running shots on the GPU simulator. + """ + + diagnostics: str + """Diagnostic information if available. (Useful primarly for debugging by the development team)""" + +class GpuContext: + def load_noise_tables(self, dir_path: str) -> List[Tuple[int, str, int]]: + """ + Loads noise tables from the specified directory path. For each .csv file found in the directory, + the noise table is loaded and associated with a unique identifier. The name of the file (without the .csv extension) + is used as the label for the noise table, which should match the QIR instruction that will apply noise using this table. + + Each line of the table should be for the format: "IXYZ,1.345e-4" where IXYZ is a string of Pauli operators + representing the error on each qubit (Z applying to the first qubit argument, Y to the second, etc.), and the second value + is the corresponding error probability for that specific Pauli string. + + Blank lines, lines starting with #, or lines that start with the string "pauli" (i.e., a column header) are ignored. + """ + ... + + def get_noise_table_ids(self) -> List[Tuple[int, str, int]]: + """ + Retrieves the currently loaded noise table as a string. + """ + ... + + def set_program( + self, + input: List[QirInstruction], + qubit_count: int, + result_count: int, + ) -> None: + """ + Sets the QIR program to be executed on the GPU. + """ + ... + + def set_noise(self, noise: NoiseConfig) -> None: + """ + Sets the noise configuration for the GPU simulation. + """ + ... + + def run_shots(self, shot_count: int, seed: int) -> GpuShotResults: + """ + Runs the specified number of shots of the loaded program on the GPU. + """ + ... diff --git a/source/pip/qsharp/_simulation.py b/source/pip/qsharp/_simulation.py new file mode 100644 index 0000000000..518e74a202 --- /dev/null +++ b/source/pip/qsharp/_simulation.py @@ -0,0 +1,645 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from pathlib import Path +import random +from typing import Callable, Literal, List, Optional, Tuple, TypeAlias, Union +import pyqir +from ._native import ( + QirInstructionId, + QirInstruction, + run_clifford, + run_parallel_shots, + run_cpu_full_state, + NoiseConfig, + GpuContext, + try_create_gpu_adapter, +) +from pyqir import ( + Function, + FunctionType, + Type, + qubit_type, + Linkage, +) +from ._qsharp import QirInputData, Result +from typing import TYPE_CHECKING + +if TYPE_CHECKING: # This is in the pyi file only + from ._native import GpuShotResults + + +class AggregateGatesPass(pyqir.QirModuleVisitor): + def __init__(self): + super().__init__() + self.gates: List[QirInstruction | Tuple] = [] + self.required_num_qubits = None + self.required_num_results = None + + def _get_value_as_string(self, value: pyqir.Value) -> str: + value = pyqir.extract_byte_string(value) + if value is None: + return "" + value = value.decode("utf-8") + return value + + def run(self, mod: pyqir.Module) -> Tuple[List[QirInstruction | Tuple], int, int]: + errors = mod.verify() + if errors is not None: + raise ValueError(f"Module verification failed: {errors}") + + # verify that the module is base profile + func = next(filter(pyqir.is_entry_point, mod.functions)) + self.required_num_qubits = pyqir.required_num_qubits(func) + self.required_num_results = pyqir.required_num_results(func) + + super().run(mod) + return (self.gates, self.required_num_qubits, self.required_num_results) + + def _on_block(self, block): + if ( + block.terminator + and block.terminator.opcode == pyqir.Opcode.BR + and len(block.terminator.operands) > 1 + ): + raise ValueError( + "simulation of programs with branching control flow is not supported" + ) + super()._on_block(block) + + def _on_call_instr(self, call: pyqir.Call) -> None: + callee_name = call.callee.name + if callee_name == "__quantum__qis__ccx__body": + self.gates.append( + ( + QirInstructionId.CCX, + pyqir.qubit_id(call.args[0]), + pyqir.qubit_id(call.args[1]), + pyqir.qubit_id(call.args[2]), + ) + ) + elif callee_name == "__quantum__qis__cx__body": + self.gates.append( + ( + QirInstructionId.CX, + pyqir.qubit_id(call.args[0]), + pyqir.qubit_id(call.args[1]), + ) + ) + elif callee_name == "__quantum__qis__cy__body": + self.gates.append( + ( + QirInstructionId.CY, + pyqir.qubit_id(call.args[0]), + pyqir.qubit_id(call.args[1]), + ) + ) + elif callee_name == "__quantum__qis__cz__body": + self.gates.append( + ( + QirInstructionId.CZ, + pyqir.qubit_id(call.args[0]), + pyqir.qubit_id(call.args[1]), + ) + ) + elif callee_name == "__quantum__qis__swap__body": + self.gates.append( + ( + QirInstructionId.SWAP, + pyqir.qubit_id(call.args[0]), + pyqir.qubit_id(call.args[1]), + ) + ) + elif callee_name == "__quantum__qis__rx__body": + self.gates.append( + ( + QirInstructionId.RX, + call.args[0].value, + pyqir.qubit_id(call.args[1]), + ) + ) + elif callee_name == "__quantum__qis__rxx__body": + self.gates.append( + ( + QirInstructionId.RXX, + call.args[0].value, + pyqir.qubit_id(call.args[1]), + pyqir.qubit_id(call.args[2]), + ) + ) + elif callee_name == "__quantum__qis__ry__body": + self.gates.append( + ( + QirInstructionId.RY, + call.args[0].value, + pyqir.qubit_id(call.args[1]), + ) + ) + elif callee_name == "__quantum__qis__ryy__body": + self.gates.append( + ( + QirInstructionId.RYY, + call.args[0].value, + pyqir.qubit_id(call.args[1]), + pyqir.qubit_id(call.args[2]), + ) + ) + elif callee_name == "__quantum__qis__rz__body": + self.gates.append( + ( + QirInstructionId.RZ, + call.args[0].value, + pyqir.qubit_id(call.args[1]), + ) + ) + elif callee_name == "__quantum__qis__rzz__body": + self.gates.append( + ( + QirInstructionId.RZZ, + call.args[0].value, + pyqir.qubit_id(call.args[1]), + pyqir.qubit_id(call.args[2]), + ) + ) + elif callee_name == "__quantum__qis__h__body": + self.gates.append((QirInstructionId.H, pyqir.qubit_id(call.args[0]))) + elif callee_name == "__quantum__qis__s__body": + self.gates.append((QirInstructionId.S, pyqir.qubit_id(call.args[0]))) + elif callee_name == "__quantum__qis__s__adj": + self.gates.append((QirInstructionId.SAdj, pyqir.qubit_id(call.args[0]))) + elif callee_name == "__quantum__qis__sx__body": + self.gates.append((QirInstructionId.SX, pyqir.qubit_id(call.args[0]))) + elif callee_name == "__quantum__qis__t__body": + self.gates.append((QirInstructionId.T, pyqir.qubit_id(call.args[0]))) + elif callee_name == "__quantum__qis__t__adj": + self.gates.append((QirInstructionId.TAdj, pyqir.qubit_id(call.args[0]))) + elif callee_name == "__quantum__qis__x__body": + self.gates.append((QirInstructionId.X, pyqir.qubit_id(call.args[0]))) + elif callee_name == "__quantum__qis__y__body": + self.gates.append((QirInstructionId.Y, pyqir.qubit_id(call.args[0]))) + elif callee_name == "__quantum__qis__z__body": + self.gates.append((QirInstructionId.Z, pyqir.qubit_id(call.args[0]))) + elif callee_name == "__quantum__qis__m__body": + self.gates.append( + ( + QirInstructionId.M, + pyqir.qubit_id(call.args[0]), + pyqir.result_id(call.args[1]), + ) + ) + elif callee_name == "__quantum__qis__mz__body": + self.gates.append( + ( + QirInstructionId.MZ, + pyqir.qubit_id(call.args[0]), + pyqir.result_id(call.args[1]), + ) + ) + elif callee_name == "__quantum__qis__mresetz__body": + self.gates.append( + ( + QirInstructionId.MResetZ, + pyqir.qubit_id(call.args[0]), + pyqir.result_id(call.args[1]), + ) + ) + elif callee_name == "__quantum__qis__reset__body": + self.gates.append((QirInstructionId.RESET, pyqir.qubit_id(call.args[0]))) + elif callee_name == "__quantum__qis__move__body": + self.gates.append( + ( + QirInstructionId.Move, + pyqir.qubit_id(call.args[0]), + ) + ) + elif callee_name == "__quantum__rt__result_record_output": + tag = self._get_value_as_string(call.args[1]) + self.gates.append( + ( + QirInstructionId.ResultRecordOutput, + str(pyqir.result_id(call.args[0])), + tag, + ) + ) + elif callee_name == "__quantum__rt__tuple_record_output": + tag = self._get_value_as_string(call.args[1]) + self.gates.append( + (QirInstructionId.TupleRecordOutput, str(call.args[0].value), tag) + ) + elif callee_name == "__quantum__rt__array_record_output": + tag = self._get_value_as_string(call.args[1]) + self.gates.append( + (QirInstructionId.ArrayRecordOutput, str(call.args[0].value), tag) + ) + elif ( + callee_name == "__quantum__rt__initialize" + or callee_name == "__quantum__rt__begin_parallel" + or callee_name == "__quantum__rt__end_parallel" + or callee_name == "__quantum__qis__barrier__body" + ): + pass + else: + raise ValueError(f"Unsupported call instruction: {callee_name}") + + +class CorrelatedNoisePass(AggregateGatesPass): + """ + This pass replaces the QIR intrinsics that are in the provided NoiseConfig + by correlated noise instructions that the simulator understands. + """ + + def __init__(self, noise_config: NoiseConfig): + super().__init__() + self.noise_intrinsics_table = noise_config.intrinsics + + def _on_call_instr(self, call: pyqir.Call) -> None: + callee_name = call.callee.name + if callee_name in self.noise_intrinsics_table: + self.gates.append( + ( + QirInstructionId.CorrelatedNoise, + self.noise_intrinsics_table.get_intrinsic_id(callee_name), + [pyqir.qubit_id(arg) for arg in call.args], + ) + ) + else: + super()._on_call_instr(call) + + +class GpuCorrelatedNoisePass(AggregateGatesPass): + """ + A special case of the CorrelatedNoisePass that uses data loaded + directly from rust instead of a NoiseConfig object to detect the + correlated noise intrinsics. + """ + + def __init__(self, noise_table: List[Tuple[int, str, int]]): + super().__init__() + self.noise_table = dict() + for table_id, name, _count in noise_table: + self.noise_table[name] = table_id + + def _on_call_instr(self, call: pyqir.Call) -> None: + callee_name = call.callee.name + if callee_name in self.noise_table: + self.gates.append( + ( + QirInstructionId.CorrelatedNoise, + int(self.noise_table[callee_name]), # Noise table ID + [pyqir.qubit_id(qubit) for qubit in call.args], # qubit args + ) + ) + else: + super()._on_call_instr(call) + + +class OutputRecordingPass(pyqir.QirModuleVisitor): + _output_str = "" + _closers = [] + _counters = [] + + def process_output(self, bitstring: str): + return eval( + self._output_str, + { + "o": [ + Result.Zero if x == "0" else Result.One if x == "1" else Result.Loss + for x in bitstring + ] + }, + ) + + def _on_function(self, function): + if pyqir.is_entry_point(function): + super()._on_function(function) + while len(self._closers) > 0: + self._output_str += self._closers.pop() + self._counters.pop() + + def _on_rt_result_record_output(self, call, result, target): + self._output_str += f"o[{pyqir.result_id(result)}]" + while len(self._counters) > 0: + self._output_str += "," + self._counters[-1] -= 1 + if self._counters[-1] == 0: + self._output_str += self._closers[-1] + self._closers.pop() + self._counters.pop() + else: + break + + def _on_rt_array_record_output(self, call, value, target): + self._output_str += "[" + self._closers.append("]") + # if len(self._counters) > 0: + # self._counters[-1] -= 1 + self._counters.append(value.value) + + def _on_rt_tuple_record_output(self, call, value, target): + self._output_str += "(" + self._closers.append(")") + # if len(self._counters) > 0: + # self._counters[-1] -= 1 + self._counters.append(value.value) + + +class DecomposeCcxPass(pyqir.QirModuleVisitor): + + h_func: Function + t_func: Function + tadj_func: Function + cz_func: Function + + def __init__(self): + super().__init__() + + def _on_module(self, module): + void = Type.void(module.context) + qubit_ty = qubit_type(module.context) + + # Find or create all the needed functions. + for func in module.functions: + match func.name: + case "__quantum__qis__h__body": + self.h_func = func + case "__quantum__qis__t__body": + self.t_func = func + case "__quantum__qis__t__adj": + self.tadj_func = func + case "__quantum__qis__cz__body": + self.cz_func = func + if not hasattr(self, "h_func"): + self.h_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__h__body", + module, + ) + if not hasattr(self, "t_func"): + self.t_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__t__body", + module, + ) + if not hasattr(self, "tadj_func"): + self.tadj_func = Function( + FunctionType(void, [qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__t__adj", + module, + ) + if not hasattr(self, "cz_func"): + self.cz_func = Function( + FunctionType(void, [qubit_ty, qubit_ty]), + Linkage.EXTERNAL, + "__quantum__qis__cz__body", + module, + ) + super()._on_module(module) + + def _on_qis_ccx(self, call, ctrl1, ctrl2, target): + self.builder.insert_before(call) + self.builder.call(self.h_func, [target]) + self.builder.call(self.tadj_func, [ctrl1]) + self.builder.call(self.tadj_func, [ctrl2]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.cz_func, [target, ctrl1]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.t_func, [ctrl1]) + self.builder.call(self.h_func, [target]) + self.builder.call(self.cz_func, [ctrl2, target]) + self.builder.call(self.h_func, [target]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.cz_func, [ctrl2, ctrl1]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.t_func, [target]) + self.builder.call(self.tadj_func, [ctrl1]) + self.builder.call(self.h_func, [target]) + self.builder.call(self.cz_func, [ctrl2, target]) + self.builder.call(self.h_func, [target]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.cz_func, [target, ctrl1]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.tadj_func, [target]) + self.builder.call(self.t_func, [ctrl1]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.cz_func, [ctrl2, ctrl1]) + self.builder.call(self.h_func, [ctrl1]) + self.builder.call(self.h_func, [target]) + call.erase() + + +Simulator: TypeAlias = Callable[ + [List[QirInstruction], int, int, int, NoiseConfig, int], str +] + + +def preprocess_simulation_input( + input: Union[QirInputData, str, bytes], + shots: Optional[int] = 1, + noise: Optional[NoiseConfig] = None, + seed: Optional[int] = None, +) -> tuple[pyqir.Module, int, Optional[NoiseConfig], int]: + if shots is None: + shots = 1 + # If no seed specified, generate a random u32 to use + if seed is None: + seed = random.randint(0, 2**32 - 1) + if isinstance(noise, tuple): + raise ValueError( + "Specifying Pauli noise via a tuple is not supported. Use a NoiseConfig instead." + ) + + context = pyqir.Context() + if isinstance(input, QirInputData): + mod = pyqir.Module.from_ir(context, str(input)) + elif isinstance(input, str): + mod = pyqir.Module.from_ir(context, input) + else: + mod = pyqir.Module.from_bitcode(context, input) + + return (mod, shots, noise, seed) + + +def run_qir_clifford( + input: Union[QirInputData, str, bytes], + shots: Optional[int] = 1, + noise: Optional[NoiseConfig] = None, + seed: Optional[int] = None, +) -> List: + (mod, shots, noise, seed) = preprocess_simulation_input(input, shots, noise, seed) + if noise is None: + (gates, num_qubits, num_results) = AggregateGatesPass().run(mod) + else: + (gates, num_qubits, num_results) = CorrelatedNoisePass(noise).run(mod) + recorder = OutputRecordingPass() + recorder.run(mod) + + return list( + map( + recorder.process_output, + run_clifford(gates, num_qubits, num_results, shots, noise, seed), + ) + ) + + +def run_qir_cpu( + input: Union[QirInputData, str, bytes], + shots: Optional[int] = 1, + noise: Optional[NoiseConfig] = None, + seed: Optional[int] = None, +) -> List: + (mod, shots, noise, seed) = preprocess_simulation_input(input, shots, noise, seed) + if noise is None: + (gates, num_qubits, num_results) = AggregateGatesPass().run(mod) + else: + (gates, num_qubits, num_results) = CorrelatedNoisePass(noise).run(mod) + recorder = OutputRecordingPass() + recorder.run(mod) + + return list( + map( + recorder.process_output, + run_cpu_full_state(gates, num_qubits, num_results, shots, noise, seed), + ) + ) + + +def run_qir_gpu( + input: Union[QirInputData, str, bytes], + shots: Optional[int] = 1, + noise: Optional[NoiseConfig] = None, + seed: Optional[int] = None, +) -> List[str]: + (mod, shots, noise, seed) = preprocess_simulation_input(input, shots, noise, seed) + # Ccx is not support in the GPU simulator, decompose it + DecomposeCcxPass().run(mod) + if noise is None: + (gates, num_qubits, num_results) = AggregateGatesPass().run(mod) + else: + (gates, num_qubits, num_results) = CorrelatedNoisePass(noise).run(mod) + recorder = OutputRecordingPass() + recorder.run(mod) + + return list( + map( + recorder.process_output, + run_parallel_shots(gates, shots, num_qubits, num_results, noise, seed), + ) + ) + + +def prepare_qir_with_correlated_noise( + input: Union[QirInputData, str, bytes], + noise_tables: List[Tuple[int, str, int]], +) -> Tuple[List[QirInstruction], int, int]: + # Turn the input into a QIR module + (mod, _, _, _) = preprocess_simulation_input(input, None, None, None) + + # Ccx is not support in the GPU simulator, decompose it + DecomposeCcxPass().run(mod) + + # Extract the gates including correlated noise instructions + (gates, required_num_qubits, required_num_results) = GpuCorrelatedNoisePass( + noise_tables + ).run(mod) + + return (gates, required_num_qubits, required_num_results) + + +class GpuSimulator: + """ + Represents a GPU-based QIR simulator. This is a 'full state' simulator that can simulate + quantum programs, including non-Clifford gates, up to a limit of 27 qubits. + """ + + def __init__(self): + self.gpu_context = GpuContext() + + def load_noise_tables( + self, + noise_dir: str, + ): + """ + Loads noise tables from the specified directory path. For each .csv file found in the directory, + the noise table is loaded and associated with a unique identifier. The name of the file (without the .csv extension) + is used as the label for the noise table, which should match the QIR instruction that will apply noise using this table. + + If testing various noise models, you may load new noise models at any time by calling this method again + with a different directory path. Previously loaded noise tables will be replaced. The program currently loaded + into the simulator (if any) will remain loaded, but any subsequent calls to `run_shots` will use the newly loaded noise tables. + + Each line of the table should be of the format: "IXYZ,1.345e-4" where IXYZ is a string of Pauli operators + representing the error on each qubit (Z applying to the first qubit argument, Y to the second, etc.), and the second value + is the corresponding error probability for that specific Pauli string. + + Blank lines, lines starting with #, or lines that start with the string "pauli" (i.e., a column header) are ignored. + """ + self.tables = self.gpu_context.load_noise_tables(noise_dir) + + def set_program(self, input: Union[QirInputData, str, bytes]): + """ + Load the QIR program into the GPU simulator, preparing it for execution. You may load and run + multiple programs sequentially by calling this method multiple times before calling `run_shots` + without needing to create a new simulator instance or reloading noise tables. + """ + (self.gates, self.required_num_qubits, self.required_num_results) = ( + prepare_qir_with_correlated_noise( + input, self.tables if not self.tables is None else [] + ) + ) + self.gpu_context.set_program( + self.gates, self.required_num_qubits, self.required_num_results + ) + + def run_shots(self, shots: int, seed: Optional[int] = None) -> "GpuShotResults": + """ + Run the loaded QIR program for the specified number of shots, using an optional seed for reproducibility. + If noise is to be applied, ensure that noise has been loaded prior to running shots. + """ + seed = seed if seed is not None else random.randint(0, 2**32 - 1) + return self.gpu_context.run_shots(shots, seed=seed) + + +def run_qir( + input: Union[QirInputData, str, bytes], + shots: Optional[int] = 1, + noise: Optional[NoiseConfig] = None, + seed: Optional[int] = None, + type: Optional[Literal["clifford", "cpu", "gpu"]] = None, +) -> List[str]: + """ + Simulate the given QIR source. + + Args: + input: The QIR source to simulate. + type: The type of simulator to use. + Use `"clifford"` if your QIR only contains Clifford gates and measurements. + Use `"gpu"` if you have a GPU available in your system. + Use `"cpu"` as a fallback option if you don't have a GPU in your system. + If `None` (default), the GPU simulator will be tried first, falling back to + CPU if a suitable GPU device could not be located. + shots: The number of shots to run. + noise: A noise model to use in the simulation. + seed: A seed for reproducibility. + + Returns: + A list of measurement results, in the order they happened during the simulation. + """ + if type is None: + try: + try_create_gpu_adapter() + type = "gpu" + except OSError: + type = "cpu" + + match type: + case "clifford": + return run_qir_clifford(input, shots, noise, seed) + case "cpu": + return run_qir_cpu(input, shots, noise, seed) + case "gpu": + return run_qir_gpu(input, shots, noise, seed) + case _: + raise ValueError(f"Invalid simulator type: {type}") diff --git a/source/pip/qsharp/telemetry_events.py b/source/pip/qsharp/telemetry_events.py index e03f1cec2f..3ec3c08a38 100644 --- a/source/pip/qsharp/telemetry_events.py +++ b/source/pip/qsharp/telemetry_events.py @@ -259,3 +259,68 @@ def on_qiskit_run_re_end(duration_ms: float) -> None: duration_ms, type="histogram", ) + + +def on_neutral_atom_init(default_layout: bool) -> None: + log_telemetry( + "neutral_atom.device.init", + 1, + properties={"default_layout": default_layout}, + ) + + +def on_neutral_atom_compile() -> None: + log_telemetry( + "neutral_atom.device.compile", + 1, + ) + + +def on_neutral_atom_compile_end(duration_ms: float) -> None: + log_telemetry( + "neutral_atom.device.compile.durationMs", + duration_ms, + type="histogram", + ) + + +def on_neutral_atom_trace() -> None: + log_telemetry( + "neutral_atom.device.trace", + 1, + ) + + +def on_neutral_atom_trace_end(duration_ms: float) -> None: + log_telemetry( + "neutral_atom.device.trace.durationMs", + duration_ms, + type="histogram", + ) + + +def on_neutral_atom_simulate(shots: int, noise: bool, type: str) -> None: + log_telemetry( + "neutral_atom.device.simulate", + 1, + properties={ + "shots": get_next_power_of_ten_bucket(shots), + "noise": noise, + "type": type, + }, + ) + + +def on_neutral_atom_simulate_end( + duration_ms: float, shots: int, noise: bool, type: str +) -> None: + log_telemetry( + "neutral_atom.device.simulate.durationMs", + duration_ms, + properties={ + "shots": get_next_power_of_ten_bucket(shots), + "noise": noise, + "type": type, + }, + type="histogram", + ) diff --git a/source/pip/src/interpreter.rs b/source/pip/src/interpreter.rs index edabbabf61..f135370924 100644 --- a/source/pip/src/interpreter.rs +++ b/source/pip/src/interpreter.rs @@ -22,6 +22,11 @@ use crate::{ pyobj_to_value, type_ir_from_qsharp_ty, value_to_pyobj, }, noisy_simulator::register_noisy_simulator_submodule, + qir_simulation::{ + IdleNoiseParams, NoiseConfig, NoiseTable, QirInstruction, QirInstructionId, + cpu_simulators::{run_clifford, run_cpu_full_state}, + gpu_full_state::{GpuContext, run_parallel_shots, try_create_gpu_adapter}, + }, }; use miette::{Diagnostic, Report}; use num_bigint::BigUint; @@ -85,6 +90,11 @@ fn verify_classes_are_sendable() { is_send::(); is_send::(); is_send::(); + is_send::(); + is_send::(); + is_send::(); + is_send::(); + is_send::(); } #[pymodule] @@ -107,7 +117,17 @@ fn _native<'a>(py: Python<'a>, m: &Bound<'a, PyModule>) -> PyResult<()> { m.add_class::()?; m.add_class::()?; m.add_class::()?; + m.add_class::()?; + m.add_class::()?; + m.add_class::()?; + m.add_class::()?; + m.add_class::()?; + m.add_class::()?; m.add_function(wrap_pyfunction!(physical_estimates, m)?)?; + m.add_function(wrap_pyfunction!(run_clifford, m)?)?; + m.add_function(wrap_pyfunction!(try_create_gpu_adapter, m)?)?; + m.add_function(wrap_pyfunction!(run_cpu_full_state, m)?)?; + m.add_function(wrap_pyfunction!(run_parallel_shots, m)?)?; m.add("QSharpError", py.get_type::())?; register_noisy_simulator_submodule(py, m)?; register_generic_estimator_submodule(m)?; diff --git a/source/pip/src/lib.rs b/source/pip/src/lib.rs index 45e3cdc82a..72edafb7ca 100644 --- a/source/pip/src/lib.rs +++ b/source/pip/src/lib.rs @@ -9,3 +9,4 @@ mod generic_estimator; mod interop; mod interpreter; mod noisy_simulator; +mod qir_simulation; diff --git a/source/pip/src/noisy_simulator.rs b/source/pip/src/noisy_simulator.rs index df77a4705f..c6efc180d1 100644 --- a/source/pip/src/noisy_simulator.rs +++ b/source/pip/src/noisy_simulator.rs @@ -352,6 +352,7 @@ impl StateVectorSimulator { ) -> PyResult<()> { self.0 .apply_instrument(&instrument.0, &qubits) + .map(|_| ()) .map_err(|e| NoisySimulatorError::new_err(e.to_string())) } diff --git a/source/pip/src/qir_simulation.rs b/source/pip/src/qir_simulation.rs new file mode 100644 index 0000000000..614619bbef --- /dev/null +++ b/source/pip/src/qir_simulation.rs @@ -0,0 +1,687 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use num_traits::Float; +use pyo3::{ + Bound, FromPyObject, Py, PyRef, PyResult, Python, + exceptions::{PyAttributeError, PyKeyError, PyTypeError, PyValueError}, + pybacked::PyBackedStr, + pyclass, pymethods, + types::{PyAnyMethods, PyTuple}, +}; +use qdk_simulators::noise_config::is_pauli_identity; +use rustc_hash::FxHashMap; + +pub(crate) mod cpu_simulators; +pub(crate) mod gpu_full_state; + +type Probability = f64; + +#[allow( + clippy::upper_case_acronyms, + reason = "these gates are named as in the rest of our stack" +)] +#[derive(Clone, Copy, Debug, PartialEq)] +#[pyclass(eq, eq_int)] +pub enum QirInstructionId { + I, + H, + X, + Y, + Z, + S, + SAdj, + SX, + SXAdj, + T, + TAdj, + CNOT, + CX, + CY, + CZ, + CCX, + SWAP, + RX, + RY, + RZ, + RXX, + RYY, + RZZ, + RESET, + M, + MResetZ, + MZ, + Move, + ReadResult, + ResultRecordOutput, + BoolRecordOutput, + IntRecordOutput, + DoubleRecordOutput, + TupleRecordOutput, + ArrayRecordOutput, + /// This is really a family of instructions. + /// All instructions in the intrinsics fields of the [`NoiseConfig`] + /// are mapped to this `QirInstructionId`. + CorrelatedNoise, +} + +#[derive(Debug)] +#[pyclass(module = "qsharp._native")] +#[derive(FromPyObject)] +pub enum QirInstruction { + OneQubitGate(QirInstructionId, u32), + TwoQubitGate(QirInstructionId, u32, u32), + OneQubitRotationGate(QirInstructionId, f64, u32), + TwoQubitRotationGate(QirInstructionId, f64, u32, u32), + ThreeQubitGate(QirInstructionId, u32, u32, u32), + OutputRecording(QirInstructionId, String, String), // inst, value, tag + CorrelatedNoise( + QirInstructionId, + u32, /* table id */ + Vec, /* qubit args */ + ), +} + +#[derive(Debug)] +#[pyclass(module = "qsharp._native")] +pub struct NoiseConfig { + #[pyo3(get)] + pub i: Py, + #[pyo3(get)] + pub x: Py, + #[pyo3(get)] + pub y: Py, + #[pyo3(get)] + pub z: Py, + #[pyo3(get)] + pub h: Py, + #[pyo3(get)] + pub s: Py, + #[pyo3(get)] + pub s_adj: Py, + #[pyo3(get)] + pub t: Py, + #[pyo3(get)] + pub t_adj: Py, + #[pyo3(get)] + pub sx: Py, + #[pyo3(get)] + pub sx_adj: Py, + #[pyo3(get)] + pub rx: Py, + #[pyo3(get)] + pub ry: Py, + #[pyo3(get)] + pub rz: Py, + #[pyo3(get)] + pub cx: Py, + #[pyo3(get)] + pub cz: Py, + #[pyo3(get)] + pub rxx: Py, + #[pyo3(get)] + pub ryy: Py, + #[pyo3(get)] + pub rzz: Py, + #[pyo3(get)] + pub swap: Py, + #[pyo3(get)] + pub mov: Py, + #[pyo3(get)] + pub mresetz: Py, + // Idle noise parameters not yet supported + // #[pyo3(get)] + // pub idle: Py, + #[pyo3(get)] + pub intrinsics: Py, +} + +#[pymethods] +impl NoiseConfig { + #[new] + fn new(py: Python) -> PyResult { + bind_noise_config( + py, + &>::NOISELESS, + ) + } + + fn intrinsic<'py>( + &'py mut self, + py: Python<'py>, + name: &str, + num_qubits: u32, + ) -> PyResult> { + if self.intrinsics.borrow(py).contains_key(name) { + Ok(self + .intrinsics + .borrow(py) + .get(py, name) + .expect("the key should be in the table")) + } else { + let new_table = Py::new( + py, + NoiseTable::from(qdk_simulators::noise_config::NoiseTable::::noiseless( + num_qubits, + )), + )?; + self.intrinsics + .borrow_mut(py) + .insert(name.to_string(), new_table); + Ok(self + .intrinsics + .borrow(py) + .get(py, name) + .expect("the key should be in the table")) + } + } +} + +fn generic_float_cast(value: T) -> Q { + // SAFETY: + // Casts from f32 to f32, f32 to f64, and f64 to f64 work without issue. + // Casting from f64 to f32 will also work but there might be truncation. + num_traits::NumCast::from(value).expect("casting f64 to f32 should succeed") +} + +fn bind_noise_config( + py: Python, + value: &qdk_simulators::noise_config::NoiseConfig, +) -> PyResult { + Ok(NoiseConfig { + i: Py::new(py, NoiseTable::from(value.i.clone()))?, + x: Py::new(py, NoiseTable::from(value.x.clone()))?, + y: Py::new(py, NoiseTable::from(value.y.clone()))?, + z: Py::new(py, NoiseTable::from(value.z.clone()))?, + h: Py::new(py, NoiseTable::from(value.h.clone()))?, + s: Py::new(py, NoiseTable::from(value.s.clone()))?, + s_adj: Py::new(py, NoiseTable::from(value.s_adj.clone()))?, + t: Py::new(py, NoiseTable::from(value.t.clone()))?, + t_adj: Py::new(py, NoiseTable::from(value.t_adj.clone()))?, + sx: Py::new(py, NoiseTable::from(value.sx.clone()))?, + sx_adj: Py::new(py, NoiseTable::from(value.sx_adj.clone()))?, + rx: Py::new(py, NoiseTable::from(value.rx.clone()))?, + ry: Py::new(py, NoiseTable::from(value.ry.clone()))?, + rz: Py::new(py, NoiseTable::from(value.rz.clone()))?, + cx: Py::new(py, NoiseTable::from(value.cx.clone()))?, + cz: Py::new(py, NoiseTable::from(value.cz.clone()))?, + rxx: Py::new(py, NoiseTable::from(value.rxx.clone()))?, + ryy: Py::new(py, NoiseTable::from(value.ryy.clone()))?, + rzz: Py::new(py, NoiseTable::from(value.rzz.clone()))?, + swap: Py::new(py, NoiseTable::from(value.swap.clone()))?, + mov: Py::new(py, NoiseTable::from(value.mov.clone()))?, + mresetz: Py::new(py, NoiseTable::from(value.mresetz.clone()))?, + // idle: Py::new(py, IdleNoiseParams::from(value.idle))?, + intrinsics: Py::new(py, NoiseIntrinsicsTable::default())?, + }) +} + +fn unbind_noise_config( + py: Python, + value: &Bound, +) -> qdk_simulators::noise_config::NoiseConfig { + let value = value.borrow(); + qdk_simulators::noise_config::NoiseConfig { + i: from_noise_table_ref(value.i.borrow(py)), + x: from_noise_table_ref(value.x.borrow(py)), + y: from_noise_table_ref(value.y.borrow(py)), + z: from_noise_table_ref(value.z.borrow(py)), + h: from_noise_table_ref(value.h.borrow(py)), + s: from_noise_table_ref(value.s.borrow(py)), + s_adj: from_noise_table_ref(value.s_adj.borrow(py)), + t: from_noise_table_ref(value.t.borrow(py)), + t_adj: from_noise_table_ref(value.t_adj.borrow(py)), + sx: from_noise_table_ref(value.sx.borrow(py)), + sx_adj: from_noise_table_ref(value.sx_adj.borrow(py)), + rx: from_noise_table_ref(value.rx.borrow(py)), + ry: from_noise_table_ref(value.ry.borrow(py)), + rz: from_noise_table_ref(value.rz.borrow(py)), + cx: from_noise_table_ref(value.cx.borrow(py)), + cz: from_noise_table_ref(value.cz.borrow(py)), + rxx: from_noise_table_ref(value.rxx.borrow(py)), + ryy: from_noise_table_ref(value.ryy.borrow(py)), + rzz: from_noise_table_ref(value.rzz.borrow(py)), + swap: from_noise_table_ref(value.swap.borrow(py)), + mov: from_noise_table_ref(value.mov.borrow(py)), + mresetz: from_noise_table_ref(value.mresetz.borrow(py)), + idle: qdk_simulators::noise_config::IdleNoiseParams::NOISELESS, // _from_idle_noise_params_ref(value.idle.borrow(py)), + intrinsics: from_intrinsics_table_ref(py, value.intrinsics.borrow(py)), + } +} + +#[derive(Clone, Copy, Debug)] +#[pyclass(module = "qsharp._native")] +pub struct IdleNoiseParams { + #[pyo3(get, set)] + pub s_probability: Probability, +} + +#[pymethods] +impl IdleNoiseParams { + #[new] + fn new() -> Self { + IdleNoiseParams { s_probability: 0.0 } + } +} + +impl From for qdk_simulators::noise_config::IdleNoiseParams { + fn from(value: IdleNoiseParams) -> Self { + qdk_simulators::noise_config::IdleNoiseParams { + #[allow(clippy::cast_possible_truncation)] + s_probability: value.s_probability as f32, + } + } +} + +#[allow(clippy::needless_pass_by_value, reason = "we are passing a reference")] +fn _from_idle_noise_params_ref( + value: PyRef<'_, IdleNoiseParams>, +) -> qdk_simulators::noise_config::IdleNoiseParams { + qdk_simulators::noise_config::IdleNoiseParams { + #[allow(clippy::cast_possible_truncation)] + s_probability: value.s_probability as f32, + } +} + +impl From for IdleNoiseParams { + fn from(value: qdk_simulators::noise_config::IdleNoiseParams) -> Self { + IdleNoiseParams { + s_probability: f64::from(value.s_probability), + } + } +} + +#[derive(Clone, Debug)] +#[pyclass(module = "qsharp._native")] +pub struct NoiseTable { + qubits: u32, + pauli_noise: FxHashMap, + #[pyo3(get, set)] + pub loss: Probability, +} + +impl NoiseTable { + fn validate_probability(p: Probability) -> PyResult<()> { + // If the user enters an entry with a probability of zero, we delete this + // entry from the noise table if it was previously set, or ignore it if + // it is not in the noise table. + if !(0.0..=1.0).contains(&p) { + return Err(PyValueError::new_err(format!( + "Probabilities must be in the range [0, 1], found {p}." + ))); + } + Ok(()) + } + + fn validate_pauli_string(&self, pauli_string: &str) -> PyResult<()> { + // Validate pauli string chars. + const VALID_CHARS: [char; 4] = ['I', 'X', 'Y', 'Z']; + if !pauli_string.chars().all(|c| VALID_CHARS.contains(&c)) { + return Err(PyAttributeError::new_err(format!( + "Pauli string can only contain 'I', 'X', 'Y', 'Z' characters, found {pauli_string}" + ))); + } + // Validate number of qubits. + if pauli_string.len() != self.qubits as usize { + return Err(PyAttributeError::new_err(format!( + "Expected a pauli string with {} characters for this operation, found {}", + self.qubits, pauli_string + ))); + } + Ok(()) + } + + fn generate_pauli_strings(n: u32, strings: Vec) -> Vec { + // Base case. + if n == 0 { + return strings; + } + + // Recursive case. + let mut extended_strings = Vec::with_capacity(strings.len() * 4); + for s in &strings { + extended_strings.push(s.clone() + "X"); + extended_strings.push(s.clone() + "Y"); + extended_strings.push(s.clone() + "Z"); + extended_strings.push(s.clone() + "I"); + } + Self::generate_pauli_strings(n - 1, extended_strings) + } + + fn get_pauli_noise(&self, name: &str) -> PyResult { + let name = name.to_uppercase(); + if let Some(p) = self.pauli_noise.get(&name) { + return Ok(*p); + } + Err(PyAttributeError::new_err(format!( + "'NoiseTable' object has no attribute '{name}'", + ))) + } + + /// Set the probability of noise for an element on the [`NoiseTable`] + /// without validating the pauli string or the probability. + /// + /// Make sure to validate the pauli strings and probabilities before hand. + unsafe fn set_pauli_noise_elt_unchecked(&mut self, pauli: &str, value: Probability) { + if !is_pauli_identity(pauli) { + if self.pauli_noise.contains_key(pauli) && value == 0.0 { + self.pauli_noise.remove(pauli); + } else { + self.pauli_noise.insert(pauli.to_string(), value); + } + } + } + + fn set_pauli_noise_elt(&mut self, pauli: &str, value: Probability) -> PyResult<()> { + self.validate_pauli_string(pauli)?; + Self::validate_probability(value)?; + + // SAFETY: we validated the pauli string and probability above. + unsafe { + self.set_pauli_noise_elt_unchecked(pauli, value); + } + Ok(()) + } + + fn set_pauli_noise_from_zipped_lists( + &mut self, + list: Vec<(PyBackedStr, Probability)>, + ) -> PyResult<()> { + // Do all validation first. + for (pauli, value) in &list { + self.validate_pauli_string(pauli)?; + Self::validate_probability(*value)?; + } + for (pauli, value) in list { + // SAFETY: we validated all the pauli strings and probabilities above. + unsafe { + self.set_pauli_noise_elt_unchecked(pauli.as_ref(), value); + } + } + Ok(()) + } + + fn set_pauli_noise_from_lists( + &mut self, + paulis: Vec, + probs: Vec, + ) -> PyResult<()> { + // Do all validation first. + for pauli in &paulis { + self.validate_pauli_string(pauli)?; + } + for p in &probs { + Self::validate_probability(*p)?; + } + for (pauli, value) in paulis.into_iter().zip(probs.into_iter()) { + // SAFETY: we validated all the pauli strings and probabilities above. + unsafe { + self.set_pauli_noise_elt_unchecked(pauli.as_ref(), value); + } + } + Ok(()) + } +} + +#[allow( + clippy::doc_markdown, + clippy::doc_link_with_quotes, + reason = "these docstrings conform to the python docstring format" +)] +#[pymethods] +impl NoiseTable { + #[new] + fn new(num_qubits: u32) -> Self { + NoiseTable { + qubits: num_qubits, + pauli_noise: FxHashMap::default(), + loss: 0.0, + } + } + + /// Defining __getattr__ allows getting noise like this + /// + /// noise_table.ziz + /// + /// for arbitrary pauli fields. + fn __getattr__(&mut self, name: &str) -> PyResult { + if name == "loss" { + Ok(self.loss) + } else { + self.get_pauli_noise(name) + } + } + + #[allow( + clippy::doc_markdown, + reason = "this docstring conforms to the python docstring format" + )] + /// Defining __setattr__ allows setting noise like this + /// + /// noise_table = NoiseTable(3) + /// noise_table.ziz = 0.005 + /// + /// for arbitrary pauli fields. Setting an element that was + /// previously set overrides that entry with the new value. + fn __setattr__(&mut self, name: &str, value: Probability) -> PyResult<()> { + if name == "loss" { + self.loss = value; + Ok(()) + } else { + self.set_pauli_noise_elt(&name.to_uppercase(), value) + } + } + + /// The correlated pauli noise to use in simulation. Setting an element + /// that was previously set overrides that entry with the new value. + /// + /// Example: + /// noise_table = NoiseTable(2) + /// noise_table.set_pauli_noise("XZ", 1e-10) + /// noise_table.set_pauli_noise(["XI", "XZ"], [1e-10, 3.7e-8]) + /// noise_table.set_pauli_noise([("XI", 1e-10), ("XZ", 1e-8)]) + /// + /// + #[pyo3(signature = (*py_args))] + pub fn set_pauli_noise(&mut self, py_args: &Bound<'_, PyTuple>) -> PyResult<()> { + type Pair = (PyBackedStr, Probability); + + if let Ok((pauli, value)) = py_args.extract::() { + return self.set_pauli_noise_elt(&pauli, value); + } + if let Ok((paulis, probs)) = py_args.extract::<(Vec, Vec)>() { + return self.set_pauli_noise_from_lists(paulis, probs); + } + + if let Ok((list,)) = py_args.extract::<(Vec,)>() { + return self.set_pauli_noise_from_zipped_lists(list); + } + Err(PyTypeError::new_err(format!( + "Expected two arguments of types 'str, float', +or two arguments of types 'list[str], list[float]', +or one argument of type 'list[tuple[str, float]]', but found {py_args:?}" + ))) + } + + /// + /// The depolarizing noise to use in simulation. + /// + pub fn set_depolarizing(&mut self, value: Probability) -> PyResult<()> { + Self::validate_probability(value)?; + + // Generate all pauli strings. + let mut pauli_strings = Self::generate_pauli_strings(self.qubits, vec![String::new()]); + // Remove identity. + pauli_strings.pop(); + + let val = value / Probability::from(4_u32.pow(self.qubits) - 1); + let mut probabilities = Vec::with_capacity(pauli_strings.len()); + for _ in 0..pauli_strings.len() { + probabilities.push(val); + } + + self.pauli_noise = pauli_strings + .into_iter() + .zip(probabilities) + .collect::>(); + + Ok(()) + } + + /// + /// The bit flip noise to use in simulation. + /// + pub fn set_bitflip(&mut self, value: Probability) -> PyResult<()> { + self.set_pauli_noise_elt("X", value) + } + + /// + /// The phase flip noise to use in simulation. + /// + pub fn set_phaseflip(&mut self, value: Probability) -> PyResult<()> { + self.set_pauli_noise_elt("Z", value) + } +} + +impl From for qdk_simulators::noise_config::NoiseTable { + fn from(value: NoiseTable) -> Self { + let mut pauli_strings = Vec::with_capacity(value.pauli_noise.len()); + let mut probabilities = Vec::with_capacity(value.pauli_noise.len()); + for (pauli, probability) in value.pauli_noise { + pauli_strings.push(pauli); + #[allow(clippy::cast_possible_truncation)] + probabilities.push(generic_float_cast(probability)); + } + qdk_simulators::noise_config::NoiseTable { + qubits: value.qubits, + pauli_strings, + probabilities, + #[allow(clippy::cast_possible_truncation)] + loss: generic_float_cast(value.loss), + } + } +} + +#[allow(clippy::needless_pass_by_value, reason = "we are passing a reference")] +fn from_noise_table_ref( + value: PyRef<'_, NoiseTable>, +) -> qdk_simulators::noise_config::NoiseTable { + let mut pauli_strings = Vec::with_capacity(value.pauli_noise.len()); + let mut probabilities: Vec = Vec::with_capacity(value.pauli_noise.len()); + for (pauli, probability) in &value.pauli_noise { + pauli_strings.push(pauli.clone()); + #[allow(clippy::cast_possible_truncation)] + probabilities.push(generic_float_cast(*probability)); + } + qdk_simulators::noise_config::NoiseTable { + qubits: value.qubits, + pauli_strings, + probabilities, + #[allow(clippy::cast_possible_truncation)] + loss: generic_float_cast(value.loss), + } +} + +impl From> for NoiseTable { + fn from(value: qdk_simulators::noise_config::NoiseTable) -> Self { + let pauli_noise = value + .pauli_strings + .into_iter() + .zip( + value + .probabilities + .into_iter() + .map(|p| generic_float_cast(p)), + ) + .collect::>(); + NoiseTable { + qubits: value.qubits, + pauli_noise, + loss: generic_float_cast(value.loss), + } + } +} + +#[derive(Debug, Default)] +#[pyclass(module = "qsharp._native")] +pub struct NoiseIntrinsicsTable { + next_id: u32, + table: FxHashMap)>, +} + +impl Clone for NoiseIntrinsicsTable { + fn clone(&self) -> Self { + Python::attach(|py| Self { + next_id: self.next_id, + table: self + .table + .iter() + .map(|(k, (id, noise))| (k.clone(), (*id, noise.clone_ref(py)))) + .collect(), + }) + } +} + +impl NoiseIntrinsicsTable { + fn contains_key(&self, key: &str) -> bool { + self.table.contains_key(key) + } + + fn insert(&mut self, key: String, value: Py) { + // If the intrinsic was already in the noise table, override it. + if let Ok(id) = self.get_intrinsic_id(&key) { + self.table.insert(key, (id, value)); + return; + } + self.table.insert(key, (self.next_id, value)); + self.next_id += 1; + } + + fn get(&self, py: Python, key: &str) -> Option> { + self.table.get(key).map(|tuple| tuple.1.clone_ref(py)) + } +} + +#[pymethods] +impl NoiseIntrinsicsTable { + #[new] + fn new() -> Self { + Self::default() + } + + fn __contains__(&self, py: Python, key: &str) -> bool { + self.get(py, key).is_some() + } + + fn __getitem__(&self, py: Python, key: &str) -> PyResult> { + if let Some(value) = self.get(py, key) { + Ok(value.clone_ref(py)) + } else { + Err(PyKeyError::new_err(key.to_string())) + } + } + + fn __setitem__(&mut self, key: &str, value: Py) { + self.insert(key.to_string(), value); + } + + fn get_intrinsic_id(&self, key: &str) -> PyResult { + if let Some((id, _)) = self.table.get(key) { + Ok(*id) + } else { + Err(PyKeyError::new_err(key.to_string())) + } + } +} + +#[allow(clippy::needless_pass_by_value, reason = "we are passing a reference")] +fn from_intrinsics_table_ref( + py: Python, + value: PyRef<'_, NoiseIntrinsicsTable>, +) -> FxHashMap> { + value + .table + .values() + .map(|(k, v)| (*k, from_noise_table_ref(v.borrow(py)))) + .collect() +} diff --git a/source/pip/src/qir_simulation/cpu_simulators.rs b/source/pip/src/qir_simulation/cpu_simulators.rs new file mode 100644 index 0000000000..5dbb0cbfe8 --- /dev/null +++ b/source/pip/src/qir_simulation/cpu_simulators.rs @@ -0,0 +1,265 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use crate::qir_simulation::{NoiseConfig, QirInstruction, QirInstructionId, unbind_noise_config}; +use pyo3::{IntoPyObjectExt, exceptions::PyValueError, prelude::*, types::PyList}; +use pyo3::{PyResult, pyfunction}; +use qdk_simulators::{ + MeasurementResult, Simulator, + cpu_full_state_simulator::{NoiselessSimulator, NoisySimulator}, + noise_config::{self, CumulativeNoiseConfig}, + stabilizer_simulator::StabilizerSimulator, +}; +use rand::{Rng, SeedableRng, rngs::StdRng}; +use rayon::iter::{IntoParallelRefIterator, ParallelIterator}; +use std::{fmt::Write, sync::Arc}; + +#[pyfunction] +pub fn run_clifford<'py>( + py: Python<'py>, + input: &Bound<'py, PyList>, + num_qubits: u32, + num_results: u32, + shots: u32, + noise_config: Option<&Bound<'py, NoiseConfig>>, + seed: Option, +) -> PyResult> { + let make_simulator = |num_qubits, num_results, seed, noise| { + StabilizerSimulator::new(num_qubits as usize, num_results as usize, seed, noise) + }; + py_run( + py, + input, + num_qubits, + num_results, + shots, + noise_config, + seed, + make_simulator, + ) +} + +#[pyfunction] +pub fn run_cpu_full_state<'py>( + py: Python<'py>, + input: &Bound<'py, PyList>, + num_qubits: u32, + num_results: u32, + shots: u32, + noise_config: Option<&Bound<'py, NoiseConfig>>, + seed: Option, +) -> PyResult> { + use qdk_simulators::cpu_full_state_simulator::noise::Fault; + if noise_config.is_some() { + let make_simulator = |num_qubits, num_results, seed, noise| { + NoisySimulator::new(num_qubits as usize, num_results as usize, seed, noise) + }; + py_run( + py, + input, + num_qubits, + num_results, + shots, + noise_config, + seed, + make_simulator, + ) + } else { + let make_simulator = + |num_qubits, num_results, seed, _noise: Arc>| { + NoiselessSimulator::new(num_qubits as usize, num_results as usize, seed, ()) + }; + py_run( + py, + input, + num_qubits, + num_results, + shots, + noise_config, + seed, + make_simulator, + ) + } +} + +#[allow(clippy::too_many_arguments)] +fn py_run<'py, SimulatorBuilder, Noise, S>( + py: Python<'py>, + input: &Bound<'py, PyList>, + num_qubits: u32, + num_results: u32, + shots: u32, + noise_config: Option<&Bound<'py, NoiseConfig>>, + seed: Option, + make_simulator: SimulatorBuilder, +) -> PyResult> +where + SimulatorBuilder: Fn(u32, u32, u32, Arc) -> S, + SimulatorBuilder: Send + Sync, + Noise: From> + Send + Sync, + S: Simulator, +{ + // Convert Python list to Vec. + let mut instructions: Vec = Vec::with_capacity(input.len()); + for item in input.iter() { + let item: QirInstruction = item + .extract() + .map_err(|e| PyValueError::new_err(format!("expected QirInstruction: {e}")))?; + instructions.push(item); + } + + // Convert NoiseConfig to a rust NoiseConfig. + let noise: qdk_simulators::noise_config::NoiseConfig = + if let Some(noise_config) = noise_config { + unbind_noise_config(py, noise_config) + } else { + qdk_simulators::noise_config::NoiseConfig::NOISELESS + }; + + // Run the simulation. + let output = run( + &instructions, + num_qubits, + num_results, + shots, + seed, + noise, + make_simulator, + ); + + // Convert results back to Python. + let mut array = Vec::with_capacity(shots as usize); + for val in output { + array.push( + val.into_py_any(py).map_err(|e| { + PyValueError::new_err(format!("failed to create Python string: {e}")) + })?, + ); + } + + PyList::new(py, array) + .map_err(|e| PyValueError::new_err(format!("failed to create Python list: {e}")))? + .into_py_any(py) +} + +fn run( + instructions: &[QirInstruction], + num_qubits: u32, + num_results: u32, + shots: u32, + seed: Option, + mut noise: noise_config::NoiseConfig, + make_simulator: SimulatorBuilder, +) -> Vec +where + SimulatorBuilder: Fn(u32, u32, u32, Arc) -> S, + SimulatorBuilder: Send + Sync, + Noise: From> + Send + Sync, + S: Simulator, +{ + if !noise.rz.is_noiseless() { + if noise.s.is_noiseless() { + noise.s = noise.rz.clone(); + } + if noise.z.is_noiseless() { + noise.z = noise.rz.clone(); + } + if noise.s_adj.is_noiseless() { + noise.s_adj = noise.rz.clone(); + } + } + + let noise: Noise = noise.into(); + let noise = Arc::new(noise); + + // Create a random number generator to generate the seed for each individual shot. + let mut rng = if let Some(seed) = seed { + StdRng::seed_from_u64(seed.into()) + } else { + StdRng::from_entropy() + }; + + // run the shots + let output = (0..shots) + .map(|_| rng.r#gen()) + .collect::>() + .par_iter() + .map(|shot_seed| { + let simulator = make_simulator(num_qubits, num_results, *shot_seed, noise.clone()); + run_shot(instructions, simulator) + }) + .collect::>(); + + // Convert results to a list of strings. + let mut values = Vec::with_capacity(shots as usize); + for shot_result in output { + let mut buffer = String::with_capacity(shot_result.len()); + for measurement in shot_result { + match measurement { + MeasurementResult::Zero => write!(&mut buffer, "0").expect("write should succeed"), + MeasurementResult::One => write!(&mut buffer, "1").expect("write should succeed"), + MeasurementResult::Loss => write!(&mut buffer, "L").expect("write should succeed"), + } + } + values.push(buffer); + } + values +} + +fn run_shot(instructions: &[QirInstruction], mut sim: impl Simulator) -> Vec { + for qir_inst in instructions { + match qir_inst { + QirInstruction::OneQubitGate(id, qubit) => match id { + QirInstructionId::H => sim.h(*qubit as usize), + QirInstructionId::X => sim.x(*qubit as usize), + QirInstructionId::Y => sim.y(*qubit as usize), + QirInstructionId::Z => sim.z(*qubit as usize), + QirInstructionId::S => sim.s(*qubit as usize), + QirInstructionId::SAdj => sim.s_adj(*qubit as usize), + QirInstructionId::SX => sim.sx(*qubit as usize), + QirInstructionId::SXAdj => sim.sx_adj(*qubit as usize), + QirInstructionId::T => sim.t(*qubit as usize), + QirInstructionId::TAdj => sim.t_adj(*qubit as usize), + QirInstructionId::Move => sim.mov(*qubit as usize), + QirInstructionId::RESET => sim.resetz(*qubit as usize), + _ => panic!("unsupported one-qubit gate: {id:?}"), + }, + QirInstruction::TwoQubitGate(id, q1, q2) => match id { + QirInstructionId::CX => sim.cx(*q1 as usize, *q2 as usize), + QirInstructionId::CZ => sim.cz(*q1 as usize, *q2 as usize), + QirInstructionId::MZ | QirInstructionId::M => sim.mz(*q1 as usize, *q2 as usize), + QirInstructionId::MResetZ => sim.mresetz(*q1 as usize, *q2 as usize), + QirInstructionId::SWAP => sim.swap(*q1 as usize, *q2 as usize), + _ => panic!("unsupported two-qubits gate: {id:?}"), + }, + QirInstruction::OneQubitRotationGate(id, angle, qubit) => match id { + QirInstructionId::RX => sim.rx(*angle, *qubit as usize), + QirInstructionId::RY => sim.ry(*angle, *qubit as usize), + QirInstructionId::RZ => sim.rz(*angle, *qubit as usize), + _ => { + panic!("unsupported one-qubit rotation gate: {id:?}"); + } + }, + QirInstruction::TwoQubitRotationGate(id, angle, qubit1, qubit2) => match id { + QirInstructionId::RXX => sim.rxx(*angle, *qubit1 as usize, *qubit2 as usize), + QirInstructionId::RYY => sim.ryy(*angle, *qubit1 as usize, *qubit2 as usize), + QirInstructionId::RZZ => sim.rzz(*angle, *qubit1 as usize, *qubit2 as usize), + _ => panic!("unsupported two-qubit rotation gate: {id:?}"), + }, + QirInstruction::CorrelatedNoise(_id, intrinsic_id, qubits) => { + sim.correlated_noise_intrinsic( + *intrinsic_id, + &qubits.iter().map(|q| *q as usize).collect::>(), + ); + } + QirInstruction::OutputRecording(_id, _s, _tag) => { + // Ignore for now. + } + QirInstruction::ThreeQubitGate(..) => { + panic!("unsupported instruction: {qir_inst:?}") + } + } + } + + sim.take_measurements() +} diff --git a/source/pip/src/qir_simulation/gpu_full_state.rs b/source/pip/src/qir_simulation/gpu_full_state.rs new file mode 100644 index 0000000000..57f2bcaac2 --- /dev/null +++ b/source/pip/src/qir_simulation/gpu_full_state.rs @@ -0,0 +1,309 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use crate::qir_simulation::{NoiseConfig, QirInstruction, QirInstructionId, unbind_noise_config}; +use pyo3::{ + IntoPyObjectExt, PyResult, + exceptions::{PyOSError, PyRuntimeError, PyValueError}, + prelude::*, + pyclass, pymethods, + types::{PyDict, PyList}, +}; +use qdk_simulators::gpu_context; +use qdk_simulators::shader_types::Op; + +use std::sync::Mutex; + +/// Checks if a compatible GPU adapter is available on the system. +/// +/// This function attempts to request a GPU adapter to determine if GPU-accelerated +/// quantum simulation is supported. It's useful for capability detection before +/// attempting to run GPU-based simulations. +/// +/// # Errors +/// +/// Raises `OSError` if: +/// - No compatible GPU is found +/// - GPU drivers are missing or not functioning properly +#[pyfunction] +pub fn try_create_gpu_adapter() -> PyResult { + let name = qdk_simulators::try_create_gpu_adapter().map_err(PyOSError::new_err)?; + Ok(name) +} + +#[pyfunction] +pub fn run_parallel_shots<'py>( + py: Python<'py>, + input: &Bound<'py, PyList>, + shots: i32, + qubit_count: i32, + result_count: i32, + noise_config: Option<&Bound<'py, NoiseConfig>>, + seed: Option, +) -> PyResult> { + // First convert the Python objects to Rust types + let mut ops: Vec = Vec::with_capacity(input.len()); + for intr in input { + // Error if the instruction can't be converted + let item: QirInstruction = intr + .extract() + .map_err(|e| PyValueError::new_err(format!("expected QirInstruction: {e}")))?; + // However some ops can't be mapped (e.g. OutputRecording), so skip those + if let Some(op) = map_instruction(&item) { + ops.push(op); + } + } + + let noise = noise_config.map(|noise_config| unbind_noise_config(py, noise_config)); + + let rng_seed = seed.unwrap_or(0xfeed_face); + + let sim_results = + qdk_simulators::run_shots_sync(qubit_count, result_count, &ops, &noise, shots, rng_seed, 0) + .map_err(PyRuntimeError::new_err)?; + + // Collect and format the results into a Python list of strings + let result_count: usize = result_count + .try_into() + .map_err(|e| PyValueError::new_err(format!("invalid result count {result_count}: {e}")))?; + + // Turn each shot's results into a string, with '0' for 0, '1' for 1, and 'L' for lost qubits + // The results are a flat list of u32, with each shot's results in sequence + one error code, + // so we need to chunk them up accordingly + let str_results = sim_results + .shot_results + .iter() + .map(|shot_results| { + let mut bitstring = String::with_capacity(result_count); + for res in shot_results { + let char = match res { + 0 => '0', + 1 => '1', + _ => 'L', // lost qubit + }; + bitstring.push(char); + } + bitstring + }) + .collect::>(); + + PyList::new(py, str_results) + .map_err(|e| PyValueError::new_err(format!("failed to create Python list: {e}")))? + .into_py_any(py) +} + +type NativeGpuContext = gpu_context::GpuContext; +#[derive(Debug)] +#[pyclass(module = "qsharp._native")] +pub struct GpuContext { + native_context: Mutex, + last_set_result_count: usize, // Needed to format results +} + +#[pymethods] +impl GpuContext { + #[new] + fn new() -> PyResult { + Ok(GpuContext { + native_context: Mutex::new(NativeGpuContext::default()), + last_set_result_count: 0, + }) + } + + fn load_noise_tables(&mut self, dir_path: &str) -> PyResult> { + let mut gpu_context = self + .native_context + .lock() + .map_err(|_| PyRuntimeError::new_err("Unable to obtain lock on the GPU context"))?; + + gpu_context.clear_correlated_noise_tables(); + for entry in std::fs::read_dir(dir_path)? { + let entry = entry?; + let path = entry.path(); + let is_file = path.is_file(); + // let ends_with_csv = path.extension().map_or(false, |ext| ext == "csv"); + let ends_with_csv = path.extension() == Some("csv".as_ref()); + + if is_file && ends_with_csv { + let contents = std::fs::read_to_string(&path)?; + let filename = path + .file_stem() + .expect("file should have a name") + .to_str() + .expect("file name should be a valid unicode string"); + gpu_context.add_correlated_noise_table(filename, &contents); + } + } + Ok(gpu_context.get_correlated_noise_tables()) + } + + fn get_noise_table_ids(&self) -> PyResult> { + self.native_context + .lock() + .map_err(|_| PyRuntimeError::new_err("Unable to obtain lock on the GPU context")) + .map(|context| Ok(context.get_correlated_noise_tables()))? + } + + fn set_program( + &mut self, + input: &Bound<'_, PyList>, + qubit_count: i32, + result_count: i32, + ) -> PyResult<()> { + let mut ops: Vec = Vec::with_capacity(input.len()); + for intr in input { + // Error if the instruction can't be converted + let item: QirInstruction = intr + .extract() + .map_err(|e| PyValueError::new_err(format!("expected QirInstruction: {e}")))?; + // However some ops can't be mapped (e.g. OutputRecording), so skip those + if let Some(op) = map_instruction(&item) { + ops.push(op); + } + } + self.native_context + .lock() + .map_err(|_| PyRuntimeError::new_err("Unable to obtain lock on the GPU context"))? + .set_program(&ops, qubit_count, result_count); + + // Save the result count for formatting later + self.last_set_result_count = result_count.try_into().map_err(|e| { + PyValueError::new_err(format!("invalid result count {result_count}: {e}")) + })?; + Ok(()) + } + + fn set_noise<'py>( + &mut self, + py: Python<'py>, + noise_config: &Bound<'py, NoiseConfig>, + ) -> PyResult<()> { + let noise = unbind_noise_config(py, noise_config); + self.native_context + .lock() + .map_err(|_| PyRuntimeError::new_err("Unable to obtain lock on the GPU context"))? + .set_noise_config(noise); + + Ok(()) + } + + fn run_shots(&self, py: Python<'_>, shot_count: i32, seed: u32) -> PyResult> { + let mut gpu_context = self + .native_context + .lock() + .map_err(|_| PyRuntimeError::new_err("Unable to obtain lock on the GPU context"))?; + + let results = gpu_context + .run_shots_sync(shot_count, seed, 0) + .map_err(|_| PyRuntimeError::new_err("Unable to obtain lock on the GPU context"))?; + + let str_results = results + .shot_results + .iter() + .map(|shot_results| { + let mut bitstring = String::with_capacity(self.last_set_result_count); + for res in shot_results { + let char = match res { + 0 => '0', + 1 => '1', + _ => 'L', // lost qubit + }; + bitstring.push(char); + } + bitstring + }) + .collect::>(); + + let dict = PyDict::new(py); + + dict.set_item("shot_results", PyList::new(py, str_results)?) + .map_err(|e| PyValueError::new_err(format!("failed to set results in dict: {e}")))?; + dict.set_item( + "shot_result_codes", + PyList::new(py, results.shot_result_codes)?, + ) + .map_err(|e| PyValueError::new_err(format!("failed to set result codes in dict: {e}")))?; + + if let Some(diagnostics) = results.diagnostics { + // DiagnosticsData doesn't implement Serialize, so use Debug formatting + dict.set_item("diagnostics", format!("{diagnostics:?}")) + .map_err(|e| { + PyValueError::new_err(format!("failed to set diagnostics in dict: {e}")) + })?; + } + dict.into_py_any(py) + } +} + +fn map_instruction(qir_inst: &QirInstruction) -> Option { + let op = match qir_inst { + QirInstruction::OneQubitGate(id, qubit) => match id { + QirInstructionId::I => Op::new_id_gate(*qubit), + QirInstructionId::Move => Op::new_move_gate(*qubit), + QirInstructionId::H => Op::new_h_gate(*qubit), + QirInstructionId::X => Op::new_x_gate(*qubit), + QirInstructionId::Y => Op::new_y_gate(*qubit), + QirInstructionId::Z => Op::new_z_gate(*qubit), + QirInstructionId::S => Op::new_s_gate(*qubit), + QirInstructionId::SAdj => Op::new_s_adj_gate(*qubit), + QirInstructionId::SX => Op::new_sx_gate(*qubit), + QirInstructionId::SXAdj => Op::new_sx_adj_gate(*qubit), + QirInstructionId::T => Op::new_t_gate(*qubit), + QirInstructionId::TAdj => Op::new_t_adj_gate(*qubit), + _ => { + panic!("unsupported one-qubit gate: {id:?} on qubit {qubit}"); + } + }, + QirInstruction::TwoQubitGate(id, control, target) => match id { + QirInstructionId::M | QirInstructionId::MZ | QirInstructionId::MResetZ => { + // TODO: These should be distinct in the simulator + Op::new_mresetz_gate(*control, *target) + } + QirInstructionId::CX | QirInstructionId::CNOT => Op::new_cx_gate(*control, *target), + QirInstructionId::CY => Op::new_cy_gate(*control, *target), + QirInstructionId::CZ => Op::new_cz_gate(*control, *target), + QirInstructionId::SWAP => Op::new_swap_gate(*control, *target), + _ => { + panic!("unsupported two-qubit gate: {id:?} on qubits {control}, {target}"); + } + }, + QirInstruction::OneQubitRotationGate(id, angle, qubit) => { + #[allow(clippy::cast_possible_truncation)] + let angle = *angle as f32; + match id { + QirInstructionId::RX => Op::new_rx_gate(angle, *qubit), + QirInstructionId::RY => Op::new_ry_gate(angle, *qubit), + QirInstructionId::RZ => Op::new_rz_gate(angle, *qubit), + _ => { + panic!("unsupported one-qubit rotation gate: {id:?} on qubit {qubit}"); + } + } + } + QirInstruction::TwoQubitRotationGate(id, angle, qubit1, qubit2) => { + #[allow(clippy::cast_possible_truncation)] + let angle = *angle as f32; + match id { + QirInstructionId::RXX => Op::new_rxx_gate(angle, *qubit1, *qubit2), + QirInstructionId::RYY => Op::new_ryy_gate(angle, *qubit1, *qubit2), + QirInstructionId::RZZ => Op::new_rzz_gate(angle, *qubit1, *qubit2), + _ => { + panic!( + "unsupported two-qubit rotation gate: {id:?} on qubits {qubit1}, {qubit2}" + ); + } + } + } + QirInstruction::ThreeQubitGate(QirInstructionId::CCX, c1, c2, target) => { + unimplemented!("{c1}, {c2}, {target}") //Op::new_ccx_gate(*c1, *c2, *target), + } + QirInstruction::OutputRecording(_, _, _) => { + // Ignore for now + return None; + } + QirInstruction::ThreeQubitGate(..) => panic!("unsupported instruction: {qir_inst:?}"), + QirInstruction::CorrelatedNoise(_, table_id, qubit_args) => { + Op::new_correlated_noise_gate(*table_id, qubit_args) + } + }; + Some(op) +} diff --git a/source/pip/test_requirements.txt b/source/pip/test_requirements.txt index e079f8a603..b12a203d61 100644 --- a/source/pip/test_requirements.txt +++ b/source/pip/test_requirements.txt @@ -1 +1,2 @@ pytest +pyqir<0.12 diff --git a/source/pip/tests-integration/.gitignore b/source/pip/tests-integration/.gitignore index c241e886d1..7833ef06f0 100644 --- a/source/pip/tests-integration/.gitignore +++ b/source/pip/tests-integration/.gitignore @@ -5,6 +5,9 @@ *.py[cod] *$py.class +# Python expecttest backup files +*.py.bak + # C extensions *.so @@ -39,4 +42,4 @@ pip-log.txt pip-delete-this-directory.txt # Jupyter notebook checkpoints -.ipynb_checkpoints \ No newline at end of file +.ipynb_checkpoints diff --git a/source/pip/tests-integration/devices/__init__.py b/source/pip/tests-integration/devices/__init__.py new file mode 100644 index 0000000000..8770d7129e --- /dev/null +++ b/source/pip/tests-integration/devices/__init__.py @@ -0,0 +1,4 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +"""device compilation integration tests""" diff --git a/source/pip/tests-integration/devices/test_atom_decomp.py b/source/pip/tests-integration/devices/test_atom_decomp.py new file mode 100644 index 0000000000..8fc817c82a --- /dev/null +++ b/source/pip/tests-integration/devices/test_atom_decomp.py @@ -0,0 +1,1719 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import pytest +from expecttest import assert_expected_inline + +import qsharp +from qsharp._device._atom._decomp import ( + DecomposeMultiQubitToCZ, + DecomposeSingleRotationToRz, + DecomposeSingleQubitToRzSX, + DecomposeRzAnglesToCliffordGates, + ReplaceResetWithMResetZ, +) + +try: + import pyqir + + PYQIR_AVAILABLE = True +except ImportError: + PYQIR_AVAILABLE = False + +SKIP_REASON = "PyQIR is not available" + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_ccx_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use (q1, q2, q3) = (Qubit(), Qubit(), Qubit()); + CCNOT(q1, q2, q3); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeMultiQubitToCZ().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* null) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__t__body(%Qubit* null) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* null) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__ccx__body(%Qubit*, %Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__t__body(%Qubit*) + +declare void @__quantum__qis__t__adj(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="3" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_cx_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use (q1, q2) = (Qubit(), Qubit()); + CNOT(q1, q2); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeMultiQubitToCZ().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__cx__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__t__body(%Qubit*) + +declare void @__quantum__qis__t__adj(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_cy_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use (q1, q2) = (Qubit(), Qubit()); + CY(q1, q2); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeMultiQubitToCZ().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__s__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__s__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__cy__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__t__body(%Qubit*) + +declare void @__quantum__qis__t__adj(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_rxx_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use (q1, q2) = (Qubit(), Qubit()); + Rxx(1.2345, q1, q2); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeMultiQubitToCZ().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__rz__body(double 1.234500e+00, %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rxx__body(double, %Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__t__body(%Qubit*) + +declare void @__quantum__qis__t__adj(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_ryy_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use (q1, q2) = (Qubit(), Qubit()); + Ryy(1.2345, q1, q2); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeMultiQubitToCZ().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__s__adj(%Qubit* null) + call void @__quantum__qis__s__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__rz__body(double 1.234500e+00, %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__s__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__s__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__ryy__body(double, %Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__t__body(%Qubit*) + +declare void @__quantum__qis__t__adj(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_rzz_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use (q1, q2) = (Qubit(), Qubit()); + Rzz(1.2345, q1, q2); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeMultiQubitToCZ().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__rz__body(double 1.234500e+00, %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rzz__body(double, %Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__t__body(%Qubit*) + +declare void @__quantum__qis__t__adj(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_swap_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use (q1, q2) = (Qubit(), Qubit()); + SWAP(q1, q2); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeMultiQubitToCZ().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__swap__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__t__body(%Qubit*) + +declare void @__quantum__qis__t__adj(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_rx_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Rx(1.2345, q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeSingleRotationToRz().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__rz__body(double 1.234500e+00, %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rx__body(double, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_ry_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Ry(1.2345, q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeSingleRotationToRz().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__s__adj(%Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__rz__body(double 1.234500e+00, %Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__s__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__ry__body(double, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_h_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + H(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeSingleQubitToRzSX().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__rz__body(double 0x3FF921FB54442D18, %Qubit* null) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__rz__body(double 0x3FF921FB54442D18, %Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_s_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + S(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeSingleQubitToRzSX().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__rz__body(double 0x3FF921FB54442D18, %Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_sadj_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Adjoint S(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeSingleQubitToRzSX().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__rz__body(double 0xBFF921FB54442D18, %Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_t_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + T(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeSingleQubitToRzSX().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__rz__body(double 0x3FE921FB54442D18, %Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__t__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_tadj_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Adjoint T(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeSingleQubitToRzSX().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__rz__body(double 0xBFE921FB54442D18, %Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__t__adj(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_x_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + X(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeSingleQubitToRzSX().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_y_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Y(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeSingleQubitToRzSX().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__rz__body(double 0x400921FB54442D18, %Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__y__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_z_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Z(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeSingleQubitToRzSX().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__rz__body(double 0x400921FB54442D18, %Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__z__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_rz_3pi_over_2_clifford_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Rz(3.0 * Std.Math.PI() / 2.0, q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeRzAnglesToCliffordGates().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__s__adj(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__z__body(%Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_rz_neg_pi_over_2_clifford_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Rz(-1.0 * Std.Math.PI() / 2.0, q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeRzAnglesToCliffordGates().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__s__adj(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__z__body(%Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_rz_pi_clifford_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Rz(Std.Math.PI(), q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeRzAnglesToCliffordGates().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__z__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__z__body(%Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_rz_neg_pi_clifford_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Rz(-1.0 * Std.Math.PI(), q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeRzAnglesToCliffordGates().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__z__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__z__body(%Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_rz_pi_over_2_clifford_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Rz(Std.Math.PI() / 2.0, q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeRzAnglesToCliffordGates().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__s__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__z__body(%Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_rz_neg_3pi_over_2_clifford_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Rz(-3.0 * Std.Math.PI() / 2.0, q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeRzAnglesToCliffordGates().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__s__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__z__body(%Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_rz_2pi_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Rz(2.0 * Std.Math.PI(), q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeRzAnglesToCliffordGates().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__z__body(%Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_rz_neg_2pi_decomposition() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Rz(-2.0 * Std.Math.PI(), q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + DecomposeRzAnglesToCliffordGates().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__z__body(%Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_rz_non_clifford_decomposition_fails() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Rz(0.1, q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + + with pytest.raises(ValueError) as ex: + DecomposeRzAnglesToCliffordGates().run(module) + + assert_expected_inline( + str(ex), + """""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_reset_replaced_by_mresetz() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Reset(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + ReplaceResetWithMResetZ().run(module) + transformed_qir = str(module) + + assert_expected_inline( + transformed_qir, + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__reset__body(%Qubit*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) diff --git a/source/pip/tests-integration/devices/test_atom_e2e.py b/source/pip/tests-integration/devices/test_atom_e2e.py new file mode 100644 index 0000000000..0efbe80753 --- /dev/null +++ b/source/pip/tests-integration/devices/test_atom_e2e.py @@ -0,0 +1,160 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import pytest +from expecttest import assert_expected_inline + +import qsharp +from qsharp._device._atom import NeutralAtomDevice, NoiseConfig + +try: + import pyqir + + PYQIR_AVAILABLE = True +except ImportError: + PYQIR_AVAILABLE = False + +SKIP_REASON = "PyQIR is not available" + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_device_compile() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Base) + qir = qsharp.compile( + """ + { + use qs = Qubit[2]; + H(qs[0]); + CNOT(qs[0], qs[1]); + MResetEachZ(qs) + } + """ + ) + + device = NeutralAtomDevice() + compiled = device.compile(qir) + compiled_qir = str(compiled) + + assert_expected_inline( + compiled_qir, + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer +@0 = internal constant [6 x i8] c"0_a0r\\00" +@1 = internal constant [6 x i8] c"1_a1r\\00" + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__qis__rz__body(double 0x3FF921FB54442D18, %Qubit* null) + call void @__quantum__qis__rz__body(double 0x3FF921FB54442D18, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rz__body(double 0x3FF921FB54442D18, %Qubit* null) + call void @__quantum__qis__rz__body(double 0x3FF921FB54442D18, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rz__body(double 0x3FF921FB54442D18, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rz__body(double 0x3FF921FB54442D18, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*)) + call void @__quantum__rt__array_record_output(i64 2, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* null, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @0, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 1 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__array_record_output(i64, i8*) + +declare void @__quantum__rt__result_record_output(%Result*, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="base_profile" "required_num_qubits"="2" "required_num_results"="2" } + +!llvm.module.flags = !{!0, !1, !2, !3} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_device_simulate_with_cpu() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Base) + qir = qsharp.compile( + """ + { + use qs = Qubit[2]; + H(qs[0]); + CNOT(qs[0], qs[1]); + MResetEachZ(qs) + } + """ + ) + + device = NeutralAtomDevice() + compiled = device.compile(qir) + result = device.simulate(compiled, type="cpu") + + assert result == [[qsharp.Result.Zero, qsharp.Result.Zero]] or result == [ + [qsharp.Result.One, qsharp.Result.One] + ] + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_device_simlate_with_clifford() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Base) + qir = qsharp.compile( + """ + { + use qs = Qubit[2]; + H(qs[0]); + CNOT(qs[0], qs[1]); + MResetEachZ(qs) + } + """ + ) + + device = NeutralAtomDevice() + compiled = device.compile(qir) + result = device.simulate(compiled, type="clifford") + + assert result == [[qsharp.Result.Zero, qsharp.Result.Zero]] or result == [ + [qsharp.Result.One, qsharp.Result.One] + ] + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_device_simulate_with_loss() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Base) + qir = qsharp.compile( + """ + { + use qs = Qubit[2]; + H(qs[0]); + CNOT(qs[0], qs[1]); + MResetEachZ(qs) + } + """ + ) + + device = NeutralAtomDevice() + noise = NoiseConfig() + noise.mov.loss = 1.0 # Ensure loss occurs + result = device.simulate(qir, noise=noise, type="cpu") + result2 = device.simulate(qir, noise=noise, type="clifford") + + assert result == [[qsharp.Result.Loss, qsharp.Result.Loss]] + assert result2 == [[qsharp.Result.Loss, qsharp.Result.Loss]] diff --git a/source/pip/tests-integration/devices/test_atom_optimize.py b/source/pip/tests-integration/devices/test_atom_optimize.py new file mode 100644 index 0000000000..da2953ec06 --- /dev/null +++ b/source/pip/tests-integration/devices/test_atom_optimize.py @@ -0,0 +1,2080 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import pytest +from expecttest import assert_expected_inline + +import qsharp +from qsharp._device._atom._optimize import ( + PruneUnusedFunctions, + OptimizeSingleQubitGates, +) + +try: + import pyqir + + PYQIR_AVAILABLE = True +except ImportError: + PYQIR_AVAILABLE = False + +SKIP_REASON = "PyQIR is not available" + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_prune_init_handled_by_unused_functions_pass() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + X(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + PruneUnusedFunctions().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_removes_h_h_gates() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + H(q); + H(q); + X(q); + H(q); + H(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_removes_s_sadj_gates() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + S(q); + Adjoint S(q); + X(q); + Adjoint S(q); + S(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_removes_t_tadj_gates() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + T(q); + Adjoint T(q); + X(q); + Adjoint T(q); + T(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__t__body(%Qubit*) + +declare void @__quantum__qis__t__adj(%Qubit*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_combines_h_s_h_gates() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + H(q); + S(q); + H(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_removes_x_x_gates() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + X(q); + X(q); + Z(q); + X(q); + X(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__z__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__z__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_removes_y_y_gates() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Y(q); + Y(q); + Z(q); + Y(q); + Y(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__z__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__y__body(%Qubit*) + +declare void @__quantum__qis__z__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_removes_z_z_gates() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + Z(q); + Z(q); + X(q); + Z(q); + Z(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__z__body(%Qubit*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_combines_rx_rotation_angles() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + import Std.Math.PI; + use q = Qubit(); + Rx(PI() / 2.0, q); + Rx(PI() / 2.0, q); + X(q); + Rx(PI() / -2.0, q); + Rx(PI() / 2.0, q); + Y(q); + Rx(PI(), q); + Rx(PI(), q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__rx__body(double 0x400921FB54442D18, %Qubit* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__y__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rx__body(double, %Qubit*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__y__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_combines_ry_rotation_angles() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + import Std.Math.PI; + use q = Qubit(); + Ry(PI() / 2.0, q); + Ry(PI() / 2.0, q); + X(q); + Ry(PI() / -2.0, q); + Ry(PI() / 2.0, q); + Y(q); + Ry(PI(), q); + Ry(PI(), q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__ry__body(double 0x400921FB54442D18, %Qubit* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__y__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__ry__body(double, %Qubit*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__y__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_combines_rz_rotation_angles() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + import Std.Math.PI; + use q = Qubit(); + Rz(PI() / 2.0, q); + Rz(PI() / 2.0, q); + X(q); + Rz(PI() / -2.0, q); + Rz(PI() / 2.0, q); + Y(q); + Rz(PI(), q); + Rz(PI(), q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__rz__body(double 0x400921FB54442D18, %Qubit* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__y__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__y__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_removes_adjoint_gates_after_removing_other_adjoint_gates() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + S(q); + X(q); + H(q); + + H(q); + X(q); + Adjoint S(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_leaves_gates_with_intervening_gates() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + H(q); + S(q); + Adjoint S(q); + X(q); + H(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__h__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__s__body(%Qubit*) + +declare void @__quantum__qis__s__adj(%Qubit*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_treats_rxx_as_barrier() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q1 = Qubit(); + use q2 = Qubit(); + X(q1); + Rxx(0.5, q1, q2); + X(q1); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__rxx__body(double 5.000000e-01, %Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__rxx__body(double, %Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_treats_ryy_as_barrier() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q1 = Qubit(); + use q2 = Qubit(); + X(q1); + Ryy(0.5, q1, q2); + X(q1); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__ryy__body(double 5.000000e-01, %Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__ryy__body(double, %Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_treats_rzz_as_barrier() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q1 = Qubit(); + use q2 = Qubit(); + X(q1); + Rzz(0.5, q1, q2); + X(q1); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__rzz__body(double 5.000000e-01, %Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__rzz__body(double, %Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_treats_ccx_as_barrier() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q1 = Qubit(); + use q2 = Qubit(); + use q3 = Qubit(); + X(q1); + CCNOT(q1, q2, q3); + X(q1); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__ccx__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__ccx__body(%Qubit*, %Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="3" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_treats_cx_as_barrier() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q1 = Qubit(); + use q2 = Qubit(); + X(q1); + CX(q1, q2); + X(q1); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__cx__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__cx__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_treats_cy_as_barrier() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q1 = Qubit(); + use q2 = Qubit(); + X(q1); + CY(q1, q2); + X(q1); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__cy__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__cy__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_treats_cz_as_barrier() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q1 = Qubit(); + use q2 = Qubit(); + X(q1); + CZ(q1, q2); + X(q1); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_treats_swap_as_barrier() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q1 = Qubit(); + use q2 = Qubit(); + X(q1); + SWAP(q1, q2); + X(q1); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__swap__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__swap__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_treats_m_as_barrier() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + X(q); + M(q); + X(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__m__body(%Qubit* null, %Result* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__m__body(%Qubit*, %Result*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="1" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_treats_mresetz_as_barrier() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + X(q); + MResetZ(q); + X(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="1" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_treats_reset_as_barrier() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + X(q); + Reset(q); + X(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__reset__body(%Qubit* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__reset__body(%Qubit*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_works_within_blocks_not_across_blocks() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + X(q); + if MResetZ(q) == One { + H(q); + H(q); + X(q); + } else { + X(q); + Z(q); + Z(q); + Y(q); + X(q); + } + X(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null) + %var_0 = call i1 @__quantum__rt__read_result(%Result* null) + br i1 %var_0, label %block_1, label %block_2 + +block_1: ; preds = %block_0 + call void @__quantum__qis__x__body(%Qubit* null) + br label %block_3 + +block_2: ; preds = %block_0 + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__y__body(%Qubit* null) + call void @__quantum__qis__x__body(%Qubit* null) + br label %block_3 + +block_3: ; preds = %block_2, %block_1 + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1 + +declare i1 @__quantum__rt__read_result(%Result*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__z__body(%Qubit*) + +declare void @__quantum__qis__y__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="1" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_combines_m_and_reset_into_mresetz() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + X(q); + M(q); + Reset(q); + X(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__m__body(%Qubit*, %Result*) #1 + +declare void @__quantum__qis__reset__body(%Qubit*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="1" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_removes_mresetz_and_reset_into_mresetz() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + X(q); + MResetZ(q); + Reset(q); + X(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1 + +declare void @__quantum__qis__reset__body(%Qubit*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="1" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_removes_reset_of_unused_qubits() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q1 = Qubit(); + use q2 = Qubit(); + X(q1); + Reset(q1); + Reset(q2); + X(q1); + X(q2); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__reset__body(%Qubit* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__reset__body(%Qubit*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_turns_final_m_into_mresetz() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + X(q); + M(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__m__body(%Qubit*, %Result*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="1" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_removes_reset_after_reset() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + X(q); + Reset(q); + Reset(q); + Y(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__qis__reset__body(%Qubit* null) + call void @__quantum__qis__y__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__reset__body(%Qubit*) #1 + +declare void @__quantum__qis__y__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_optimize_removes_final_reset() -> None: + qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + qir = qsharp.compile( + """ + { + use q = Qubit(); + X(q); + Reset(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + OptimizeSingleQubitGates().run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__x__body(%Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__x__body(%Qubit*) + +declare void @__quantum__qis__reset__body(%Qubit*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) diff --git a/source/pip/tests-integration/devices/test_atom_reorder.py b/source/pip/tests-integration/devices/test_atom_reorder.py new file mode 100644 index 0000000000..83c85481af --- /dev/null +++ b/source/pip/tests-integration/devices/test_atom_reorder.py @@ -0,0 +1,672 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import pytest +from expecttest import assert_expected_inline + +import qsharp +from qsharp._device._atom._reorder import Reorder +from qsharp._device._atom import NeutralAtomDevice +from .validation import PerQubitOrdering, check_qubit_ordering_unchanged + +try: + import pyqir + + PYQIR_AVAILABLE = True +except ImportError: + PYQIR_AVAILABLE = False + +SKIP_REASON = "PyQIR is not available" + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_reorder_no_changes_to_simple_ordered_program() -> None: + qir = qsharp.compile( + """ + { + use (q1, q2) = (Qubit(), Qubit()); + SX(q1); + CZ(q1, q2); + (MResetZ(q1), MResetZ(q2)) + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Reorder(NeutralAtomDevice()).run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer +@0 = internal constant [6 x i8] c"0_t0r\\00" +@1 = internal constant [6 x i8] c"1_t1r\\00" + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*)) + call void @__quantum__rt__tuple_record_output(i64 2, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* null, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @0, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 1 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__rt__result_record_output(%Result*, i8*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="2" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_reorder_groups_matching_sequential_gates_into_same_step() -> None: + qir = qsharp.compile( + """ + { + use (q1, q2, q3, q4) = (Qubit(), Qubit(), Qubit(), Qubit()); + SX(q1); + CZ(q1, q2); + let (r1, r2) = (MResetZ(q1), MResetZ(q2)); + SX(q3); + CZ(q3, q4); + let (r3, r4) = (MResetZ(q3), MResetZ(q4)); + (r1, r2, r3, r4) + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Reorder(NeutralAtomDevice()).run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer +@0 = internal constant [6 x i8] c"0_t0r\\00" +@1 = internal constant [6 x i8] c"1_t1r\\00" +@2 = internal constant [6 x i8] c"2_t2r\\00" +@3 = internal constant [6 x i8] c"3_t3r\\00" + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Result* inttoptr (i64 2 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 3 to %Qubit*), %Result* inttoptr (i64 3 to %Result*)) + call void @__quantum__rt__tuple_record_output(i64 4, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* null, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @0, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 1 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 2 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @2, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 3 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @3, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__rt__result_record_output(%Result*, i8*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="4" "required_num_results"="4" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_reorder_moves_gates_past_measurements_that_overlap_qubit_and_result_ids() -> ( + None +): + qir = qsharp.compile( + """ + { + use (q1, q2) = (Qubit(), Qubit()); + SX(q2); + let r2 = MResetZ(q2); + SX(q1); + let r1 = MResetZ(q1); + (r1, r2) + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Reorder(NeutralAtomDevice()).run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer +@0 = internal constant [6 x i8] c"0_t0r\\00" +@1 = internal constant [6 x i8] c"1_t1r\\00" + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* inttoptr (i64 1 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* null) + call void @__quantum__rt__tuple_record_output(i64 2, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 1 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @0, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* null, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__rt__result_record_output(%Result*, i8*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="2" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_reorder_keeps_dependent_gates_in_order() -> None: + qir = qsharp.compile( + """ + { + use (q1, q2) = (Qubit(), Qubit()); + SX(q1); + CZ(q1, q2); + SX(q1); + CZ(q1, q2); + (MResetZ(q1), MResetZ(q2)) + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Reorder(NeutralAtomDevice()).run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer +@0 = internal constant [6 x i8] c"0_t0r\\00" +@1 = internal constant [6 x i8] c"1_t1r\\00" + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*)) + call void @__quantum__rt__tuple_record_output(i64 2, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* null, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @0, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 1 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__rt__result_record_output(%Result*, i8*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="2" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_reorder_sorts_gates_by_qubit_id() -> None: + qir = qsharp.compile( + """ + { + use qs = Qubit[5]; + SX(qs[3]); + SX(qs[1]); + SX(qs[4]); + SX(qs[0]); + SX(qs[2]); + let r3 = MResetZ(qs[3]); + let r1 = MResetZ(qs[1]); + let r4 = MResetZ(qs[4]); + let r0 = MResetZ(qs[0]); + let r2 = MResetZ(qs[2]); + [r0, r1, r2, r3, r4] + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Reorder(NeutralAtomDevice()).run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer +@0 = internal constant [6 x i8] c"0_a0r\\00" +@1 = internal constant [6 x i8] c"1_a1r\\00" +@2 = internal constant [6 x i8] c"2_a2r\\00" +@3 = internal constant [6 x i8] c"3_a3r\\00" +@4 = internal constant [6 x i8] c"4_a4r\\00" + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* inttoptr (i64 3 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Result* inttoptr (i64 4 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 3 to %Qubit*), %Result* null) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 4 to %Qubit*), %Result* inttoptr (i64 2 to %Result*)) + call void @__quantum__rt__array_record_output(i64 5, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 3 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @0, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 1 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 4 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @2, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* null, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @3, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 2 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @4, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1 + +declare void @__quantum__rt__array_record_output(i64, i8*) + +declare void @__quantum__rt__result_record_output(%Result*, i8*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="5" "required_num_results"="5" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_reorder_sorts_cz_to_end_of_step() -> None: + qir = qsharp.compile( + """ + { + use qs = Qubit[4]; + SX(qs[3]); + CZ(qs[1], qs[0]); + SX(qs[2]); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Reorder(NeutralAtomDevice()).run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* null) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="4" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_reorder_respects_read_result_and_classical_compute() -> None: + qir = qsharp.compile( + """ + { + use (q1, q2) = (Qubit(), Qubit()); + SX(q1); + let r1 = MResetZ(q1); + let r2 = MResetZ(q2); + let angle = if r1 == One { + if r2 == One { + SX(q1); + 0.0 + } else { + Rz(1.0, q1); + 1.0 + } + } else { + if r2 == One { + Rz(2.0, q1); + 2.0 + } else { + Rz(3.0, q1); + 3.0 + } + }; + Rz(2.0 * angle, q2); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + Reorder(NeutralAtomDevice()).run(module) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*)) + %0 = call i1 @__quantum__rt__read_result(%Result* null) + br i1 %0, label %block_1, label %block_2 + +block_1: ; preds = %block_0 + %1 = call i1 @__quantum__rt__read_result(%Result* inttoptr (i64 1 to %Result*)) + br i1 %1, label %block_3, label %block_4 + +block_2: ; preds = %block_0 + %2 = call i1 @__quantum__rt__read_result(%Result* inttoptr (i64 1 to %Result*)) + br i1 %2, label %block_5, label %block_6 + +block_3: ; preds = %block_1 + call void @__quantum__qis__sx__body(%Qubit* null) + br label %block_7 + +block_4: ; preds = %block_1 + call void @__quantum__qis__rz__body(double 1.000000e+00, %Qubit* null) + br label %block_7 + +block_5: ; preds = %block_2 + call void @__quantum__qis__rz__body(double 2.000000e+00, %Qubit* null) + br label %block_8 + +block_6: ; preds = %block_2 + call void @__quantum__qis__rz__body(double 3.000000e+00, %Qubit* null) + br label %block_8 + +block_7: ; preds = %block_4, %block_3 + %3 = phi double [ 0.000000e+00, %block_3 ], [ 1.000000e+00, %block_4 ] + br label %block_9 + +block_8: ; preds = %block_6, %block_5 + %4 = phi double [ 2.000000e+00, %block_5 ], [ 3.000000e+00, %block_6 ] + br label %block_9 + +block_9: ; preds = %block_8, %block_7 + %5 = phi double [ %3, %block_7 ], [ %4, %block_8 ] + %6 = fmul double 2.000000e+00, %5 + call void @__quantum__qis__rz__body(double %6, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1 + +declare i1 @__quantum__rt__read_result(%Result*) + +declare void @__quantum__qis__rz__body(double, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="2" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_reorder_preserves_per_qubit_order_on_large_program() -> None: + qir = qsharp.compile( + """ + { + import Std.Math.PI; + operation IsingModel2DEvolution( + N1 : Int, + N2 : Int, + J : Double, + g : Double, + evolutionTime : Double, + numberOfSteps : Int + ) : Result[] { + use qubits = Qubit[N1 * N2]; + let qubitsAs2D = Std.Arrays.Chunks(N2, qubits); + let dt : Double = evolutionTime / Std.Convert.IntAsDouble(numberOfSteps); + let theta_x = - g * dt; + let theta_zz = J * dt; + for i in 1..numberOfSteps { + for q in qubits { + Rx(2.0 * theta_x, q); + } + for row in 0..N1-1 { + for col in 0..2..N2-2 { + Rzz(2.0 * theta_zz, qubitsAs2D[row][col], qubitsAs2D[row][col + 1]); + } + for col in 1..2..N2-2 { + Rzz(2.0 * theta_zz, qubitsAs2D[row][col], qubitsAs2D[row][col + 1]); + } + } + for col in 0..N2-1 { + for row in 0..2..N1-2 { + Rzz(2.0 * theta_zz, qubitsAs2D[row][col], qubitsAs2D[row + 1][col]); + } + for row in 1..2..N1-2 { + Rzz(2.0 * theta_zz, qubitsAs2D[row][col], qubitsAs2D[row + 1][col]); + } + } + } + MResetEachZ(qubits) + } + IsingModel2DEvolution( + 10, + 10, + PI() / 2.0, + PI() / 2.0, + 10.0, + 10 + ) + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Reorder(NeutralAtomDevice()).run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) diff --git a/source/pip/tests-integration/devices/test_atom_schedule.py b/source/pip/tests-integration/devices/test_atom_schedule.py new file mode 100644 index 0000000000..3ac626dcf2 --- /dev/null +++ b/source/pip/tests-integration/devices/test_atom_schedule.py @@ -0,0 +1,1488 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import pytest +from expecttest import assert_expected_inline + +import qsharp +from qsharp._device._atom import NeutralAtomDevice +from qsharp._device._atom._scheduler import Schedule +from .validation import ( + ValidateBeginEndParallel, + PerQubitOrdering, + check_qubit_ordering_unchanged, +) + +try: + import pyqir + + PYQIR_AVAILABLE = True +except ImportError: + PYQIR_AVAILABLE = False + +SKIP_REASON = "PyQIR is not available" + +qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_scheduler_inserts_move_to_iz_for_single_qubit_gates(): + qir = qsharp.compile( + """ + { + use q = Qubit(); + SX(q); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Schedule(NeutralAtomDevice()).run(module) + ValidateBeginEndParallel().run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 25, i64 0) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__rt__begin_parallel() + +declare void @__quantum__rt__end_parallel() + +declare void @__quantum__qis__move__body(%Qubit*, i64, i64) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_scheduler_inserts_move_to_iz_for_two_qubit_gates(): + qir = qsharp.compile( + """ + { + use q = Qubit[2]; + CZ(q[0], q[1]); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Schedule(NeutralAtomDevice()).run(module) + ValidateBeginEndParallel().run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 25, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 25, i64 1) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__rt__begin_parallel() + +declare void @__quantum__rt__end_parallel() + +declare void @__quantum__qis__move__body(%Qubit*, i64, i64) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_scheduler_inserts_move_to_iz_for_mixed_gates_with_1q_gates_first(): + qir = qsharp.compile( + """ + { + use q = Qubit[2]; + SX(q[0]); + CZ(q[0], q[1]); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Schedule(NeutralAtomDevice()).run(module) + ValidateBeginEndParallel().run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 25, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 25, i64 1) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__rt__begin_parallel() + +declare void @__quantum__rt__end_parallel() + +declare void @__quantum__qis__move__body(%Qubit*, i64, i64) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_scheduler_parallelizes_operations_when_possible(): + qir = qsharp.compile( + """ + { + use q = Qubit[4]; + SX(q[0]); + SX(q[2]); + CZ(q[0], q[1]); + CZ(q[2], q[3]); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Schedule(NeutralAtomDevice()).run(module) + after = PerQubitOrdering() + ValidateBeginEndParallel().run(module) + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 25, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 25, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 25, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 25, i64 3) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 24, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 24, i64 3) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__rt__begin_parallel() + +declare void @__quantum__rt__end_parallel() + +declare void @__quantum__qis__move__body(%Qubit*, i64, i64) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="4" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_scheduler_inserts_moves_to_mz_for_measurement(): + qir = qsharp.compile( + """ + { + use q = Qubit[2]; + MResetZ(q[0]); + MResetZ(q[1]); + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Schedule(NeutralAtomDevice()).run(module) + after = PerQubitOrdering() + ValidateBeginEndParallel().run(module) + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 27, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 27, i64 1) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1 + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__rt__begin_parallel() + +declare void @__quantum__rt__end_parallel() + +declare void @__quantum__qis__move__body(%Qubit*, i64, i64) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="2" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_scheduler_parallelizes_1q_gates_by_iz_row(): + device = NeutralAtomDevice() + num_qubits = device.column_count * 2 + qir = qsharp.compile( + f""" + {{ + use qs = Qubit[{num_qubits}]; + ApplyToEach(SX, qs); + }} + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Schedule(device).run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 26, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 26, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 26, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 26, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 4 to %Qubit*), i64 26, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 5 to %Qubit*), i64 26, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 6 to %Qubit*), i64 26, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 7 to %Qubit*), i64 26, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 8 to %Qubit*), i64 26, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 9 to %Qubit*), i64 26, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 10 to %Qubit*), i64 26, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 11 to %Qubit*), i64 26, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 12 to %Qubit*), i64 26, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 13 to %Qubit*), i64 26, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 14 to %Qubit*), i64 26, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 15 to %Qubit*), i64 26, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 16 to %Qubit*), i64 26, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 17 to %Qubit*), i64 26, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 18 to %Qubit*), i64 26, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 19 to %Qubit*), i64 26, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 20 to %Qubit*), i64 26, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 21 to %Qubit*), i64 26, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 22 to %Qubit*), i64 26, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 23 to %Qubit*), i64 26, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 24 to %Qubit*), i64 26, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 25 to %Qubit*), i64 26, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 26 to %Qubit*), i64 26, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 27 to %Qubit*), i64 26, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 28 to %Qubit*), i64 26, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 29 to %Qubit*), i64 26, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 30 to %Qubit*), i64 26, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 31 to %Qubit*), i64 26, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 32 to %Qubit*), i64 26, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 33 to %Qubit*), i64 26, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 34 to %Qubit*), i64 26, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 35 to %Qubit*), i64 26, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 36 to %Qubit*), i64 26, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 37 to %Qubit*), i64 26, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 38 to %Qubit*), i64 26, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 39 to %Qubit*), i64 26, i64 39) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 40 to %Qubit*), i64 25, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 41 to %Qubit*), i64 25, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 42 to %Qubit*), i64 25, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 43 to %Qubit*), i64 25, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 44 to %Qubit*), i64 25, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 45 to %Qubit*), i64 25, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 46 to %Qubit*), i64 25, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 47 to %Qubit*), i64 25, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 48 to %Qubit*), i64 25, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 49 to %Qubit*), i64 25, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 50 to %Qubit*), i64 25, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 51 to %Qubit*), i64 25, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 52 to %Qubit*), i64 25, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 53 to %Qubit*), i64 25, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 54 to %Qubit*), i64 25, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 55 to %Qubit*), i64 25, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 56 to %Qubit*), i64 25, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 57 to %Qubit*), i64 25, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 58 to %Qubit*), i64 25, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 59 to %Qubit*), i64 25, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 60 to %Qubit*), i64 25, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 61 to %Qubit*), i64 25, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 62 to %Qubit*), i64 25, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 63 to %Qubit*), i64 25, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 64 to %Qubit*), i64 25, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 65 to %Qubit*), i64 25, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 66 to %Qubit*), i64 25, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 67 to %Qubit*), i64 25, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 68 to %Qubit*), i64 25, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 69 to %Qubit*), i64 25, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 70 to %Qubit*), i64 25, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 71 to %Qubit*), i64 25, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 72 to %Qubit*), i64 25, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 73 to %Qubit*), i64 25, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 74 to %Qubit*), i64 25, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 75 to %Qubit*), i64 25, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 76 to %Qubit*), i64 25, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 77 to %Qubit*), i64 25, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 78 to %Qubit*), i64 25, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 79 to %Qubit*), i64 25, i64 39) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 40 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 41 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 42 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 43 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 44 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 45 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 46 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 47 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 48 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 49 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 50 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 51 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 52 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 53 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 54 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 55 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 56 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 57 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 58 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 59 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 60 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 61 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 62 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 63 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 64 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 65 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 66 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 67 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 68 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 69 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 70 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 71 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 72 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 73 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 74 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 75 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 76 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 77 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 78 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 79 to %Qubit*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 25 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 26 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 27 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 28 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 29 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 30 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 31 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 32 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 33 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 34 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 35 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 36 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 37 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 38 to %Qubit*)) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 39 to %Qubit*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 24, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 24, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 4 to %Qubit*), i64 24, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 5 to %Qubit*), i64 24, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 6 to %Qubit*), i64 24, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 7 to %Qubit*), i64 24, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 8 to %Qubit*), i64 24, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 9 to %Qubit*), i64 24, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 10 to %Qubit*), i64 24, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 11 to %Qubit*), i64 24, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 12 to %Qubit*), i64 24, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 13 to %Qubit*), i64 24, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 14 to %Qubit*), i64 24, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 15 to %Qubit*), i64 24, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 16 to %Qubit*), i64 24, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 17 to %Qubit*), i64 24, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 18 to %Qubit*), i64 24, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 19 to %Qubit*), i64 24, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 20 to %Qubit*), i64 24, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 21 to %Qubit*), i64 24, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 22 to %Qubit*), i64 24, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 23 to %Qubit*), i64 24, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 24 to %Qubit*), i64 24, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 25 to %Qubit*), i64 24, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 26 to %Qubit*), i64 24, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 27 to %Qubit*), i64 24, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 28 to %Qubit*), i64 24, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 29 to %Qubit*), i64 24, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 30 to %Qubit*), i64 24, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 31 to %Qubit*), i64 24, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 32 to %Qubit*), i64 24, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 33 to %Qubit*), i64 24, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 34 to %Qubit*), i64 24, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 35 to %Qubit*), i64 24, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 36 to %Qubit*), i64 24, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 37 to %Qubit*), i64 24, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 38 to %Qubit*), i64 24, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 39 to %Qubit*), i64 24, i64 39) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 40 to %Qubit*), i64 23, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 41 to %Qubit*), i64 23, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 42 to %Qubit*), i64 23, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 43 to %Qubit*), i64 23, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 44 to %Qubit*), i64 23, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 45 to %Qubit*), i64 23, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 46 to %Qubit*), i64 23, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 47 to %Qubit*), i64 23, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 48 to %Qubit*), i64 23, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 49 to %Qubit*), i64 23, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 50 to %Qubit*), i64 23, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 51 to %Qubit*), i64 23, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 52 to %Qubit*), i64 23, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 53 to %Qubit*), i64 23, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 54 to %Qubit*), i64 23, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 55 to %Qubit*), i64 23, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 56 to %Qubit*), i64 23, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 57 to %Qubit*), i64 23, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 58 to %Qubit*), i64 23, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 59 to %Qubit*), i64 23, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 60 to %Qubit*), i64 23, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 61 to %Qubit*), i64 23, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 62 to %Qubit*), i64 23, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 63 to %Qubit*), i64 23, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 64 to %Qubit*), i64 23, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 65 to %Qubit*), i64 23, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 66 to %Qubit*), i64 23, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 67 to %Qubit*), i64 23, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 68 to %Qubit*), i64 23, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 69 to %Qubit*), i64 23, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 70 to %Qubit*), i64 23, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 71 to %Qubit*), i64 23, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 72 to %Qubit*), i64 23, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 73 to %Qubit*), i64 23, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 74 to %Qubit*), i64 23, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 75 to %Qubit*), i64 23, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 76 to %Qubit*), i64 23, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 77 to %Qubit*), i64 23, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 78 to %Qubit*), i64 23, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 79 to %Qubit*), i64 23, i64 39) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__rt__begin_parallel() + +declare void @__quantum__rt__end_parallel() + +declare void @__quantum__qis__move__body(%Qubit*, i64, i64) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="80" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_scheduler_parallelizes_all_2q_in_iz(): + device = NeutralAtomDevice() + num_qubits = device.column_count * 2 + qir = qsharp.compile( + f""" + {{ + use qs = Qubit[{num_qubits}]; + for i in 0..2..(Length(qs)-2) {{ + CZ(qs[i], qs[i+1]); + }} + }} + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Schedule(device).run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 26, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 26, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 26, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 26, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 4 to %Qubit*), i64 26, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 5 to %Qubit*), i64 26, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 6 to %Qubit*), i64 26, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 7 to %Qubit*), i64 26, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 8 to %Qubit*), i64 26, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 9 to %Qubit*), i64 26, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 10 to %Qubit*), i64 26, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 11 to %Qubit*), i64 26, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 12 to %Qubit*), i64 26, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 13 to %Qubit*), i64 26, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 14 to %Qubit*), i64 26, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 15 to %Qubit*), i64 26, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 16 to %Qubit*), i64 26, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 17 to %Qubit*), i64 26, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 18 to %Qubit*), i64 26, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 19 to %Qubit*), i64 26, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 20 to %Qubit*), i64 26, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 21 to %Qubit*), i64 26, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 22 to %Qubit*), i64 26, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 23 to %Qubit*), i64 26, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 24 to %Qubit*), i64 26, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 25 to %Qubit*), i64 26, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 26 to %Qubit*), i64 26, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 27 to %Qubit*), i64 26, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 28 to %Qubit*), i64 26, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 29 to %Qubit*), i64 26, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 30 to %Qubit*), i64 26, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 31 to %Qubit*), i64 26, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 32 to %Qubit*), i64 26, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 33 to %Qubit*), i64 26, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 34 to %Qubit*), i64 26, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 35 to %Qubit*), i64 26, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 36 to %Qubit*), i64 26, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 37 to %Qubit*), i64 26, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 38 to %Qubit*), i64 26, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 39 to %Qubit*), i64 26, i64 39) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 40 to %Qubit*), i64 25, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 41 to %Qubit*), i64 25, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 42 to %Qubit*), i64 25, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 43 to %Qubit*), i64 25, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 44 to %Qubit*), i64 25, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 45 to %Qubit*), i64 25, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 46 to %Qubit*), i64 25, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 47 to %Qubit*), i64 25, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 48 to %Qubit*), i64 25, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 49 to %Qubit*), i64 25, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 50 to %Qubit*), i64 25, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 51 to %Qubit*), i64 25, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 52 to %Qubit*), i64 25, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 53 to %Qubit*), i64 25, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 54 to %Qubit*), i64 25, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 55 to %Qubit*), i64 25, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 56 to %Qubit*), i64 25, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 57 to %Qubit*), i64 25, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 58 to %Qubit*), i64 25, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 59 to %Qubit*), i64 25, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 60 to %Qubit*), i64 25, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 61 to %Qubit*), i64 25, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 62 to %Qubit*), i64 25, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 63 to %Qubit*), i64 25, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 64 to %Qubit*), i64 25, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 65 to %Qubit*), i64 25, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 66 to %Qubit*), i64 25, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 67 to %Qubit*), i64 25, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 68 to %Qubit*), i64 25, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 69 to %Qubit*), i64 25, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 70 to %Qubit*), i64 25, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 71 to %Qubit*), i64 25, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 72 to %Qubit*), i64 25, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 73 to %Qubit*), i64 25, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 74 to %Qubit*), i64 25, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 75 to %Qubit*), i64 25, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 76 to %Qubit*), i64 25, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 77 to %Qubit*), i64 25, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 78 to %Qubit*), i64 25, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 79 to %Qubit*), i64 25, i64 39) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 20 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 22 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 24 to %Qubit*), %Qubit* inttoptr (i64 25 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 26 to %Qubit*), %Qubit* inttoptr (i64 27 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 28 to %Qubit*), %Qubit* inttoptr (i64 29 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 30 to %Qubit*), %Qubit* inttoptr (i64 31 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 32 to %Qubit*), %Qubit* inttoptr (i64 33 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 34 to %Qubit*), %Qubit* inttoptr (i64 35 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 36 to %Qubit*), %Qubit* inttoptr (i64 37 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 38 to %Qubit*), %Qubit* inttoptr (i64 39 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 40 to %Qubit*), %Qubit* inttoptr (i64 41 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 42 to %Qubit*), %Qubit* inttoptr (i64 43 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 44 to %Qubit*), %Qubit* inttoptr (i64 45 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 46 to %Qubit*), %Qubit* inttoptr (i64 47 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 48 to %Qubit*), %Qubit* inttoptr (i64 49 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 50 to %Qubit*), %Qubit* inttoptr (i64 51 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 52 to %Qubit*), %Qubit* inttoptr (i64 53 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 54 to %Qubit*), %Qubit* inttoptr (i64 55 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 56 to %Qubit*), %Qubit* inttoptr (i64 57 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 58 to %Qubit*), %Qubit* inttoptr (i64 59 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 60 to %Qubit*), %Qubit* inttoptr (i64 61 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 62 to %Qubit*), %Qubit* inttoptr (i64 63 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 64 to %Qubit*), %Qubit* inttoptr (i64 65 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 66 to %Qubit*), %Qubit* inttoptr (i64 67 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 68 to %Qubit*), %Qubit* inttoptr (i64 69 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 70 to %Qubit*), %Qubit* inttoptr (i64 71 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 72 to %Qubit*), %Qubit* inttoptr (i64 73 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 74 to %Qubit*), %Qubit* inttoptr (i64 75 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 76 to %Qubit*), %Qubit* inttoptr (i64 77 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 78 to %Qubit*), %Qubit* inttoptr (i64 79 to %Qubit*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 24, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 24, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 4 to %Qubit*), i64 24, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 5 to %Qubit*), i64 24, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 6 to %Qubit*), i64 24, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 7 to %Qubit*), i64 24, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 8 to %Qubit*), i64 24, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 9 to %Qubit*), i64 24, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 10 to %Qubit*), i64 24, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 11 to %Qubit*), i64 24, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 12 to %Qubit*), i64 24, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 13 to %Qubit*), i64 24, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 14 to %Qubit*), i64 24, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 15 to %Qubit*), i64 24, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 16 to %Qubit*), i64 24, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 17 to %Qubit*), i64 24, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 18 to %Qubit*), i64 24, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 19 to %Qubit*), i64 24, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 20 to %Qubit*), i64 24, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 21 to %Qubit*), i64 24, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 22 to %Qubit*), i64 24, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 23 to %Qubit*), i64 24, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 24 to %Qubit*), i64 24, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 25 to %Qubit*), i64 24, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 26 to %Qubit*), i64 24, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 27 to %Qubit*), i64 24, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 28 to %Qubit*), i64 24, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 29 to %Qubit*), i64 24, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 30 to %Qubit*), i64 24, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 31 to %Qubit*), i64 24, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 32 to %Qubit*), i64 24, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 33 to %Qubit*), i64 24, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 34 to %Qubit*), i64 24, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 35 to %Qubit*), i64 24, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 36 to %Qubit*), i64 24, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 37 to %Qubit*), i64 24, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 38 to %Qubit*), i64 24, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 39 to %Qubit*), i64 24, i64 39) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 40 to %Qubit*), i64 23, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 41 to %Qubit*), i64 23, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 42 to %Qubit*), i64 23, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 43 to %Qubit*), i64 23, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 44 to %Qubit*), i64 23, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 45 to %Qubit*), i64 23, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 46 to %Qubit*), i64 23, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 47 to %Qubit*), i64 23, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 48 to %Qubit*), i64 23, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 49 to %Qubit*), i64 23, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 50 to %Qubit*), i64 23, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 51 to %Qubit*), i64 23, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 52 to %Qubit*), i64 23, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 53 to %Qubit*), i64 23, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 54 to %Qubit*), i64 23, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 55 to %Qubit*), i64 23, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 56 to %Qubit*), i64 23, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 57 to %Qubit*), i64 23, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 58 to %Qubit*), i64 23, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 59 to %Qubit*), i64 23, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 60 to %Qubit*), i64 23, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 61 to %Qubit*), i64 23, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 62 to %Qubit*), i64 23, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 63 to %Qubit*), i64 23, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 64 to %Qubit*), i64 23, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 65 to %Qubit*), i64 23, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 66 to %Qubit*), i64 23, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 67 to %Qubit*), i64 23, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 68 to %Qubit*), i64 23, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 69 to %Qubit*), i64 23, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 70 to %Qubit*), i64 23, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 71 to %Qubit*), i64 23, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 72 to %Qubit*), i64 23, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 73 to %Qubit*), i64 23, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 74 to %Qubit*), i64 23, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 75 to %Qubit*), i64 23, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 76 to %Qubit*), i64 23, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 77 to %Qubit*), i64 23, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 78 to %Qubit*), i64 23, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 79 to %Qubit*), i64 23, i64 39) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__rt__begin_parallel() + +declare void @__quantum__rt__end_parallel() + +declare void @__quantum__qis__move__body(%Qubit*, i64, i64) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="80" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_scheduler_splits_large_parallel_2q_in_iz_by_iz_size(): + device = NeutralAtomDevice() + num_qubits = int( + device.column_count * device.get_interaction_zones()[0].row_count * 1.5 + ) + qir = qsharp.compile( + f""" + {{ + use qs = Qubit[{num_qubits}]; + for i in 0..2..(Length(qs)-2) {{ + CZ(qs[i], qs[i+1]); + }} + }} + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Schedule(device).run(module) + after = PerQubitOrdering() + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 26, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 26, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 26, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 26, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 4 to %Qubit*), i64 26, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 5 to %Qubit*), i64 26, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 6 to %Qubit*), i64 26, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 7 to %Qubit*), i64 26, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 8 to %Qubit*), i64 26, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 9 to %Qubit*), i64 26, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 10 to %Qubit*), i64 26, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 11 to %Qubit*), i64 26, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 12 to %Qubit*), i64 26, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 13 to %Qubit*), i64 26, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 14 to %Qubit*), i64 26, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 15 to %Qubit*), i64 26, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 16 to %Qubit*), i64 26, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 17 to %Qubit*), i64 26, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 18 to %Qubit*), i64 26, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 19 to %Qubit*), i64 26, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 20 to %Qubit*), i64 26, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 21 to %Qubit*), i64 26, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 22 to %Qubit*), i64 26, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 23 to %Qubit*), i64 26, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 24 to %Qubit*), i64 26, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 25 to %Qubit*), i64 26, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 26 to %Qubit*), i64 26, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 27 to %Qubit*), i64 26, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 28 to %Qubit*), i64 26, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 29 to %Qubit*), i64 26, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 30 to %Qubit*), i64 26, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 31 to %Qubit*), i64 26, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 32 to %Qubit*), i64 26, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 33 to %Qubit*), i64 26, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 34 to %Qubit*), i64 26, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 35 to %Qubit*), i64 26, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 36 to %Qubit*), i64 26, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 37 to %Qubit*), i64 26, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 38 to %Qubit*), i64 26, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 39 to %Qubit*), i64 26, i64 39) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 40 to %Qubit*), i64 25, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 41 to %Qubit*), i64 25, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 42 to %Qubit*), i64 25, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 43 to %Qubit*), i64 25, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 44 to %Qubit*), i64 25, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 45 to %Qubit*), i64 25, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 46 to %Qubit*), i64 25, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 47 to %Qubit*), i64 25, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 48 to %Qubit*), i64 25, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 49 to %Qubit*), i64 25, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 50 to %Qubit*), i64 25, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 51 to %Qubit*), i64 25, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 52 to %Qubit*), i64 25, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 53 to %Qubit*), i64 25, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 54 to %Qubit*), i64 25, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 55 to %Qubit*), i64 25, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 56 to %Qubit*), i64 25, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 57 to %Qubit*), i64 25, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 58 to %Qubit*), i64 25, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 59 to %Qubit*), i64 25, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 60 to %Qubit*), i64 25, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 61 to %Qubit*), i64 25, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 62 to %Qubit*), i64 25, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 63 to %Qubit*), i64 25, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 64 to %Qubit*), i64 25, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 65 to %Qubit*), i64 25, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 66 to %Qubit*), i64 25, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 67 to %Qubit*), i64 25, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 68 to %Qubit*), i64 25, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 69 to %Qubit*), i64 25, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 70 to %Qubit*), i64 25, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 71 to %Qubit*), i64 25, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 72 to %Qubit*), i64 25, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 73 to %Qubit*), i64 25, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 74 to %Qubit*), i64 25, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 75 to %Qubit*), i64 25, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 76 to %Qubit*), i64 25, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 77 to %Qubit*), i64 25, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 78 to %Qubit*), i64 25, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 79 to %Qubit*), i64 25, i64 39) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 20 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 22 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 24 to %Qubit*), %Qubit* inttoptr (i64 25 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 26 to %Qubit*), %Qubit* inttoptr (i64 27 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 28 to %Qubit*), %Qubit* inttoptr (i64 29 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 30 to %Qubit*), %Qubit* inttoptr (i64 31 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 32 to %Qubit*), %Qubit* inttoptr (i64 33 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 34 to %Qubit*), %Qubit* inttoptr (i64 35 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 36 to %Qubit*), %Qubit* inttoptr (i64 37 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 38 to %Qubit*), %Qubit* inttoptr (i64 39 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 40 to %Qubit*), %Qubit* inttoptr (i64 41 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 42 to %Qubit*), %Qubit* inttoptr (i64 43 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 44 to %Qubit*), %Qubit* inttoptr (i64 45 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 46 to %Qubit*), %Qubit* inttoptr (i64 47 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 48 to %Qubit*), %Qubit* inttoptr (i64 49 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 50 to %Qubit*), %Qubit* inttoptr (i64 51 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 52 to %Qubit*), %Qubit* inttoptr (i64 53 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 54 to %Qubit*), %Qubit* inttoptr (i64 55 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 56 to %Qubit*), %Qubit* inttoptr (i64 57 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 58 to %Qubit*), %Qubit* inttoptr (i64 59 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 60 to %Qubit*), %Qubit* inttoptr (i64 61 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 62 to %Qubit*), %Qubit* inttoptr (i64 63 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 64 to %Qubit*), %Qubit* inttoptr (i64 65 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 66 to %Qubit*), %Qubit* inttoptr (i64 67 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 68 to %Qubit*), %Qubit* inttoptr (i64 69 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 70 to %Qubit*), %Qubit* inttoptr (i64 71 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 72 to %Qubit*), %Qubit* inttoptr (i64 73 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 74 to %Qubit*), %Qubit* inttoptr (i64 75 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 76 to %Qubit*), %Qubit* inttoptr (i64 77 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 78 to %Qubit*), %Qubit* inttoptr (i64 79 to %Qubit*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 24, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 24, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 4 to %Qubit*), i64 24, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 5 to %Qubit*), i64 24, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 6 to %Qubit*), i64 24, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 7 to %Qubit*), i64 24, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 8 to %Qubit*), i64 24, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 9 to %Qubit*), i64 24, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 10 to %Qubit*), i64 24, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 11 to %Qubit*), i64 24, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 12 to %Qubit*), i64 24, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 13 to %Qubit*), i64 24, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 14 to %Qubit*), i64 24, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 15 to %Qubit*), i64 24, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 16 to %Qubit*), i64 24, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 17 to %Qubit*), i64 24, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 18 to %Qubit*), i64 24, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 19 to %Qubit*), i64 24, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 20 to %Qubit*), i64 24, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 21 to %Qubit*), i64 24, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 22 to %Qubit*), i64 24, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 23 to %Qubit*), i64 24, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 24 to %Qubit*), i64 24, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 25 to %Qubit*), i64 24, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 26 to %Qubit*), i64 24, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 27 to %Qubit*), i64 24, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 28 to %Qubit*), i64 24, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 29 to %Qubit*), i64 24, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 30 to %Qubit*), i64 24, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 31 to %Qubit*), i64 24, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 32 to %Qubit*), i64 24, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 33 to %Qubit*), i64 24, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 34 to %Qubit*), i64 24, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 35 to %Qubit*), i64 24, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 36 to %Qubit*), i64 24, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 37 to %Qubit*), i64 24, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 38 to %Qubit*), i64 24, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 39 to %Qubit*), i64 24, i64 39) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 40 to %Qubit*), i64 23, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 41 to %Qubit*), i64 23, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 42 to %Qubit*), i64 23, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 43 to %Qubit*), i64 23, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 44 to %Qubit*), i64 23, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 45 to %Qubit*), i64 23, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 46 to %Qubit*), i64 23, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 47 to %Qubit*), i64 23, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 48 to %Qubit*), i64 23, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 49 to %Qubit*), i64 23, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 50 to %Qubit*), i64 23, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 51 to %Qubit*), i64 23, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 52 to %Qubit*), i64 23, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 53 to %Qubit*), i64 23, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 54 to %Qubit*), i64 23, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 55 to %Qubit*), i64 23, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 56 to %Qubit*), i64 23, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 57 to %Qubit*), i64 23, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 58 to %Qubit*), i64 23, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 59 to %Qubit*), i64 23, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 60 to %Qubit*), i64 23, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 61 to %Qubit*), i64 23, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 62 to %Qubit*), i64 23, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 63 to %Qubit*), i64 23, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 64 to %Qubit*), i64 23, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 65 to %Qubit*), i64 23, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 66 to %Qubit*), i64 23, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 67 to %Qubit*), i64 23, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 68 to %Qubit*), i64 23, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 69 to %Qubit*), i64 23, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 70 to %Qubit*), i64 23, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 71 to %Qubit*), i64 23, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 72 to %Qubit*), i64 23, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 73 to %Qubit*), i64 23, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 74 to %Qubit*), i64 23, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 75 to %Qubit*), i64 23, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 76 to %Qubit*), i64 23, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 77 to %Qubit*), i64 23, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 78 to %Qubit*), i64 23, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 79 to %Qubit*), i64 23, i64 39) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 80 to %Qubit*), i64 25, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 81 to %Qubit*), i64 25, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 82 to %Qubit*), i64 25, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 83 to %Qubit*), i64 25, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 84 to %Qubit*), i64 25, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 85 to %Qubit*), i64 25, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 86 to %Qubit*), i64 25, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 87 to %Qubit*), i64 25, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 88 to %Qubit*), i64 25, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 89 to %Qubit*), i64 25, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 90 to %Qubit*), i64 25, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 91 to %Qubit*), i64 25, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 92 to %Qubit*), i64 25, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 93 to %Qubit*), i64 25, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 94 to %Qubit*), i64 25, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 95 to %Qubit*), i64 25, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 96 to %Qubit*), i64 25, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 97 to %Qubit*), i64 25, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 98 to %Qubit*), i64 25, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 99 to %Qubit*), i64 25, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 100 to %Qubit*), i64 25, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 101 to %Qubit*), i64 25, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 102 to %Qubit*), i64 25, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 103 to %Qubit*), i64 25, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 104 to %Qubit*), i64 25, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 105 to %Qubit*), i64 25, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 106 to %Qubit*), i64 25, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 107 to %Qubit*), i64 25, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 108 to %Qubit*), i64 25, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 109 to %Qubit*), i64 25, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 110 to %Qubit*), i64 25, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 111 to %Qubit*), i64 25, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 112 to %Qubit*), i64 25, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 113 to %Qubit*), i64 25, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 114 to %Qubit*), i64 25, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 115 to %Qubit*), i64 25, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 116 to %Qubit*), i64 25, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 117 to %Qubit*), i64 25, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 118 to %Qubit*), i64 25, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 119 to %Qubit*), i64 25, i64 39) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 80 to %Qubit*), %Qubit* inttoptr (i64 81 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 82 to %Qubit*), %Qubit* inttoptr (i64 83 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 84 to %Qubit*), %Qubit* inttoptr (i64 85 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 86 to %Qubit*), %Qubit* inttoptr (i64 87 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 88 to %Qubit*), %Qubit* inttoptr (i64 89 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 90 to %Qubit*), %Qubit* inttoptr (i64 91 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 92 to %Qubit*), %Qubit* inttoptr (i64 93 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 94 to %Qubit*), %Qubit* inttoptr (i64 95 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 96 to %Qubit*), %Qubit* inttoptr (i64 97 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 98 to %Qubit*), %Qubit* inttoptr (i64 99 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 100 to %Qubit*), %Qubit* inttoptr (i64 101 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 102 to %Qubit*), %Qubit* inttoptr (i64 103 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 104 to %Qubit*), %Qubit* inttoptr (i64 105 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 106 to %Qubit*), %Qubit* inttoptr (i64 107 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 108 to %Qubit*), %Qubit* inttoptr (i64 109 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 110 to %Qubit*), %Qubit* inttoptr (i64 111 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 112 to %Qubit*), %Qubit* inttoptr (i64 113 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 114 to %Qubit*), %Qubit* inttoptr (i64 115 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 116 to %Qubit*), %Qubit* inttoptr (i64 117 to %Qubit*)) + call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 118 to %Qubit*), %Qubit* inttoptr (i64 119 to %Qubit*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 80 to %Qubit*), i64 22, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 81 to %Qubit*), i64 22, i64 1) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 82 to %Qubit*), i64 22, i64 2) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 83 to %Qubit*), i64 22, i64 3) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 84 to %Qubit*), i64 22, i64 4) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 85 to %Qubit*), i64 22, i64 5) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 86 to %Qubit*), i64 22, i64 6) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 87 to %Qubit*), i64 22, i64 7) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 88 to %Qubit*), i64 22, i64 8) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 89 to %Qubit*), i64 22, i64 9) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 90 to %Qubit*), i64 22, i64 10) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 91 to %Qubit*), i64 22, i64 11) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 92 to %Qubit*), i64 22, i64 12) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 93 to %Qubit*), i64 22, i64 13) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 94 to %Qubit*), i64 22, i64 14) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 95 to %Qubit*), i64 22, i64 15) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 96 to %Qubit*), i64 22, i64 16) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 97 to %Qubit*), i64 22, i64 17) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 98 to %Qubit*), i64 22, i64 18) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 99 to %Qubit*), i64 22, i64 19) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 100 to %Qubit*), i64 22, i64 20) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 101 to %Qubit*), i64 22, i64 21) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 102 to %Qubit*), i64 22, i64 22) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 103 to %Qubit*), i64 22, i64 23) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 104 to %Qubit*), i64 22, i64 24) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 105 to %Qubit*), i64 22, i64 25) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 106 to %Qubit*), i64 22, i64 26) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 107 to %Qubit*), i64 22, i64 27) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 108 to %Qubit*), i64 22, i64 28) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 109 to %Qubit*), i64 22, i64 29) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 110 to %Qubit*), i64 22, i64 30) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 111 to %Qubit*), i64 22, i64 31) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 112 to %Qubit*), i64 22, i64 32) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 113 to %Qubit*), i64 22, i64 33) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 114 to %Qubit*), i64 22, i64 34) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 115 to %Qubit*), i64 22, i64 35) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 116 to %Qubit*), i64 22, i64 36) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 117 to %Qubit*), i64 22, i64 37) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 118 to %Qubit*), i64 22, i64 38) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 119 to %Qubit*), i64 22, i64 39) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__tuple_record_output(i64, i8*) + +declare void @__quantum__rt__begin_parallel() + +declare void @__quantum__rt__end_parallel() + +declare void @__quantum__qis__move__body(%Qubit*, i64, i64) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="120" "required_num_results"="0" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) + + +@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON) +def test_scheduler_moves_qubits_to_iz_for_1q_gate_after_2q_gate_before_measurement(): + qir = qsharp.compile( + """ + { + use qs = Qubit[2]; + SX(qs[0]); + SX(qs[1]); + CZ(qs[0], qs[1]); + SX(qs[1]); + MResetZ(qs[1]) + } + """ + ) + + module = pyqir.Module.from_ir(pyqir.Context(), str(qir)) + before = PerQubitOrdering() + before.run(module) + Schedule(NeutralAtomDevice()).run(module) + after = PerQubitOrdering() + ValidateBeginEndParallel().run(module) + after.run(module) + check_qubit_ordering_unchanged(after, before) + + assert_expected_inline( + str(module), + """\ + +%Qubit = type opaque +%Result = type opaque + +@empty_tag = internal constant [1 x i8] zeroinitializer +@0 = internal constant [4 x i8] c"0_r\\00" + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 25, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 25, i64 1) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__sx__body(%Qubit* null) + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0) + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 25, i64 1) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 27, i64 1) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* null) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__begin_parallel() + call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1) + call void @__quantum__rt__end_parallel() + call void @__quantum__rt__result_record_output(%Result* null, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @0, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__sx__body(%Qubit*) + +declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1 + +declare void @__quantum__rt__result_record_output(%Result*, i8*) + +declare void @__quantum__rt__begin_parallel() + +declare void @__quantum__rt__end_parallel() + +declare void @__quantum__qis__move__body(%Qubit*, i64, i64) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="1" } +attributes #1 = { "irreversible" } + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !6} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 5, !"int_computations", !5} +!5 = !{!"i64"} +!6 = !{i32 5, !"float_computations", !7} +!7 = !{!"double"} +""", + ) diff --git a/source/pip/tests-integration/devices/validation/__init__.py b/source/pip/tests-integration/devices/validation/__init__.py new file mode 100644 index 0000000000..17793e75fc --- /dev/null +++ b/source/pip/tests-integration/devices/validation/__init__.py @@ -0,0 +1,96 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from pyqir import QirModuleVisitor, is_entry_point, qubit_id, required_num_qubits + + +class ValidateBeginEndParallel(QirModuleVisitor): + """ + Ensure that only one parallel section is active at a time and that they all begin and end in the same block. + """ + + def _on_block(self, block): + self.parallel = False + super()._on_block(block) + if self.parallel: + raise ValueError("Unmatched __quantum__rt__begin_parallel at end of block") + + def _on_call_instr(self, call): + if call.callee.name == "__quantum__rt__begin_parallel": + if self.parallel: + raise ValueError( + "Nested __quantum__rt__begin_parallel in parallel section" + ) + self.parallel = True + elif call.callee.name == "__quantum__rt__end_parallel": + if not self.parallel: + raise ValueError("Unmatched __quantum__rt__end_parallel") + self.parallel = False + + +class PerQubitOrdering(QirModuleVisitor): + """ + Get the ordering of instructions on each qubit as a data structure. + """ + + qubit_instructions: list[list[str]] + + def _on_function(self, function): + if is_entry_point(function): + num_qubits = required_num_qubits(function) + if num_qubits is None: + raise ValueError("Entry function must have a known number of qubits") + self.qubit_instructions = [[] for _ in range(num_qubits)] + if len(function.basic_blocks) > 1: + raise ValueError( + "Entry function must have a single basic block for per-qubit ordering analysis" + ) + super()._on_function(function) + + def _on_call_instr(self, call): + if call.callee.name == "__quantum__qis__sx__body": + self._on_qis_sx(call, call.args[0]) + else: + super()._on_call_instr(call) + + def _on_qis_cz(self, call, ctrl, target): + ctrl_id = qubit_id(ctrl) + target_id = qubit_id(target) + assert ( + ctrl_id is not None and target_id is not None + ), "Qubit ids should be known" + self.qubit_instructions[ctrl_id].append(str(call)) + self.qubit_instructions[target_id].append(str(call)) + + def _on_qis_sx(self, call, target): + target_id = qubit_id(target) + assert target_id is not None, "Qubit id should be known" + self.qubit_instructions[target_id].append(str(call)) + + def _on_qis_rz(self, call, angle, target): + target_id = qubit_id(target) + assert target_id is not None, "Qubit id should be known" + self.qubit_instructions[target_id].append(str(call)) + + def _on_qis_mresetz(self, call, target, result): + target_id = qubit_id(target) + assert target_id is not None, "Qubit id should be known" + self.qubit_instructions[target_id].append(str(call)) + + +def check_qubit_ordering_unchanged( + after: PerQubitOrdering, before: PerQubitOrdering +) -> None: + for q, (after_instrs, before_instrs) in enumerate( + zip(after.qubit_instructions, before.qubit_instructions) + ): + if before_instrs != after_instrs: + print("Reordering changed the per-qubit instruction order:") + print(f"Qubit {q}:") + print(" Before:") + for instr in before_instrs: + print(f" {instr}") + print(" After:") + for instr in after_instrs: + print(f" {instr}") + raise RuntimeError("Reordering changed the per-qubit instruction order") diff --git a/source/pip/tests-integration/test_requirements.txt b/source/pip/tests-integration/test_requirements.txt index 11e616eb6a..122cda20a0 100644 --- a/source/pip/tests-integration/test_requirements.txt +++ b/source/pip/tests-integration/test_requirements.txt @@ -3,4 +3,5 @@ qirrunner==0.9.0 pyqir<0.12.0 qiskit-aer==0.17.2 qiskit_qasm3_import==0.6.0 +expecttest==0.3.0 # Qiskit distributions are installed per test run by build.py. diff --git a/source/pip/tests/CliffordCalls.qs b/source/pip/tests/CliffordCalls.qs new file mode 100644 index 0000000000..9918876ce9 --- /dev/null +++ b/source/pip/tests/CliffordCalls.qs @@ -0,0 +1,24 @@ +@EntryPoint(Base) +operation Main() : Unit { + let gates = [H, X, Y, Z, S, Adjoint S, SX]; + let NUM_QUBITS = 1224; + let MAX_CALLS = 1_000_000; + use qubits = Qubit[NUM_QUBITS]; + mutable calls = 0; + while calls < MAX_CALLS { + for qubit in qubits { + for gate in gates { + if calls < MAX_CALLS { + gate(qubit); + calls += 1; + } + } + } + for i in 0..2..NUM_QUBITS-1 { + if calls < MAX_CALLS { + CZ(qubits[i], qubits[i + 1]); + calls += 1; + } + } + } +} diff --git a/source/pip/tests/CliffordIsing.qs b/source/pip/tests/CliffordIsing.qs new file mode 100644 index 0000000000..d609a0a5e1 --- /dev/null +++ b/source/pip/tests/CliffordIsing.qs @@ -0,0 +1,92 @@ +import Std.Math.PI; + +@EntryPoint(Base) +operation CliffordIsing() : Result[] { + // Use specifically tailored parameters to get Clifford only + // rotation values. + IsingModel2DEvolution( + 34, + 36, + PI() / 2.0, + PI() / 2.0, + 40.0, + 40 + ) +} + +/// # Summary +/// Simulate simple Ising model evolution +/// +/// # Description +/// Simulates state |𝜓⟩ evolution to find |𝜓(t)⟩=U(t)|𝜓(0)⟩. +/// |𝜓(0)⟩ is taken to be |0...0⟩. +/// U(t)=e⁻ⁱᴴᵗ, where H is an Ising model Hamiltonian H = -J·Σ'ᵢⱼZᵢZⱼ + g·ΣᵢXᵢ +/// Here Σ' is taken over all pairs of neighboring qubits . +/// Simulation is done by performing K steps assuming U(t)≈(U(t/K))ᴷ. +operation IsingModel2DEvolution( + N1 : Int, + N2 : Int, + J : Double, + g : Double, + evolutionTime : Double, + numberOfSteps : Int +) : Result[] { + + // Allocate qubit grid and structure it as a 2D array. + use qubits = Qubit[N1 * N2]; + let qubitsAs2D = Std.Arrays.Chunks(N2, qubits); + + // Compute the time step + let dt : Double = evolutionTime / Std.Convert.IntAsDouble(numberOfSteps); + + let theta_x = - g * dt; + let theta_zz = J * dt; + + // Perform K steps + for i in 1..numberOfSteps { + + // Single-qubit interaction with external field + for q in qubits { + Rx(2.0 * theta_x, q); + } + + // All Rzz gates applied in the following two loops commute so they can be + // applied in any order. To reduce the depth of the algorithm, Rzz gates + // between horizontal "even" pairs of qubits are applied first - pairs + // that start at even indices. Then Rzz gates between "odd" pairs are + // applied. That way all Rzz between horizontal "even" pairs can potentially + // be done in parallel. Same is true about horizontal "odd" pairs, + // vertical "even" pairs and vertical "odd" pairs. + + // Horizontal two-qubit interactions + for row in 0..N1-1 { + // Horizontal interactions between "even" pairs + for col in 0..2..N2-2 { + Rzz(2.0 * theta_zz, qubitsAs2D[row][col], qubitsAs2D[row][col + 1]); + } + + // Horizontal interactions between "odd" pairs + for col in 1..2..N2-2 { + Rzz(2.0 * theta_zz, qubitsAs2D[row][col], qubitsAs2D[row][col + 1]); + } + } + + // Vertical two-qubit interactions + for col in 0..N2-1 { + + // Vertical interactions between "even" pairs + for row in 0..2..N1-2 { + Rzz(2.0 * theta_zz, qubitsAs2D[row][col], qubitsAs2D[row + 1][col]); + } + + // Vertical interactions between "odd" pairs + for row in 1..2..N1-2 { + Rzz(2.0 * theta_zz, qubitsAs2D[row][col], qubitsAs2D[row + 1][col]); + } + + } + + } + + MResetEachZ(qubits) +} diff --git a/source/pip/tests/test_clifford_simulator.py b/source/pip/tests/test_clifford_simulator.py new file mode 100644 index 0000000000..30cefbcf15 --- /dev/null +++ b/source/pip/tests/test_clifford_simulator.py @@ -0,0 +1,185 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from pathlib import Path +import pyqir + +import qsharp +from qsharp._simulation import run_qir_clifford, NoiseConfig +from qsharp._device._atom import NeutralAtomDevice +from qsharp._device._atom._decomp import DecomposeRzAnglesToCliffordGates +from qsharp._device._atom._validate import ValidateNoConditionalBranches +from qsharp import TargetProfile, Result + +current_file_path = Path(__file__) +# Get the directory of the current file +current_dir = current_file_path.parent + +# Tests for the Q# noisy simulator. + + +def transform_to_clifford(input) -> str: + native_qir = NeutralAtomDevice().compile(input) + module = pyqir.Module.from_ir(pyqir.Context(), str(native_qir)) + ValidateNoConditionalBranches().run(module) + DecomposeRzAnglesToCliffordGates().run(module) + return str(module) + + +def read_file(file_name: str) -> str: + return Path(file_name).read_text(encoding="utf-8") + + +def read_file_relative(file_name: str) -> str: + return Path(current_dir / file_name).read_text(encoding="utf-8") + + +def test_smoke(): + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval(read_file_relative("CliffordIsing.qs")) + + input = qsharp.compile( + "IsingModel2DEvolution(5, 5, PI() / 2.0, PI() / 2.0, 5.0, 5)" + ) + input = transform_to_clifford(input) + output = run_qir_clifford(input, 10, NoiseConfig()) + print(output) + + +def test_1224_clifford_ising(): + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval(read_file_relative("CliffordIsing.qs")) + + input = qsharp.compile( + "IsingModel2DEvolution(20, 50, PI() / 2.0, PI() / 2.0, 5.0, 5)" + ) + qir = transform_to_clifford(input) + + output = run_qir_clifford(qir, 1, NoiseConfig()) + + print(output) + + +def test_million(): + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval(read_file_relative("CliffordCalls.qs")) + + ir = qsharp.compile("Main()") + output = run_qir_clifford(str(ir), 1, NoiseConfig()) + print(output) + + +def test_s_noise_inherits_from_rz(): + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval("operation Main() : Result { use q = Qubit(); S(q); MResetZ(q) }") + ir = qsharp.compile("Main()") + noise = NoiseConfig() + noise.rz.x = 1.0 + output = run_qir_clifford(str(ir), 1, noise) + assert output == [Result.One] + + +def test_z_noise_inherits_from_rz(): + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval("operation Main() : Result { use q = Qubit(); Z(q); MResetZ(q) }") + ir = qsharp.compile("Main()") + noise = NoiseConfig() + noise.rz.x = 1.0 + output = run_qir_clifford(str(ir), 1, noise) + assert output == [Result.One] + + +def test_s_adj_noise_inherits_from_rz(): + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval( + "operation Main() : Result { use q = Qubit(); Adjoint S(q); MResetZ(q) }" + ) + ir = qsharp.compile("Main()") + noise = NoiseConfig() + noise.rz.x = 1.0 + output = run_qir_clifford(str(ir), 1, noise) + assert output == [Result.One] + + +def test_program_with_branching_fails(): + qsharp.init(target_profile=TargetProfile.Adaptive_RI) + qsharp.eval( + """ + operation Main() : Result { + use q = Qubit(); + H(q); + if (MResetZ(q) == One) { + X(q); + } + return MResetZ(q); + } + """ + ) + ir = qsharp.compile("Main()") + try: + run_qir_clifford(str(ir), 1, NoiseConfig()) + assert False, "Expected ValueError for branching control flow" + except ValueError as e: + assert ( + "simulation of programs with branching control flow is not supported" + in str(e) + ) + + +def test_program_with_unconditional_branching_succeeds(): + qir = """ +%Result = type opaque +%Qubit = type opaque + +@empty_tag = internal constant [1 x i8] c"\\00" +@0 = internal constant [6 x i8] c"0_a0r\\00" +@1 = internal constant [6 x i8] c"1_a1r\\00" + +define i64 @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__rt__initialize(i8* null) + br label %block_1 +block_1: + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + br label %block_2 +block_2: + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*)) + br label %block_3 +block_3: + call void @__quantum__rt__array_record_output(i64 2, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 0 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @0, i64 0, i64 0)) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 1 to %Result*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i64 0, i64 0)) + ret i64 0 +} + +declare void @__quantum__rt__initialize(i8*) + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__cx__body(%Qubit*, %Qubit*) + +declare void @__quantum__rt__array_record_output(i64, i8*) + +declare void @__quantum__rt__result_record_output(%Result*, i8*) + +declare void @__quantum__qis__m__body(%Qubit*, %Result*) #1 + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="base_profile" "required_num_qubits"="2" "required_num_results"="2" } +attributes #1 = { "irreversible" } + +; module flags + +!llvm.module.flags = !{!0, !1, !2, !3} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +""" + + output = run_qir_clifford(qir, 1, NoiseConfig()) + assert output == [[Result.Zero, Result.Zero]] or output == [ + [Result.One, Result.One] + ] diff --git a/source/pip/tests/test_cpu_simulator.py b/source/pip/tests/test_cpu_simulator.py new file mode 100644 index 0000000000..c4e71c980a --- /dev/null +++ b/source/pip/tests/test_cpu_simulator.py @@ -0,0 +1,428 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from collections import Counter +from pathlib import Path +from typing import Sequence, cast +import math +import random + +import pytest + +from qsharp._native import Result + +import qsharp +from qsharp import TargetProfile +from qsharp import openqasm + +from qsharp._simulation import run_qir_cpu, NoiseConfig + +current_file_path = Path(__file__) +# Get the directory of the current file +current_dir = current_file_path.parent + + +def read_file(file_name: str) -> str: + return Path(file_name).read_text(encoding="utf-8") + + +def read_file_relative(file_name: str) -> str: + return Path(current_dir / file_name).read_text(encoding="utf-8") + + +def result_array_to_string(results: Sequence[Result]) -> str: + chars = [] + for value in results: + if value == Result.Zero: + chars.append("0") + elif value == Result.One: + chars.append("1") + else: + chars.append("-") + return "".join(chars) + + +def test_cpu_seeding_no_noise(): + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval( + """ + operation BellTest() : Result[] { + use qs = Qubit[2]; + H(qs[0]); + CNOT(qs[0], qs[1]); + MResetEachZ(qs) + } + """ + ) + + qir = str(qsharp.compile("BellTest()")) + + results = [run_qir_cpu(qir, 1, None, seed)[0] for seed in range(100)] + print(results) + + # Results will be an array of 100 lists [Result, Result] + # Each result should be [Zero, Zero] or [One, One] + # As evident from a manual experiment running with the seeds of 0..99 + # gives 41:59 results split. Experiment should be repeatable for fixed seeds. + + # Verify we have 6 of each result + count_00 = sum(1 for r in results if r == [Result.Zero, Result.Zero]) + count_11 = sum(1 for r in results if r == [Result.One, Result.One]) + assert count_00 == 41 + assert count_11 == 100 - 41 + # TODO: count_00 is always suspiciously lower than count_11 for MANY ranges of seeds. + # Investigate if there's some bias in the simulator. Technically this isn't indication of a fault: + # we need roughly equal counts for shots, not for seeds. + + +def test_cpu_no_noise(): + """Simple test that CPU simulator works without noise.""" + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval(read_file_relative("CliffordIsing.qs")) + + input = qsharp.compile( + "IsingModel2DEvolution(4, 4, PI() / 2.0, PI() / 2.0, 10.0, 10)" + ) + + output = run_qir_cpu(str(input)) + print(output) + # Expecting deterministic output, no randomization seed needed. + assert output == [[Result.Zero] * 16], "Expected result of 0s with pi/2 angles." + + +def test_cpu_bitflip_noise(): + """Bitflip noise for CPU simulator.""" + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval(read_file_relative("CliffordIsing.qs")) + + input = qsharp.compile( + "IsingModel2DEvolution(4, 4, PI() / 2.0, PI() / 2.0, 10.0, 10)" + ) + + p_noise = 0.005 + noise = NoiseConfig() + noise.rx.set_bitflip(p_noise) + noise.rzz.set_pauli_noise("XX", p_noise) + noise.mresetz.set_bitflip(p_noise) + + output = run_qir_cpu(str(input), shots=3, noise=noise, seed=17) + result = [result_array_to_string(cast(Sequence[Result], x)) for x in output] + print(result) + # Reasonable results obtained from manual run + assert result == ["1000010001000001", "0000000000000000", "0001000001100000"] + + +def test_cpu_mixed_noise(): + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval(read_file_relative("CliffordIsing.qs")) + + input = qsharp.compile( + "IsingModel2DEvolution(4, 4, PI() / 2.0, PI() / 2.0, 4.0, 4)" + ) + + noise = NoiseConfig() + noise.rz.set_bitflip(0.008) + noise.rz.loss = 0.005 + noise.rzz.set_depolarizing(0.008) + noise.rzz.loss = 0.005 + + output = run_qir_cpu(str(input), shots=3, noise=noise, seed=53) + result = [result_array_to_string(cast(Sequence[Result], x)) for x in output] + print(result) + # Reasonable results obtained from manual run + assert result == ["000000000--00000", "0010000000000000", "0000000000100000"] + + +def test_cpu_isolated_loss(): + qsharp.init(target_profile=TargetProfile.Base) + program = """ +import Std.Math.PI; +operation Main() : Result[] { + use qs = Qubit[3]; + X(qs[0]); + X(qs[1]); + CNOT(qs[0], qs[1]); + // When loss is configured for X gate, qubit 2 should be unaffected. + Rx(PI() / 2.0, qs[2]); + Rx(PI() / 2.0, qs[2]); + MeasureEachZ(qs) +} + """ + qsharp.eval(program) + + input = qsharp.compile( + "Main()" + ) + + noise = NoiseConfig() + noise.x.loss = 0.1 + + output = run_qir_cpu(str(input), shots=1000, noise=noise) + result = [result_array_to_string(cast(Sequence[Result], x)) for x in output] + histogram = Counter(result) + total = sum(histogram.values()) + allowed_percent = { + "101": 0.81, + "1-1": 0.09, + "-11": 0.09, + "--1": 0.01, + } + tolerance = 0.2 * total + for bitstring, actual_count in histogram.items(): + assert bitstring in allowed_percent, f"Unexpected measurement string: '{bitstring}'." + expected_count = allowed_percent[bitstring] * total + assert abs(actual_count - expected_count) <= tolerance, ( + f"Count for {bitstring} outside 20% tolerance. " + f"Actual={actual_count}, Expected≈{expected_count:.0f}, Shots={total}." + ) + # We don't check for missing strings, as low-probability strings may not appear in finite shots. + + +def test_cpu_isolated_loss_and_noise(): + qsharp.init(target_profile=TargetProfile.Base) + program = """ +import Std.Math.PI; +operation Main() : Result[] { + use qs = Qubit[5]; + for _ in 1..100 { + X(qs[0]); + X(qs[1]); + CNOT(qs[0], qs[1]); + } + Rx(PI() / 2.0, qs[4]); + Rx(PI() / 2.0, qs[4]); + MeasureEachZ(qs) +} + """ + qsharp.eval(program) + + input = qsharp.compile( + "Main()" + ) + + noise = NoiseConfig() + noise.x.set_bitflip(0.001) + noise.x.loss = 0.001 + + output = run_qir_cpu(str(input), shots=1000, noise=noise) + result = [result_array_to_string(cast(Sequence[Result], x)) for x in output] + histogram = Counter(result) + total = sum(histogram.values()) + assert total > 0, "No measurement results recorded." + for bitstring in histogram: + assert bitstring.endswith("001"), f"Unexpected suffix in '{bitstring}'." + probability_00001 = histogram.get("00001", 0) / total + assert 0.5 < probability_00001 < 0.8, ( + f"Probability of 00001 outside expected range. " + f"Actual={probability_00001:.2%}, Shots={total}." + ) + + +def build_x_chain_qir(n_instances: int, n_x: int) -> str: + # Construct multiple instances of x gate chains + prefix = f""" + OPENQASM 3.0; + include "stdgates.inc"; + bit[{n_instances}] c; + qubit[{n_instances}] q; + """ + + infix = """ + x q; + """ + + suffix = """ + c = measure q; + """ + + src_parallel = prefix + infix * n_x + suffix + + # Compile resulting program + qsharp.init(target_profile=TargetProfile.Base) + qir_parallel = openqasm.compile(src_parallel) + return str(qir_parallel) + + +@pytest.mark.parametrize( + "p_noise, n_x, n_instances, n_shots, max_percent", + [ + (0.001, 200, 6, 4096, 2.0), + (0.01, 200, 6, 4096, 2.0), + (0.001, 50, 12, 1024, 4.0), # 50 shots is low, so higher error tolerated + ], +) +def test_cpu_x_chain( + p_noise: float, n_x: int, n_instances: int, n_shots: int, max_percent: float +): + """ + Simulate multi-instance X-chain with bitflip noise many times + Compare result frequencies with analytically computed probabilities + """ + # Use the CPU simulator with noise + noise = NoiseConfig() + noise.x.set_bitflip(p_noise) + + qir = build_x_chain_qir(n_instances, n_x) + output = run_qir_cpu(qir, shots=n_shots, noise=noise, seed=18) + histogram = [0 for _ in range(n_instances + 1)] + for shot in output: + shot_results = cast(Sequence[Result], shot) + count_1 = shot_results.count(Result.One) + histogram[count_1] += 1 + + # Probability of obtaining 0 and 1 at the end of the X chain. + p_0 = ((2.0 * p_noise - 1.0) ** n_x + 1.0) / 2.0 + p_1 = 1.0 - p_0 + + # Number of results with k ones that should be there. + p_N = [ + p_0 ** ((n_instances - k)) * (p_1**k) * math.comb(n_instances, k) * n_shots + for k in range(n_instances + 1) + ] + + # Error % for deviation from analytical value + error_percent = [abs(a - b) * 100.0 / n_shots for (a, b) in zip(histogram, p_N)] + print(", ".join(f"{a} (Δ≈{b:.1f}%)" for (a, b) in zip(histogram, error_percent))) + + # We tolerate configured percentage error. + assert all( + err < max_percent for err in error_percent + ), f"Error percent too high: {error_percent}" + + +def generate_op_sequence( + n_qubits: int, n_ops: int, n_rand: int +) -> list[tuple[int, int]]: + """Return operation tuples and randomly swap neighboring pairs n_rand times.""" + if n_qubits < 0 or n_ops < 0 or n_rand < 0: + raise ValueError("Tuple bounds must be non-negative") + + ops = [(q, op) for op in range(n_ops) for q in range(n_qubits)] + + if len(ops) < 2 or n_rand == 0: + return ops + + max_index = len(ops) - 1 + for _ in range(n_rand): + idx = random.randrange(max_index) + left, right = ops[idx], ops[idx + 1] + if left[0] != right[0]: + ops[idx], ops[idx + 1] = right, left + + return ops + + +@pytest.mark.parametrize("noisy_gate, noise_number", [(0, 2), (1, 1), (2, 2), (3, 2)]) +def test_cpu_permuted_rotations(noisy_gate: int, noise_number: int): + qsharp.init(target_profile=TargetProfile.Base) + + n_shots = 2000 + n_qubits = 11 + seed = 2026 + p_loss = 0.1 + tolerance_percent = 2.0 + assert n_qubits >= 2, "Need at least two qubits" + + random.seed(seed) + i1, i2 = random.sample(range(n_qubits), 2) + prefix = f""" +operation tiny_coeffs() : Result[] {{ + use q = Qubit[{n_qubits}]; + let i1 = {i1}; + let i2 = {i2}; +""" + + # The following sequence of rotations is equivalent to identity: + # 0. H <- could be any rotation + # 1. Rx(1.123456789) + # 2. Ry(1.212121212) + # 3. Rz(1.14856940153986) + # 4. Ry(-1.41836046203971) + # 5. Rz(-0.325946593598928) + # 6. H <- adjoint to step 0 + # We will perform these rotations on every qubit, but randomly intermix sequences for different qubits. + # This should still result in identity on all qubits as gates on different qubits commute. + # noise_number = how many times noisy gate appears in sequence. + + n_ops = 7 + ops = generate_op_sequence(n_qubits, n_ops, n_qubits * n_ops * 100) + infix = "" + for qubit, op in ops: + match op: + case 0 | 6: + infix += f" H(q[{qubit}]);\n" + case 1: + infix += f" Rx(1.123456789, q[{qubit}]);\n" + case 2: + infix += f" Ry(1.212121212, q[{qubit}]);\n" + case 3: + infix += f" Rz(1.14856940153986, q[{qubit}]);\n" + case 4: + infix += f" Ry(-1.41836046203971, q[{qubit}]);\n" + case 5: + infix += f" Rz(-0.325946593598928, q[{qubit}]);\n" + + suffix = """ + let m1 = M(q[i1]); + let m2 = M(q[i2]); + ResetAll(q); + return [m1, m2]; +} +""" + + program = prefix + infix + suffix + qsharp.eval(program) + input = qsharp.compile("tiny_coeffs()") + + noise = NoiseConfig() + p_combined_loss = 1.0 - ((1.0 - p_loss) ** noise_number) + match noisy_gate: + case 0: + noise.h.loss = p_loss + case 1: + noise.rx.loss = p_loss + case 2: + noise.ry.loss = p_loss + case 3: + noise.rz.loss = p_loss + case _: + raise ValueError("Invalid noisy_gate value") + + output = run_qir_cpu(str(input), shots=n_shots, noise=noise, seed=seed) + result_strings = [ + result_array_to_string(cast(Sequence[Result], shot)) for shot in output + ] + assert ( + len(result_strings) == n_shots + ), f"Shot count mismatch. Actual={len(result_strings)}, Expected={n_shots}" + + p_minus = p_combined_loss + p_0 = 1.0 - p_minus + allowed = [ + ("00", n_shots * p_0 * p_0), + ("0-", n_shots * p_0 * p_minus), + ("-0", n_shots * p_minus * p_0), + ("--", n_shots * p_minus * p_minus), + ] + + counts = {pattern: 0 for pattern, _ in allowed} + for entry in result_strings: + assert ( + entry in counts + ), f"Unexpected measurement string: '{entry}'. Program={program}." + counts[entry] += 1 + + tolerance = tolerance_percent / 100.0 * n_shots + print( + f"Permuted rotations test: n_qubits={n_qubits}, n_shots={n_shots}, seed={seed}, noise#{noise_number}, Δ<={tolerance:.0f} i1={i1}, i2={i2}" + ) + summary_msg = ", ".join( + f"'{pattern}': {counts[pattern]} (Δ={abs(counts[pattern] - expected_count):.0f})" + for pattern, expected_count in allowed + ) + print(summary_msg) + for pattern, expected_count in allowed: + actual_count = counts[pattern] + assert ( + abs(actual_count - expected_count) <= tolerance + ), f"Count for {pattern} off by more than {tolerance_percent:.1f}% of shots. Actual={actual_count}, Expected={expected_count:.0f}, noise#{noise_number}, Program={program}." diff --git a/source/pip/tests/test_gpu_simulator.py b/source/pip/tests/test_gpu_simulator.py new file mode 100644 index 0000000000..e9a94308de --- /dev/null +++ b/source/pip/tests/test_gpu_simulator.py @@ -0,0 +1,460 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from collections import Counter +from pathlib import Path +from typing import Sequence, cast +import math +import os +import random + +import pytest +import sys + +from qsharp._native import Result + +# Skip all tests in this module if QDK_GPU_TESTS is not set +if not os.environ.get("QDK_GPU_TESTS"): + pytest.skip("Skipping GPU tests (QDK_GPU_TESTS not set)", allow_module_level=True) + +SKIP_REASON = "GPU is not available" + +gpu_info = "Unknown" + +try: + from qsharp._native import try_create_gpu_adapter + + gpu_info = try_create_gpu_adapter() + # Printing to stderr so that it is visible if CI run fails + print(f"*** USING GPU: {gpu_info}", file=sys.stderr) + + GPU_AVAILABLE = True +except OSError as e: + GPU_AVAILABLE = False + SKIP_REASON = str(e) + + +import qsharp +from qsharp import TargetProfile +from qsharp import openqasm + +from qsharp._simulation import run_qir_gpu, NoiseConfig + +current_file_path = Path(__file__) +# Get the directory of the current file +current_dir = current_file_path.parent + + +def read_file(file_name: str) -> str: + return Path(file_name).read_text(encoding="utf-8") + + +def read_file_relative(file_name: str) -> str: + return Path(current_dir / file_name).read_text(encoding="utf-8") + + +def result_array_to_string(results: Sequence[Result]) -> str: + chars = [] + for value in results: + if value == Result.Zero: + chars.append("0") + elif value == Result.One: + chars.append("1") + else: + chars.append("-") + return "".join(chars) + + +@pytest.mark.skipif(not GPU_AVAILABLE, reason=SKIP_REASON) +def test_gpu_seeding_no_noise(): + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval( + """ + operation BellTest() : Result[] { + use qs = Qubit[2]; + H(qs[0]); + CNOT(qs[0], qs[1]); + MResetEachZ(qs) + } + """ + ) + + qir = str(qsharp.compile("BellTest()")) + + results = [run_qir_gpu(qir, 1, None, seed)[0] for seed in range(12)] + print(results) + + # Results will be an array of 12 lists [Result, Result] + # Each result should be [Zero, Zero] or [One, One] + # As evident from a manual experiment running with the seeds of 0..11 + # gives 6 results of each. Experiment should be repeatable for fixed seeds. + + # Verify we have 6 of each result + count_00 = sum(1 for r in results if r == [Result.Zero, Result.Zero]) + count_11 = sum(1 for r in results if r == [Result.One, Result.One]) + assert count_00 == 6 + assert count_11 == 6 + + +@pytest.mark.skipif(not GPU_AVAILABLE, reason=SKIP_REASON) +def test_gpu_no_noise(): + """Simple test that GPU simulator works without noise.""" + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval(read_file_relative("CliffordIsing.qs")) + + input = qsharp.compile( + "IsingModel2DEvolution(5, 5, PI() / 2.0, PI() / 2.0, 10.0, 10)" + ) + + output = run_qir_gpu(str(input)) + print(output) + # Expecting deterministic output, no randomization seed needed. + assert output == [[Result.Zero] * 25], "Expected result of 0s with pi/2 angles." + + +@pytest.mark.skipif(not GPU_AVAILABLE, reason=SKIP_REASON) +def test_gpu_bitflip_noise(): + """Bitflip noise for GPU simulator.""" + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval(read_file_relative("CliffordIsing.qs")) + + input = qsharp.compile( + "IsingModel2DEvolution(5, 5, PI() / 2.0, PI() / 2.0, 10.0, 10)" + ) + + p_noise = 0.005 + noise = NoiseConfig() + noise.rx.set_bitflip(p_noise) + noise.rzz.set_pauli_noise("XX", p_noise) + noise.mresetz.set_bitflip(p_noise) + + output = run_qir_gpu(str(input), shots=3, noise=noise, seed=17) + result = [result_array_to_string(cast(Sequence[Result], x)) for x in output] + print(result) + # Reasonable results obtained from manual run + assert result == [ + "0000000000011100000000110", + "0001001100000000000100110", + "0000000000011000000000000", + ] + + +@pytest.mark.skipif(not GPU_AVAILABLE, reason=SKIP_REASON) +def test_gpu_mixed_noise(): + qsharp.init(target_profile=TargetProfile.Base) + qsharp.eval(read_file_relative("CliffordIsing.qs")) + + input = qsharp.compile( + "IsingModel2DEvolution(5, 5, PI() / 2.0, PI() / 2.0, 4.0, 4)" + ) + + noise = NoiseConfig() + noise.rz.set_bitflip(0.005) + noise.rz.loss = 0.003 + noise.rzz.set_depolarizing(0.005) + noise.rzz.loss = 0.003 + + output = run_qir_gpu(str(input), shots=3, noise=noise, seed=53) + result = [result_array_to_string(cast(Sequence[Result], x)) for x in output] + print(result) + # Reasonable results obtained from manual run + assert result == [ + "00000-00000000-0000000000", + "00100001000-0000000000-00", + "000000010000000-000000000", + ] + +@pytest.mark.skipif(not GPU_AVAILABLE, reason=SKIP_REASON) +def test_gpu_isolated_loss(): + qsharp.init(target_profile=TargetProfile.Base) + program = """ +import Std.Math.PI; +operation Main() : Result[] { + use qs = Qubit[3]; + X(qs[0]); + X(qs[1]); + CNOT(qs[0], qs[1]); + // When loss is configured for X gate, qubit 2 should be unaffected. + Rx(PI() / 2.0, qs[2]); + Rx(PI() / 2.0, qs[2]); + MeasureEachZ(qs) +} + """ + qsharp.eval(program) + + input = qsharp.compile( + "Main()" + ) + + noise = NoiseConfig() + noise.x.loss = 0.1 + + output = run_qir_gpu(str(input), shots=1000, noise=noise) + result = [result_array_to_string(cast(Sequence[Result], x)) for x in output] + histogram = Counter(result) + total = sum(histogram.values()) + allowed_percent = { + "101": 0.81, + "1-1": 0.09, + "-11": 0.09, + "--1": 0.01, + } + tolerance = 0.2 * total + for bitstring, actual_count in histogram.items(): + assert bitstring in allowed_percent, f"Unexpected measurement string: '{bitstring}'." + expected_count = allowed_percent[bitstring] * total + assert abs(actual_count - expected_count) <= tolerance, ( + f"Count for {bitstring} outside 20% tolerance. " + f"Actual={actual_count}, Expected≈{expected_count:.0f}, Shots={total}." + ) + # We don't check for missing strings, as low-probability strings may not appear in finite shots. + + +@pytest.mark.skipif(not GPU_AVAILABLE, reason=SKIP_REASON) +def test_gpu_isolated_loss_and_noise(): + qsharp.init(target_profile=TargetProfile.Base) + program = """ +import Std.Math.PI; +operation Main() : Result[] { + use qs = Qubit[5]; + for _ in 1..100 { + X(qs[0]); + X(qs[1]); + CNOT(qs[0], qs[1]); + } + Rx(PI() / 2.0, qs[4]); + Rx(PI() / 2.0, qs[4]); + MeasureEachZ(qs) +} + """ + qsharp.eval(program) + + input = qsharp.compile( + "Main()" + ) + + noise = NoiseConfig() + noise.x.set_bitflip(0.001) + noise.x.loss = 0.001 + + output = run_qir_gpu(str(input), shots=1000, noise=noise) + result = [result_array_to_string(cast(Sequence[Result], x)) for x in output] + histogram = Counter(result) + total = sum(histogram.values()) + assert total > 0, "No measurement results recorded." + for bitstring in histogram: + assert bitstring.endswith("001"), f"Unexpected suffix in '{bitstring}'." + probability_00001 = histogram.get("00001", 0) / total + assert 0.5 < probability_00001 < 0.8, ( + f"Probability of 00001 outside expected range. " + f"Actual={probability_00001:.2%}, Shots={total}." + ) + + +def build_x_chain_qir(n_instances: int, n_x: int) -> str: + # Construct multiple instances of x gate chains + prefix = f""" + OPENQASM 3.0; + include "stdgates.inc"; + bit[{n_instances}] c; + qubit[{n_instances}] q; + """ + + infix = """ + x q; + """ + + suffix = """ + c = measure q; + """ + + src_parallel = prefix + infix * n_x + suffix + + # Compile resulting program + qsharp.init(target_profile=TargetProfile.Base) + qir_parallel = openqasm.compile(src_parallel) + return str(qir_parallel) + + +@pytest.mark.skipif(not GPU_AVAILABLE, reason=SKIP_REASON) +@pytest.mark.parametrize( + "p_noise, n_x, n_instances, n_shots, max_percent", + [ + (0.0005, 500, 10, 8192, 1.0), + (0.005, 500, 10, 4096, 2.0), + (0.0005, 20, 20, 100, 4.0), # 100 shots is low, so higher error tolerated + ], +) +def test_gpu_x_chain( + p_noise: float, n_x: int, n_instances: int, n_shots: int, max_percent: float +): + """ + Simulate multi-instance X-chain with bitflip noise many times + Compare result frequencies with analytically computed probabilities + """ + # Use the GPU simulator with noise + noise = NoiseConfig() + noise.x.set_bitflip(p_noise) + + qir = build_x_chain_qir(n_instances, n_x) + output = run_qir_gpu(qir, shots=n_shots, noise=noise, seed=18) + histogram = [0 for _ in range(n_instances + 1)] + for shot in output: + shot_results = cast(Sequence[Result], shot) + count_1 = shot_results.count(Result.One) + histogram[count_1] += 1 + + # Probability of obtaining 0 and 1 at the end of the X chain. + p_0 = ((2.0 * p_noise - 1.0) ** n_x + 1.0) / 2.0 + p_1 = 1.0 - p_0 + + # Number of results with k ones that should be there. + p_N = [ + p_0 ** ((n_instances - k)) * (p_1**k) * math.comb(n_instances, k) * n_shots + for k in range(n_instances + 1) + ] + + # Error % for deviation from analytical value + error_percent = [abs(a - b) * 100.0 / n_shots for (a, b) in zip(histogram, p_N)] + print(", ".join(f"{a} (Δ≈{b:.1f}%)" for (a, b) in zip(histogram, error_percent))) + + # We tolerate configured percentage error. + assert all( + err < max_percent for err in error_percent + ), f"Error percent too high: {error_percent}" + + +def generate_op_sequence( + n_qubits: int, n_ops: int, n_rand: int +) -> list[tuple[int, int]]: + """Return operation tuples and randomly swap neighboring pairs n_rand times.""" + if n_qubits < 0 or n_ops < 0 or n_rand < 0: + raise ValueError("Tuple bounds must be non-negative") + + ops = [(q, op) for op in range(n_ops) for q in range(n_qubits)] + + if len(ops) < 2 or n_rand == 0: + return ops + + max_index = len(ops) - 1 + for _ in range(n_rand): + idx = random.randrange(max_index) + left, right = ops[idx], ops[idx + 1] + if left[0] != right[0]: + ops[idx], ops[idx + 1] = right, left + + return ops + + +@pytest.mark.skipif(not GPU_AVAILABLE, reason=SKIP_REASON) +@pytest.mark.parametrize("noisy_gate, noise_number", [(0, 2), (1, 1), (2, 2), (3, 2)]) +def test_gpu_permuted_rotations(noisy_gate : int, noise_number : int): + qsharp.init(target_profile=TargetProfile.Base) + + n_shots = 2000 + n_qubits = 15 + seed = 2026 + p_loss = 0.1 + tolerance_percent = 2.0 + assert n_qubits >= 2, "Need at least two qubits" + + random.seed(seed) + i1, i2 = random.sample(range(n_qubits), 2) + prefix = f""" +operation tiny_coeffs() : Result[] {{ + use q = Qubit[{n_qubits}]; + let i1 = {i1}; + let i2 = {i2}; +""" + + # The following sequence of rotations is equivalent to identity: + # 0. H <- could be any rotation + # 1. Rx(1.123456789) + # 2. Ry(1.212121212) + # 3. Rz(1.14856940153986) + # 4. Ry(-1.41836046203971) + # 5. Rz(-0.325946593598928) + # 6. H <- adjoint to step 0 + # We will perform these rotations on every qubit, but randomly intermix sequences for different qubits. + # This should still result in identity on all qubits as gates on different qubits commute. + # noise_number = how many times noisy gate appears in sequence. + + n_ops = 7 + ops = generate_op_sequence(n_qubits, n_ops, n_qubits*n_ops*100) + infix = "" + for qubit, op in ops: + match op: + case 0 | 6: + infix += f" H(q[{qubit}]);\n" + case 1: + infix += f" Rx(1.123456789, q[{qubit}]);\n" + case 2: + infix += f" Ry(1.212121212, q[{qubit}]);\n" + case 3: + infix += f" Rz(1.14856940153986, q[{qubit}]);\n" + case 4: + infix += f" Ry(-1.41836046203971, q[{qubit}]);\n" + case 5: + infix += f" Rz(-0.325946593598928, q[{qubit}]);\n" + + suffix = """ + let m1 = M(q[i1]); + let m2 = M(q[i2]); + ResetAll(q); + return [m1, m2]; +} +""" + + program = prefix + infix + suffix + qsharp.eval(program) + input = qsharp.compile( + "tiny_coeffs()" + ) + + noise = NoiseConfig() + p_combined_loss = 1.0 - ((1.0-p_loss)**noise_number) + match noisy_gate: + case 0: + noise.h.loss = p_loss + case 1: + noise.rx.loss = p_loss + case 2: + noise.ry.loss = p_loss + case 3: + noise.rz.loss = p_loss + case _: + raise ValueError("Invalid noisy_gate value") + + output = run_qir_gpu(str(input), shots=n_shots, noise=noise, seed=seed) + result_strings = [ + result_array_to_string(cast(Sequence[Result], shot)) for shot in output + ] + assert len(result_strings) == n_shots, f"Shot count mismatch. Actual={len(result_strings)}, Expected={n_shots}" + + p_minus = p_combined_loss + p_0 = 1.0 - p_minus + allowed = [ + ("00", n_shots * p_0 * p_0), + ("0-", n_shots * p_0 * p_minus), + ("-0", n_shots * p_minus * p_0), + ("--", n_shots * p_minus * p_minus), + ] + + counts = {pattern: 0 for pattern, _ in allowed} + for entry in result_strings: + assert entry in counts, f"Unexpected measurement string: '{entry}'. Program={program}." + counts[entry] += 1 + + tolerance = tolerance_percent / 100.0 * n_shots + print(f"Permuted rotations test: n_qubits={n_qubits}, n_shots={n_shots}, seed={seed}, noise#{noise_number}, Δ<={tolerance:.0f} i1={i1}, i2={i2}") + summary_msg = ", ".join( + f"'{pattern}': {counts[pattern]} (Δ={abs(counts[pattern] - expected_count):.0f})" + for pattern, expected_count in allowed + ) + print(summary_msg) + for pattern, expected_count in allowed: + actual_count = counts[pattern] + assert ( + abs(actual_count - expected_count) <= tolerance + ), f"Count for {pattern} off by more than {tolerance_percent:.1f}% of shots. Actual={actual_count}, Expected={expected_count:.0f}, noise#{noise_number}, Program={program}." + diff --git a/source/pip/tests/test_noisy_config.py b/source/pip/tests/test_noisy_config.py new file mode 100644 index 0000000000..7bb46eadea --- /dev/null +++ b/source/pip/tests/test_noisy_config.py @@ -0,0 +1,132 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from qsharp._simulation import NoiseConfig +import pytest + + +def test_setting_1q_noise(): + noise = NoiseConfig() + noise.h.set_pauli_noise("X", 0.01) + assert noise.h.x == 0.01 + + +def test_setting_1q_noise_through_attr(): + noise = NoiseConfig() + noise.h.x = 0.01 + assert noise.h.x == 0.01 + + +def test_setting_2q_noise(): + noise = NoiseConfig() + noise.cz.set_pauli_noise("IZ", 0.01) + noise.cz.set_pauli_noise("ZZ", 0.02) + assert noise.cz.iz == 0.01 + assert noise.cz.zz == 0.02 + + +def test_setting_2q_noise_through_attr(): + noise = NoiseConfig() + noise.cz.set_pauli_noise("IZ", 0.01) + noise.cz.set_pauli_noise("ZZ", 0.02) + assert noise.cz.iz == 0.01 + assert noise.cz.zz == 0.02 + + +def test_setting_1q_depolarizing_noise(): + noise = NoiseConfig() + noise.h.set_depolarizing(0.3) + p = 0.3 / 3 + assert noise.h.x == p + assert noise.h.y == p + assert noise.h.z == p + + +def test_setting_2q_depolarizing_noise(): + noise = NoiseConfig() + noise.cz.set_depolarizing(0.15) + p = 0.15 / 15 + assert noise.cz.ix == p + assert noise.cz.iy == p + assert noise.cz.iz == p + assert noise.cz.xx == p + assert noise.cz.xy == p + assert noise.cz.xz == p + assert noise.cz.yx == p + assert noise.cz.yy == p + assert noise.cz.yz == p + assert noise.cz.zx == p + assert noise.cz.zy == p + assert noise.cz.zz == p + + +def test_setting_2q_noise_on_1q_op_errors(): + noise = NoiseConfig() + with pytest.raises(AttributeError): + noise.h.set_pauli_noise("ZZ", 0.01) + + +def test_setting_2q_noise_on_1q_op_through_attr_errors(): + noise = NoiseConfig() + with pytest.raises(AttributeError): + noise.h.zz = 0.01 + + +def test_setting_1q_noise_on_2q_op_errors(): + noise = NoiseConfig() + with pytest.raises(AttributeError): + noise.cz.set_pauli_noise("Z", 0.01) + + +def test_setting_1q_noise_on_2q_op_through_attr_errors(): + noise = NoiseConfig() + with pytest.raises(AttributeError): + noise.cz.z = 0.01 + + +def test_setting_non_valid_pauli_errors(): + noise = NoiseConfig() + with pytest.raises(AttributeError): + noise.h.set_pauli_noise("W", 0.01) + + +def test_setting_non_valid_pauli_through_attr_errors(): + noise = NoiseConfig() + with pytest.raises(AttributeError): + noise.h.w = 0.01 + + +def test_accessing_non_set_pauli_attr_errors(): + noise = NoiseConfig() + with pytest.raises(AttributeError): + noise.h.x + + +def test_accessing_non_valid_pauli_attr_errors(): + noise = NoiseConfig() + with pytest.raises(AttributeError): + noise.h.w + + +def test_setting_bitflip_on_1q_op(): + noise = NoiseConfig() + noise.h.set_bitflip(0.01) + assert noise.h.x == 0.01 + + +def test_setting_bitflip_on_2q_op_errors(): + noise = NoiseConfig() + with pytest.raises(AttributeError): + noise.cz.set_bitflip(0.01) + + +def test_setting_phaseflip_on_1q_op(): + noise = NoiseConfig() + noise.h.set_phaseflip(0.01) + assert noise.h.z == 0.01 + + +def test_setting_phaseflip_on_2q_op_errors(): + noise = NoiseConfig() + with pytest.raises(AttributeError): + noise.cz.set_phaseflip(0.01) diff --git a/source/qdk_package/pyproject.toml b/source/qdk_package/pyproject.toml index de65a2d17f..b10069d501 100644 --- a/source/qdk_package/pyproject.toml +++ b/source/qdk_package/pyproject.toml @@ -10,7 +10,7 @@ readme = "README.md" authors = [ { name = "Microsoft" } ] license = { file = "LICENSE.txt" } requires-python = ">=3.10" -dependencies = ["qsharp==0.0.0"] +dependencies = ["qsharp==0.0.0", "pyqir<0.12"] [project.optional-dependencies] jupyter = ["qsharp-widgets==0.0.0", "qsharp-jupyterlab==0.0.0"] diff --git a/source/qdk_package/src/qdk/simulation.py b/source/qdk_package/src/qdk/simulation.py new file mode 100644 index 0000000000..71a2acc0e1 --- /dev/null +++ b/source/qdk_package/src/qdk/simulation.py @@ -0,0 +1,5 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from qsharp._device._atom import NeutralAtomDevice +from qsharp._simulation import NoiseConfig diff --git a/source/qdk_package/test_requirements.txt b/source/qdk_package/test_requirements.txt index e079f8a603..b12a203d61 100644 --- a/source/qdk_package/test_requirements.txt +++ b/source/qdk_package/test_requirements.txt @@ -1 +1,2 @@ pytest +pyqir<0.12 diff --git a/source/simulators/Cargo.toml b/source/simulators/Cargo.toml index c4319efcbe..4f50b7a531 100644 --- a/source/simulators/Cargo.toml +++ b/source/simulators/Cargo.toml @@ -10,9 +10,49 @@ repository.workspace = true [dependencies] quantum-sparse-sim = { workspace = true } +bytemuck = { workspace = true } +futures = { workspace = true } +wgpu = { workspace = true } +rand = { workspace = true } +nalgebra = { workspace = true } +num-bigint = { workspace = true } +num-complex = { workspace = true } +num-traits = { workspace = true } +regex-lite = { workspace = true } +rustc-hash = { workspace = true } +paulimer = { path = "../paulimer" } +noisy_simulator = { path = "../noisy_simulator" } + +[dev-dependencies] +expect-test = { workspace = true } +criterion = { workspace = true } + [lints] workspace = true [lib] doctest = false + +[target.'cfg(target_os="linux")'.dev-dependencies] +iai-callgrind = { workspace = true } + +[[bench]] +name = "sim_time" +harness = false + +[[bench]] +name = "sim_time_noisy" +harness = false + +[[bench]] +name = "sim_mem" +harness = false + +# [[bench]] +# name = "gpu" +# harness = false + +[[bin]] +name = "gpu-runner" +path = "src/bin/gpu-runner.rs" diff --git a/source/simulators/benches/sim_mem.rs b/source/simulators/benches/sim_mem.rs new file mode 100644 index 0000000000..4d5bd6f38b --- /dev/null +++ b/source/simulators/benches/sim_mem.rs @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#[cfg(target_os = "linux")] +mod bench { + #![allow(clippy::unit_arg)] + + use iai_callgrind::{library_benchmark, library_benchmark_group}; + use qdk_simulators::{ + Simulator as _, + noise_config::{CumulativeNoiseConfig, NoiseConfig}, + stabilizer_simulator::{ + StabilizerSimulator, + noise::Fault, + operation::{Operation, cz, h, id, mz, s, x, y, z}, + }, + }; + use std::{hint::black_box, sync::Arc}; + + const SEED: u32 = 1000; + + fn setup(gates: Vec) -> (StabilizerSimulator, Vec) { + const NUM_QUBITS: usize = 1224; + const NUM_RESULTS: usize = NUM_QUBITS; + let noise: Arc> = + Arc::new(>::NOISELESS.into()); + let simulator = StabilizerSimulator::new(NUM_QUBITS, NUM_RESULTS, SEED, noise); + (simulator, gates) + } + + fn teardown(_: (StabilizerSimulator, Vec)) {} + + fn run_simulation(simulator: &mut StabilizerSimulator, gates: &[Operation]) { + simulator.apply_gates(gates); + } + + #[library_benchmark] + #[benches::with_setup( + args = [ + vec![id(0)], + vec![x(0)], + vec![y(0)], + vec![z(0)], + vec![h(0)], + vec![s(0)], + vec![cz(0, 1)], + vec![mz(0)], + vec![h(0), mz(0)], + ], + setup = setup, + teardown = teardown) + ] + fn gates( + (mut simulator, gates): (StabilizerSimulator, Vec), + ) -> (StabilizerSimulator, Vec) { + black_box(run_simulation(&mut simulator, &gates)); + (simulator, gates) + } + + library_benchmark_group!( + name = bench_gates; + benchmarks = gates + ); +} + +#[cfg(target_os = "linux")] +use bench::bench_gates; + +#[cfg(target_os = "linux")] +iai_callgrind::main!( + config = iai_callgrind::LibraryBenchmarkConfig::default() + .tool(iai_callgrind::Callgrind::default().flamegraph(iai_callgrind::FlamegraphConfig::default())); + library_benchmark_groups = bench_gates +); + +#[cfg(not(target_os = "linux"))] +fn main() { + eprintln!("bench 'sim_mem' is Linux-only; skipping on this platform."); +} diff --git a/source/simulators/benches/sim_time.rs b/source/simulators/benches/sim_time.rs new file mode 100644 index 0000000000..5bd347a6a4 --- /dev/null +++ b/source/simulators/benches/sim_time.rs @@ -0,0 +1,100 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#![allow(clippy::unit_arg)] + +use criterion::{Criterion, criterion_group, criterion_main}; +use qdk_simulators::{ + QubitID, Simulator as _, + noise_config::{CumulativeNoiseConfig, NoiseConfig}, + stabilizer_simulator::{ + StabilizerSimulator, + noise::Fault, + operation::{Operation, cz, h, id, mov, mz, s, x, y, z}, + }, +}; +use rand::{SeedableRng, distributions::Uniform, prelude::Distribution, rngs::StdRng}; +use std::hint::black_box; +use std::sync::Arc; + +const SEED: u32 = 1000; +const NUM_QUBITS: usize = 1_224; + +fn random_qubit(rng: &mut StdRng) -> QubitID { + let distr = Uniform::new(0, usize::MAX); + distr.sample(rng) % NUM_QUBITS +} + +fn gate(rng: &mut StdRng) -> Operation { + let distr = Uniform::new(0, usize::MAX); + let gate = distr.sample(rng) % 8; + + match gate { + 0 => id(random_qubit(rng)), + 1 => x(random_qubit(rng)), + 2 => y(random_qubit(rng)), + 3 => z(random_qubit(rng)), + 4 => h(random_qubit(rng)), + 5 => s(random_qubit(rng)), + 6 => cz(random_qubit(rng), random_qubit(rng)), + 7 => mov(random_qubit(rng)), + _ => unreachable!(), + } +} + +fn random_gates(num_gates: usize) -> Vec { + let mut rng = StdRng::seed_from_u64(u64::from(SEED)); + let mut gates: Vec = Vec::with_capacity(num_gates); + for _ in 0..num_gates { + gates.push(gate(&mut rng)); + } + for q in 0..NUM_QUBITS { + gates.push(mz(q)); + } + gates +} + +fn sim_1k_gates(c: &mut Criterion) { + const NUM_GATES: usize = 1_000; + let gates = random_gates(NUM_GATES); + let noise: Arc> = + Arc::new(>::NOISELESS.into()); + c.bench_function("1k gates", |b| { + b.iter(|| { + let mut simulator = + StabilizerSimulator::new(NUM_QUBITS, NUM_QUBITS, SEED, noise.clone()); + black_box(simulator.apply_gates(black_box(&gates))); + }); + }); +} + +fn sim_20k_gates(c: &mut Criterion) { + const NUM_GATES: usize = 20_000; + let gates = random_gates(NUM_GATES); + let noise: Arc> = + Arc::new(>::NOISELESS.into()); + c.bench_function("20k gates", |b| { + b.iter(|| { + let mut simulator = + StabilizerSimulator::new(NUM_QUBITS, NUM_QUBITS, SEED, noise.clone()); + black_box(simulator.apply_gates(black_box(&gates))); + }); + }); +} + +fn sim_1m_gates(c: &mut Criterion) { + const NUM_GATES: usize = 1_000_000; + let gates = random_gates(NUM_GATES); + let noise: Arc> = + Arc::new(>::NOISELESS.into()); + c.bench_function("1m gates", |b| { + b.iter(|| { + let mut simulator = + StabilizerSimulator::new(NUM_QUBITS, NUM_QUBITS, SEED, noise.clone()); + black_box(simulator.apply_gates(black_box(&gates))); + }); + }); +} + +criterion_group!(benches, sim_1k_gates, sim_20k_gates, sim_1m_gates); +criterion_main!(benches); diff --git a/source/simulators/benches/sim_time_noisy.rs b/source/simulators/benches/sim_time_noisy.rs new file mode 100644 index 0000000000..263e995b79 --- /dev/null +++ b/source/simulators/benches/sim_time_noisy.rs @@ -0,0 +1,126 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#![allow(clippy::unit_arg)] + +use criterion::{Criterion, criterion_group, criterion_main}; +use qdk_simulators::{ + QubitID, Simulator as _, + noise_config::{ + CumulativeNoiseConfig, IdleNoiseParams, NoiseConfig, NoiseTable, const_empty_hash_map, + }, + stabilizer_simulator::{ + StabilizerSimulator, + noise::Fault, + operation::{Operation, cz, h, id, mov, mz, s, x, y, z}, + }, +}; +use rand::{SeedableRng, distributions::Uniform, prelude::Distribution, rngs::StdRng}; +use std::{hint::black_box, sync::Arc}; + +const SEED: u32 = 1000; +const NUM_QUBITS: usize = 1_224; +const NOISE_CONFIG: NoiseConfig = NoiseConfig { + idle: IdleNoiseParams { + s_probability: 0.01, + }, + i: NoiseTable::noiseless(1), + x: NoiseTable::noiseless(1), + y: NoiseTable::noiseless(1), + z: NoiseTable::noiseless(1), + h: NoiseTable::noiseless(1), + s: NoiseTable::noiseless(1), + s_adj: NoiseTable::noiseless(1), + t: NoiseTable::noiseless(1), + t_adj: NoiseTable::noiseless(1), + sx: NoiseTable::noiseless(1), + sx_adj: NoiseTable::noiseless(1), + rx: NoiseTable::noiseless(1), + ry: NoiseTable::noiseless(1), + rz: NoiseTable::noiseless(1), + cx: NoiseTable::noiseless(2), + cz: NoiseTable::noiseless(2), + rxx: NoiseTable::noiseless(2), + ryy: NoiseTable::noiseless(2), + rzz: NoiseTable::noiseless(2), + swap: NoiseTable::noiseless(2), + mov: NoiseTable::noiseless(1), + mresetz: NoiseTable::noiseless(1), + intrinsics: const_empty_hash_map(), +}; + +fn random_qubit(rng: &mut StdRng) -> QubitID { + let distr = Uniform::new(0, usize::MAX); + distr.sample(rng) % NUM_QUBITS +} + +fn gate(rng: &mut StdRng) -> Operation { + let distr = Uniform::new(0, usize::MAX); + let gate = distr.sample(rng) % 8; + + match gate { + 0 => id(random_qubit(rng)), + 1 => x(random_qubit(rng)), + 2 => y(random_qubit(rng)), + 3 => z(random_qubit(rng)), + 4 => h(random_qubit(rng)), + 5 => s(random_qubit(rng)), + 6 => cz(random_qubit(rng), random_qubit(rng)), + 7 => mov(random_qubit(rng)), + _ => unreachable!(), + } +} + +fn random_gates(num_gates: usize) -> Vec { + let mut rng = StdRng::seed_from_u64(u64::from(SEED)); + let mut gates: Vec = Vec::with_capacity(num_gates); + for _ in 0..num_gates { + gates.push(gate(&mut rng)); + } + for q in 0..NUM_QUBITS { + gates.push(mz(q)); + } + gates +} + +fn sim_1k_gates(c: &mut Criterion) { + const NUM_GATES: usize = 1_000; + let gates = random_gates(NUM_GATES); + let noise: Arc> = Arc::new(NOISE_CONFIG.into()); + c.bench_function("1k gates", |b| { + b.iter(|| { + let mut simulator = + StabilizerSimulator::new(NUM_QUBITS, NUM_QUBITS, SEED, noise.clone()); + black_box(simulator.apply_gates(black_box(&gates))); + }); + }); +} + +fn sim_20k_gates(c: &mut Criterion) { + const NUM_GATES: usize = 20_000; + let gates = random_gates(NUM_GATES); + let noise: Arc> = Arc::new(NOISE_CONFIG.into()); + c.bench_function("20k gates", |b| { + b.iter(|| { + let mut simulator = + StabilizerSimulator::new(NUM_QUBITS, NUM_QUBITS, SEED, noise.clone()); + black_box(simulator.apply_gates(black_box(&gates))); + }); + }); +} + +fn sim_1m_gates(c: &mut Criterion) { + const NUM_GATES: usize = 1_000_000; + let gates = random_gates(NUM_GATES); + let noise: Arc> = Arc::new(NOISE_CONFIG.into()); + c.bench_function("1m gates", |b| { + b.iter(|| { + let mut simulator = + StabilizerSimulator::new(NUM_QUBITS, NUM_QUBITS, SEED, noise.clone()); + black_box(simulator.apply_gates(black_box(&gates))); + }); + }); +} + +criterion_group!(benches, sim_1k_gates, sim_20k_gates, sim_1m_gates); +criterion_main!(benches); diff --git a/source/simulators/src/bin/calls_short.ir b/source/simulators/src/bin/calls_short.ir new file mode 100644 index 0000000000..e921df85a8 --- /dev/null +++ b/source/simulators/src/bin/calls_short.ir @@ -0,0 +1,277 @@ + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Result* inttoptr (i64 2 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 3 to %Qubit*), %Result* inttoptr (i64 3 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 4 to %Qubit*), %Result* inttoptr (i64 4 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Result* inttoptr (i64 5 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 10 to %Qubit*), %Result* inttoptr (i64 6 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Result* inttoptr (i64 7 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 12 to %Qubit*), %Result* inttoptr (i64 8 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 13 to %Qubit*), %Result* inttoptr (i64 9 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Result* inttoptr (i64 10 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 15 to %Qubit*), %Result* inttoptr (i64 11 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Result* inttoptr (i64 12 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 17 to %Qubit*), %Result* inttoptr (i64 13 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 18 to %Qubit*), %Result* inttoptr (i64 14 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Result* inttoptr (i64 15 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 20 to %Qubit*), %Result* inttoptr (i64 16 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Result* inttoptr (i64 17 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 22 to %Qubit*), %Result* inttoptr (i64 18 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 23 to %Qubit*), %Result* inttoptr (i64 19 to %Result*)) diff --git a/source/simulators/src/bin/gpu-runner.rs b/source/simulators/src/bin/gpu-runner.rs new file mode 100644 index 0000000000..54bb27dacf --- /dev/null +++ b/source/simulators/src/bin/gpu-runner.rs @@ -0,0 +1,919 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +// Used for local testing of the GPU runner (e.g. profiling in Xcode) + +// Run with: cargo run --bin gpu-runner [--release] +// Build with: cargo build --bin gpu-runner [--release] + +use core::panic; +use qdk_simulators::gpu_context::{GpuContext, RunResults}; +use qdk_simulators::noise_config::NoiseConfig; +use qdk_simulators::run_shots_sync; +use qdk_simulators::shader_types::{Op, ops}; +use regex_lite::Regex; +use std::f32::consts::PI; +use std::time::Instant; + +const DEFAULT_SEED: u32 = 0xfeed_face; + +fn main() { + repeated_noise(); + correlated_noise(); + two_measurements(); + just_pauli(); + simple_bell_pair(); + bell_at_scale(); + scale_teleport(); + test_pauli_noise(); + test_simple_rotation_and_entanglement(); + test_2q_pauli_noise(); + test_move_noise(); + test_benzene(); + test_cx_various_state(); + gates_on_lost_qubits(); + scaled_ising(); + scaled_grover(); + noise_config(); +} + +fn check_success(results: &RunResults) { + if !results.success { + let diag = results + .diagnostics + .as_ref() + .expect("GPU run failed without diagnostics"); + panic!( + "GPU run failed with error codes: {:?}. + First failure at shot {}, op index {}, op type {}. + Attach a debugger to see full diagnostics structure.", + results.shot_result_codes, diag.shot.shot_id, diag.shot.op_idx, diag.shot.op_type + ); + } +} + +fn assert_ratio(results: &[Vec], expected: &[u32], expected_ratio: f64, tolerance: f64) { + let actual_count = results.iter().filter(|x| *x == expected).count(); + #[allow(clippy::cast_precision_loss)] + let actual_ratio = actual_count as f64 / results.len() as f64; + assert!( + (expected_ratio - tolerance..=expected_ratio + tolerance).contains(&actual_ratio), + "Expected ratio {expected_ratio:.4}, got {actual_ratio:.4} with tolerance {tolerance:.4}" + ); +} + +fn two_measurements() { + let ops: Vec = vec![ + Op::new_x_gate(0), + Op::new_loss_noise(0, 0.333), + // Should be 33% chance of lost, 66% chance of 1 + + // If not using the noise model processing, need to turn pauli on measurement into Id with noise then mesurement + Op::new_id_gate(0), + Op::new_pauli_noise_1q(0, 0.5, 0.0, 0.0), + Op::new_mresetz_gate(0, 0), + // Measurement will be 50/50 if qubit is not lost, so now 33% chance each of loss, 1, or 2 + Op::new_mresetz_gate(0, 1), + ]; + let start = Instant::now(); + let results = + run_shots_sync(1, 2, &ops, &None, 300, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + // Get a vector of only the first measurement results + let result_0: Vec> = results.shot_results.iter().map(|r| vec![r[0]]).collect(); + assert_ratio(&result_0, &[0], 0.333, 0.1); + assert_ratio(&result_0, &[1], 0.333, 0.1); + assert_ratio(&result_0, &[2], 0.333, 0.1); + + // All of the 2nd measurements should be 0 + assert!( + results.shot_results.iter().all(|r| r[1] == 0), + "All second measurements should be 0, but got {results:?}" + ); + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +fn just_pauli() { + let ops: Vec = vec![ + Op::new_id_gate(0), + // 50% bit and phase flip chance + Op::new_pauli_noise_1q(0, 0.0, 0.5, 0.0), + Op::new_mresetz_gate(0, 0), + ]; + let start = Instant::now(); + let results = + run_shots_sync(1, 1, &ops, &None, 100, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + // Verify the results are 50/50 + assert_ratio(&results.shot_results, &[0], 0.5, 0.1); + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +fn simple_bell_pair() { + let ops: Vec = vec![ + Op::new_h_gate(9), // 5, 9 + Op::new_cx_gate(9, 11), // 15, 9, 11 + Op::new_mresetz_gate(9, 0), // 22, 9, 0 + Op::new_mresetz_gate(11, 1), // 22, 11, 1 + ]; + let start = Instant::now(); + let results = + run_shots_sync(12, 2, &ops, &None, 100, DEFAULT_SEED, 0).expect("GPU shots failed"); + //let results = run_parallel_shots(12, 2, ops, 100, DEFAULT_SEED).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + assert_ratio(&results.shot_results, &[0, 0], 0.5, 0.1); + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +fn test_pauli_noise() { + let x_noise: f32 = 0.5; + + let ops: Vec = vec![ + Op::new_x_gate(0), + Op::new_pauli_noise_1q(0, x_noise, 0.0, 0.0), + Op::new_mresetz_gate(0, 0), + Op::new_x_gate(1), + Op::new_pauli_noise_1q(1, x_noise, 0.0, 0.0), + Op::new_mresetz_gate(1, 1), + Op::new_x_gate(2), + Op::new_pauli_noise_1q(2, x_noise, 0.0, 0.0), + Op::new_mresetz_gate(2, 2), + ]; + let start = Instant::now(); + let results = + run_shots_sync(3, 3, &ops, &None, 100, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + let num_flipped = results + .shot_results + .iter() + .flatten() + .filter(|&&x| x == 0) + .count(); + assert!( + (140..=160).contains(&num_flipped), + "Expected 140-160 results to be flipped to 0, got {num_flipped}" + ); + + println!( + "[GPU Runner]: Run 100 shots of X with pauli noise of {x_noise}: {:?}", + results.shot_results + ); + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +fn gates_on_lost_qubits() { + let angle: f32 = PI / 2.0; + + let ops: Vec = vec![ + Op::new_x_gate(0), + Op::new_loss_noise(0, 0.1), + Op::new_x_gate(1), + Op::new_loss_noise(1, 0.1), + Op::new_cx_gate(0, 1), + Op::new_rx_gate(angle, 2), + Op::new_rx_gate(angle, 2), + Op::new_mresetz_gate(0, 0), + Op::new_mresetz_gate(1, 1), + Op::new_mresetz_gate(2, 2), + ]; + let start = Instant::now(); + let results = + run_shots_sync(3, 3, &ops, &None, 1000, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); + check_success(&results); + // Qubit 2 should always be 1 after two Rx(pi/2) gates (and never lost) + assert!( + results.shot_results.iter().all(|r| r[2] == 1), + "Qubit 2 should always be 1 after two Rx(pi/2) gates, got {results:?}" + ); + // Qubit 0 should be lost about 10% of the time, else 1 + let qubit_0_results: Vec> = results.shot_results.iter().map(|r| vec![r[0]]).collect(); + assert_ratio(&qubit_0_results, &[2], 0.1, 0.05); + assert_ratio(&qubit_0_results, &[1], 0.9, 0.05); + + // Qubit 1 should be lost about 10% of the time, 1 about 9% of the time (when 0 is lost and this isn't), else 0 + let qubit_1_results: Vec> = results.shot_results.iter().map(|r| vec![r[1]]).collect(); + assert_ratio(&qubit_1_results, &[2], 0.1, 0.01); + assert_ratio(&qubit_1_results, &[1], 0.09, 0.01); + assert_ratio(&qubit_1_results, &[0], 0.8, 0.01); +} + +fn scale_teleport() { + // Create a circuit that does an Rx by a random amount, does a teleport using controlled gates, + // then does the inverse Rx by the same amount, measurement at the end to verify correctness. + /* The teleport itself in Q# would be + H(alice); + CNOT(alice, bob); + + // Encode the message into the entangled pair. + CNOT(msg, alice); + H(msg); + + CNOT(alice, bob); + Controlled Z([msg], bob); + */ + + use rand::Rng; + + let msg_qubit = 0; + let alice_qubit = 1; + let bob_qubit = 2; + + // Generate random angle between 0 and 2π + let mut rng = rand::thread_rng(); + let angle: f32 = rng.gen_range(0.0..(2.0 * PI)); + + let ops: Vec = vec![ + // Prepare message qubit with rotation + Op::new_rx_gate(angle, msg_qubit), + // Create entangled pair (alice, bob) + Op::new_h_gate(alice_qubit), + Op::new_cx_gate(alice_qubit, bob_qubit), + // Teleport: encode message into entangled pair + Op::new_cx_gate(msg_qubit, alice_qubit), + Op::new_h_gate(msg_qubit), + // Apply corrections on bob based on measurements + Op::new_cx_gate(alice_qubit, bob_qubit), + Op::new_cz_gate(msg_qubit, bob_qubit), + // Apply inverse rotation to verify correctness + Op::new_rx_gate(-angle, bob_qubit), + // Measure all qubits + Op::new_mresetz_gate(msg_qubit, 0), + Op::new_mresetz_gate(alice_qubit, 1), + Op::new_mresetz_gate(bob_qubit, 2), + ]; + + let start = Instant::now(); + let results = + run_shots_sync(3, 3, &ops, &None, 50000, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + // Verify that Bob's qubit (every 3rd result) is always 0 + let bob_results: Vec = results + .shot_results + .iter() + .flatten() + .skip(2) + .step_by(3) + .copied() + .collect(); + let all_zeros = bob_results.iter().all(|&x| x == 0); + let num_ones = bob_results.iter().filter(|&&x| x == 1).count(); + + println!( + "[GPU Runner]: Teleport test with random angle {angle:.4} on 3 qubits for 50000 shots" + ); + println!( + "[GPU Runner]: Bob's qubit results (every 3rd): {} zeros, {} ones", + bob_results.len() - num_ones, + num_ones + ); + println!("[GPU Runner]: All Bob's measurements are 0: {all_zeros}"); + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} +fn bell_at_scale() { + let ops: Vec = vec![ + Op::new_h_gate(0), + Op::new_cx_gate(0, 1), + Op::new_mresetz_gate(0, 0), + Op::new_mresetz_gate(1, 1), + ]; + let start = Instant::now(); + let results = + run_shots_sync(2, 2, &ops, &None, 60000, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + println!( + "[GPU Runner]: 60,000 shots of Bell Pair completed, results length: {}", + results.shot_results.len() + ); + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +fn test_simple_rotation_and_entanglement() { + let ops: Vec = vec![ + Op::new_rx_gate(2.25, 1), + Op::new_cx_gate(1, 12), + Op::new_cx_gate(12, 23), + Op::new_mresetz_gate(1, 0), + Op::new_mresetz_gate(12, 1), + Op::new_mresetz_gate(23, 2), + ]; + // At 24 qubits, 8 shots fits into 1GB of GPU memory. + let start = Instant::now(); + let results = run_shots_sync(24, 3, &ops, &None, 8, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + println!( + "[GPU Runner]: Results of GHZ state for 8 shots on 24 qubits: {:?}", + results.shot_results + ); + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +// Given 2 qubits and a vector of (pauli_string, probability) tuples, make a noise op +fn make_2q_pauli_noise(q1: u32, q2: u32, p: Vec<(&str, f32)>) -> Op { + let mut op = Op::new_2q_gate(ops::PAULI_NOISE_2Q, q1, q2); + let mut total_prob = 0.0; + + for (pauli_str, prob) in p { + match pauli_str { + "IX" => { + op.r01 = prob; + } + "IY" => { + op.r02 = prob; + } + "IZ" => { + op.r03 = prob; + } + "XI" => { + op.r10 = prob; + } + "XX" => { + op.r11 = prob; + } + "XY" => { + op.r12 = prob; + } + "XZ" => { + op.r13 = prob; + } + "YI" => { + op.r20 = prob; + } + "YX" => { + op.r21 = prob; + } + "YY" => { + op.r22 = prob; + } + "YZ" => { + op.r23 = prob; + } + "ZI" => { + op.r30 = prob; + } + "ZX" => { + op.r31 = prob; + } + "ZY" => { + op.r32 = prob; + } + "ZZ" => { + op.r33 = prob; + } + _ => panic!("Invalid pauli string: {}", pauli_str), + } + total_prob += prob; + } + assert!(total_prob <= 1.0, "Total probability exceeds 1.0"); + op.r00 = 1.0 - total_prob; + op +} + +fn test_2q_pauli_noise() { + let ops: Vec = vec![ + Op::new_h_gate(0), + Op::new_cx_gate(0, 1), + make_2q_pauli_noise(0, 1, vec![("XX", 0.1), ("YY", 0.1), ("ZZ", 0.1)]), + Op::new_cx_gate(1, 2), + make_2q_pauli_noise(1, 2, vec![("XX", 0.1), ("YY", 0.1), ("ZZ", 0.1)]), + Op::new_cx_gate(2, 3), + make_2q_pauli_noise(2, 3, vec![("XX", 0.1), ("YY", 0.1), ("ZZ", 0.1)]), + Op::new_cx_gate(3, 4), + make_2q_pauli_noise(3, 4, vec![("XX", 0.1), ("YY", 0.1), ("ZZ", 0.1)]), + Op::new_cx_gate(4, 5), + make_2q_pauli_noise(4, 5, vec![("XX", 0.1), ("YY", 0.1), ("ZZ", 0.1)]), + Op::new_cx_gate(5, 6), + make_2q_pauli_noise(5, 6, vec![("XX", 0.1), ("YY", 0.1), ("ZZ", 0.1)]), + Op::new_cx_gate(6, 7), + make_2q_pauli_noise(6, 7, vec![("XX", 0.1), ("YY", 0.1), ("ZZ", 0.1)]), + Op::new_mresetz_gate(0, 0), + Op::new_mresetz_gate(1, 1), + Op::new_mresetz_gate(2, 2), + Op::new_mresetz_gate(3, 3), + Op::new_mresetz_gate(4, 4), + Op::new_mresetz_gate(5, 5), + Op::new_mresetz_gate(6, 6), + Op::new_mresetz_gate(7, 7), + ]; + let start = Instant::now(); + let results = run_shots_sync(8, 8, &ops, &None, 20, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + // Check the results: The first 3 qubits should always agree, the 4th usually with the first 3, + // and after that it gets messy. + println!( + "[GPU Runner]: Results of 2q Pauli noise: {:?}", + results.shot_results + ); + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +fn test_move_noise() { + let ops: Vec = vec![ + // Move to interaction zone + Op::new_move_gate(0), + Op::new_pauli_noise_1q(0, 0.1, 0.0, 0.0), + // Do 2 SX gates (i.e. one X gate) + Op::new_sx_gate(0), + Op::new_sx_gate(0), + // Move back + Op::new_move_gate(0), + Op::new_pauli_noise_1q(0, 0.1, 0.0, 0.0), + // Move to measurement one + Op::new_mresetz_gate(0, 0), + Op::new_move_gate(0), + Op::new_pauli_noise_1q(0, 0.1, 0.0, 0.0), + ]; + // At 24 qubits, 8 shots fits into 1GB of GPU memory. + let start = Instant::now(); + let results = + run_shots_sync(1, 1, &ops, &None, 100, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + println!( + "[GPU Runner]: Results of move op: {:?}", + results.shot_results + ); + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +fn test_benzene() { + #[allow(clippy::unreadable_literal)] + let ops: Vec = vec![ + Op::new_h_gate(2), + Op::new_pauli_noise_1q(2, 0.000166, 0.000166, 0.000166), + Op::new_rz_gate(1.87, 2), + Op::new_pauli_noise_1q(2, 0.000233, 0.000233, 0.000233), + Op::new_h_gate(2), + Op::new_pauli_noise_1q(2, 0.000166, 0.000166, 0.000166), + Op::new_s_adj_gate(2), + Op::new_pauli_noise_1q(2, 0.000166, 0.000166, 0.000166), + Op::new_x_gate(0), + Op::new_cx_gate(0, 7), + make_2q_pauli_noise( + 0, + 7, + vec![("XX", 0.000166), ("YY", 0.000166), ("ZZ", 0.000166)], + ), + Op::new_cx_gate(0, 6), + make_2q_pauli_noise( + 0, + 6, + vec![("XX", 0.000166), ("YY", 0.000166), ("ZZ", 0.000166)], + ), + Op::new_cx_gate(0, 1), + make_2q_pauli_noise( + 0, + 1, + vec![("XX", 0.000166), ("YY", 0.000166), ("ZZ", 0.000166)], + ), + Op::new_x_gate(3), + Op::new_cx_gate(2, 3), + make_2q_pauli_noise( + 2, + 3, + vec![("XX", 0.000166), ("YY", 0.000166), ("ZZ", 0.000166)], + ), + Op::new_cx_gate(2, 8), + make_2q_pauli_noise( + 2, + 8, + vec![("XX", 0.000166), ("YY", 0.000166), ("ZZ", 0.000166)], + ), + Op::new_cx_gate(3, 9), + make_2q_pauli_noise( + 3, + 9, + vec![("XX", 0.000166), ("YY", 0.000166), ("ZZ", 0.000166)], + ), + Op::new_h_gate(2), + Op::new_pauli_noise_1q(2, 0.000166, 0.000166, 0.000166), + Op::new_h_gate(3), + Op::new_pauli_noise_1q(3, 0.000166, 0.000166, 0.000166), + Op::new_h_gate(8), + Op::new_pauli_noise_1q(8, 0.000166, 0.000166, 0.000166), + Op::new_h_gate(9), + Op::new_pauli_noise_1q(9, 0.000166, 0.000166, 0.000166), + Op::new_mresetz_gate(2, 0), + Op::new_mresetz_gate(3, 1), + Op::new_mresetz_gate(8, 2), + Op::new_mresetz_gate(9, 3), + ]; + let start = Instant::now(); + let results = + run_shots_sync(10, 4, &ops, &None, 1024, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + // TODO: Check that buckets for 1101 & 1110 are over 10%, but 1100 & 1111 are less than 1% + assert!( + results.shot_results[4] == vec![1, 1, 0, 1], + "Expected fourth result to be [1101], got {:?}", + results.shot_results[4] + ); + println!("[GPU Runner]: Benzene elapsed time for 1024 shots: {elapsed:.2?}"); +} + +fn test_cx_various_state() { + let ops: Vec = vec![ + Op::new_x_gate(0), + Op::new_cx_gate(0, 7), + Op::new_cx_gate(0, 6), + Op::new_mresetz_gate(0, 0), + Op::new_mresetz_gate(7, 1), + Op::new_mresetz_gate(6, 2), + ]; + // With 10 qubits, entries should be 1024, so 8kb per shot, i.e. 0x2000 byte size + // After X, entry 0x01 is 1.0. + // For 2 qubit op on qubits 0 and 7 + // - entry00 is bitstring 0 + // - entry01 is bitstring 0x80 (x8 is byte offset 0x400) + // - entry10 is bitstring 0x01 (x8 is byte offset 0x08) + // - entry11 is bitstring 0x81 (x8 is byte offset 0x408) + // + // After first CX, offset 0x408 should be 1.0 (only entry with a value) + // Bitstring at 1.0 is |10000001>. is_1_mask is 129 and is_0_mask is 894. + // + // For 2 qubit CX on qubits 0 and 6 + // - entry00 is bitstring 0 + // - entry01 is bitstring 0x40 (x8 is byte offset 0x200) + // - entry10 is bitstring 0x01 (x8 is byte offset 0x08) + // - entry11 is bitstring 0x41 (x8 is byte offset 0x208) + // All those entries are 0, but qubit 0 is still 100% 1, so should still flip qubit 6 to 1. + // i.e. entry 0x208 (bitstring 0x41) should become density 0.5 and 0x408 (0x81) should be reduced to density 0.5 + // + // To do that, it need to read the value for 0x81, halve it to 0.5, and write back. + // So it needs to NOT skip entry 10000001, even bits 0 and 7 are 100% 1 state, and target is in 0 state. + // is_1_mask: 0010000001 + // is_0_mask: 1101111110 + // entry_xx: 001_00000_ // offset 32 + // entry_00: 0010000000 + // entry_11: 0011000001 + // ~1_mask: 1100111110 + // 00andis0: 0000000000 + // 11and~1: 0000000000 - this and above are both 0, so it shouldn't skip this entry! + // + // There was a bug where the offset wasn't incrementing when skipping entries, and took all this to find it :-/ + let start = Instant::now(); + let results = + run_shots_sync(10, 3, &ops, &None, 10, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + // TODO: Check results 0 & 2 are in the 1 state + println!("[GPU Runner]: CX Various State on 2 qubits for 10 shots: {results:?}"); + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +fn repeated_noise() { + let mut ops: Vec = Vec::new(); + + // Add X(0), X(1), CX(0,1) to the ops 100 times + for _ in 0..100 { + ops.push(Op::new_x_gate(0)); + ops.push(Op::new_x_gate(1)); + ops.push(Op::new_cx_gate(0, 1)); + } + + // Do an Rx(PI/2) on qubit 4 twice + ops.push(Op::new_rx_gate(PI / 2.0, 4)); + ops.push(Op::new_rx_gate(PI / 2.0, 4)); + + // Measure qubits 0-4 + for i in 0..5 { + ops.push(Op::new_mresetz_gate(i, i)); + } + + // Add bit-flip and loss noise to X gates of 0.1% + let mut noise: NoiseConfig = NoiseConfig::NOISELESS.clone(); + noise.x.pauli_strings.push("X".to_string()); + noise.x.probabilities.push(0.001); + noise.x.loss = 0.001; + + let start = Instant::now(); + // Run for 20,000 shots + let results = + run_shots_sync(5, 5, &ops, &Some(noise), 20000, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + /* Compare with the expected results we get from the CPU simulator, which are ('-' == 2 for lost): + + 00001: 13504 (67.52%) + 0-001: 1575 (7.88%) + 01001: 1412 (7.06%) + -0001: 896 (4.48%) + -1001: 854 (4.27%) + 11001: 734 (3.67%) + 10001: 720 (3.60%) + --001: 160 (0.80%) + 1-001: 145 (0.72%) + */ + assert_ratio(&results.shot_results, &[0, 0, 0, 0, 1], 0.675, 0.01); + assert_ratio(&results.shot_results, &[0, 2, 0, 0, 1], 0.078, 0.003); + assert_ratio(&results.shot_results, &[0, 1, 0, 0, 1], 0.071, 0.003); + assert_ratio(&results.shot_results, &[2, 0, 0, 0, 1], 0.045, 0.002); + assert_ratio(&results.shot_results, &[2, 1, 0, 0, 1], 0.043, 0.002); + assert_ratio(&results.shot_results, &[1, 1, 0, 0, 1], 0.037, 0.002); + assert_ratio(&results.shot_results, &[1, 0, 0, 0, 1], 0.036, 0.002); + assert_ratio(&results.shot_results, &[2, 2, 0, 0, 1], 0.008, 0.001); + assert_ratio(&results.shot_results, &[1, 2, 0, 0, 1], 0.007, 0.001); + assert_ratio(&results.shot_results, &[1, 2, 0, 0, 0], 0.0, 0.0); + + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +fn scaled_ising() { + let grover_ir = include_str!("./ising.ll"); + + let mut ops: Vec = Vec::new(); + + // Iterate through grover lines and add ops for each (handling CCX decomposition) + for line in grover_ir.lines() { + let mut line_ops = op_from_ir_line(line); + ops.append(&mut line_ops); + } + + let start = Instant::now(); + // Run for 10 shots, which should scale across 3 batches on the GPU (max 4 per batch) + let results = + run_shots_sync(25, 25, &ops, &None, 10, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + println!("[GPU Runner]: Scaled Ising (5x5) results for 10 shots:"); + for res in &results.shot_results { + println!(" {res:?}"); + } + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +fn scaled_grover() { + let grover_ir = include_str!("./grover_full.ir"); + + let mut ops: Vec = Vec::new(); + + // Iterate through grover lines and add ops for each (handling CCX decomposition) + for line in grover_ir.lines() { + let mut line_ops = op_from_ir_line(line); + ops.append(&mut line_ops); + } + + let start = Instant::now(); + let results = + run_shots_sync(24, 20, &ops, &None, 4, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + for res in &results.shot_results { + assert!( + res == &vec![0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0], + "Expected result to be [01010 x4], got {res:?}", + ); + } + println!("[GPU Runner]: Scaled Grover (2344 ops on 24 qubits) results for 4 shots:"); + for res in &results.shot_results { + println!(" {res:?}"); + } + + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +fn noise_config() { + let mut noise: NoiseConfig = NoiseConfig::NOISELESS.clone(); + noise.x.pauli_strings.push("X".to_string()); + noise.x.probabilities.push(0.5); + noise.x.loss = 0.333_333; + + let ops: Vec = vec![ + Op::new_x_gate(0), + Op::new_x_gate(1), + Op::new_mresetz_gate(0, 0), + Op::new_mresetz_gate(1, 1), + ]; + + let start = Instant::now(); + let results = + run_shots_sync(2, 2, &ops, &Some(noise), 500, DEFAULT_SEED, 0).expect("GPU shots failed"); + let elapsed = start.elapsed(); + check_success(&results); + + let results = results.shot_results; + let result_0: Vec> = results.iter().map(|r| vec![r[0]]).collect(); + let result_1: Vec> = results.iter().map(|r| vec![r[1]]).collect(); + assert_ratio(&result_0, &[0], 0.333, 0.1); + assert_ratio(&result_0, &[1], 0.333, 0.1); + assert_ratio(&result_0, &[2], 0.333, 0.1); + assert_ratio(&result_1, &[0], 0.333, 0.1); + assert_ratio(&result_1, &[1], 0.333, 0.1); + assert_ratio(&result_1, &[2], 0.333, 0.1); + + println!("[GPU Runner]: Elapsed time: {elapsed:.2?}"); +} + +fn correlated_noise() { + let result: Result = futures::executor::block_on(async { + let ops: Vec = vec![ + Op::new_x_gate(0), + Op::new_x_gate(1), + Op::new_correlated_noise_gate(0, &[0, 1]), + Op::new_mresetz_gate(0, 0), + Op::new_mresetz_gate(1, 1), + ]; + let mut context = GpuContext::default(); + context.set_program(&ops, 2, 2); + context.add_correlated_noise_table( + "my_noise", + " +XX,0.25 +ZZ,0.25 +IY,0.125 +YI,0.125 +", + ); + context.run_shots(1000, DEFAULT_SEED, 0).await + }); + let result = result.expect("GPU shots failed"); + check_success(&result); + // Without noise would be 100& [1,1] + // With the noise above, should be 50% [1,1] (II), 25% [0,0] (XX), 12.5% [0,1] (YI), 12.5% [1,0] (IY) + assert_ratio(&result.shot_results, &[0, 0], 0.25, 0.1); + assert_ratio(&result.shot_results, &[1, 1], 0.50, 0.1); + assert_ratio(&result.shot_results, &[0, 1], 0.125, 0.1); + assert_ratio(&result.shot_results, &[1, 0], 0.125, 0.1); +} + +#[allow(clippy::too_many_lines)] +fn op_from_ir_line(line: &str) -> Vec { + let line = line.trim(); + + // Skip non-quantum operation lines + assert!( + line.starts_with("call void @__quantum__qis__"), + "Unexpected IR line: {line}" + ); + + // Regex to parse the entire IR line in one go + let re = Regex::new(r"call void @__quantum__qis__(\w+)__(body|adj).*").expect("Invalid regex"); + let Some(captures) = re.captures(line) else { + panic!("Failed to parse IR line: {line}"); + }; + + let op_name = &captures[1]; + let is_adj = &captures[2] == "adj"; + + // Extract angle parameter for rotation gates + let angle_re = Regex::new(r"double ([+-]?[0-9]*\.?[0-9]+(?:[eE][+-]?[0-9]+)?)") + .expect("Invalid angle regex"); + let angle: Option = angle_re.captures(line).and_then(|cap| cap[1].parse().ok()); + + // Extract qubit and result indices using regex + let qubit_re = Regex::new(r"inttoptr \(i64 (\d+) to %Qubit\*\)").expect("Invalid qubit regex"); + let result_re = + Regex::new(r"inttoptr \(i64 (\d+) to %Result\*\)").expect("Invalid result regex"); + + let qubits: Vec = qubit_re + .captures_iter(line) + .filter_map(|cap| cap[1].parse().ok()) + .collect(); + + let result_ids: Vec = result_re + .captures_iter(line) + .filter_map(|cap| cap[1].parse().ok()) + .collect(); + + // Create operations based on the operation name + match op_name { + "h" => vec![Op::new_h_gate(qubits[0])], + "x" => vec![Op::new_x_gate(qubits[0])], + "y" => vec![Op::new_y_gate(qubits[0])], + "z" => vec![Op::new_z_gate(qubits[0])], + "s" => { + if is_adj { + vec![Op::new_s_adj_gate(qubits[0])] + } else { + vec![Op::new_s_gate(qubits[0])] + } + } + "t" => { + if is_adj { + vec![Op::new_t_adj_gate(qubits[0])] + } else { + vec![Op::new_t_gate(qubits[0])] + } + } + "sx" => { + if is_adj { + vec![Op::new_sx_adj_gate(qubits[0])] + } else { + vec![Op::new_sx_gate(qubits[0])] + } + } + "rx" => { + if let Some(angle_val) = angle { + vec![Op::new_rx_gate(angle_val, qubits[0])] + } else { + eprintln!("Warning: RX gate missing angle parameter"); + Vec::new() + } + } + "ry" => { + if let Some(angle_val) = angle { + vec![Op::new_ry_gate(angle_val, qubits[0])] + } else { + eprintln!("Warning: RY gate missing angle parameter"); + Vec::new() + } + } + "rz" => { + if let Some(angle_val) = angle { + vec![Op::new_rz_gate(angle_val, qubits[0])] + } else { + eprintln!("Warning: RZ gate missing angle parameter"); + Vec::new() + } + } + "cx" => vec![Op::new_cx_gate(qubits[0], qubits[1])], + "cz" => vec![Op::new_cz_gate(qubits[0], qubits[1])], + "rxx" => { + if let Some(angle_val) = angle { + vec![Op::new_rxx_gate(angle_val, qubits[0], qubits[1])] + } else { + eprintln!("Warning: RXX gate missing angle parameter"); + Vec::new() + } + } + "ryy" => { + if let Some(angle_val) = angle { + vec![Op::new_ryy_gate(angle_val, qubits[0], qubits[1])] + } else { + eprintln!("Warning: RYY gate missing angle parameter"); + Vec::new() + } + } + "rzz" => { + if let Some(angle_val) = angle { + vec![Op::new_rzz_gate(angle_val, qubits[0], qubits[1])] + } else { + eprintln!("Warning: RZZ gate missing angle parameter"); + Vec::new() + } + } + "m" | "mresetz" => vec![Op::new_mresetz_gate(qubits[0], result_ids[0])], + "ccx" => { + // Decompose CCX (Toffoli) gate as per the Python implementation + let ctrl1 = qubits[0]; + let ctrl2 = qubits[1]; + let target = qubits[2]; + + vec![ + Op::new_h_gate(target), + Op::new_t_adj_gate(ctrl1), + Op::new_t_adj_gate(ctrl2), + Op::new_h_gate(ctrl1), + Op::new_cz_gate(target, ctrl1), + Op::new_h_gate(ctrl1), + Op::new_t_gate(ctrl1), + Op::new_h_gate(target), + Op::new_cz_gate(ctrl2, target), + Op::new_h_gate(target), + Op::new_h_gate(ctrl1), + Op::new_cz_gate(ctrl2, ctrl1), + Op::new_h_gate(ctrl1), + Op::new_t_gate(target), + Op::new_t_adj_gate(ctrl1), + Op::new_h_gate(target), + Op::new_cz_gate(ctrl2, target), + Op::new_h_gate(target), + Op::new_h_gate(ctrl1), + Op::new_cz_gate(target, ctrl1), + Op::new_h_gate(ctrl1), + Op::new_t_adj_gate(target), + Op::new_t_gate(ctrl1), + Op::new_h_gate(ctrl1), + Op::new_cz_gate(ctrl2, ctrl1), + Op::new_h_gate(ctrl1), + Op::new_h_gate(target), + ] + } + _ => { + eprintln!("Warning: Unrecognized operation: {op_name}"); + Vec::new() + } + } +} diff --git a/source/simulators/src/bin/grover_full.ir b/source/simulators/src/bin/grover_full.ir new file mode 100644 index 0000000000..38de176a8f --- /dev/null +++ b/source/simulators/src/bin/grover_full.ir @@ -0,0 +1,2344 @@ + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 23 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 23 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 23 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 23 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__ccx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__t__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__x__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Result* inttoptr (i64 2 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 3 to %Qubit*), %Result* inttoptr (i64 3 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 4 to %Qubit*), %Result* inttoptr (i64 4 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Result* inttoptr (i64 5 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 10 to %Qubit*), %Result* inttoptr (i64 6 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Result* inttoptr (i64 7 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 12 to %Qubit*), %Result* inttoptr (i64 8 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 13 to %Qubit*), %Result* inttoptr (i64 9 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Result* inttoptr (i64 10 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 15 to %Qubit*), %Result* inttoptr (i64 11 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Result* inttoptr (i64 12 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 17 to %Qubit*), %Result* inttoptr (i64 13 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 18 to %Qubit*), %Result* inttoptr (i64 14 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Result* inttoptr (i64 15 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 20 to %Qubit*), %Result* inttoptr (i64 16 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Result* inttoptr (i64 17 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 22 to %Qubit*), %Result* inttoptr (i64 18 to %Result*)) + call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 23 to %Qubit*), %Result* inttoptr (i64 19 to %Result*)) diff --git a/source/simulators/src/bin/ising.ll b/source/simulators/src/bin/ising.ll new file mode 100644 index 0000000000..b1fbf5f847 --- /dev/null +++ b/source/simulators/src/bin/ising.ll @@ -0,0 +1,475 @@ + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 3 to %Qubit*), %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 15 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 17 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 20 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 22 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 23 to %Qubit*), %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 15 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 17 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 3 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 3 to %Qubit*), %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 15 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 17 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 20 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 22 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 23 to %Qubit*), %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 15 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 17 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 3 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 3 to %Qubit*), %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 15 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 17 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 20 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 22 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 23 to %Qubit*), %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 15 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 17 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 3 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 3 to %Qubit*), %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 15 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 17 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 20 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 22 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 23 to %Qubit*), %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 15 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 17 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 3 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 3 to %Qubit*), %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 15 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 17 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 20 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 22 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 21 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 23 to %Qubit*), %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 5 to %Qubit*), %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 15 to %Qubit*), %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 1 to %Qubit*), %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 11 to %Qubit*), %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 7 to %Qubit*), %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 17 to %Qubit*), %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 3 to %Qubit*), %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 13 to %Qubit*), %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 9 to %Qubit*), %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rzz__body(double 1.6, %Qubit* inttoptr (i64 19 to %Qubit*), %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 3 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 4 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 5 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 6 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 7 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 8 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 9 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 10 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 11 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 12 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 13 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 14 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 15 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 16 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 17 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 18 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 19 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 20 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 21 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 22 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 23 to %Qubit*)) + call void @__quantum__qis__rx__body(double -1.1199999999999999, %Qubit* inttoptr (i64 24 to %Qubit*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Result* inttoptr (i64 2 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 3 to %Qubit*), %Result* inttoptr (i64 3 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 4 to %Qubit*), %Result* inttoptr (i64 4 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 5 to %Qubit*), %Result* inttoptr (i64 5 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Result* inttoptr (i64 6 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 7 to %Qubit*), %Result* inttoptr (i64 7 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Result* inttoptr (i64 8 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 9 to %Qubit*), %Result* inttoptr (i64 9 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 10 to %Qubit*), %Result* inttoptr (i64 10 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 11 to %Qubit*), %Result* inttoptr (i64 11 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 12 to %Qubit*), %Result* inttoptr (i64 12 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 13 to %Qubit*), %Result* inttoptr (i64 13 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Result* inttoptr (i64 14 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 15 to %Qubit*), %Result* inttoptr (i64 15 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Result* inttoptr (i64 16 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 17 to %Qubit*), %Result* inttoptr (i64 17 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 18 to %Qubit*), %Result* inttoptr (i64 18 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 19 to %Qubit*), %Result* inttoptr (i64 19 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 20 to %Qubit*), %Result* inttoptr (i64 20 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 21 to %Qubit*), %Result* inttoptr (i64 21 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 22 to %Qubit*), %Result* inttoptr (i64 22 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 23 to %Qubit*), %Result* inttoptr (i64 23 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 24 to %Qubit*), %Result* inttoptr (i64 24 to %Result*)) diff --git a/source/simulators/src/cpu_full_state_simulator.rs b/source/simulators/src/cpu_full_state_simulator.rs new file mode 100644 index 0000000000..6c7fd82571 --- /dev/null +++ b/source/simulators/src/cpu_full_state_simulator.rs @@ -0,0 +1,866 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +pub mod noise; + +use crate::{ + MeasurementResult, QubitID, Simulator, + noise_config::{CumulativeNoiseConfig, IntrinsicID}, +}; +use core::f64; +use nalgebra::Complex; +use noise::Fault; +use noisy_simulator::{ + Instrument, NoisySimulator as _, Operation, StateVectorSimulator, operation, +}; +use rand::{SeedableRng as _, rngs::StdRng}; +use std::sync::{Arc, LazyLock}; + +static X: LazyLock = LazyLock::new(|| { + operation!([0., 1.; + 1., 0.;]) + .expect("operation should be valid") +}); + +static Y: LazyLock = LazyLock::new(|| { + let i = Complex::I; + operation!([0., -i; + i, 0.;]) + .expect("operation should be valid") +}); + +static Z: LazyLock = LazyLock::new(|| { + operation!([1., 0.; + 0., -1.;]) + .expect("operation should be valid") +}); + +static H: LazyLock = LazyLock::new(|| { + let f = 0.5_f64.sqrt(); + operation!([f, f; + f, -f;]) + .expect("operation should be valid") +}); + +static S: LazyLock = LazyLock::new(|| { + let i = Complex::I; + operation!([1., 0.; + 0., i;]) + .expect("operation should be valid") +}); + +static S_ADJ: LazyLock = LazyLock::new(|| { + let i = Complex::I; + operation!([1., 0.; + 0., -i;]) + .expect("operation should be valid") +}); + +static SX: LazyLock = LazyLock::new(|| { + let i = Complex::I; + operation!([(1. + i) / 2., (1. - i) / 2.; + (1. - i) / 2., (1. + i) / 2.;]) + .expect("operation should be valid") +}); + +static SX_ADJ: LazyLock = LazyLock::new(|| { + let i = Complex::I; + operation!([(1. - i) / 2., (1. + i) / 2.; + (1. + i) / 2., (1. - i) / 2.;]) + .expect("operation should be valid") +}); + +static T: LazyLock = LazyLock::new(|| { + let i = Complex::I; + operation!([1., 0.; + 0., (i * f64::consts::FRAC_PI_4).exp();]) + .expect("operation should be valid") +}); + +static T_ADJ: LazyLock = LazyLock::new(|| { + let i = Complex::I; + operation!([1., 0.; + 0., (-i * f64::consts::FRAC_PI_4).exp();]) + .expect("operation should be valid") +}); + +static CX: LazyLock = LazyLock::new(|| { + operation!([1., 0., 0., 0.; + 0., 0., 0., 1.; + 0., 0., 1., 0.; + 0., 1., 0., 0.;]) + .expect("operation should be valid") +}); + +static CZ: LazyLock = LazyLock::new(|| { + operation!([1., 0., 0., 0.; + 0., 1., 0., 0.; + 0., 0., 1., 0.; + 0., 0., 0., -1.;]) + .expect("operation should be valid") +}); + +static SWAP: LazyLock = LazyLock::new(|| { + operation!([1., 0., 0., 0.; + 0., 0., 1., 0.; + 0., 1., 0., 0.; + 0., 0., 0., 1.;]) + .expect("operation should be valid") +}); + +static MZ: LazyLock = LazyLock::new(|| { + let mz0 = operation!([1., 0.; + 0., 0.;]) + .expect("operation should be valid"); + let mz1 = operation!([0., 0.; + 0., 1.;]) + .expect("operation should be valid"); + Instrument::new(vec![mz0, mz1]).expect("instrument should be valid") +}); + +fn rx(angle: f64) -> Operation { + let sin = (angle / 2.0).sin(); + let cos = (angle / 2.0).cos(); + let i = Complex::I; + operation!([ cos, -i * sin; + -i * sin, cos]) + .expect("operation should be valid") +} + +fn ry(angle: f64) -> Operation { + let sin = (angle / 2.0).sin(); + let cos = (angle / 2.0).cos(); + operation!([cos, -sin; + sin, cos]) + .expect("operation should be valid") +} + +fn rz(angle: f64) -> Operation { + let i = Complex::I; + let a = (-i * angle / 2.0).exp(); + let b = (i * angle / 2.0).exp(); + operation!([a, 0.; + 0., b]) + .expect("operation should be valid") +} + +fn rxx(angle: f64) -> Operation { + let i = Complex::I; + let sin = (angle / 2.0).sin(); + let cos = (angle / 2.0).cos(); + let a = -i * sin; + let b = cos; + operation!([b, 0., 0., a; + 0., b, a, 0.; + 0., a, b, 0.; + a, 0., 0., b; + + ]) + .expect("operation should be valid") +} + +fn ryy(angle: f64) -> Operation { + let i = Complex::I; + let sin = (angle / 2.0).sin(); + let cos = (angle / 2.0).cos(); + let a = i * sin; + let b = cos; + operation!([b, 0., 0., a; + 0., b, -a, 0.; + 0., -a, b, 0.; + a, 0., 0., b; + + ]) + .expect("operation should be valid") +} + +fn rzz(angle: f64) -> Operation { + let i = Complex::I; + let a = (-i * angle / 2.0).exp(); + let b = (i * angle / 2.0).exp(); + operation!([a, 0., 0., 0.; + 0., b, 0., 0.; + 0., 0., b, 0.; + 0., 0., 0., a; + + ]) + .expect("operation should be valid") +} + +/// A noiseless state-vector simulator. +pub struct NoiselessSimulator { + /// The current state of the simulation. + state: StateVectorSimulator, + /// Measurement results. + measurements: Vec, +} + +impl NoiselessSimulator { + /// Records a z-measurement on the given `target`. + fn record_mz(&mut self, target: QubitID, result_id: QubitID) { + let measurement = self.mz_impl(target); + self.measurements[result_id] = measurement; + } + + /// Records a z-measurement on the given `target` and reset the qubit to the zero state. + fn record_mresetz(&mut self, target: QubitID, result_id: QubitID) { + let measurement = self.mresetz_impl(target); + self.measurements[result_id] = measurement; + } + + /// Measures a Z observable on the given `target`. + fn mz_impl(&mut self, target: QubitID) -> MeasurementResult { + // MZ on `target`. + let r = self + .state + .apply_instrument(&MZ, &[target]) + .expect("apply_instrument should succeed"); + + if r == 1 { + MeasurementResult::One + } else { + MeasurementResult::Zero + } + } + + /// Measures a Z observable on the given `target` and reset the qubit to the zero state. + fn mresetz_impl(&mut self, target: QubitID) -> MeasurementResult { + // MZ on `target`. + let r = self + .state + .apply_instrument(&MZ, &[target]) + .expect("apply_instrument should succeed"); + + if r == 1 { + // Reset `target` to zero state. + self.state + .apply_operation(&X, &[target]) + .expect("apply_operation should succeed"); + MeasurementResult::One + } else { + MeasurementResult::Zero + } + } +} + +impl Simulator for NoiselessSimulator { + type Noise = (); + + fn new(num_qubits: usize, num_results: usize, seed: u32, _noise: Self::Noise) -> Self { + Self { + state: StateVectorSimulator::new_with_seed(num_qubits, seed.into()), + measurements: vec![MeasurementResult::Zero; num_results], + } + } + + fn x(&mut self, target: QubitID) { + self.state + .apply_operation(&X, &[target]) + .expect("apply_operation should succeed"); + } + + fn y(&mut self, target: QubitID) { + self.state + .apply_operation(&Y, &[target]) + .expect("apply_operation should succeed"); + } + + fn z(&mut self, target: QubitID) { + self.state + .apply_operation(&Z, &[target]) + .expect("apply_operation should succeed"); + } + + fn h(&mut self, target: QubitID) { + self.state + .apply_operation(&H, &[target]) + .expect("apply_operation should succeed"); + } + + fn s(&mut self, target: QubitID) { + self.state + .apply_operation(&S, &[target]) + .expect("apply_operation should succeed"); + } + + fn s_adj(&mut self, target: QubitID) { + self.state + .apply_operation(&S_ADJ, &[target]) + .expect("apply_operation should succeed"); + } + + fn sx(&mut self, target: QubitID) { + self.state + .apply_operation(&SX, &[target]) + .expect("apply_operation should succeed"); + } + + fn sx_adj(&mut self, target: QubitID) { + self.state + .apply_operation(&SX_ADJ, &[target]) + .expect("apply_operation should succeed"); + } + + fn t(&mut self, target: QubitID) { + self.state + .apply_operation(&T, &[target]) + .expect("apply_operation should succeed"); + } + + fn t_adj(&mut self, target: QubitID) { + self.state + .apply_operation(&T_ADJ, &[target]) + .expect("apply_operation should succeed"); + } + + fn rx(&mut self, angle: f64, target: QubitID) { + self.state + .apply_operation(&rx(angle), &[target]) + .expect("apply_operation should succeed"); + } + + fn ry(&mut self, angle: f64, target: QubitID) { + self.state + .apply_operation(&ry(angle), &[target]) + .expect("apply_operation should succeed"); + } + + fn rz(&mut self, angle: f64, target: QubitID) { + self.state + .apply_operation(&rz(angle), &[target]) + .expect("apply_operation should succeed"); + } + + fn cx(&mut self, control: QubitID, target: QubitID) { + self.state + .apply_operation(&CX, &[control, target]) + .expect("apply_operation should succeed"); + } + + fn cz(&mut self, control: QubitID, target: QubitID) { + self.state + .apply_operation(&CZ, &[control, target]) + .expect("apply_operation should succeed"); + } + + fn rxx(&mut self, angle: f64, q1: QubitID, q2: QubitID) { + self.state + .apply_operation(&rxx(angle), &[q1, q2]) + .expect("apply_operation should succeed"); + } + + fn ryy(&mut self, angle: f64, q1: QubitID, q2: QubitID) { + self.state + .apply_operation(&ryy(angle), &[q1, q2]) + .expect("apply_operation should succeed"); + } + + fn rzz(&mut self, angle: f64, q1: QubitID, q2: QubitID) { + self.state + .apply_operation(&rzz(angle), &[q1, q2]) + .expect("apply_operation should succeed"); + } + + fn swap(&mut self, q1: QubitID, q2: QubitID) { + self.state + .apply_operation(&SWAP, &[q1, q2]) + .expect("apply_operation should succeed"); + } + + fn mz(&mut self, target: QubitID, result_id: QubitID) { + self.record_mz(target, result_id); + } + + fn mresetz(&mut self, target: QubitID, result_id: QubitID) { + self.record_mresetz(target, result_id); + } + + fn resetz(&mut self, target: QubitID) { + self.mresetz_impl(target); + } + + fn measurements(&self) -> &[MeasurementResult] { + &self.measurements + } + + fn take_measurements(&mut self) -> Vec { + std::mem::take(&mut self.measurements) + } + + fn mov(&mut self, _target: QubitID) { + // MOV instruction is a no-op for the noiseless simulator. + } + + fn correlated_noise_intrinsic(&mut self, _intrinsic_id: IntrinsicID, _targets: &[usize]) { + // Noise is a no-op for the noiseless simulator. + } +} + +/// A noisy state-vector simulator. +pub struct NoisySimulator { + /// The noise configuration for the simulation. + noise_config: Arc>, + /// Random number generator used to sample from [`Self::noise_config`]. + rng: StdRng, + /// The current state of the simulation. + state: StateVectorSimulator, + /// A vector storing whether a qubit was lost or not. + loss: Vec, + /// Measurement results. + measurements: Vec, + /// The last time each qubit was operated upon. + last_operation_time: Vec, + /// Current simulation time. + time: u32, +} + +impl NoisySimulator { + /// Increment the simulation time by one. + /// This is used to compute the idle noise on qubits. + pub fn step(&mut self) { + self.time += 1; + } + + /// Increment the simulation time by `steps`. + /// This is used to compute the idle noise on qubits. + pub fn steps(&mut self, steps: u32) { + self.time += steps; + } + + /// Reload a qubit. + pub fn reload_qubit(&mut self, target: QubitID) { + self.loss[target] = false; + } + + /// Reload a list of qubits. + pub fn reload_qubits(&mut self, targets: &[QubitID]) { + for q in targets { + self.reload_qubit(*q); + } + } + + fn apply_idle_noise(&mut self, target: QubitID) { + let idle_time = self.time - self.last_operation_time[target]; + self.last_operation_time[target] = self.time; + let fault = self.noise_config.gen_idle_fault(&mut self.rng, idle_time); + self.apply_fault(fault, &[target]); + } + + fn apply_fault(&mut self, fault: Fault, targets: &[QubitID]) { + match fault { + Fault::None => (), + Fault::Pauli(pauli_string) => { + for (pauli, target) in pauli_string.iter().zip(targets) { + // We don't apply faults on lost qubits. + if self.loss[*target] { + continue; + } + match pauli { + noise::PauliFault::I => (), + noise::PauliFault::X => self + .state + .apply_operation(&X, &[*target]) + .expect("apply_operation should succeed"), + noise::PauliFault::Y => self + .state + .apply_operation(&Y, &[*target]) + .expect("apply_operation should succeed"), + noise::PauliFault::Z => self + .state + .apply_operation(&Z, &[*target]) + .expect("apply_operation should succeed"), + } + } + } + Fault::S => { + if !self.loss[targets[0]] { + self.state + .apply_operation(&S, targets) + .expect("apply_operation should succeed"); + } + } + Fault::Loss => { + for target in targets { + self.mresetz_impl(*target); + self.loss[*target] = true; + } + } + } + } + + /// Records a z-measurement on the given `target`. + fn record_mz(&mut self, target: QubitID, result_id: QubitID) { + let measurement = self.mz_impl(target); + self.measurements[result_id] = measurement; + } + + /// Records a z-measurement on the given `target` and resets the qubit to the zero state. + fn record_mresetz(&mut self, target: QubitID, result_id: QubitID) { + let measurement = self.mresetz_impl(target); + self.measurements[result_id] = measurement; + } + + /// Measures a Z observable on the given `target`. + fn mz_impl(&mut self, target: QubitID) -> MeasurementResult { + if self.loss[target] { + self.loss[target] = false; + return MeasurementResult::Loss; + } + + // MZ on `target`. + let r = self + .state + .apply_instrument(&MZ, &[target]) + .expect("apply_instrument should succeed"); + + if r == 1 { + MeasurementResult::One + } else { + MeasurementResult::Zero + } + } + + /// Measures a Z observable on the given `target` and reset the target to the zero state. + fn mresetz_impl(&mut self, target: QubitID) -> MeasurementResult { + if self.loss[target] { + self.loss[target] = false; + return MeasurementResult::Loss; + } + + // MZ on `target`. + let r = self + .state + .apply_instrument(&MZ, &[target]) + .expect("apply_instrument should succeed"); + + if r == 1 { + // Reset `target` to zero state. + self.state + .apply_operation(&X, &[target]) + .expect("apply_operation should succeed"); + MeasurementResult::One + } else { + MeasurementResult::Zero + } + } +} + +impl Simulator for NoisySimulator { + type Noise = Arc>; + + fn new(num_qubits: usize, num_results: usize, seed: u32, noise_config: Self::Noise) -> Self { + Self { + noise_config, + rng: StdRng::seed_from_u64(u64::from(seed)), + state: StateVectorSimulator::new_with_seed(num_qubits, seed.into()), + loss: vec![false; num_qubits], + measurements: vec![MeasurementResult::Zero; num_results], + last_operation_time: vec![0; num_qubits], + time: 0, + } + } + + fn x(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&X, &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.x.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn y(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&Y, &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.y.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn z(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&Z, &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.z.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn h(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&H, &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.h.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn s(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&S, &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.s.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn s_adj(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&S_ADJ, &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.s_adj.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn sx(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&SX, &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.sx.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn sx_adj(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&SX_ADJ, &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.sx_adj.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn t(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&T, &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.t.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn t_adj(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&T_ADJ, &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.t_adj.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn rx(&mut self, angle: f64, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&rx(angle), &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.rx.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn ry(&mut self, angle: f64, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&ry(angle), &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.ry.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn rz(&mut self, angle: f64, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state + .apply_operation(&rz(angle), &[target]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.rz.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn cx(&mut self, control: QubitID, target: QubitID) { + if !self.loss[control] && !self.loss[target] { + self.apply_idle_noise(control); + self.apply_idle_noise(target); + self.state + .apply_operation(&CX, &[control, target]) + .expect("apply_operation should succeed"); + } + // We still apply operation faults to non-lost qubits. + let fault = self.noise_config.cx.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[control, target]); + } + + fn cz(&mut self, control: QubitID, target: QubitID) { + if !self.loss[control] && !self.loss[target] { + self.apply_idle_noise(control); + self.apply_idle_noise(target); + self.state + .apply_operation(&CZ, &[control, target]) + .expect("apply_operation should succeed"); + } + // We still apply operation faults to non-lost qubits. + let fault = self.noise_config.cz.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[control, target]); + } + + fn rxx(&mut self, angle: f64, q1: QubitID, q2: QubitID) { + match (self.loss[q1], self.loss[q2]) { + (true, true) => (), + (true, false) => self.rx(angle, q2), + (false, true) => self.rx(angle, q1), + (false, false) => { + self.apply_idle_noise(q1); + self.apply_idle_noise(q2); + self.state + .apply_operation(&rxx(angle), &[q1, q2]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.rxx.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[q1, q2]); + } + } + } + + fn ryy(&mut self, angle: f64, q1: QubitID, q2: QubitID) { + match (self.loss[q1], self.loss[q2]) { + (true, true) => (), + (true, false) => self.ry(angle, q2), + (false, true) => self.ry(angle, q1), + (false, false) => { + self.apply_idle_noise(q1); + self.apply_idle_noise(q2); + self.state + .apply_operation(&ryy(angle), &[q1, q2]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.ryy.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[q1, q2]); + } + } + } + + fn rzz(&mut self, angle: f64, q1: QubitID, q2: QubitID) { + match (self.loss[q1], self.loss[q2]) { + (true, true) => (), + (true, false) => self.rz(angle, q2), + (false, true) => self.rz(angle, q1), + (false, false) => { + self.apply_idle_noise(q1); + self.apply_idle_noise(q2); + self.state + .apply_operation(&rzz(angle), &[q1, q2]) + .expect("apply_operation should succeed"); + let fault = self.noise_config.rzz.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[q1, q2]); + } + } + } + + fn swap(&mut self, q1: QubitID, q2: QubitID) { + match (self.loss[q1], self.loss[q2]) { + (true, true) => (), + (true, false) => { + self.apply_idle_noise(q2); + self.state + .apply_operation(&SWAP, &[q1, q2]) + .expect("apply_operation should succeed"); + } + (false, true) => { + self.apply_idle_noise(q1); + self.state + .apply_operation(&SWAP, &[q1, q2]) + .expect("apply_operation should succeed"); + } + (false, false) => { + self.apply_idle_noise(q1); + self.apply_idle_noise(q2); + self.state + .apply_operation(&SWAP, &[q1, q2]) + .expect("apply_operation should succeed"); + } + } + // There are three kinds of swaps: + // 1. A logical swap, also called a relabel. + // 2. A swap by physically exchanging the location of the qubits. + // 3. An exchange of information by doing three CX. + // + // This method is concerned with the kinds (1) and (2), since (3) + // gets decomposed into other instructions before making it to the simulator. + // In both (1) and (2), the loss state of the qubits gets exchanged. + self.loss.swap(q1, q2); + + // Is up to the user if swap is a virtual operation or not. + // If they don't specify noise/loss probability for swap, then it is virtual. + let fault = self.noise_config.swap.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[q1, q2]); + } + + fn mz(&mut self, target: QubitID, result_id: QubitID) { + self.apply_idle_noise(target); + self.record_mz(target, result_id); + let fault = self.noise_config.mresetz.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + + fn mresetz(&mut self, target: QubitID, result_id: QubitID) { + self.apply_idle_noise(target); + self.record_mresetz(target, result_id); + let fault = self.noise_config.mresetz.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + + fn resetz(&mut self, target: QubitID) { + self.apply_idle_noise(target); + self.mresetz_impl(target); + let fault = self.noise_config.mresetz.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + + fn mov(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + let fault = self.noise_config.mov.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn correlated_noise_intrinsic(&mut self, intrinsic_id: IntrinsicID, targets: &[usize]) { + let fault = match self.noise_config.intrinsics.get(&intrinsic_id) { + Some(correlated_noise) => correlated_noise.sample(&mut self.rng), + None => return, + }; + self.apply_fault(fault, targets); + } + + fn measurements(&self) -> &[MeasurementResult] { + &self.measurements + } + + fn take_measurements(&mut self) -> Vec { + std::mem::take(&mut self.measurements) + } +} diff --git a/source/simulators/src/cpu_full_state_simulator/noise.rs b/source/simulators/src/cpu_full_state_simulator/noise.rs new file mode 100644 index 0000000000..e69630d07e --- /dev/null +++ b/source/simulators/src/cpu_full_state_simulator/noise.rs @@ -0,0 +1,74 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use crate::noise_config::{self, CumulativeNoiseConfig, is_pauli_identity}; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum PauliFault { + I, + X, + Y, + Z, +} + +#[derive(Clone, Debug, Default, PartialEq, Eq)] +pub enum Fault { + /// No fault occurred. + #[default] + None, + /// A Pauli fault. + Pauli(Vec), + /// A gradual dephasing fault. Qubits are always slowly + /// rotating along the Z-axis with an unknown rate, + /// eventually resulting in an `S` gate. + S, + /// The qubit was lost. + Loss, +} + +impl noise_config::Fault for Fault { + fn none() -> Self { + Self::None + } + + fn loss() -> Self { + Self::Loss + } +} + +impl> From for Fault { + fn from(pauli_string: S) -> Self { + let pauli_string: &str = pauli_string.as_ref(); + assert!( + !is_pauli_identity(pauli_string), + "the NoiseTable input validation should ensure we don't insert the identity string" + ); + + let pauli_product = pauli_string + .chars() + .map(|c| match c { + 'I' => PauliFault::I, + 'X' => PauliFault::X, + 'Y' => PauliFault::Y, + 'Z' => PauliFault::Z, + _ => panic!("invalid pauli string character: {c}"), + }) + .collect(); + + Self::Pauli(pauli_product) + } +} + +impl CumulativeNoiseConfig { + /// Samples a float in the range [0, 1] and picks one of the faults + /// `X`, `Y`, `Z`, `S` based on the provided noise table. + #[must_use] + pub fn gen_idle_fault(&self, rng: &mut impl rand::Rng, idle_steps: u32) -> Fault { + let sample: f32 = rng.gen_range(0.0..1.0); + if sample < self.idle.s_probability(idle_steps) { + Fault::S + } else { + Fault::None + } + } +} diff --git a/source/simulators/src/gpu_full_state_simulator.rs b/source/simulators/src/gpu_full_state_simulator.rs new file mode 100644 index 0000000000..f308c3efe5 --- /dev/null +++ b/source/simulators/src/gpu_full_state_simulator.rs @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#[cfg(test)] +mod tests; + +pub mod correlated_noise; +pub mod gpu_context; +pub mod gpu_resources; +pub mod noise_mapping; +pub mod shader_types; + +use crate::{ + gpu_context::RunResults, gpu_full_state_simulator::shader_types::Op, noise_config::NoiseConfig, +}; + +pub fn try_create_gpu_adapter() -> Result { + gpu_context::GpuContext::try_create_adapter() +} + +pub fn run_shots_sync( + qubit_count: i32, + result_count: i32, + ops: &[Op], + noise: &Option>, + shot_count: i32, + rng_seed: u32, + start_shot_id: i32, +) -> Result { + futures::executor::block_on(async { + let mut context = gpu_context::GpuContext::default(); + + if let Some(noise_config) = noise { + context.set_noise_config(noise_config.clone()); + } + + context.set_program(ops, qubit_count, result_count); + + context.run_shots(shot_count, rng_seed, start_shot_id).await + }) +} diff --git a/source/simulators/src/gpu_full_state_simulator/correlated_noise.rs b/source/simulators/src/gpu_full_state_simulator/correlated_noise.rs new file mode 100644 index 0000000000..e7f8b6f6ee --- /dev/null +++ b/source/simulators/src/gpu_full_state_simulator/correlated_noise.rs @@ -0,0 +1,269 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use std::io::Error; +use std::io::ErrorKind::InvalidInput; +use std::str::FromStr; + +use bytemuck::{Pod, Zeroable}; + +use crate::noise_config::{NoiseConfig, NoiseTable, uq1_63}; + +/// A `NoiseTableEntry` describes the probability of the one possible pauli-noise string when working +/// with correlated Pauli noise. +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +pub struct NoiseTableEntry { + /// The correlated pauli string as bits (2 bits per qubit). If bit 0 is set, then it has bit-flip + /// noise, and if bit 1 is set then it has phase-flip noise. e.g., `110001 == "YIX"` + paulis: u64, + /// The probability of the noise occurring in `Q1_63` format. This is a float format where the high + /// order bit (bit 63) has the value 1.0 (`2^0 / 1`), bit 62 has the value 0.5 (`2^1 / 1`), etc. + /// all the way to bit 63 with a value of approx 1.0842e-19 (`2^63 / 1`). This gives a range of + /// values from [0..2) with equal spacing of 1.0842e-19 between values (unlike float or double), + /// which makes it more suitable for random numbers used to select between a large number of small + /// probability entries. + probability: u64, +} + +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +pub struct NoiseTableMetadata { + /// The total probability of any noise (i.e. sum of all noise entries) in `Q1.63` format + pub noise_probability: u64, + /// The start offset of this table's entries in the global `NoiseTableEntry` array + pub start_offset: u32, + /// The number of entries in this noise table + pub entry_count: u32, +} + +#[derive(Debug, Default)] +pub struct NoiseTables { + /// The names associated with this noise table. This should match the QIR intrinsic for the noise. + /// This is only needed to create the name-to-id mapping when inserting the QIR intrinsic calls. + /// It does not get uploaded to the GPU. + pub names: Vec, + /// The metadata for each noise table entry. This will be uploaded to a GPU buffer. + pub metadata: Vec, + /// The table of pauli strings to probability mappings. This will be uploaded to a GPU buffer. + pub entries: Vec, +} + +impl NoiseTables { + /// Creates a new `NoiseTable` from string containing lines in a CSV format showing the pauli + /// noise and probability for an entry. Lines starting with a `#` or the column headers will be + /// ignored, e.g. + /// + /// ```csv + /// # Correlated noise model for gadget_99 + /// # + /// pauli_string,probability + /// IIIIIX,3.4552708271433022e-06 + /// IIIIIZ,4.892742300968495e-06 + /// XXIIYY,8.136850287643285e-06 + /// ``` + pub fn add(&mut self, name: &str, contents: &str) { + let start_offset = u32::try_from(self.entries.len()).expect("Too many noise entries"); + let mut entry_count: u32 = 0; + let mut noise_probability: u64 = 0; + + self.names.push(name.to_string()); + + for line in contents.lines() { + if line.starts_with('#') || line.starts_with("pauli") || line.trim().is_empty() { + continue; + } + let entry = parse_line(line).expect("Parsing failed"); + if entry.paulis == 0u64 || entry.probability == 0u64 { + // Don't add identity Paulis or 0 probability (no-noise) entries if present. + continue; + } + noise_probability += entry.probability; + assert!( + noise_probability <= uq1_63::ONE, + "Cumulative probability is larger than 1.0 after processing line: {line}" + ); + // Add the entry to the list with cumulative probability, not the value for the entry + self.entries.push(NoiseTableEntry { + paulis: entry.paulis, + probability: noise_probability, + }); + entry_count += 1; + } + self.metadata.push(NoiseTableMetadata { + noise_probability, + start_offset, + entry_count, + }); + } + + /// Loads the correlated noise tables from a [`NoiseConfig`]. + /// + /// If we are following this codepath, the user handled loading the csv files and + /// the name-to-id mapping when inserting the QIR intrinsic calls + /// was already done. Therefore, we don't need to push to the `names` field. + pub fn load_from_noise_config(&mut self, noise_config: &NoiseConfig) { + let mut intrinsics_ref: Vec<(u32, &NoiseTable)> = noise_config + .intrinsics + .iter() + .map(|(id, table)| (*id, table)) + .collect::>(); + + // Sort intrinsics by id. + // The NoiseConfig API guarantees that the ids will be non-skiping numbers starting from zero. + intrinsics_ref.sort_by(|a, b| a.0.cmp(&b.0)); + + for (_, noise_table) in intrinsics_ref { + self.load_from_noise_table(noise_table); + } + } + + fn load_from_noise_table(&mut self, noise_table: &NoiseTable) { + let start_offset = u32::try_from(self.entries.len()).expect("Too many noise entries"); + let mut entry_count: u32 = 0; + let mut noise_probability: u64 = 0; + + for (pauli, prob) in noise_table + .pauli_strings + .iter() + .zip(&noise_table.probabilities) + { + let entry = NoiseTableEntry { + paulis: paulis_to_u64(pauli), + probability: uq1_63::from_prob(*prob), + }; + if entry.paulis == 0u64 || entry.probability == 0u64 { + // Don't add identity Paulis or 0 probability (no-noise) entries if present. + continue; + } + noise_probability += entry.probability; + assert!( + noise_probability <= uq1_63::ONE, + "Cumulative probability is larger than 1.0" + ); + // Add the entry to the list with cumulative probability, not the value for the entry + self.entries.push(NoiseTableEntry { + paulis: entry.paulis, + probability: noise_probability, + }); + entry_count += 1; + } + + self.metadata.push(NoiseTableMetadata { + noise_probability, + start_offset, + entry_count, + }); + } +} + +fn parse_line(line: &str) -> Result { + let parts: Vec<&str> = line.split(',').collect(); + if parts.len() != 2 { + return Err(Error::new(InvalidInput, line)); + } + let prob = f64::from_str(parts[1]); + match prob { + Ok(p) => parse_noise_table_entry(parts[0], p), + Err(e) => { + eprintln!("Invalid float on line {line}, error: {e}"); + Err(Error::new(InvalidInput, line)) + } + } +} + +fn parse_noise_table_entry(paulis: &str, probability: f64) -> Result { + Ok(NoiseTableEntry { + paulis: paulis_to_u64(paulis), + probability: uq1_63::from_prob(probability), + }) +} + +fn paulis_to_u64(paulis: &str) -> u64 { + let mut result: u64 = 0; + for (i, c) in paulis.chars().rev().enumerate() { + let val: u64 = match c { + 'I' => 0, + 'X' => 1, + 'Z' => 2, + 'Y' => 3, + _ => panic!("Invalid pauli character: {c}"), + }; + result |= val << (2 * i); + } + result +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn parse_test() { + let result = parse_line("IIIIIX,1.25e-1"); + assert!(result.is_ok()); + let entry = result.expect("Entry should be valid"); + assert_eq!(entry.paulis, 0x01); + assert_eq!(entry.probability, 0x1000_0000_0000_0000); + } + + #[test] + fn test_cumulated_probabilities() { + let mut tables = NoiseTables::default(); + // Each entry is 0.125 probability + let contents = r" +pauli_string,probability +IIIIIX,0.125 +IIIIZZ,0.125 +IIIIYY,0.125 +"; + tables.add("test_gate", contents); + + assert_eq!(tables.entries.len(), 3); + // Each 0.125 is 0x1000_0000_0000_0000 in Q1.63 + assert_eq!(tables.entries[0].probability, 0x1000_0000_0000_0000); + assert_eq!(tables.entries[1].probability, 0x2000_0000_0000_0000); + assert_eq!(tables.entries[2].probability, 0x3000_0000_0000_0000); + + assert_eq!(tables.metadata.len(), 1); + assert_eq!(tables.metadata[0].noise_probability, 0x3000_0000_0000_0000); + assert_eq!(tables.metadata[0].start_offset, 0); + assert_eq!(tables.metadata[0].entry_count, 3); + } + + #[test] + fn test_identity_and_zero_probability_ignored() { + let mut tables = NoiseTables::default(); + let contents = r" +pauli_string,probability +IIIIII,0.125 +IIIIIX,0.125 +IIIIZZ,0.0 +IIIIYY,0.125 + "; + tables.add("test_gate", contents); + + // Identity pauli "IIIIII" and zero probability "IIIIZZ" should be ignored + assert_eq!(tables.entries.len(), 2); + assert_eq!(tables.entries[0].paulis, paulis_to_u64("IIIIIX")); + assert_eq!(tables.entries[1].paulis, paulis_to_u64("IIIIYY")); + + assert_eq!(tables.metadata[0].entry_count, 2); + // Total probability should be 0.25 (0.125 + 0.125) + assert_eq!(tables.metadata[0].noise_probability, 0x2000_0000_0000_0000); + } + + #[test] + #[should_panic(expected = "Cumulative probability is larger than 1.0")] + fn test_cumulative_probability_exceeds_one() { + let mut tables = NoiseTables::default(); + let contents = r" +pauli_string,probability +IIIIIX,0.5 +IIIIZZ,0.4 +IIIIYY,0.3 + "; + // This should panic because 0.5 + 0.4 + 0.3 = 1.2 > 1.0 + tables.add("test_gate", contents); + } +} diff --git a/source/simulators/src/gpu_full_state_simulator/gpu_context.rs b/source/simulators/src/gpu_full_state_simulator/gpu_context.rs new file mode 100644 index 0000000000..143dd06cca --- /dev/null +++ b/source/simulators/src/gpu_full_state_simulator/gpu_context.rs @@ -0,0 +1,479 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use std::cmp::min; + +use bytemuck::cast_slice; + +use crate::correlated_noise::NoiseTables; +use crate::gpu_resources::GpuResources; +use crate::noise_config::NoiseConfig; +use crate::noise_mapping::get_noise_ops; +use crate::shader_types::{ + DiagnosticsData, MAX_BUFFER_SIZE, MAX_QUBIT_COUNT, MAX_QUBITS_PER_WORKGROUP, MAX_SHOT_ENTRIES, + MAX_SHOTS_PER_BATCH, MIN_QUBIT_COUNT, Op, SIZEOF_SHOTDATA, THREADS_PER_WORKGROUP, Uniforms, + WorkgroupCollationBuffer, ops, +}; + +// On Windows, running larger circuits/shots can hit TDR issues if too many ops are dispatched in one go. +const DEFAULT_MAX_OPS_PER_DISPATCH: i32 = 16; + +#[allow(clippy::struct_excessive_bools)] +#[derive(Debug, Default)] +pub struct GpuContext { + resources: GpuResources, + + program: Vec, + program_with_noise: Option>, + noise_config: Option>, + noise_tables: NoiseTables, + + run_params: RunParams, + + // Indicates if items impacting the Ops have changed and need to be re-uploaded / recompiled + program_is_dirty: bool, + // Indicates if the pipeline needs to be recompiled due to changes (i.e., qubit or result count) + pipeline_is_dirty: bool, + // Indicates if the noise config has changed (which means the program may be dirty too) + noise_config_is_dirty: bool, + // Indicates if the noise tables have changed and need to be re-uploaded to the GPU + noise_tables_is_dirty: bool, +} + +#[derive(Debug, Default)] +struct RunParams { + qubit_count: i32, + result_count: i32, + shot_count: i32, + shots_per_batch: i32, + batch_count: i32, + workgroups_per_shot: i32, + entries_per_thread: i32, + shots_buffer_size: usize, + state_vector_buffer_size: usize, + results_buffer_size: usize, + diagnostics_buffer_size: usize, + download_buffer_size: usize, +} + +#[derive(Debug)] +pub struct RunResults { + pub shot_results: Vec>, + pub shot_result_codes: Vec, + // Box used below lessen size of RunResults struct, as DiagnosticsData is large, and + // clippy was warning about the size of the Future returned by run_shots otherwise, + // as the large value may put on the stack which can cause stack overflows. + // As the DiagnosticsData is only needed if there are errors, we use an Option here, and + // the value is only created if there are errors (i.e. hopefully rarely). + pub diagnostics: Option>, + pub success: bool, +} + +impl GpuContext { + // See if we can get a GPU adapter on this machine (useful before trying to run tests) + // Note: This does NOT allocate GPU resources that persist across runs. Run shots for that. + pub fn try_create_adapter() -> Result { + Ok(format!("{:?}", GpuResources::try_get_adapter()?.get_info())) + } + + /// Set the program to be run + pub fn set_program(&mut self, program: &[Op], qubit_count: i32, result_count: i32) { + // Always allocate a minumum number of qubits to ensure good data alignment, GPU thread usage, etc. + let qubit_count = qubit_count.max(MIN_QUBIT_COUNT); + + self.program.clear(); + self.program.extend_from_slice(program); + + // If qubit or result count changed, mark pipeline as dirty, as it needs to be recreated + if qubit_count != self.run_params.qubit_count + || result_count != self.run_params.result_count + { + self.pipeline_is_dirty = true; + } + + self.run_params.qubit_count = qubit_count; + self.run_params.result_count = result_count; + + // Mark program as dirty, so we recreate the ops to send to the GPU on next run + self.program_is_dirty = true; + } + + fn get_program(&self) -> &[Op] { + if let Some(noisy_program) = &self.program_with_noise { + noisy_program + } else { + &self.program + } + } + + /// Set the noise configuration + pub fn set_noise_config(&mut self, noise: NoiseConfig) { + self.add_correlated_noise_table_from_noise_config(&noise); + self.noise_config = Some(noise); + self.noise_config_is_dirty = true; + } + + /// Add a correlated noise table to the GPU context (will overwrite existing with same name) + pub fn add_correlated_noise_table(&mut self, name: &str, contents: &str) { + self.noise_tables.add(name, contents); + self.noise_tables_is_dirty = true; + } + + /// Add a correlated noise table to the GPU context (will overwrite existing with same name) + pub fn add_correlated_noise_table_from_noise_config( + &mut self, + noise_config: &NoiseConfig, + ) { + self.noise_tables.load_from_noise_config(noise_config); + self.noise_tables_is_dirty = true; + } + + /// Get the mapping of correlated noise table ids to names and entry counts + #[must_use] + pub fn get_correlated_noise_tables(&self) -> Vec<(u32, String, u32)> { + (0u32..) + .zip(&self.noise_tables.names) + .map(|(idx, name)| { + ( + idx, + name.clone(), + self.noise_tables.metadata[idx as usize].entry_count, + ) + }) + .collect() + } + + /// Clear the correlated noise tables + pub fn clear_correlated_noise_tables(&mut self) { + self.noise_tables = NoiseTables::default(); + self.noise_tables_is_dirty = true; + } + + pub fn run_shots_sync( + &mut self, + shot_count: i32, + seed: u32, + start_shot_id: i32, + ) -> Result { + futures::executor::block_on(self.run_shots(shot_count, seed, start_shot_id)) + } + + /// Run the program for the given number of shots + #[allow(clippy::too_many_lines)] + pub async fn run_shots( + &mut self, + shot_count: i32, + seed: u32, + start_shot_id: i32, + ) -> Result { + if self.program.is_empty() { + return Err("No program has been set".to_string()); + } + // Update all the parameters we need for GPU resources based on current program, noise, shots, etc. + self.update_run_params(shot_count); + self.ready_gpu_resources().await?; + + // Get the GPU resources we need for the entire run + let bind_group = self.resources.get_bind_group()?; + let kernels = self.resources.get_kernels()?; + + // Use environment variable "QDK_GPU_MAX_OPS_PER_DISPATCH" to override the default if set + let max_ops_per_dispatch: i32 = std::env::var("QDK_GPU_MAX_OPS_PER_DISPATCH") + .ok() + .and_then(|val| val.parse().ok()) + .unwrap_or(DEFAULT_MAX_OPS_PER_DISPATCH); + + let mut results: Vec = Vec::new(); + let mut diagnostics: Option> = None; + + let mut shots_remaining = self.run_params.shot_count; + + for batch_idx in 0..self.run_params.batch_count { + let shots_this_batch = min(shots_remaining, self.run_params.shots_per_batch); + + // Update the uniforms for this batch + let uniforms = Uniforms { + batch_start_shot_id: batch_idx * self.run_params.shots_per_batch + start_shot_id, + rng_seed: seed, + }; + + // When this is put directly on the queue, it will be submitted when the next submit occurs, but will run before that submit's work + self.resources.upload_uniform(&uniforms)?; + + let prepare_workgroup_count = + u32::try_from(shots_this_batch).expect("shots_per_batch should fit in u32"); + // Workgroups for execute_op depends on qubit count + let execute_workgroup_count = + u32::try_from(self.run_params.workgroups_per_shot * shots_this_batch) + .expect("workgroups_per_shot * shots_per_batch should fit in u32"); + + // Split ops into chunks to avoid exceeding max_ops_per_dispatch limit + // (noise ops don't count toward the limit) + let mut op_chunks = Vec::new(); + let mut current_chunk = Vec::new(); + let mut non_noise_count = 0; + + for op in self.get_program() { + // Check if this is a noise op + let is_noise = matches!(op.id, ops::PAULI_NOISE_1Q..=ops::LOSS_NOISE); + + if !is_noise { + non_noise_count += 1; + if non_noise_count > max_ops_per_dispatch { + // Start a new chunk + op_chunks.push(std::mem::take(&mut current_chunk)); + non_noise_count = 1; + } + } + + current_chunk.push(op); + } + + // Add the last chunk if it has any ops + if !current_chunk.is_empty() { + op_chunks.push(current_chunk); + } + + // Process each chunk in a separate command buffer to avoid TDR + for (chunk_idx, chunk) in op_chunks.iter().enumerate() { + let mut encoder = self.resources.get_encoder("StateVector Command Encoder")?; + + let mut compute_pass = encoder.begin_compute_pass(&wgpu::ComputePassDescriptor { + label: Some("StateVector Compute Pass"), + timestamp_writes: None, + }); + + compute_pass.set_bind_group(0, &bind_group, &[]); + + // Start by dispatching an 'init' kernel for the batch of shots (only for first chunk) + if chunk_idx == 0 { + compute_pass.set_pipeline(&kernels.init_op); + compute_pass.dispatch_workgroups(execute_workgroup_count, 1, 1); + } + + // Dispatch the compute shaders for each op in this chunk + for op in chunk { + match op.id { + // One qubit gates (and correlated noise ops) + ops::ID..=ops::RZ + | ops::MOVE + | ops::MRESETZ + | ops::MZ + | ops::CORRELATED_NOISE => { + compute_pass.set_pipeline(&kernels.prepare_op); + compute_pass.dispatch_workgroups(prepare_workgroup_count, 1, 1); + + compute_pass.set_pipeline(&kernels.execute_op); + compute_pass.dispatch_workgroups(execute_workgroup_count, 1, 1); + } + // Two qubit gates + ops::CX..=ops::RZZ | ops::SWAP => { + compute_pass.set_pipeline(&kernels.prepare_op); + compute_pass.dispatch_workgroups(prepare_workgroup_count, 1, 1); + + compute_pass.set_pipeline(&kernels.execute_2q_op); + compute_pass.dispatch_workgroups(execute_workgroup_count, 1, 1); + } + // Skip over simple noise ops + ops::PAULI_NOISE_1Q..=ops::LOSS_NOISE => {} + _ => { + panic!("Unsupported op ID {}", op.id); + } + } + } + + drop(compute_pass); + + // Submit this chunk's command buffer + let chunk_command_buffer = encoder.finish(); + self.resources.submit_command_buffer(chunk_command_buffer)?; + } + + let (batch_results, batch_diagnostics) = + self.resources.download_batch_results().await?; + + results.extend(batch_results); + if batch_diagnostics.error_code != 0 && diagnostics.is_none() { + diagnostics = Some(Box::new(batch_diagnostics)); + } + + shots_remaining -= self.run_params.shots_per_batch; + } + + // We may have had extra shots if the last batch was not full. Truncate if so. + let result_count = self.run_params.result_count; + let expected_results: usize = (self.run_params.shot_count * (result_count + 1)) // +1 for the error code per shot + .try_into() + .expect("Total expected result count should fit in usize"); + results.truncate(expected_results); + + // Split results into measurements and result codes + let result_count_usize: usize = result_count + .try_into() + .expect("Result count should fit in usize"); + let shot_results = results + .chunks(result_count_usize + 1) + .map(|chunk| chunk[..result_count_usize].to_vec()) + .collect::>>(); + // Separate out every 3rd entry from results into 'error_codes' + let shot_result_codes = results + .chunks(result_count_usize + 1) + .map(|chunk| chunk[result_count_usize]) + .collect::>(); + + let success = shot_result_codes.iter().all(|&code| code == 0); + + Ok(RunResults { + shot_results, + shot_result_codes, + diagnostics, + success, + }) + } + + async fn ready_gpu_resources(&mut self) -> Result<(), String> { + // Ensure the device is initialized + let dbg_capture = std::env::var("QDK_GPU_CAPTURE").is_ok(); + self.resources.ensure_device(dbg_capture).await?; + + if self.program_is_dirty || self.noise_config_is_dirty { + // Rebuild the program (with noise if needed) and upload to GPU + if let Some(noise) = &self.noise_config { + let ops = add_noise_config_to_ops(&self.program, noise); + self.resources.upload_ops_data(cast_slice(&ops))?; + self.program_with_noise = Some(ops); + } else { + self.resources.upload_ops_data(cast_slice(&self.program))?; + self.program_with_noise = None; + } + self.program_is_dirty = false; + } + + if self.noise_tables_is_dirty { + // Re-upload noise tables to GPU (if any) + let tables = &self.noise_tables; + + if tables.metadata.is_empty() { + self.resources.free_noise_buffers()?; + } else { + self.resources + .upload_noise_metadata(cast_slice(&tables.metadata))?; + self.resources + .upload_noise_entries(cast_slice(&tables.entries))?; + } + } + + let params = &self.run_params; + + if self.pipeline_is_dirty { + // The pipeline is marked as dirty if the qubit or result count changed (shot count doesn't impact it) + self.resources.create_shaders( + params.qubit_count, + params.result_count, + // The next two params are derived from qubit count and result count, so will only change if those do + params.workgroups_per_shot, + params.entries_per_thread, + // The below are constants so will not change from run to run + THREADS_PER_WORKGROUP, + MAX_QUBIT_COUNT, + MAX_QUBITS_PER_WORKGROUP, + )?; + } + + self.resources.ensure_run_buffers( + params.shots_buffer_size, + params.state_vector_buffer_size, + params.results_buffer_size, + params.diagnostics_buffer_size, + )?; + Ok(()) + } + + fn update_run_params(&mut self, shot_count: i32) { + let params = &mut self.run_params; + + // The qubit and result count were already set when the program was set + params.shot_count = shot_count; + + let entries_per_shot = 1 << params.qubit_count; // 2^n state vector entries per shot for n qubits + let state_vector_size_per_shot = entries_per_shot * 8; // Each entry is a complex containing 2 * f32 + + // Figure out some limits based on buffer size limits, structure sizes, and number of qubits + let max_shot_state_vectors = + usize_to_i32(MAX_BUFFER_SIZE / i32_to_usize(state_vector_size_per_shot)); + // How many of the structures would fit + let max_shots_in_buffer = min(MAX_SHOT_ENTRIES, max_shot_state_vectors); + // How many would we allow based on the max shots per batch + let max_shots_per_batch = min(max_shots_in_buffer, MAX_SHOTS_PER_BATCH); + + // So with that... how many shots fit in a batch, and how many batches do we need + params.shots_per_batch = min(shot_count, max_shots_per_batch); + params.batch_count = (shot_count - 1) / params.shots_per_batch + 1; + + // Now figure out how to partition processing into GPU workgroups and threads + params.workgroups_per_shot = if params.qubit_count <= MAX_QUBITS_PER_WORKGROUP { + 1 + } else { + 1 << (params.qubit_count - MAX_QUBITS_PER_WORKGROUP) + }; + params.entries_per_thread = + entries_per_shot / params.workgroups_per_shot / THREADS_PER_WORKGROUP; + + // Figure out the buffer sizes we need for all the above + params.shots_buffer_size = i32_to_usize(params.shots_per_batch) * SIZEOF_SHOTDATA; + params.state_vector_buffer_size = + i32_to_usize(params.shots_per_batch * state_vector_size_per_shot); + + // Each result is a u32, plus one extra on the end for the shader to set an 'error code' if needed + params.results_buffer_size = i32_to_usize(params.shots_per_batch * (params.result_count + 1)) // +1 for error code per shot + * std::mem::size_of::(); + + params.diagnostics_buffer_size = 4 * 4 /* initial bytes for error codes and ad-hoc data */ + + SIZEOF_SHOTDATA + std::mem::size_of::() // ShotData + Op + + (THREADS_PER_WORKGROUP * 8 * MAX_QUBIT_COUNT) as usize // Workgroup probabilities + + std::mem::size_of::(); // Collation buffers + + // Finally, the download buffer needs to hold both results and diagnostics + params.download_buffer_size = params.results_buffer_size + params.diagnostics_buffer_size; + } +} + +fn add_noise_config_to_ops(ops: &[Op], noise: &NoiseConfig) -> Vec { + let mut noisy_ops: Vec = Vec::with_capacity(ops.len() + 1); + + for op in ops { + let mut add_ops: Vec = vec![*op]; + // If there's a NoiseConfig, and we get noise for this op, append it + if let Some(noise_ops) = get_noise_ops(op, noise) { + add_ops.extend(noise_ops); + } + // If it's an MResetZ with noise, change to an Id with noise, followed by MResetZ + // (This is just simpler to implement than doing noise inline with MResetZ for now) + if op.id == ops::MRESETZ && add_ops.len() > 1 { + let mz_copy = add_ops[0]; + add_ops[0] = Op::new_id_gate(op.q1); + add_ops.push(mz_copy); + } + // Convert 'mov' ops to identity, and don't add the ops if it's just a + // single identity (but do add if it has noise) + if add_ops[0].id == ops::MOVE { + add_ops[0].id = ops::ID; + } + if add_ops.len() == 1 && add_ops[0].id == ops::ID { + // skip lone identity gates + } else { + noisy_ops.extend(add_ops); + } + } + + noisy_ops +} + +// Helpers to ease conversion boilerplate where it should always succeed +fn usize_to_i32(value: usize) -> i32 { + i32::try_from(value).expect("Value {value} can't convert to i32") +} + +fn i32_to_usize(value: i32) -> usize { + usize::try_from(value).expect("Value {value} can't convert to usize") +} diff --git a/source/simulators/src/gpu_full_state_simulator/gpu_resources.rs b/source/simulators/src/gpu_full_state_simulator/gpu_resources.rs new file mode 100644 index 0000000000..6f9bc76383 --- /dev/null +++ b/source/simulators/src/gpu_full_state_simulator/gpu_resources.rs @@ -0,0 +1,683 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use bytemuck::{bytes_of, cast_slice, from_bytes}; +use wgpu::{ + Adapter, BindGroup, BindGroupEntry, BindGroupLayout, Buffer, BufferDescriptor, BufferUsages, + CommandBuffer, CommandEncoder, ComputePipeline, ComputePipelineDescriptor, Device, PollType, + Queue, +}; + +use crate::shader_types::{DiagnosticsData, Uniforms, WorkgroupCollationBuffer}; + +#[derive(Debug, Default)] +pub struct GpuResources { + adapter: Option, + device: Option, + bind_group_layout: Option, + dbg_capture: bool, + queue: Option, + device_resources: GpuDeviceResources, +} + +// Resources that depend on the device and need to be recreated if the device is recreated +#[derive(Debug)] +struct GpuDeviceResources { + pub kernels: Option, + pub bind_group: Option, + pub bound_buffers: Vec, +} +#[derive(Debug)] +pub struct GpuKernels { + pub init_op: ComputePipeline, + pub prepare_op: ComputePipeline, + pub execute_op: ComputePipeline, + pub execute_2q_op: ComputePipeline, +} + +#[derive(Debug)] +struct BufferBinding { + pub name: &'static str, + pub is_uniform: bool, + pub read_only: bool, + pub usage: BufferUsages, + pub buffer: Option, +} + +// Keep the below in sync with the shader bindings in simulator.wgsl +const WORKGROUP_COLLATION_BUF_IDX: usize = 0; +const SHOT_STATE_BUF_IDX: usize = 1; +const OPS_BUF_IDX: usize = 2; +const STATE_VECTOR_BUF_IDX: usize = 3; +const RESULTS_BUF_IDX: usize = 4; +const DIAGNOSTICS_BUF_IDX: usize = 5; +const UNIFORM_BUF_IDX: usize = 6; +const CORRELATED_NOISE_TABLES_BUF_IDX: usize = 7; +const CORRELATED_NOISE_ENTRIES_BUF_IDX: usize = 8; + +impl Default for GpuDeviceResources { + fn default() -> Self { + GpuDeviceResources { + kernels: None, + bind_group: None, + bound_buffers: vec![ + BufferBinding { + name: "WorkgroupCollation", + is_uniform: false, + read_only: false, + usage: BufferUsages::STORAGE, + buffer: None, + }, + BufferBinding { + name: "ShotState", + is_uniform: false, + read_only: false, + usage: BufferUsages::STORAGE, + buffer: None, + }, + BufferBinding { + name: "Ops", + is_uniform: false, + read_only: true, + usage: BufferUsages::STORAGE | BufferUsages::COPY_DST, + buffer: None, + }, + BufferBinding { + name: "StateVector", + is_uniform: false, + read_only: false, + usage: BufferUsages::STORAGE, + buffer: None, + }, + BufferBinding { + name: "Results", + is_uniform: false, + read_only: false, + usage: BufferUsages::STORAGE | BufferUsages::COPY_SRC, + buffer: None, + }, + BufferBinding { + name: "Diagnostics", + is_uniform: false, + read_only: false, + usage: BufferUsages::STORAGE | BufferUsages::COPY_SRC, + buffer: None, + }, + BufferBinding { + name: "Uniforms", + is_uniform: true, + read_only: false, + usage: BufferUsages::UNIFORM | BufferUsages::COPY_DST, + buffer: None, + }, + BufferBinding { + name: "CorrelatedNoiseTables", + is_uniform: false, + read_only: true, + usage: BufferUsages::STORAGE | BufferUsages::COPY_DST, + buffer: None, + }, + BufferBinding { + name: "CorrelatedNoiseEntries", + is_uniform: false, + read_only: true, + usage: BufferUsages::STORAGE | BufferUsages::COPY_DST, + buffer: None, + }, + ], + } + } +} + +impl Drop for GpuResources { + fn drop(&mut self) { + // If a device was capturing, stop the capture on drop + self.stop_graphics_debugger_capture(); + } +} + +impl GpuResources { + // NOTE: After migrationing to wgpu v28 wasm32 and native will align on enumerate_adapters behavior + // and also become async. See https://github.com/gfx-rs/wgpu/releases/tag/v28.0.0 + #[cfg(target_arch = "wasm32")] + pub fn try_get_adapter() -> std::result::Result { + Err("wasm32 is not supported currently".to_string()) + } + + #[cfg(not(target_arch = "wasm32"))] + pub fn try_get_adapter() -> std::result::Result { + let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor::default()); + + let adapters = instance.enumerate_adapters(wgpu::Backends::PRIMARY); + + let score_adapter = |adapter: &Adapter| -> (u32, u32, u32, u32) { + let info = adapter.get_info(); + let device_score = match info.device_type { + wgpu::DeviceType::DiscreteGpu => 8, + wgpu::DeviceType::IntegratedGpu => 4, + _ => 0, + }; + let backend_score = match info.backend { + wgpu::Backend::Vulkan | wgpu::Backend::Metal => 2, + wgpu::Backend::Dx12 => 1, + _ => 0, + }; + let limits = adapter.limits(); + ( + device_score, + backend_score, + limits.max_compute_workgroup_storage_size, + limits.max_storage_buffer_binding_size, + ) + }; + + // Filter to discrete or integrated GPUs that support Vulkan, Metal, or DX12 + // Then sort prefering discrete over integrated, Vulkan/Metal over DX12, and most workgroup memory + // On Windows we want to prefer Vulkan if possible. It seems to have less issues than DX12. + // Note that requesting a high-performance adapter via the wgpu API just prefers discrete GPUs also. + let adapter = adapters + .into_iter() + .filter(|a| { + let score = score_adapter(a); + // Require a storage buffer of at least 1GB to ensure we can hold large state vectors of up to 27 qubits + // Note: 1GB is the limit in wgpu currently. See https://github.com/gfx-rs/wgpu/issues/2337#issuecomment-1549935712 + score.0 > 0 /* discrete or integrated */ && + score.1 > 0 /* supported backend */ && + score.2 >= (1u32 << 14) /* at least 16KB compute workgroup storage (which implies compute capabilities also) */ && + score.3 >= (1u32 << 30) /* at least 1GB storage buffers */ + }) + .max_by_key(score_adapter) + .ok_or_else(|| "No suitable GPU adapter found".to_string())?; + + Ok(adapter) + } + + fn stop_graphics_debugger_capture(&self) { + if let Some(device) = &self.device + && self.dbg_capture + { + unsafe { + device.stop_graphics_debugger_capture(); + } + } + } + + pub async fn create_device(&mut self, dbg_capture: bool) -> Result<(), String> { + // If we already had a prior device and it was capturing, stop any existing capture on it. + self.stop_graphics_debugger_capture(); + + // Per the WebGPU spec, creating a device multiple times from the same adapter is disallowed, + // so recreate the adapter as well if creating a device and queue. + let adapter = Self::try_get_adapter()?; + + let adapter_limits = adapter.limits(); + let required_limits = wgpu::Limits { + max_storage_buffer_binding_size: 1u32 << 30, // 1GB + ..adapter_limits + }; + + let (device, queue): (Device, Queue) = adapter + .request_device(&wgpu::DeviceDescriptor { + label: Some("QDK GPU simulator"), + // Note that mappable primary buffers are a native-only feature, but using here to + // workaround the Xcode bug described in https://github.com/gfx-rs/wgpu/issues/8111. + // This will need to be revisited for web support. + required_features: wgpu::Features::MAPPABLE_PRIMARY_BUFFERS, // TODO: Can remove this? + required_limits, + memory_hints: wgpu::MemoryHints::Performance, + ..Default::default() + }) + .await + .map_err(|e| e.to_string())?; + + if dbg_capture { + unsafe { + device.start_graphics_debugger_capture(); + } + } + // Drop any resources created with a prior device, since the new device will be used now + self.device_resources = GpuDeviceResources::default(); + + // Create the fixed sized buffers + self.device_resources.bound_buffers[UNIFORM_BUF_IDX].buffer = Some(create_dst_buffer( + &device, + std::mem::size_of::(), + BufferUsages::UNIFORM | BufferUsages::COPY_DST, + "Uniform Buffer", + )); + + self.device_resources.bound_buffers[WORKGROUP_COLLATION_BUF_IDX].buffer = + Some(create_dst_buffer( + &device, + std::mem::size_of::(), + BufferUsages::STORAGE, + "Workgroup Collation Buffer", + )); + + self.adapter = Some(adapter); + self.device = Some(device); + self.dbg_capture = dbg_capture; + self.queue = Some(queue); + self.create_bind_group_layout() + } + + pub async fn ensure_device(&mut self, dbg_capture: bool) -> Result<(), String> { + if self.device.is_none() { + self.create_device(dbg_capture).await?; + } + Ok(()) + } + + fn create_bind_group_layout(&mut self) -> Result<(), String> { + let device = self.device.as_ref().ok_or("GPU device not initialized")?; + + #[allow(clippy::cast_possible_truncation)] + let entries = self + .device_resources + .bound_buffers + .iter() + .enumerate() + .map(|(binding, buffer_bindings)| wgpu::BindGroupLayoutEntry { + binding: binding as u32, + visibility: wgpu::ShaderStages::COMPUTE, + ty: wgpu::BindingType::Buffer { + ty: if buffer_bindings.is_uniform { + wgpu::BufferBindingType::Uniform + } else { + wgpu::BufferBindingType::Storage { + read_only: buffer_bindings.read_only, + } + }, + has_dynamic_offset: false, + min_binding_size: None, + }, + count: None, + }) + .collect::>(); + + self.bind_group_layout = Some(device.create_bind_group_layout( + &wgpu::BindGroupLayoutDescriptor { + label: Some("Simulator bind group layout"), + entries: &entries, + }, + )); + Ok(()) + } + + #[allow(clippy::too_many_arguments)] + pub fn create_shaders( + &mut self, + qubit_count: i32, + result_count: i32, + workgroups_per_shot: i32, + entries_per_thread: i32, + threads_per_workgroup: i32, + max_qubit_count: i32, + max_qubits_per_workgroup: i32, + ) -> Result<(), String> { + let adapter = self.adapter.as_ref().ok_or("GPU adapter not initialized")?; + let device = self.device.as_ref().ok_or("GPU device not initialized")?; + let bind_group_layout = self + .bind_group_layout + .as_ref() + .ok_or("Bind group layout not initialized")?; // This is created with the device, so should exist here + + // Create the shader module and bind group layout + let raw_shader_src = include_str!("simulator.wgsl"); + let mut shader_src = raw_shader_src + .replace("{{QUBIT_COUNT}}", &qubit_count.to_string()) + .replace("{{RESULT_COUNT}}", &(result_count + 1).to_string()) // +1 for result code per shot + .replace("{{WORKGROUPS_PER_SHOT}}", &workgroups_per_shot.to_string()) + .replace("{{ENTRIES_PER_THREAD}}", &entries_per_thread.to_string()) + .replace( + "{{THREADS_PER_WORKGROUP}}", + &threads_per_workgroup.to_string(), + ) + .replace("{{MAX_QUBIT_COUNT}}", &max_qubit_count.to_string()) + .replace( + "{{MAX_QUBITS_PER_WORKGROUP}}", + &max_qubits_per_workgroup.to_string(), + ); + + // Strip out DX12-incompatible code sections if needed + if adapter.get_info().backend == wgpu::Backend::Dx12 { + shader_src = strip_dx12_sections(&shader_src); + } + + let shader_module = device.create_shader_module(wgpu::ShaderModuleDescriptor { + label: Some("GPU Simulator Shader Module"), + source: wgpu::ShaderSource::Wgsl(shader_src.into()), + }); + + let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { + label: Some("GPU simulator pipeline layout"), + bind_group_layouts: &[bind_group_layout], + push_constant_ranges: &[], + }); + + let get_kernel = |name: &str| -> ComputePipeline { + device.create_compute_pipeline(&ComputePipelineDescriptor { + label: Some(&format!("GPU kernel - {name}")), + layout: Some(&pipeline_layout), + module: &shader_module, + entry_point: Some(name), + compilation_options: Default::default(), + cache: None, + }) + }; + + self.device_resources.kernels = Some(GpuKernels { + init_op: get_kernel("initialize"), + prepare_op: get_kernel("prepare_op"), + execute_op: get_kernel("execute_op"), + execute_2q_op: get_kernel("execute_2q_op"), + }); + + Ok(()) + } + + pub fn get_kernels(&self) -> Result<&GpuKernels, String> { + self.device_resources + .kernels + .as_ref() + .ok_or("GPU kernels not initialized".to_string()) + } + + fn ensure_buffer(device: &Device, buf_binding: &mut BufferBinding, min_size: usize) { + if buf_binding.buffer.is_none() { + let new_buffer = + create_dst_buffer(device, min_size, buf_binding.usage, buf_binding.name); + buf_binding.buffer = Some(new_buffer); + } + } + + pub fn get_bind_group(&mut self) -> Result { + if let Some(ref bind_group) = self.device_resources.bind_group { + // Already created. BindGroup largely wraps ref-counted handles, so cloning is cheap. + return Ok(bind_group.clone()); + } + + let device = self.device.as_ref().ok_or("GPU device not initialized")?; + let bind_group_layout = self.bind_group_layout.as_ref().ok_or("Missing layout")?; + let bound_buffers = &mut self.device_resources.bound_buffers; + + // Even if correlated noise is not used, the buffers still need to exist anyway to be bound + // NoiseTableMetadata is 16 bytes, NoiseTableEntry is 16 bytes + Self::ensure_buffer( + device, + &mut bound_buffers[CORRELATED_NOISE_TABLES_BUF_IDX], + 16, + ); + Self::ensure_buffer( + device, + &mut bound_buffers[CORRELATED_NOISE_ENTRIES_BUF_IDX], + 16, + ); + + // Ensure all buffers are created + if bound_buffers.iter().any(|entry| entry.buffer.is_none()) { + return Err( + "All buffers to bind must be created before creating the bind group".to_string(), + ); + } + + #[allow(clippy::cast_possible_truncation)] + let entries: Vec = bound_buffers + .iter() + .enumerate() + .map(|(idx, buffer_bindings)| BindGroupEntry { + binding: idx as u32, + resource: buffer_bindings + .buffer + .as_ref() + .expect("Buffer should exist") + .as_entire_binding(), + }) + .collect(); + + let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { + label: Some("Simulator Bind Group"), + layout: bind_group_layout, + entries: &entries, + }); + self.device_resources.bind_group = Some(bind_group.clone()); + Ok(bind_group) + } + + pub fn upload_uniform(&self, uniforms: &Uniforms) -> Result<(), String> { + let queue = self.queue.as_ref().ok_or("GPU queue not initialized")?; + let uniform_buffer = &self.try_get_buffer(UNIFORM_BUF_IDX)?; + queue.write_buffer(uniform_buffer, 0, bytes_of(uniforms)); + Ok(()) + } + + pub fn get_encoder(&self, label: &str) -> Result { + let device = self.device.as_ref().ok_or("GPU device not initialized")?; + Ok(device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: Some(label) })) + } + + pub fn submit_command_buffer(&self, buffer: CommandBuffer) -> Result<(), String> { + let queue = self.queue.as_ref().ok_or("GPU queue not initialized")?; + queue.submit([buffer]); + Ok(()) + } + + pub fn upload_ops_data(&mut self, ops: &[u8]) -> Result<(), String> { + self.upload_data(ops, OPS_BUF_IDX) + } + + pub fn upload_noise_metadata(&mut self, metadata: &[u8]) -> Result<(), String> { + self.upload_data(metadata, CORRELATED_NOISE_TABLES_BUF_IDX) + } + + pub fn upload_noise_entries(&mut self, entries: &[u8]) -> Result<(), String> { + self.upload_data(entries, CORRELATED_NOISE_ENTRIES_BUF_IDX) + } + + pub fn free_noise_buffers(&mut self) -> Result<(), String> { + self.device_resources.bound_buffers[CORRELATED_NOISE_TABLES_BUF_IDX].buffer = None; + self.device_resources.bound_buffers[CORRELATED_NOISE_ENTRIES_BUF_IDX].buffer = None; + self.device_resources.bind_group = None; // Invalidate bind group to recreate later + Ok(()) + } + + fn try_get_buffer(&self, buf_idx: usize) -> Result<&Buffer, String> { + self.device_resources.bound_buffers[buf_idx] + .buffer + .as_ref() + .ok_or_else(|| format!("Buffer at index {buf_idx} not initialized")) + } + + // Verify that the per-run buffers are created and of sufficient size, recreating them if needed + pub fn ensure_run_buffers( + &mut self, + shot_state_buffer_size: usize, + state_vector_buffer_size: usize, + results_buffer_size: usize, + diagnostics_buffer_size: usize, + ) -> Result<(), String> { + let device = self.device.as_ref().ok_or("GPU device not initialized")?; + + let mut check_buffer = |idx: usize, required_size: usize| { + let buf_binding = &mut self.device_resources.bound_buffers[idx]; + if let Some(ref buffer) = buf_binding.buffer + && buffer.size() == required_size as u64 + { + // Buffer is already the correct size, no need to recreate + } else { + let new_buffer = + create_dst_buffer(device, required_size, buf_binding.usage, buf_binding.name); + buf_binding.buffer = Some(new_buffer); + self.device_resources.bind_group = None; // Invalidate bind group to recreate later + } + }; + + for (idx, size) in [ + (SHOT_STATE_BUF_IDX, shot_state_buffer_size), + (STATE_VECTOR_BUF_IDX, state_vector_buffer_size), + (RESULTS_BUF_IDX, results_buffer_size), + (DIAGNOSTICS_BUF_IDX, diagnostics_buffer_size), + ] { + check_buffer(idx, size); + } + Ok(()) + } + + fn upload_data(&mut self, data: &[u8], buf_idx: usize) -> Result<(), String> { + let device = self.device.as_ref().ok_or("GPU device not initialized")?; + let queue = self.queue.as_ref().ok_or("GPU queue not initialized")?; + + let dst_buffer = &mut self.device_resources.bound_buffers[buf_idx]; + + if let Some(ref buffer) = dst_buffer.buffer + && buffer.size() == data.len() as u64 + { + // Buffer is already the correct size, no need to recreate + copy_data_to_gpu(device, queue, data, buffer)?; + } else { + let new_buffer = + create_dst_buffer(device, data.len(), dst_buffer.usage, dst_buffer.name); + copy_data_to_gpu(device, queue, data, &new_buffer)?; + dst_buffer.buffer = Some(new_buffer); + self.device_resources.bind_group = None; // Invalidate bind group to recreate later + } + Ok(()) + } + + pub async fn download_batch_results(&self) -> Result<(Vec, DiagnosticsData), String> { + let device = self.device.as_ref().ok_or("GPU device not initialized")?; + let results = self.try_get_buffer(RESULTS_BUF_IDX)?; + let diagnostics = self.try_get_buffer(DIAGNOSTICS_BUF_IDX)?; + + let download = device.create_buffer(&wgpu::BufferDescriptor { + label: Some("Download buffer"), + size: results.size() + diagnostics.size(), + usage: wgpu::BufferUsages::COPY_DST | wgpu::BufferUsages::MAP_READ, + mapped_at_creation: false, + }); + + let mut encoder = self.get_encoder("Download Command Encoder")?; + + // Copy the results and diagnostics to the download buffer + encoder.copy_buffer_to_buffer(results, 0, &download, 0, results.size()); + encoder.copy_buffer_to_buffer( + diagnostics, + 0, + &download, + results.size(), + diagnostics.size(), + ); + + let command_buffer = encoder.finish(); + self.submit_command_buffer(command_buffer)?; + + // Now map and convert the data + // Fetching the actual results is a real pain. For details, see: + // https://github.com/gfx-rs/wgpu/blob/v26/examples/features/src/repeated_compute/mod.rs#L74 + + // Cross-platform readback: async map + native poll + let buffer_slice = download.slice(..); + + let (sender, receiver) = futures::channel::oneshot::channel(); + + buffer_slice.map_async(wgpu::MapMode::Read, move |result| { + if let Err(ref e) = result { + // NOTE: Should we just panic here? Or maybe let the receiver handle it? + eprintln!("Buffer mapping failed: {e:?}"); + } + let _ = sender.send(result); + }); + + // Block until all pending GPU work is complete + device + .poll(PollType::wait_indefinitely()) + .expect("GPU poll failed"); + + // Await the mapping completion (which is a Result of a Result - check both) + let map_result = receiver.await.expect("Failed to receive map completion"); + map_result.expect("Buffer mapping failed"); + + // Read, copy out, and unmap. + let data = buffer_slice.get_mapped_range(); + + // Fetch results and diagnostics from the download buffer to return + #[allow(clippy::cast_possible_truncation)] + let results_bytes = results.size() as usize; + let results_data = &data[..results_bytes]; + + let diagnositcs_data = &data[results_bytes..]; + let diagnostics: DiagnosticsData = *from_bytes::(diagnositcs_data); + let batch_results: Vec = cast_slice(results_data).to_vec(); + + drop(data); + download.unmap(); + + Ok((batch_results, diagnostics)) + } +} + +/// Strips out sections of code delimited by DX12-start-strip and DX12-end-strip comments +fn strip_dx12_sections(source: &str) -> String { + let mut result = String::new(); + let mut in_strip_section = false; + + for line in source.lines() { + if line.trim() == "// DX12-start-strip" { + in_strip_section = true; + continue; + } + if line.trim() == "// DX12-end-strip" { + in_strip_section = false; + continue; + } + if !in_strip_section { + result.push_str(line); + result.push('\n'); + } + } + + result +} + +fn create_dst_buffer( + device: &Device, + buffer_size: usize, + usage: BufferUsages, + label: &str, +) -> Buffer { + device.create_buffer(&BufferDescriptor { + label: Some(label), + size: buffer_size as u64, + usage, + mapped_at_creation: false, + }) +} + +fn copy_data_to_gpu( + device: &Device, + queue: &Queue, + data: &[u8], + target: &Buffer, +) -> Result<(), String> { + let upload_buffer = device.create_buffer(&BufferDescriptor { + label: Some("Tmp Upload Buffer"), + size: data.len() as u64, + usage: BufferUsages::COPY_SRC | BufferUsages::MAP_WRITE, + mapped_at_creation: true, + }); + + upload_buffer + .slice(..) + .get_mapped_range_mut() + .copy_from_slice(data); + upload_buffer.unmap(); + + // Copy from the upload buffer to the GPU buffer + let mut encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { + label: Some("Buffer Upload Copy Encoder"), + }); + encoder.copy_buffer_to_buffer(&upload_buffer, 0, target, 0, data.len() as u64); + queue.submit([encoder.finish()]); + + Ok(()) +} diff --git a/source/simulators/src/gpu_full_state_simulator/noise_mapping.rs b/source/simulators/src/gpu_full_state_simulator/noise_mapping.rs new file mode 100644 index 0000000000..28001d885f --- /dev/null +++ b/source/simulators/src/gpu_full_state_simulator/noise_mapping.rs @@ -0,0 +1,123 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use crate::{ + noise_config::{NoiseConfig, NoiseTable}, + shader_types::{Op, ops}, +}; + +// Use the 'real' parts of the Op to store the pauli probabilities. +// For 1q ops, r00 = pI, r01 = pX, r02 = pY, r03 = pZ +// For 2q ops, r00 = pII, r01 = pIX, r02 = pIY, r03 = pIZ +// r10 = pXI, r11 = pXX, r12 = pXY, r13 = pXZ +// r20 = pYI, r21 = pYX, r22 = pYY, r23 = pYZ +// r30 = pZI, r31 = pZX, r32 = pZY, r33 = pZZ +fn set_noise_op_probabilities(noise_table: &NoiseTable, op: &mut Op) { + noise_table + .pauli_strings + .iter() + .zip(&noise_table.probabilities) + .for_each(|(pauli_str, prob)| match noise_table.qubits { + 1 => match pauli_str.as_str() { + "I" => op.r00 = *prob, + "X" => op.r01 = *prob, + "Y" => op.r02 = *prob, + "Z" => op.r03 = *prob, + _ => panic!("Invalid pauli string for 1 qubit: {pauli_str}"), + }, + 2 => match pauli_str.as_str() { + "II" => op.r00 = *prob, + "IX" => op.r01 = *prob, + "IY" => op.r02 = *prob, + "IZ" => op.r03 = *prob, + "XI" => op.r10 = *prob, + "XX" => op.r11 = *prob, + "XY" => op.r12 = *prob, + "XZ" => op.r13 = *prob, + "YI" => op.r20 = *prob, + "YX" => op.r21 = *prob, + "YY" => op.r22 = *prob, + "YZ" => op.r23 = *prob, + "ZI" => op.r30 = *prob, + "ZX" => op.r31 = *prob, + "ZY" => op.r32 = *prob, + "ZZ" => op.r33 = *prob, + _ => panic!("Invalid pauli string for 2 qubits: {pauli_str}"), + }, + _ => panic!( + "Unsupported qubit count in noise table: {}", + noise_table.qubits + ), + }); +} + +fn get_noise_op(op: &Op, noise_table: &NoiseTable) -> Op { + match noise_table.qubits { + 1 => { + let mut op = Op::new_1q_gate(ops::PAULI_NOISE_1Q, op.q1); + set_noise_op_probabilities(noise_table, &mut op); + op + } + 2 => { + let mut op = Op::new_2q_gate(ops::PAULI_NOISE_2Q, op.q1, op.q2); + set_noise_op_probabilities(noise_table, &mut op); + op + } + _ => panic!( + "Unsupported qubit count in noise table: {}", + noise_table.qubits + ), + } +} + +#[must_use] +pub fn get_noise_ops(op: &Op, noise_config: &NoiseConfig) -> Option> { + let noise_table = match op.id { + ops::ID => &noise_config.i, + ops::X => &noise_config.x, + ops::Y => &noise_config.y, + ops::Z => &noise_config.z, + ops::H => &noise_config.h, + ops::S => &noise_config.s, + ops::S_ADJ => &noise_config.s_adj, + ops::T => &noise_config.t, + ops::T_ADJ => &noise_config.t_adj, + ops::SX => &noise_config.sx, + ops::SX_ADJ => &noise_config.sx_adj, + ops::RX => &noise_config.rx, + ops::RY => &noise_config.ry, + ops::RZ => &noise_config.rz, + ops::CX => &noise_config.cx, + ops::CZ => &noise_config.cz, + ops::RXX => &noise_config.rxx, + ops::RYY => &noise_config.ryy, + ops::RZZ => &noise_config.rzz, + ops::SWAP => &noise_config.swap, + ops::MOVE => &noise_config.mov, + ops::MRESETZ => &noise_config.mresetz, + _ => return None, + }; + if noise_table.is_noiseless() { + return None; + } + let mut results = vec![]; + if noise_table.has_pauli_noise() { + results.push(get_noise_op(op, noise_table)); + } + + if noise_table.loss > 0.0 { + if ops::is_2q_op(op.id) { + // For two-qubit gates, doing loss inline is hard, so just append an Id gate with loss for each qubit + results.push(Op::new_id_gate(op.q1)); + results.push(Op::new_loss_noise(op.q1, noise_table.loss)); + results.push(Op::new_id_gate(op.q2)); + results.push(Op::new_loss_noise(op.q2, noise_table.loss)); + } else if ops::is_1q_op(op.id) { + // For one-qubit gates, just add the loss noise on the one qubit operation + results.push(Op::new_loss_noise(op.q1, noise_table.loss)); + } else { + panic!("unsupported op for loss noise: {op:?}"); + } + } + Some(results) +} diff --git a/source/simulators/src/gpu_full_state_simulator/shader_types.rs b/source/simulators/src/gpu_full_state_simulator/shader_types.rs new file mode 100644 index 0000000000..b86c8a6c67 --- /dev/null +++ b/source/simulators/src/gpu_full_state_simulator/shader_types.rs @@ -0,0 +1,1044 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use std::f32::consts::FRAC_1_SQRT_2; + +use bytemuck::{Pod, Zeroable}; + +// ********** Constants used by the GPU shader code and structures ********* + +// Some of these values are to align with WebGPU default limits +// See https://gpuweb.github.io/gpuweb/#limits +pub const MAX_BUFFER_SIZE: usize = 1 << 30; // 1 GB limit due to some wgpu restrictions +pub const MAX_QUBIT_COUNT: i32 = 27; // 2^27 * 8 bytes per complex32 = 1 GB buffer limit +pub const MAX_QUBITS_PER_WORKGROUP: i32 = 18; // Max qubits to be processed by a single workgroup +pub const THREADS_PER_WORKGROUP: i32 = 32; // 32 gives good occupancy across various GPUs + +// Once a shot is big enough to need multiple workgroups, what's the max number of workgroups possible +pub const MAX_PARTITIONED_WORKGROUPS: i32 = 1 << (MAX_QUBIT_COUNT - MAX_QUBITS_PER_WORKGROUP); +pub const MAX_SHOTS_PER_BATCH: i32 = 65535; // To align with max workgroups per dimension WebGPU default + +// Round up circuit qubits if smaller to enable to optimizations re unrolling, etc. +// With min qubit count of 8, this means min 256 entries per shot. Spread across 32 threads = 8 entries per thread. +// With each iteration in each thread processing 2 or 4 entries, that means 2 or 4 iterations per thread minimum. +pub const MIN_QUBIT_COUNT: i32 = 8; +pub const SIZEOF_SHOTDATA: usize = std::mem::size_of::(); // Size of ShotData struct on the GPU in bytes + +#[allow(clippy::cast_possible_truncation)] +#[allow(clippy::cast_possible_wrap)] +pub const MAX_CIRCUIT_OPS: i32 = (MAX_BUFFER_SIZE / std::mem::size_of::()) as i32; + +#[allow(clippy::cast_possible_truncation)] +#[allow(clippy::cast_possible_wrap)] +pub const MAX_SHOT_ENTRIES: i32 = (MAX_BUFFER_SIZE / SIZEOF_SHOTDATA) as i32; + +// ********* The below structure should be kept in sync with the WGSL shader code ********* + +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +pub struct Uniforms { + pub batch_start_shot_id: i32, + pub rng_seed: u32, +} + +// The follow data is copied back from the GPU for diagnostics +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +pub struct QubitProbabilities { + zero: f32, + one: f32, +} + +// Each workgroup sums the probabilities for the entries it processed for each qubit +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +pub struct WorkgroupSums { + qubits: [QubitProbabilities; MAX_QUBIT_COUNT as usize], +} + +// Once the dispatch for the workgroup processing is done, the results from all workgroups +// for all active shots are collated here for final processing in the next prepare_op step. +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +pub struct WorkgroupCollationBuffer { + sums: [WorkgroupSums; MAX_PARTITIONED_WORKGROUPS as usize], +} + +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +pub struct QubitProbabilityPerThread { + zero: [f32; MAX_QUBIT_COUNT as usize], + one: [f32; MAX_QUBIT_COUNT as usize], +} + +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +pub struct QubitState { + zero_probability: f32, + one_probability: f32, + heat: f32, // -1.0 = lost + idle_since: f32, +} + +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +pub struct ShotData { + pub shot_id: u32, + pub next_op_idx: u32, + pub rng_state: [u32; 6], // 6 x u32 + pub rand_pauli: f32, + pub rand_damping: f32, + pub rand_dephase: f32, + pub rand_measure: f32, + pub rand_loss: f32, + pub op_type: u32, + pub op_idx: u32, + pub duration: f32, + pub renormalize: f32, + pub qubit_is_0_mask: u32, + pub qubit_is_1_mask: u32, + pub qubits_updated_last_op_mask: u32, + pub qubit_state: [QubitState; MAX_QUBIT_COUNT as usize], + pub unitary: [f32; 32], +} + +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +pub struct DiagnosticsData { + pub error_code: u32, + pub extra1: u32, + pub extra2: f32, + pub extra3: f32, + pub shot: ShotData, + pub op: Op, + pub qubit_probabilities: [QubitProbabilityPerThread; THREADS_PER_WORKGROUP as usize], + pub collation_buffer: WorkgroupCollationBuffer, +} + +#[repr(u32)] +#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] +pub enum OpID { + Id = 0, + Reset = 1, + X = 2, + Y = 3, + Z = 4, + H = 5, + S = 6, + SAdj = 7, + T = 8, + TAdj = 9, + Sx = 10, + SxAdj = 11, + Rx = 12, + Ry = 13, + Rz = 14, + Cx = 15, + // TODO: Cy + Cz = 16, + Rxx = 17, + Ryy = 18, + Rzz = 19, + Ccx = 20, + Mz = 21, + MResetZ = 22, + MEveryZ = 23, + Swap = 24, + Matrix = 25, + Matrix2Q = 26, + SAMPLE = 27, // Take a probabilistic sample of all qubits + Move = 28, + PauliNoise1Q = 128, + PauliNoise2Q = 129, + LossNoise = 130, + CorrelatedNoise = 131, +} + +impl OpID { + #[must_use] + pub const fn as_u32(self) -> u32 { + self as u32 + } +} + +impl From for u32 { + fn from(op_id: OpID) -> Self { + op_id as u32 + } +} + +impl TryFrom for OpID { + type Error = u32; + + fn try_from(value: u32) -> core::result::Result { + match value { + 0 => Ok(Self::Id), + 1 => Ok(Self::Reset), + 2 => Ok(Self::X), + 3 => Ok(Self::Y), + 4 => Ok(Self::Z), + 5 => Ok(Self::H), + 6 => Ok(Self::S), + 7 => Ok(Self::SAdj), + 8 => Ok(Self::T), + 9 => Ok(Self::TAdj), + 10 => Ok(Self::Sx), + 11 => Ok(Self::SxAdj), + 12 => Ok(Self::Rx), + 13 => Ok(Self::Ry), + 14 => Ok(Self::Rz), + 15 => Ok(Self::Cx), + 16 => Ok(Self::Cz), + 17 => Ok(Self::Rxx), + 18 => Ok(Self::Ryy), + 19 => Ok(Self::Rzz), + 20 => Ok(Self::Ccx), + 21 => Ok(Self::Mz), + 22 => Ok(Self::MResetZ), + 23 => Ok(Self::MEveryZ), + 24 => Ok(Self::Swap), + 25 => Ok(Self::Matrix), + 26 => Ok(Self::Matrix2Q), + 27 => Ok(Self::SAMPLE), + 28 => Ok(Self::Move), + 128 => Ok(Self::PauliNoise1Q), + 129 => Ok(Self::PauliNoise2Q), + 130 => Ok(Self::LossNoise), + 131 => Ok(Self::CorrelatedNoise), + invalid => Err(invalid), + } + } +} + +// Operation identifiers used by the GPU shader. +pub mod ops { + pub const ID: u32 = super::OpID::Id.as_u32(); + pub const RESET: u32 = super::OpID::Reset.as_u32(); + pub const X: u32 = super::OpID::X.as_u32(); + pub const Y: u32 = super::OpID::Y.as_u32(); + pub const Z: u32 = super::OpID::Z.as_u32(); + pub const H: u32 = super::OpID::H.as_u32(); + pub const S: u32 = super::OpID::S.as_u32(); + pub const S_ADJ: u32 = super::OpID::SAdj.as_u32(); + pub const T: u32 = super::OpID::T.as_u32(); + pub const T_ADJ: u32 = super::OpID::TAdj.as_u32(); + pub const SX: u32 = super::OpID::Sx.as_u32(); + pub const SX_ADJ: u32 = super::OpID::SxAdj.as_u32(); + pub const RX: u32 = super::OpID::Rx.as_u32(); + pub const RY: u32 = super::OpID::Ry.as_u32(); + pub const RZ: u32 = super::OpID::Rz.as_u32(); + pub const CX: u32 = super::OpID::Cx.as_u32(); + pub const CZ: u32 = super::OpID::Cz.as_u32(); + pub const RXX: u32 = super::OpID::Rxx.as_u32(); + pub const RYY: u32 = super::OpID::Ryy.as_u32(); + pub const RZZ: u32 = super::OpID::Rzz.as_u32(); + pub const CCX: u32 = super::OpID::Ccx.as_u32(); + pub const MZ: u32 = super::OpID::Mz.as_u32(); + pub const MRESETZ: u32 = super::OpID::MResetZ.as_u32(); + pub const MEVERYZ: u32 = super::OpID::MEveryZ.as_u32(); // Implicit at end of circuit (for now) + pub const SWAP: u32 = super::OpID::Swap.as_u32(); + pub const MATRIX: u32 = super::OpID::Matrix.as_u32(); + pub const MATRIX_2Q: u32 = super::OpID::Matrix2Q.as_u32(); + pub const SAMPLE: u32 = super::OpID::SAMPLE.as_u32(); // Take a probabilistic sample of all qubits + pub const MOVE: u32 = super::OpID::Move.as_u32(); + pub const PAULI_NOISE_1Q: u32 = super::OpID::PauliNoise1Q.as_u32(); + pub const PAULI_NOISE_2Q: u32 = super::OpID::PauliNoise2Q.as_u32(); + pub const LOSS_NOISE: u32 = super::OpID::LossNoise.as_u32(); + pub const CORRELATED_NOISE: u32 = super::OpID::CorrelatedNoise.as_u32(); + + #[must_use] + pub fn is_1q_op(op_id: u32) -> bool { + matches!( + op_id, + ID | RESET + | X + | Y + | Z + | H + | S + | S_ADJ + | T + | T_ADJ + | SX + | SX_ADJ + | RX + | RY + | RZ + | MZ + | MRESETZ + | MATRIX + | MOVE + ) + } + + #[must_use] + pub fn is_2q_op(op_id: u32) -> bool { + matches!(op_id, CX | CZ | RXX | RYY | RZZ | SWAP | MATRIX_2Q) + } +} + +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +pub struct Op { + pub id: u32, + pub q1: u32, + pub q2: u32, + pub q3: u32, // For ccx + pub r00: f32, + pub i00: f32, + pub r01: f32, + pub i01: f32, + pub r02: f32, + pub i02: f32, + pub r03: f32, + pub i03: f32, + pub r10: f32, + pub i10: f32, + pub r11: f32, + pub i11: f32, + pub r12: f32, + pub i12: f32, + pub r13: f32, + pub i13: f32, + pub r20: f32, + pub i20: f32, + pub r21: f32, + pub i21: f32, + pub r22: f32, + pub i22: f32, + pub r23: f32, + pub i23: f32, + pub r30: f32, + pub i30: f32, + pub r31: f32, + pub i31: f32, + pub r32: f32, + pub i32: f32, + pub r33: f32, + pub i33: f32, +} + +// safety check to make sure Op is the correct size with padding at compile time +const _: () = assert!(std::mem::size_of::() == 144); + +impl Default for Op { + fn default() -> Self { + Self { + id: 0, + q1: 0, + q2: 0, + q3: 0, + r00: 0.0, + i00: 0.0, + r01: 0.0, + i01: 0.0, + r02: 0.0, + i02: 0.0, + r03: 0.0, + i03: 0.0, + r10: 0.0, + i10: 0.0, + r11: 0.0, + i11: 0.0, + r12: 0.0, + i12: 0.0, + r13: 0.0, + i13: 0.0, + r20: 0.0, + i20: 0.0, + r21: 0.0, + i21: 0.0, + r22: 0.0, + i22: 0.0, + r23: 0.0, + i23: 0.0, + r30: 0.0, + i30: 0.0, + r31: 0.0, + i31: 0.0, + r32: 0.0, + i32: 0.0, + r33: 0.0, + i33: 0.0, + } + } +} +/// Utility functions for creating 1-qubit gate operations +#[allow(clippy::pub_underscore_fields, clippy::used_underscore_binding)] +impl Op { + /// Create a new Op with default values + #[must_use] + pub fn new_1q_gate(op_id: u32, qubit: u32) -> Self { + Self { + id: op_id, + q1: qubit, + ..Default::default() + } + } + + #[must_use] + pub fn new_m_every_z_gate() -> Self { + Self::new_1q_gate(ops::MEVERYZ, 0) + } + + #[must_use] + pub fn new_sample_gate(rand_value: f32) -> Self { + let mut op = Self::new_1q_gate(ops::SAMPLE, 0); + // Store the random value in the angle field + op.r00 = rand_value; + op + } + + /// Identity gate: [[1, 0], [0, 1]] + #[must_use] + pub fn new_id_gate(qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::ID, qubit); + op.r00 = 1.0; // |0⟩⟨0| coefficient (real) + op.i00 = 0.0; // |0⟩⟨0| coefficient (imaginary) + op.r01 = 0.0; // |0⟩⟨1| coefficient (real) + op.i01 = 0.0; // |0⟩⟨1| coefficient (imaginary) + op.r10 = 0.0; // |1⟩⟨0| coefficient (real) + op.i10 = 0.0; // |1⟩⟨0| coefficient (imaginary) + op.r11 = 1.0; // |1⟩⟨1| coefficient (real) + op.i11 = 0.0; // |1⟩⟨1| coefficient (imaginary) + op + } + + #[must_use] + pub fn new_move_gate(qubit: u32) -> Self { + // Treat is like an identity for now + let mut op = Self::new_id_gate(qubit); + op.id = ops::MOVE; + op + } + + /// Reset gate: maps |0⟩ to |0⟩ and |1⟩ to |0⟩ + /// Note: This is used with a qubit id of `u32::MAX` to indicate a reset of the entire system + #[must_use] + pub fn new_reset_gate(qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::RESET, qubit); + op.r00 = 1.0; // |0⟩⟨0| coefficient + op.i00 = 0.0; + op.r01 = 1.0; // |0⟩⟨1| coefficient + op.i01 = 0.0; + op.r10 = 0.0; // |1⟩⟨0| coefficient + op.i10 = 0.0; + op.r11 = 0.0; // |1⟩⟨1| coefficient + op.i11 = 0.0; + op + } + + /// Reset gate: maps |0⟩ to |0⟩ and |1⟩ to |0⟩ + /// Note: This is used with a qubit id of `u32::MAX` to indicate a reset of the entire system + #[must_use] + pub fn new_mresetz_gate(qubit: u32, result_id: u32) -> Self { + let mut op = Self::new_1q_gate(ops::MRESETZ, qubit); + // Store the result id in q2 + op.q2 = result_id; + // Matrix will need to be determined in the simulator based on the measurement outcome + op + } + + /// X gate (Pauli-X): [[0, 1], [1, 0]] + #[must_use] + pub fn new_x_gate(qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::X, qubit); + op.r00 = 0.0; // |0⟩⟨0| coefficient + op.i00 = 0.0; + op.r01 = 1.0; // |0⟩⟨1| coefficient + op.i01 = 0.0; + op.r10 = 1.0; // |1⟩⟨0| coefficient + op.i10 = 0.0; + op.r11 = 0.0; // |1⟩⟨1| coefficient + op.i11 = 0.0; + op + } + + /// Y gate (Pauli-Y): [[0, -i], [i, 0]] + #[must_use] + pub fn new_y_gate(qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::Y, qubit); + op.r00 = 0.0; // |0⟩⟨0| coefficient + op.i00 = 0.0; + op.r01 = 0.0; // |0⟩⟨1| coefficient (real part of -i) + op.i01 = -1.0; // |0⟩⟨1| coefficient (imaginary part of -i) + op.r10 = 0.0; // |1⟩⟨0| coefficient (real part of i) + op.i10 = 1.0; // |1⟩⟨0| coefficient (imaginary part of i) + op.r11 = 0.0; // |1⟩⟨1| coefficient + op.i11 = 0.0; + op + } + + /// Z gate (Pauli-Z): [[1, 0], [0, -1]] + #[must_use] + pub fn new_z_gate(qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::Z, qubit); + op.r00 = 1.0; // |0⟩⟨0| coefficient + op.i00 = 0.0; + op.r01 = 0.0; // |0⟩⟨1| coefficient + op.i01 = 0.0; + op.r10 = 0.0; // |1⟩⟨0| coefficient + op.i10 = 0.0; + op.r11 = -1.0; // |1⟩⟨1| coefficient + op.i11 = 0.0; + op + } + + /// H gate (Hadamard): [[1/√2, 1/√2], [1/√2, -1/√2]] + #[must_use] + pub fn new_h_gate(qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::H, qubit); + op.r00 = FRAC_1_SQRT_2; // |0⟩⟨0| coefficient + op.i00 = 0.0; + op.r01 = FRAC_1_SQRT_2; // |0⟩⟨1| coefficient + op.i01 = 0.0; + op.r10 = FRAC_1_SQRT_2; // |1⟩⟨0| coefficient + op.i10 = 0.0; + op.r11 = -FRAC_1_SQRT_2; // |1⟩⟨1| coefficient + op.i11 = 0.0; + op + } + + /// S gate (Phase): [[1, 0], [0, i]] + #[must_use] + pub fn new_s_gate(qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::S, qubit); + op.r00 = 1.0; // |0⟩⟨0| coefficient + op.i00 = 0.0; + op.r01 = 0.0; // |0⟩⟨1| coefficient + op.i01 = 0.0; + op.r10 = 0.0; // |1⟩⟨0| coefficient + op.i10 = 0.0; + op.r11 = 0.0; // |1⟩⟨1| coefficient (real part of i) + op.i11 = 1.0; // |1⟩⟨1| coefficient (imaginary part of i) + op + } + + /// S† gate (Phase adjoint): [[1, 0], [0, -i]] + #[must_use] + pub fn new_s_adj_gate(qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::S_ADJ, qubit); + op.r00 = 1.0; // |0⟩⟨0| coefficient + op.i00 = 0.0; + op.r01 = 0.0; // |0⟩⟨1| coefficient + op.i01 = 0.0; + op.r10 = 0.0; // |1⟩⟨0| coefficient + op.i10 = 0.0; + op.r11 = 0.0; // |1⟩⟨1| coefficient (real part of -i) + op.i11 = -1.0; // |1⟩⟨1| coefficient (imaginary part of -i) + op + } + + /// T gate (π/8): [[1, 0], [0, e^(iπ/4)]] + #[must_use] + pub fn new_t_gate(qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::T, qubit); + op.r00 = 1.0; // |0⟩⟨0| coefficient + op.i00 = 0.0; + op.r01 = 0.0; // |0⟩⟨1| coefficient + op.i01 = 0.0; + op.r10 = 0.0; // |1⟩⟨0| coefficient + op.i10 = 0.0; + op.r11 = FRAC_1_SQRT_2; // |1⟩⟨1| coefficient (real part of e^(iπ/4)) + op.i11 = FRAC_1_SQRT_2; // |1⟩⟨1| coefficient (imaginary part of e^(iπ/4)) + op + } + + /// T† gate (π/8 adjoint): [[1, 0], [0, e^(-iπ/4)]] + #[must_use] + pub fn new_t_adj_gate(qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::T_ADJ, qubit); + op.r00 = 1.0; // |0⟩⟨0| coefficient + op.i00 = 0.0; + op.r01 = 0.0; // |0⟩⟨1| coefficient + op.i01 = 0.0; + op.r10 = 0.0; // |1⟩⟨0| coefficient + op.i10 = 0.0; + op.r11 = FRAC_1_SQRT_2; // |1⟩⟨1| coefficient (real part of e^(-iπ/4)) + op.i11 = -FRAC_1_SQRT_2; // |1⟩⟨1| coefficient (imaginary part of e^(-iπ/4)) + op + } + + /// SX gate (√X): [[1+i, 1-i], [1-i, 1+i]]/2 + #[must_use] + pub fn new_sx_gate(qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::SX, qubit); + // SX = (1/2) * [[1+i, 1-i], [1-i, 1+i]] + op.r00 = 0.5; // |0⟩⟨0| coefficient (real part of (1+i)/2) + op.i00 = 0.5; // |0⟩⟨0| coefficient (imaginary part of (1+i)/2) + op.r01 = 0.5; // |0⟩⟨1| coefficient (real part of (1-i)/2) + op.i01 = -0.5; // |0⟩⟨1| coefficient (imaginary part of (1-i)/2) + op.r10 = 0.5; // |1⟩⟨0| coefficient (real part of (1-i)/2) + op.i10 = -0.5; // |1⟩⟨0| coefficient (imaginary part of (1-i)/2) + op.r11 = 0.5; // |1⟩⟨1| coefficient (real part of (1+i)/2) + op.i11 = 0.5; // |1⟩⟨1| coefficient (imaginary part of (1+i)/2) + op + } + + /// SX† gate (√X adjoint): [[1-i, 1+i], [1+i, 1-i]]/2 + #[must_use] + pub fn new_sx_adj_gate(qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::SX_ADJ, qubit); + // SX† = (1/2) * [[1-i, 1+i], [1+i, 1-i]] + op.r00 = 0.5; // |0⟩⟨0| coefficient (real part of (1-i)/2) + op.i00 = -0.5; // |0⟩⟨0| coefficient (imaginary part of (1-i)/2) + op.r01 = 0.5; // |0⟩⟨1| coefficient (real part of (1+i)/2) + op.i01 = 0.5; // |0⟩⟨1| coefficient (imaginary part of (1+i)/2) + op.r10 = 0.5; // |1⟩⟨0| coefficient (real part of (1+i)/2) + op.i10 = 0.5; // |1⟩⟨0| coefficient (imaginary part of (1+i)/2) + op.r11 = 0.5; // |1⟩⟨1| coefficient (real part of (1-i)/2) + op.i11 = -0.5; // |1⟩⟨1| coefficient (imaginary part of (1-i)/2) + op + } + + /// RX gate (rotation around X): [[cos(θ/2), -i*sin(θ/2)], [-i*sin(θ/2), cos(θ/2)]] + #[must_use] + pub fn new_rx_gate(angle: f32, qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::RX, qubit); + let half_angle = angle / 2.0; + let cos_half = half_angle.cos(); + let sin_half = half_angle.sin(); + + op.r00 = cos_half; // |0⟩⟨0| coefficient + op.i00 = 0.0; + op.r01 = 0.0; // |0⟩⟨1| coefficient (real part of -i*sin(θ/2)) + op.i01 = -sin_half; // |0⟩⟨1| coefficient (imaginary part of -i*sin(θ/2)) + op.r10 = 0.0; // |1⟩⟨0| coefficient (real part of -i*sin(θ/2)) + op.i10 = -sin_half; // |1⟩⟨0| coefficient (imaginary part of -i*sin(θ/2)) + op.r11 = cos_half; // |1⟩⟨1| coefficient + op.i11 = 0.0; + op + } + + /// RY gate (rotation around Y): [[cos(θ/2), -sin(θ/2)], [sin(θ/2), cos(θ/2)]] + #[must_use] + pub fn new_ry_gate(angle: f32, qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::RY, qubit); + let half_angle = angle / 2.0; + let cos_half = half_angle.cos(); + let sin_half = half_angle.sin(); + + op.r00 = cos_half; // |0⟩⟨0| coefficient + op.i00 = 0.0; + op.r01 = -sin_half; // |0⟩⟨1| coefficient + op.i01 = 0.0; + op.r10 = sin_half; // |1⟩⟨0| coefficient + op.i10 = 0.0; + op.r11 = cos_half; // |1⟩⟨1| coefficient + op.i11 = 0.0; + op + } + + /// RZ gate (rotation around Z): [[e^(-iθ/2), 0], [0, e^(iθ/2)]] + #[must_use] + pub fn new_rz_gate(angle: f32, qubit: u32) -> Self { + let mut op = Self::new_1q_gate(ops::RZ, qubit); + + // In case we need to return to a uniform processing based on 2x2 matrix + // let half_angle = angle / 2.0; + op.r00 = 1.0; + op.i00 = 0.0; + op.r01 = 0.0; // |0⟩⟨1| coefficient + op.i01 = 0.0; + op.r10 = 0.0; // |1⟩⟨0| coefficient + op.i10 = 0.0; + op.r11 = angle.cos(); // |1⟩⟨1| coefficient (real part of e^(iθ)) + op.i11 = angle.sin(); // |1⟩⟨1| coefficient (imaginary part of e^(iθ)) + op + } + + #[must_use] + pub fn new_pauli_noise_1q(qubit: u32, p_x: f32, p_y: f32, p_z: f32) -> Self { + let mut op = Self::new_1q_gate(ops::PAULI_NOISE_1Q, qubit); + op.r00 = 1.0 - (p_x + p_y + p_z); + op.r01 = p_x; + op.r02 = p_y; + op.r03 = p_z; + op + } + + #[must_use] + #[allow(clippy::similar_names)] + #[allow(clippy::too_many_arguments)] + pub fn new_pauli_noise_2q( + q1: u32, + q2: u32, + p_ix: f32, + p_iy: f32, + p_iz: f32, + p_xi: f32, + p_xx: f32, + p_xy: f32, + p_xz: f32, + p_yi: f32, + p_yx: f32, + p_yy: f32, + p_yz: f32, + p_zi: f32, + p_zx: f32, + p_zy: f32, + p_zz: f32, + ) -> Self { + let mut op = Self::new_2q_gate(ops::PAULI_NOISE_2Q, q1, q2); + op.r00 = 1.0 + - (p_ix + + p_iy + + p_iz + + p_xi + + p_xx + + p_xy + + p_xz + + p_yi + + p_yx + + p_yy + + p_yz + + p_zi + + p_zx + + p_zy + + p_zz); + op.r01 = p_ix; + op.r02 = p_iy; + op.r03 = p_iz; + op.r10 = p_xi; + op.r11 = p_xx; + op.r12 = p_xy; + op.r13 = p_xz; + op.r20 = p_yi; + op.r21 = p_yx; + op.r22 = p_yy; + op.r23 = p_yz; + op.r30 = p_zi; + op.r31 = p_zx; + op.r32 = p_zy; + op.r33 = p_zz; + op + } + + #[must_use] + pub fn new_loss_noise(qubit: u32, p_loss: f32) -> Self { + let mut op = Self::new_1q_gate(ops::LOSS_NOISE, qubit); + op.r00 = p_loss; + op + } + + /// Create a new 2-qubit gate Op with default values + #[must_use] + pub fn new_2q_gate(op_id: u32, control: u32, target: u32) -> Self { + Self { + id: op_id, + q1: control, + q2: target, + ..Default::default() + } + } + + /// CX gate (CNOT): Controlled-X gate + /// Matrix representation is handled in the shader for 2-qubit gates + #[must_use] + pub fn new_cx_gate(control: u32, target: u32) -> Self { + let mut op = Self::new_2q_gate(ops::CX, control, target); + op.r00 = 1.0; + op.r11 = 1.0; + op.r23 = 1.0; + op.r32 = 1.0; + op + } + + #[must_use] + pub fn new_cy_gate(_control: u32, _target: u32) -> Self { + todo!("The CY enum entry still needs to be added"); + // let mut op = Self::new_2q_gate(ops::CY, control, target); + // op.r00 = 1.0; + // op.r11 = 1.0; + // op.i23 = -1.0; + // op.i32 = 1.0; + // op + } + + /// CZ gate (Controlled-Z): Controlled-Z gate + /// Matrix representation is handled in the shader for 2-qubit gates + #[must_use] + pub fn new_cz_gate(control: u32, target: u32) -> Self { + let mut op = Self::new_2q_gate(ops::CZ, control, target); + op.r00 = 1.0; + op.r11 = 1.0; + op.r22 = 1.0; + op.r33 = -1.0; + op + } + + #[must_use] + pub fn new_swap_gate(a: u32, b: u32) -> Self { + let mut op = Self::new_2q_gate(ops::SWAP, a, b); + op.r00 = 1.0; + op.r12 = 1.0; + op.r21 = 1.0; + op.r33 = 1.0; + op + } + + /// RXX gate: Two-qubit rotation around XX + /// Matrix: exp(-i*θ/2 * (X ⊗ X)) + /// [[cos(θ/2), 0, 0, -i*sin(θ/2)], + /// [0, cos(θ/2), -i*sin(θ/2), 0], + /// [0, -i*sin(θ/2), cos(θ/2), 0], + /// [-i*sin(θ/2), 0, 0, cos(θ/2)]] + #[must_use] + pub fn new_rxx_gate(angle: f32, qubit1: u32, qubit2: u32) -> Self { + let mut op = Self::new_2q_gate(ops::RXX, qubit1, qubit2); + let half_angle = angle / 2.0; + let cos_half = half_angle.cos(); + let sin_half = half_angle.sin(); + + // |00⟩⟨00| and |11⟩⟨11| coefficients + op.r00 = cos_half; + op.i00 = 0.0; + op.r33 = cos_half; + op.i33 = 0.0; + + // |01⟩⟨01| and |10⟩⟨10| coefficients + op.r11 = cos_half; + op.i11 = 0.0; + op.r22 = cos_half; + op.i22 = 0.0; + + // |00⟩⟨11| and |11⟩⟨00| coefficients (-i*sin(θ/2)) + op.r03 = 0.0; + op.i03 = -sin_half; + op.r30 = 0.0; + op.i30 = -sin_half; + + // |01⟩⟨10| and |10⟩⟨01| coefficients (-i*sin(θ/2)) + op.r12 = 0.0; + op.i12 = -sin_half; + op.r21 = 0.0; + op.i21 = -sin_half; + + // All other coefficients are 0 (already set by new_2q_gate) + op + } + + /// RYY gate: Two-qubit rotation around YY + /// Matrix: exp(-i*θ/2 * (Y ⊗ Y)) + /// [[cos(θ/2), 0, 0, i*sin(θ/2)], + /// [0, cos(θ/2), -i*sin(θ/2), 0], + /// [0, -i*sin(θ/2), cos(θ/2), 0], + /// [i*sin(θ/2), 0, 0, cos(θ/2)]] + #[must_use] + pub fn new_ryy_gate(angle: f32, qubit1: u32, qubit2: u32) -> Self { + let mut op = Self::new_2q_gate(ops::RYY, qubit1, qubit2); + let half_angle = angle / 2.0; + let cos_half = half_angle.cos(); + let sin_half = half_angle.sin(); + + // |00⟩⟨00| and |11⟩⟨11| coefficients + op.r00 = cos_half; + op.i00 = 0.0; + op.r33 = cos_half; + op.i33 = 0.0; + + // |01⟩⟨01| and |10⟩⟨10| coefficients + op.r11 = cos_half; + op.i11 = 0.0; + op.r22 = cos_half; + op.i22 = 0.0; + + // |00⟩⟨11| and |11⟩⟨00| coefficients (i*sin(θ/2)) + op.r03 = 0.0; + op.i03 = sin_half; + op.r30 = 0.0; + op.i30 = sin_half; + + // |01⟩⟨10| and |10⟩⟨01| coefficients (-i*sin(θ/2)) + op.r12 = 0.0; + op.i12 = -sin_half; + op.r21 = 0.0; + op.i21 = -sin_half; + + // All other coefficients are 0 (already set by new_2q_gate) + op + } + + /// RZZ gate: Two-qubit rotation around ZZ + /// Matrix: exp(-i*θ/2 * (Z ⊗ Z)) + /// [[1, 0, 0, 0], + /// [0, e^(i*θ), 0, 0], + /// [0, 0, e^(i*θ), 0], + /// [0, 0, 0, 1]] + #[must_use] + pub fn new_rzz_gate(angle: f32, qubit1: u32, qubit2: u32) -> Self { + let mut op = Self::new_2q_gate(ops::RZZ, qubit1, qubit2); + + // |00⟩⟨00| coefficient (e^(-i*θ/2)) + op.r00 = 1.0; + + // |01⟩⟨01| coefficient (e^(i*θ)) + op.r11 = angle.cos(); + op.i11 = angle.sin(); + + // |10⟩⟨10| coefficient (e^(i*θ)) + op.r22 = angle.cos(); + op.i22 = angle.sin(); + + // |11⟩⟨11| coefficient (e^(-i*θ/2)) + op.r33 = 1.0; + + // All off-diagonal elements are 0 (already set by new_2q_gate) + op + } + + #[must_use] + pub fn new_correlated_noise_gate(noise_table: u32, qubits: &[u32]) -> Self { + // Qubit count will never exceed 32 + #[allow(clippy::cast_possible_truncation)] + let mut op = Self::new_2q_gate(ops::CORRELATED_NOISE, noise_table, qubits.len() as u32); + + // Store qubit ids in the matrix elements + for (i, &q) in qubits.iter().enumerate() { + // The range of qubit ids is limited to 32 for now, so f32 can represent them exactly + #[allow(clippy::cast_precision_loss)] + match i { + 0 => op.r00 = q as f32, + 1 => op.i00 = q as f32, + 2 => op.r01 = q as f32, + 3 => op.i01 = q as f32, + 4 => op.r02 = q as f32, + 5 => op.i02 = q as f32, + 6 => op.r03 = q as f32, + 7 => op.i03 = q as f32, + 8 => op.r10 = q as f32, + 9 => op.i10 = q as f32, + 10 => op.r11 = q as f32, + 11 => op.i11 = q as f32, + 12 => op.r12 = q as f32, + 13 => op.i12 = q as f32, + 14 => op.r13 = q as f32, + 15 => op.i13 = q as f32, + 16 => op.r20 = q as f32, + 17 => op.i20 = q as f32, + 18 => op.r21 = q as f32, + 19 => op.i21 = q as f32, + 20 => op.r22 = q as f32, + 21 => op.i22 = q as f32, + 22 => op.r23 = q as f32, + 23 => op.i23 = q as f32, + 24 => op.r30 = q as f32, + 25 => op.i30 = q as f32, + 26 => op.r31 = q as f32, + 27 => op.i31 = q as f32, + 28 => op.r32 = q as f32, + 29 => op.i32 = q as f32, + 30 => op.r33 = q as f32, + 31 => op.i33 = q as f32, + _ => panic!("More than 32 qubits passed to the correlated noise operation"), // Limited to 32 qubits + } + } + op + } + + /// Custom 1-qubit operation with arbitrary matrix elements + /// K = [[_00r + i*_00i, _01r + i*_01i], + /// [_10r + i*_10i, _11r + i*_11i]] + /// Used for quantum noise models and non-unitary operations + /// + /// # Arguments + /// * `qubit` - Target qubit + /// * `m00` - Matrix element (0,0) as (real, imaginary) tuple + /// * `m01` - Matrix element (0,1) as (real, imaginary) tuple + /// * `m10` - Matrix element (1,0) as (real, imaginary) tuple + /// * `m11` - Matrix element (1,1) as (real, imaginary) tuple + #[must_use] + pub fn new_matrix_gate( + qubit: u32, + m00: (f32, f32), + m01: (f32, f32), + m10: (f32, f32), + m11: (f32, f32), + ) -> Self { + let mut op = Self::new_1q_gate(ops::MATRIX, qubit); + op.r00 = m00.0; + op.i00 = m00.1; + op.r01 = m01.0; + op.i01 = m01.1; + op.r10 = m10.0; + op.i10 = m10.1; + op.r11 = m11.0; + op.i11 = m11.1; + op + } + + /// Custom 2-qubit operation with arbitrary 4x4 matrix elements + /// K = [[_00r+i*_00i, _01r+i*_01i, _02r+i*_02i, _03r+i*_03i], + /// [_10r+i*_10i, _11r+i*_11i, _12r+i*_12i, _13r+i*_13i], + /// [_20r+i*_20i, _21r+i*_21i, _22r+i*_22i, _23r+i*_23i], + /// [_30r+i*_30i, _31r+i*_31i, _32r+i*_32i, _33r+i*_33i]] + /// Used for quantum noise models and non-unitary 2-qubit operations + /// + /// # Arguments + /// * `qubit1` - First target qubit + /// * `qubit2` - Second target qubit + /// * `row0` - First row as array of (real, imaginary) tuples [m00, m01, m02, m03] + /// * `row1` - Second row as array of (real, imaginary) tuples [m10, m11, m12, m13] + /// * `row2` - Third row as array of (real, imaginary) tuples [m20, m21, m22, m23] + /// * `row3` - Fourth row as array of (real, imaginary) tuples [m30, m31, m32, m33] + #[must_use] + pub fn new_matrix_2q_gate( + qubit1: u32, + qubit2: u32, + row0: [(f32, f32); 4], + row1: [(f32, f32); 4], + row2: [(f32, f32); 4], + row3: [(f32, f32); 4], + ) -> Self { + let mut op = Self::new_2q_gate(ops::MATRIX_2Q, qubit1, qubit2); + + // Standard matrix layout: Row 0 -> _00, _01, _02, _03 + op.r00 = row0[0].0; + op.i00 = row0[0].1; + op.r01 = row0[1].0; + op.i01 = row0[1].1; + op.r02 = row0[2].0; + op.i02 = row0[2].1; + op.r03 = row0[3].0; + op.i03 = row0[3].1; + + // Standard matrix layout: Row 1 -> _10, _11, _12, _13 + op.r10 = row1[0].0; + op.i10 = row1[0].1; + op.r11 = row1[1].0; + op.i11 = row1[1].1; + op.r12 = row1[2].0; + op.i12 = row1[2].1; + op.r13 = row1[3].0; + op.i13 = row1[3].1; + + // Standard matrix layout: Row 2 -> _20, _21, _22, _23 + op.r20 = row2[0].0; + op.i20 = row2[0].1; + op.r21 = row2[1].0; + op.i21 = row2[1].1; + op.r22 = row2[2].0; + op.i22 = row2[2].1; + op.r23 = row2[3].0; + op.i23 = row2[3].1; + + // Standard matrix layout: Row 3 -> _30, _31, _32, _33 + op.r30 = row3[0].0; + op.i30 = row3[0].1; + op.r31 = row3[1].0; + op.i31 = row3[1].1; + op.r32 = row3[2].0; + op.i32 = row3[2].1; + op.r33 = row3[3].0; + op.i33 = row3[3].1; + + op + } +} + +#[repr(C)] +#[derive(Copy, Clone, Debug, Pod, Zeroable)] +pub struct Result { + pub entry_idx: u32, + pub probability: f32, +} diff --git a/source/simulators/src/gpu_full_state_simulator/simulator.wgsl b/source/simulators/src/gpu_full_state_simulator/simulator.wgsl new file mode 100644 index 0000000000..35faef5326 --- /dev/null +++ b/source/simulators/src/gpu_full_state_simulator/simulator.wgsl @@ -0,0 +1,1396 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +// See https://webgpufundamentals.org/webgpu/lessons/webgpu-wgsl.html for an overview +// See https://www.w3.org/TR/WGSL/ for the details +// See https://webgpu.github.io/webgpu-samples/ for examples + +// WGSL has pipeline overridables, but they're a pain and limited, so just string replace constants here +const QUBIT_COUNT: i32 = {{QUBIT_COUNT}}; +const RESULT_COUNT: u32 = {{RESULT_COUNT}}; +const WORKGROUPS_PER_SHOT: i32 = {{WORKGROUPS_PER_SHOT}}; +const ENTRIES_PER_THREAD: i32 = {{ENTRIES_PER_THREAD}}; +const THREADS_PER_WORKGROUP: i32 = {{THREADS_PER_WORKGROUP}}; +const MAX_QUBIT_COUNT: i32 = {{MAX_QUBIT_COUNT}}; +const MAX_QUBITS_PER_WORKGROUP: i32 = {{MAX_QUBITS_PER_WORKGROUP}}; + +const ERR_INVALID_PROBS = 1u; +const ERR_INVALID_THREAD_TOTAL = 2u; + +const PROB_THRESHOLD: f32 = 0.0001; // Tolerance for probabilities to sum to 1.0 + + +// Always use 32 threads per workgroup for max concurrency on most current GPU hardware +const MAX_WORKGROUP_SUM_PARTITIONS: i32 = 1 << u32(MAX_QUBIT_COUNT - MAX_QUBITS_PER_WORKGROUP); + +// Operation IDs +const OPID_ID = 0u; +const OPID_RESET = 1u; +const OPID_S = 6u; +const OPID_SAdj = 7u; +const OPID_T = 8u; +const OPID_TAdj = 9u; +const OPID_RZ = 14u; +const OPID_CX = 15u; +const OPID_CZ = 16u; +const OPID_RXX = 17u; +const OPID_RYY = 18u; +const OPID_RZZ = 19u; +const OPID_MRESETZ = 22u; +const OPID_SWAP = 24u; +const OPID_MAT1Q = 25u; +const OPID_MAT2Q = 26u; + +const OPID_PAULI_NOISE_1Q = 128u; +const OPID_PAULI_NOISE_2Q = 129u; +const OPID_LOSS_NOISE = 130u; +const OPID_CORRELATED_NOISE = 131u; + +// If the application of noise results in a custom matrix, it will have been stored in the shot buffer +// These OPIDs indicate to use that matrix and for how many qubits. (The qubit ids are in the original Op) +const OPID_SHOT_BUFF_1Q = 256u; +const OPID_SHOT_BUFF_2Q = 257u; + +// The below is used when an operation is to be applied to all qubits - such as a system reset. +const ALL_QUBITS: u32 = 0xFFFFFFFFu; + +struct WorkgroupSums { + qubits: array, // Each vec2f holds (zero_probability, one_probability) +}; + +struct WorkgroupCollationBuffer { + sums: array, +}; + +@group(0) @binding(0) +var workgroup_collation: WorkgroupCollationBuffer; +// Around 128 max partitions times 27 qubits times 8 bytes = 27 KB max size + +struct QubitState { + zero_probability: f32, + one_probability: f32, + heat: f32, // -1.0 = lost + idle_since: f32, +} + +// Used to track state for the random number generator per shot. See `next_rand_f32` later for details. +struct xorwow_state { + counter: u32, + x: array +} + +// Buffer containing the state for each shot to execute per kernel dispatch +// An instance of this is tracked on the GPU for every active shot +struct ShotData { + shot_id: u32, + next_op_idx: u32, + + // The below random numbers will be initialized from the RNG per operation in the 'prepare_op' stage + // Then the 'execute_op' stage will read these precomputed random numbers for noise modeling + rng_state: xorwow_state, // 6 x u32 + rand_pauli: f32, + rand_damping: f32, + rand_dephase: f32, + rand_measure: f32, + rand_loss: f32, + + // The type of the next operation to execute. This will be OPID_SHOT_BUFF_* if it should use the unitary from the op buffer + op_type: u32, + op_idx: u32, + + duration: f32, // Total duration of the shot so far, used for time-dependent noise modeling and shot estimations + renormalize: f32, // Value to renormalize the state vector by on next execute (1.0 = no renormalization needed) + + // For quick testing during execution to enable skipping blocks of entries + // TODO: Actually use these masks during execution to skip unneeded work + qubit_is_0_mask: u32, // Bitmask for which qubits are currently in |0> state + qubit_is_1_mask: u32, // Bitmask for which qubits are currently in |1> state + + // Track which qubit probabilities were updated in the last operation (to collate on next prepare_op) + qubits_updated_last_op_mask: u32, + // 20 x 4 bytes to this point = 80 bytes + + // Track the per-qubit probabilities for optimization of measurement sampling and noise modeling + qubit_state: array, // 27 x 16 bytes = 432 bytes + // 512 bytes to this point + + // Map this to the Op structure for ease of use + unitary: array, // For MAT1Q and MAT2Q ops. +} +// Total struct size = 640 bytes (which is aligned to 128 bytes) +// See https://www.w3.org/TR/WGSL/#structure-member-layout for alignment rules + +@group(0) @binding(1) +var shots: array; + +// Buffer containing the list of operations (gates and noise) that make up the program to simulate +struct Op { + id: u32, + q1: u32, + q2: u32, + q3: u32, + // Entries in the unitary are: 00, 01, 02, 03, 10, 11, 12, 13, 20, ..., 32, 33 + // 1q matrix elements are stored in: 00, 01, 10, 11 (i.e., indices 0, 1, 4, and 5) + unitary: array, +} // Struct size: 4 * 4 + 16 * 8 = 144 bytes (which is aligned to 16 bytes) + +@group(0) @binding(2) +var ops: array; + +// The one large buffer of state vector amplitudes. (Partitioned into multiple shots) +@group(0) @binding(3) +var stateVector: array; + +// Buffer for storing measurement results per shot +@group(0) @binding(4) +var results: array>; + +// When an error occurs, the below diagnostic data structure is used to store information about the error +struct DiagnosticData { + error_code: atomic, + extra1: u32, + extra2: f32, + extra3: f32, + shot: ShotData, // 640 bytes + op: Op, // 144 bytes + // Below is usually 6,912 bytes (size = THREADS_PER_WORKGROUP (32) * (8 * MAX_QUBIT_COUNT (27)) + workgroup_probabilities: array, + // Below is usually 27,648 bytes (1 << u32(MAX_QUBIT_COUNT - MAX_QUBITS_PER_WORKGROUP)) * (8 * MAX_QUBIT_COUNT) bytes + collation_buffer: WorkgroupCollationBuffer, +}; + +@group(0) @binding(5) +var diagnostics: DiagnosticData; + +struct Uniforms { + batch_start_shot_id: i32, + rng_seed: u32, +} + +@group(0) @binding(6) +var uniforms: Uniforms; + +struct NoiseTableMetadata { + /// The total probability of any noise (i.e. sum of all noise entries) in `Q1.63` format + noise_probability_lo: u32, + noise_probability_hi: u32, + /// The start offset of this table's entries in the global `NoiseTableEntry` array + start_offset: u32, + /// The number of entries in this noise table + entry_count: u32, +} + +struct NoiseTableEntry { + /// The correlated pauli string as bits (2 bits per qubit). If bit 0 is set, then it has bit-flip + /// noise, and if bit 1 is set then it has phase-flip noise. e.g., `110001 == "YIX"` + paulis_lo: u32, + paulis_hi: u32, + /// The probability of the noise occurring in `Q1_63` format. This is a float format where the high + /// order bit (bit 63) has the value 1.0 (`2^0 / 1`), bit 62 has the value 0.5 (`2^1 / 1`), etc. + /// all the way to bit 63 with a value of approx 1.0842e-19 (`2^63 / 1`). This gives a range of + /// values from [0..2) with equal spacing of 1.0842e-19 between values (unlike float or double), + /// which makes it more suitable for random numbers used to select between a large number of small + /// probability entries. + probability_lo: u32, + probability_hi: u32, +} + +@group(0) @binding(7) +var correlated_noise_tables: array; + +@group(0) @binding(8) +var correlated_noise_entries: array; + +// For every qubit, each 'execute' kernel thread will update its own workgroup storage location for accumulating probabilities +// The final probabilities will be reduced and written back to the shot state after the parallel execution completes. +struct QubitProbabilityPerThread { + zero: array, + one: array, +}; // size: 216 bytes + +var qubitProbabilities: array; +// Workgroup memory size: THREADS_PER_WORKGROUP (32) * 216 = 6,912 bytes. + +fn is_1q_phase_gate(op_id: u32) -> bool { + return (op_id == OPID_S || op_id == OPID_SAdj || op_id == OPID_T || op_id == OPID_TAdj || op_id == OPID_RZ); +} + +fn shot_init_per_op(shot_idx: u32) { + let shot = &shots[shot_idx]; + + // Default to 1.0 renormalization (i.e., no renormalization needed). MResetZ or noise affecting the + // overall probability distribution (e.g. loss or amplitude damping) will update this if needed. + shot.renormalize = 1.0; + shot.qubits_updated_last_op_mask = 0u; + + // Generate the next set of random numbers to use for noise and measurement + shot.rand_pauli = next_rand_f32(shot_idx); + shot.rand_damping = next_rand_f32(shot_idx); + shot.rand_dephase = next_rand_f32(shot_idx); + shot.rand_measure = next_rand_f32(shot_idx); + shot.rand_loss = next_rand_f32(shot_idx); +} + +fn reset_all(shot_idx: i32) { + let shot = &shots[shot_idx]; + + // One of the main goals of the shot_id is to seed the RNG state uniquely per shot + let rng_seed = uniforms.rng_seed; + let shot_id = u32(uniforms.batch_start_shot_id + shot_idx); + + // Due to DX12 backend issues, we can't just assign a zeroed struct, so manually reset all fields + // DX12-start-strip + *shot = ShotData(); + // DX12-end-strip + shot.shot_id = shot_id; + + // After init, start execution from the first op + shot.next_op_idx = 0u; + + shot.rng_state.x[0] = rng_seed ^ hash_pcg(shot_id); + shot.rng_state.x[1] = rng_seed ^ hash_pcg(shot_id + 1); + shot.rng_state.x[2] = rng_seed ^ hash_pcg(shot_id + 2); + shot.rng_state.x[3] = rng_seed ^ hash_pcg(shot_id + 3); + shot.rng_state.x[4] = rng_seed ^ hash_pcg(shot_id + 4); + + shot.op_type = 0; + shot.op_idx = 0; + + // rand_* will be initialized in shot_init_per_op when preparing the first op + shot.duration = 0.0; + shot.renormalize = 1.0; + + shot.qubit_is_0_mask = (1u << u32(QUBIT_COUNT)) - 1u; // All qubits are |0> + shot.qubit_is_1_mask = 0u; + shot.qubits_updated_last_op_mask = 0; + + // Initialize all qubit probabilities to 100% |0> + for (var i: i32 = 0; i < QUBIT_COUNT; i++) { + shot.qubit_state[i].zero_probability = 1.0; + shot.qubit_state[i].one_probability = 0.0; + shot.qubit_state[i].heat = 0.0; + shot.qubit_state[i].idle_since = 0.0; + } + + // unitary will be set in prepare_op +} + +fn update_qubit_state(shot_idx: u32) { + let shot = &shots[shot_idx]; + + // If any qubits were updated in the last op, we may need to sum workgroup probabilities into the shot state + // This is only needed if multiple workgroups were used for the shot execution. If not, then the + // single workgroup for the shot would have written directly to the shot state already. + + // For each qubit that was updated in the last op + for (var q: u32 = 0u; q < u32(QUBIT_COUNT); q++) { + let qubit_mask: u32 = 1u << q; + if ((shot.qubits_updated_last_op_mask & qubit_mask) != 0u) { + // Sum the workgroup collation entries for this qubit into the shot state + // Note: We ignore the fact a qubit may be 'lost' here. It should already be + // in the |0> state if lost, so summing the probabilities is still valid. + var total_zero: f32 = 0.0; + var total_one: f32 = 0.0; + + if (WORKGROUPS_PER_SHOT > 1) { + // Offset into workgroup collation buffer based on shot index + let offset = shot_idx * u32(WORKGROUPS_PER_SHOT); + for (var wkg_idx: u32 = 0u; wkg_idx < u32(WORKGROUPS_PER_SHOT); wkg_idx++) { + let sums = workgroup_collation.sums[wkg_idx + offset]; + total_zero = total_zero + sums.qubits[q].x; + total_one = total_one + sums.qubits[q].y; + } + } else { + // Single workgroup per shot case - just read directly from the shot + total_zero = shot.qubit_state[q].zero_probability; + total_one = shot.qubit_state[q].one_probability; + } + + // Update the shot state with the summed probabilities + // Round to 0 or 1 if extremely close to mitigate minor floating point errors + // TODO: Use PROB_THRESHOLD constant here? + if (total_zero < 0.000001) { total_zero = 0.0; } + if (total_one < 0.000001) { total_one = 0.0; } + if (total_zero > 0.999999) { total_zero = 1.0; } + if (total_one > 0.999999) { total_one = 1.0; } + + shot.qubit_state[q].zero_probability = total_zero; + shot.qubit_state[q].one_probability = total_one; + + // NOTE: Any kind of operation with a NaN float value results in a NaN, or false for logical comparisons + // So beware of conditions that may not behave as expected if NaN values are possible. + let within_threshold = abs(1.0 - (total_zero + total_one)) < PROB_THRESHOLD; + if !within_threshold { + // Populate the diagnostics buffer, if not already set + let old_value = atomicCompareExchangeWeak( + &diagnostics.error_code, + 0u, + ERR_INVALID_PROBS); + if old_value.exchanged { + // This is the first error - fill in the details + diagnostics.extra1 = q; + diagnostics.extra2 = total_zero; + diagnostics.extra3 = total_one; + // DX12 backend has issues assigning structs. See https://github.com/gfx-rs/wgpu/issues/8552 + // DX12-start-strip + diagnostics.shot = *shot; + diagnostics.op = ops[shot.op_idx]; + // DX12-end-strip + } + // Store the error value (if none set already) + let err_index = (shot_idx + 1) * RESULT_COUNT - 1; + atomicCompareExchangeWeak( + &results[err_index], + 0u, + ERR_INVALID_PROBS); + } + + // Update the masks for definite states + shot.qubit_is_0_mask = select( + shot.qubit_is_0_mask & ~qubit_mask, + shot.qubit_is_0_mask | qubit_mask, + total_zero == 1.0); + shot.qubit_is_1_mask = select( + shot.qubit_is_1_mask & ~qubit_mask, + shot.qubit_is_1_mask | qubit_mask, + total_one == 1.0); + } + } +} + +fn prep_mresetz(shot_idx: u32, op_idx: u32, is_loss: bool) { + let shot = &shots[shot_idx]; + let op = &ops[op_idx]; + + // Choose measurement result based on qubit probabilities and random number + let qubit = op.q1; + let result = select(1u, 0u, shot.rand_measure < shot.qubit_state[qubit].zero_probability); + + // If this is being called due to loss noise, we don't write the result back to the results buffer + // Instead, mark the qubit as lost by setting the heat to -1.0 + if !is_loss { + let result_id = op.q2; // Result id to store the measurement result in is stored in q2 + + // If the qubit is already marked as lost, just report that and exit. It's already in the zero + // state so nothing to update or renormalize. The execute op shoud be a no-op (ID) + if shot.qubit_state[qubit].heat == -1.0 { + atomicStore(&results[(shot_idx * RESULT_COUNT) + result_id], 2u); + shot.op_type = OPID_ID; + shot.op_idx = op_idx; + // Qubit get reloaded after a Measurement, so set the heat back to 0.0 + shot.qubit_state[qubit].heat = 0.0; + return; + } else { + atomicStore(&results[(shot_idx * RESULT_COUNT) + result_id], result); + } + } else { + shot.qubit_state[qubit].heat = -1.0; + } + + // Construct the measurement instrument for MResetZ based on the measured result + // Put the instrument into the shot buffer for the execute_op stage to apply + shot.unitary[0] = select(vec2f(1.0, 0.0), vec2f(0.0, 0.0), result == 1u); + shot.unitary[1] = select(vec2f(0.0, 0.0), vec2f(1.0, 0.0), result == 1u); + shot.unitary[4] = vec2f(); + shot.unitary[5] = vec2f(); + + shot.renormalize = select( + 1.0 / sqrt(shot.qubit_state[qubit].zero_probability), + 1.0 / sqrt(shot.qubit_state[qubit].one_probability), + result == 1u); + + // We don't want the measurement pass to skip over this qubit, so ensure it's marked as not in a definite state + shot.qubit_is_1_mask = shot.qubit_is_1_mask & ~(1u << qubit); + shot.qubit_is_0_mask = shot.qubit_is_0_mask & ~(1u << qubit); + + // Set the qubits_updated_last_op_mask to all except those that were already in a definite + // state (so we don't waste time updating probabilities that are already known). Note that + // next 'prepare_op' should set the just measured qubit into a definite 0 or 1 state. + shot.qubits_updated_last_op_mask = + // // A mask with all qubits set + ((1u << u32(QUBIT_COUNT)) - 1u) + // Exclude qubits already in definite states + & ~(shot.qubit_is_0_mask | shot.qubit_is_1_mask); + + shot.op_idx = op_idx; + shot.op_type = OPID_MRESETZ; +} + +// Starting from the given index, return the next index if pauli noise, else 0 +fn get_pauli_noise_idx(op_idx: u32) -> u32 { + if (arrayLength(&ops) > (op_idx + 1)) { + let op = &ops[op_idx + 1]; + if (op.id == OPID_PAULI_NOISE_1Q || op.id == OPID_PAULI_NOISE_2Q) { + return op_idx + 1u; + } + } + return 0u; +} + +// From the starting index given, return the next index if loss noise, else 0 +fn get_loss_idx(op_idx: u32) -> u32 { + if (arrayLength(&ops) > (op_idx + 1)) { + let op = &ops[op_idx + 1]; + if (op.id == OPID_LOSS_NOISE) { + return op_idx + 1u; + } + } + return 0u; +} + +fn apply_1q_pauli_noise(shot_idx: u32, op_idx: u32, noise_idx: u32) { + // NOTE: Assumes that whatever prepared the program ensured that noise_op.q1 matches op.q1 and + // that op is a 1-qubit gate + let shot = &shots[shot_idx]; + let op = &ops[op_idx]; + let noise_op = &ops[noise_idx]; + + // Apply 1-qubit Pauli noise based on the probabilities in the op data, which are stored in + // the real part (x) of the first 4 vec2 entries of the unitary array (ignore [0] which is "I") + let p_x = noise_op.unitary[1].x; + let p_y = noise_op.unitary[2].x; + let p_z = noise_op.unitary[3].x; + + shot.op_type = OPID_SHOT_BUFF_1Q; // Indicate to use the matrix in the shot buffer + + let rand = shot.rand_pauli; + if (rand < p_x) { + // Apply the X permutation (basically swap the rows) + shot.unitary[0] = op.unitary[4]; + shot.unitary[1] = op.unitary[5]; + shot.unitary[4] = op.unitary[0]; + shot.unitary[5] = op.unitary[1]; + } else if (rand < (p_x + p_y)) { + // Apply the Y permutation (swap rows with negated |0> state) + shot.unitary[0] = cplxNeg(op.unitary[4]); + shot.unitary[1] = cplxNeg(op.unitary[5]); + shot.unitary[4] = op.unitary[0]; + shot.unitary[5] = op.unitary[1]; + } else if (rand < (p_x + p_y + p_z)) { + // Apply Z error (negate |1> state) + shot.unitary[0] = op.unitary[0]; + shot.unitary[1] = op.unitary[1]; + shot.unitary[4] = cplxNeg(op.unitary[4]); + shot.unitary[5] = cplxNeg(op.unitary[5]); + } else { + // No noise. Set the op_type back to the op.id value if it's Id, Reset, or MResetZ, as they get handled specially in execute_op + if (op.id == OPID_ID || op.id == OPID_RESET || op.id == OPID_MRESETZ) { + shot.op_type = op.id; + } + if (is_1q_phase_gate(op.id)) { + // For phase gates, treat everything as RZ for execution purposes + shot.op_type = OPID_RZ; + } + } + + shot.op_idx = op_idx; + if (shot.op_type == OPID_ID || shot.op_type == OPID_RZ) { + shot.qubits_updated_last_op_mask = 0u; + } else { + shot.qubits_updated_last_op_mask = 1u << op.q1; + }; +} + +fn apply_2q_pauli_noise(shot_idx: u32, op_idx: u32, noise_idx: u32) { + let shot = &shots[shot_idx]; + let op = &ops[op_idx]; + let noise_op = &ops[noise_idx]; + + // Correlated noise is stored in the real parts of the unitary. + // unitary[0] = II, unitary[1] = IX, unitary[2] = IY, unitary[3] = IZ + // unitary[4] = XI, unitary[5] = XX, unitary[6] = XY, unitary[7] = XZ + // unitary[8] = YI, unitary[9] = YX, unitary[10]= YY, unitary[11]= YZ + // unitary[12]= ZI, unitary[13]= ZX, unitary[14]= ZY, unitary[15]= ZZ + + var rand = shot.rand_pauli; + var q1_pauli = 0; + var q2_pauli = 0; + + // Find the paulis to apply based on the random number and the probabilities + for (var i = 0; i < 4; i = i + 1) { + for (var j = 0; j < 4; j = j + 1) { + let p_ij = noise_op.unitary[i * 4 + j].x; + if (rand < p_ij) { + q1_pauli = i; + q2_pauli = j; + // Break out of both loops + i = 4; + j = 4; + } else { + rand = rand - p_ij; + } + } + } + + // Only apply noise if needed + if (q1_pauli != 0 || q2_pauli != 0) { + // Get the rows of the 2 qubit unitary + var op_row_0 = getOpRow(op_idx, 0); + var op_row_1 = getOpRow(op_idx, 1); + var op_row_2 = getOpRow(op_idx, 2); + var op_row_3 = getOpRow(op_idx, 3); + + // Apply the Paulis to the matrices. Note this is just permuting the rows, and appliction + // commutes, so we can apply them in any order. High order bit is q1. Low order bit is q2. + // X on q1 is rows 2<>0 and 3<>1, X on q2 is rows 1<>0 and 3<>2, etc. + // Y on q1 is rows -2<>0 and -3<>1, Y on q2 is rows -1<>0 and -3<>2 + // Z on q1 is -2 and -3, Z on q2 is -1 and -3 + + // Apply the q1 permutations as needed + if (q1_pauli == 1) { + // Apply the X permutation + let old_row_0 = op_row_0; + let old_row_1 = op_row_1; + op_row_0 = op_row_2; + op_row_1 = op_row_3; + op_row_2 = old_row_0; + op_row_3 = old_row_1; + } else if (q1_pauli == 2) { + // Apply the Y permutation + let old_row_0 = op_row_0; + let old_row_1 = op_row_1; + op_row_0 = rowNeg(op_row_2); + op_row_1 = rowNeg(op_row_3); + op_row_2 = old_row_0; + op_row_3 = old_row_1; + } else if (q1_pauli == 3) { + // Apply Z permutation + op_row_2 = rowNeg(op_row_2); + op_row_3 = rowNeg(op_row_3); + } + // Apply the q2 permutations as needed + if (q2_pauli == 1) { + // Apply the X permutation + let old_row_0 = op_row_0; + let old_row_2 = op_row_2; + op_row_0 = op_row_1; + op_row_2 = op_row_3; + op_row_1 = old_row_0; + op_row_3 = old_row_2; + } else if (q2_pauli == 2) { + // Apply the Y permutation + let old_row_0 = op_row_0; + let old_row_2 = op_row_2; + op_row_0 = rowNeg(op_row_1); + op_row_2 = rowNeg(op_row_3); + op_row_1 = old_row_0; + op_row_3 = old_row_2; + } else if (q2_pauli == 3) { + // Apply Z permutation + op_row_1 = rowNeg(op_row_1); + op_row_3 = rowNeg(op_row_3); + } + // Write the rows back to the shot buffer unitary + setUnitaryRow(shot_idx, 0u, op_row_0); + setUnitaryRow(shot_idx, 1u, op_row_1); + setUnitaryRow(shot_idx, 2u, op_row_2); + setUnitaryRow(shot_idx, 3u, op_row_3); + shot.op_type = OPID_SHOT_BUFF_2Q; + } else { + // No noise to apply. Leave if CX or CZ or RZZ as they get handled specially in execute_op + if (op.id == OPID_CX || op.id == OPID_CZ || op.id == OPID_RZZ) { + shot.op_type = op.id; + } else { + shot.op_type = OPID_SHOT_BUFF_2Q; + } + } + shot.op_idx = op_idx; + if (shot.op_type == OPID_CZ || shot.op_type == OPID_RZZ) { + shot.qubits_updated_last_op_mask = 0u; + } else { + shot.qubits_updated_last_op_mask = (1u << op.q1 ) | (1u << op.q2); + } +} + +// Get the qubit id at the given index from the correlated noise op's qubit args +// Qubit args are stored in the unitary matrix elements as f32 values +fn get_correlated_noise_qubit(op_idx: u32, index: u32) -> u32 { + // Qubit ids are stored in the unitary as f32 values, starting at unitary[0].x, unitary[0].y, etc. + let vec_idx = index / 2u; + let component = index % 2u; + if (component == 0u) { + return u32(ops[op_idx].unitary[vec_idx].x); + } else { + return u32(ops[op_idx].unitary[vec_idx].y); + } +} + +// Prepare the shot state for executing a correlated noise operation +fn prep_correlated_noise(shot_idx: u32, op_idx: u32) { + let shot = &shots[shot_idx]; + let op = &ops[op_idx]; + + // The noise table index is stored in op.q1, and the qubit count is stored in op.q2 + let noise_table_idx = op.q1; + let qubit_count = op.q2; + let table = &correlated_noise_tables[noise_table_idx]; + + // Generate a Q1.63 random number (two u32 values for lo and hi 32 bits) + // Mask off the high bit of rand_hi to ensure the value is in [0, 1) range + let rand_lo = next_rand_u32(shot_idx); + let rand_hi = next_rand_u32(shot_idx) & 0x7FFFFFFFu; + + // Get the total noise probability from the table metadata + let noise_prob_lo = table.noise_probability_lo; + let noise_prob_hi = table.noise_probability_hi; + + // Check if noise should be applied at all by comparing the random number against the total noise probability + // If rand >= noise_probability, then no noise is applied + if (rand_hi > noise_prob_hi || (rand_hi == noise_prob_hi && rand_lo >= noise_prob_lo)) { + // No noise to apply - set the op to ID and return + shot.op_type = OPID_ID; + shot.op_idx = op_idx; + shot.qubits_updated_last_op_mask = 0u; + return; + } + + // Noise should be applied - binary search to find which Pauli string to apply + let start = i32(table.start_offset); + let count = i32(table.entry_count); + let entry_idx = binary_search_noise_table(rand_lo, rand_hi, start, count); + let entry = &correlated_noise_entries[start + entry_idx]; + + // Extract the Pauli string (2 bits per qubit: bit 0 = X flip, bit 1 = Z flip) + let paulis_lo = entry.paulis_lo; + let paulis_hi = entry.paulis_hi; + + // Build bit-flip and phase-flip masks based on the Pauli string and qubit arguments + // For each qubit in the correlated noise op, check its Pauli type and set the corresponding mask bits + var bit_flip_mask: u32 = 0u; + var phase_flip_mask: u32 = 0u; + + for (var i: u32 = 0u; i < qubit_count; i++) { + // Get the 2-bit Pauli value for this qubit position in the Pauli string + // The Rust parsing stores paulis with the rightmost (last) character at the lowest bits, + // but we want string position i (leftmost = 0) to map to qubit arg i. + // So for position i, we need bits at (qubit_count - 1 - i) * 2. + let bit_position = qubit_count - 1u - i; + var pauli_bits: u32; + if (bit_position < 16u) { + pauli_bits = (paulis_lo >> (bit_position * 2u)) & 0x3u; + } else { + pauli_bits = (paulis_hi >> ((bit_position - 16u) * 2u)) & 0x3u; + } + + // Get the actual qubit id from the op's qubit arguments + let qubit_id = get_correlated_noise_qubit(op_idx, i); + let qubit_mask = 1u << qubit_id; + + // Pauli encoding: 0=I, 1=X, 2=Z, 3=Y (X and Z) + let has_bit_flip = (pauli_bits & 0x1u) != 0u; // X or Y + let has_phase_flip = (pauli_bits & 0x2u) != 0u; // Z or Y + + if (has_bit_flip) { + bit_flip_mask |= qubit_mask; + } + if (has_phase_flip) { + phase_flip_mask |= qubit_mask; + } + } + + // Store the masks in the shot buffer for the execute stage + // We use the unitary entries to store these masks (reinterpreted as floats) + shot.unitary[0] = vec2f(bitcast(bit_flip_mask), bitcast(phase_flip_mask)); + + // For bit-flipped qubits, we need to swap the 0 and 1 probabilities and masks + // This is done in prepare_op, not execute_op, since it's a simple swap + for (var q: u32 = 0u; q < u32(QUBIT_COUNT); q++) { + let qubit_mask = 1u << q; + if ((bit_flip_mask & qubit_mask) != 0u) { + // Swap the probabilities + let temp = shot.qubit_state[q].zero_probability; + shot.qubit_state[q].zero_probability = shot.qubit_state[q].one_probability; + shot.qubit_state[q].one_probability = temp; + + // Swap the bits in qubit_is_0_mask and qubit_is_1_mask + let was_0 = (shot.qubit_is_0_mask & qubit_mask) != 0u; + let was_1 = (shot.qubit_is_1_mask & qubit_mask) != 0u; + if (was_0) { + shot.qubit_is_0_mask &= ~qubit_mask; + shot.qubit_is_1_mask |= qubit_mask; + } else if (was_1) { + shot.qubit_is_1_mask &= ~qubit_mask; + shot.qubit_is_0_mask |= qubit_mask; + } + } + } + + // Set up the shot state for the correlated noise execution + shot.op_type = OPID_CORRELATED_NOISE; + shot.op_idx = op_idx; + // No probabilities need to be recomputed in execute_op since we've already swapped them here + shot.qubits_updated_last_op_mask = 0u; +} + +struct ShotParams { + shot_idx: i32, + shot_state_vector_start: i32, + workgroup_collation_idx: i32, + workgroup_idx_in_shot: i32, + thread_idx_in_shot: i32, + total_threads_per_shot: i32, + zero_entry_count: i32, + op_iterations: i32, +} + +fn get_shot_params( + workgroupId: u32, + tid: u32, + op_qubit_count: i32) -> ShotParams { + // Workgroups are per shot if 22 or less qubits, else 2 workgroups for 23 qubits, 4 for 24, etc.. + let shot_idx: i32 = i32(workgroupId) / WORKGROUPS_PER_SHOT; + let shot_state_vector_start: i32 = shot_idx * (1 << u32(QUBIT_COUNT)); + let workgroup_idx_in_shot: i32 = i32(workgroupId) % WORKGROUPS_PER_SHOT; + let thread_idx_in_shot: i32 = workgroup_idx_in_shot * THREADS_PER_WORKGROUP + i32(tid); + let total_threads_per_shot: i32 = WORKGROUPS_PER_SHOT * THREADS_PER_WORKGROUP; + + // If using multiple workgroups per shot, each workgroup will write its partial sums to the collation + // buffer for later summing by the prepare_op stage. If single workgroup per shot, no collation needed. + // Use -1 as a marker for single workgroup per shot case (in which case we should write directly to the shot). + let workgroup_collation_idx: i32 = select(-1, i32(workgroupId), WORKGROUPS_PER_SHOT > 1); + + let zero_entry_count: i32 = (1 << u32(QUBIT_COUNT)) >> u32(op_qubit_count); + let op_iterations: i32 = zero_entry_count / total_threads_per_shot; + + return ShotParams( + shot_idx, + shot_state_vector_start, + workgroup_collation_idx, + workgroup_idx_in_shot, + thread_idx_in_shot, + total_threads_per_shot, + zero_entry_count, + op_iterations + ); +} + +// ******************************* +// PREPARE OP +// This stage prepares the shot state for the next operation to execute (and any updates needed from the prior op) +// +// Each op is prepared by one thread. This is how we deal with some of the challenges with synchronization +// when multiple workgroups with multiple threads are used for a shot in the EXECUTE stage. The 'execute_op' +// does work that is 'embarrassingly parallel' across the state vector amplitudes, but the PREPARE_OP stage +// deal with preparing for that work, and collating results back into the shot state afterwards. +// +// This allows us to use the GPU 'dispatch' mechanism to ensure consistencty across shots without complex, +// synchronization code, as the GPU guarantees that all threads in a dispatch complete before the next dispatch +// starts, and all buffer writes are visible to the next dispatch. +// ******************************* + +// NOTE: Run with workgroup size of 1 for now, as threads may diverge too much in prepare_op stage causing performance issues. +// TODO: Try to increase later if lack of parallelism is a bottleneck. (Update the dispatch call accordingly). +@compute @workgroup_size(1) +fn prepare_op(@builtin(global_invocation_id) globalId: vec3) { + // For the 'prepare_op' stage, each thread dispatched handles one shot, so the globalId.x is the shot index + let shot_idx = globalId.x; + let shot = &shots[shot_idx]; + + // WebGPU guarantees that buffers are zero-initialized, so next_op_idx will correctly be 0 on the first dispatch + let op_idx = shot.next_op_idx; + + // If we've gone past the end, set the op type to id and exit, so the execute stage is a no-op + if (op_idx >= u32(arrayLength(&ops))) { + // TODO: Set error/diagnostic info here + shot.op_type = OPID_ID; + shot.renormalize = 1.0; + shot.qubits_updated_last_op_mask = 0u; + return; + } + + let op = &ops[op_idx]; + + // Update the shot state based on the results of the last executed op (if needed) + if (shot.qubits_updated_last_op_mask != 0) { + update_qubit_state(shot_idx); + } + + shot_init_per_op(shot_idx); + shot.unitary = op.unitary; + + // Handle preparation MResetZ operations. These have unique handling and no associated noise ops, so prep and exit + if (op.id == OPID_MRESETZ) { + prep_mresetz(shot_idx, op_idx, false /* is_loss */); + shot.next_op_idx = op_idx + 1u; // MResetZ has no associated noise ops, so just advance by 1 + return; + } + + /* Handle noise: + - For the 1-qubit op case, there could be pauli and loss noise after the op itself. We want to check for loss first and + only apply pauli noise if the qubit wasn't lost. (If lost, the pauli noise and even the gate itself don't matter). + - For the 2-qubit op case, there will only be optional pauli noise after the op itself. (Loss is applied via separate + Id ops on each qubit after the 2-qubit op). + */ + + let pauli_op_idx = get_pauli_noise_idx(op_idx); + let loss_op_idx = get_loss_idx(select(op_idx, pauli_op_idx, pauli_op_idx != 0u)); + shot.next_op_idx = max(op_idx, max(pauli_op_idx, loss_op_idx)) + 1u; + + // Handle correlated noise operations + if (op.id == OPID_CORRELATED_NOISE) { + prep_correlated_noise(shot_idx, op_idx); + return; + } + + // Before doing further work, if any qubit for the gate is lost, just skip by marking the op as ID + if (shot.qubit_state[op.q1].heat == -1.0) || + (op.id == OPID_CX || op.id == OPID_CZ || op.id == OPID_SWAP || op.id == OPID_RXX || op.id == OPID_RYY || op.id == OPID_RZZ || op.id == OPID_MAT2Q) && + (shot.qubit_state[op.q2].heat == -1.0) { + shot.op_type = OPID_ID; + shot.op_idx = op_idx; + return; + } + + // If there is loss noise to apply, do that now + if (loss_op_idx != 0u) { + let loss_op = &ops[loss_op_idx]; + let p_loss = loss_op.unitary[0].x; // Loss probability is stored in the x part of first vec2 + if (shot.rand_loss < p_loss) { + // Qubit is lost - perform MResetZ with is_loss = true + prep_mresetz(shot_idx, op_idx, true /* is_loss */); + // There is no further noise of gate to apply, just the loss execution. + return; + } + } + + if pauli_op_idx != 0 { + if ops[pauli_op_idx].id == OPID_PAULI_NOISE_1Q { + apply_1q_pauli_noise(shot_idx, op_idx, pauli_op_idx); + // This will have set up all the state we need. + return; + } else { + apply_2q_pauli_noise(shot_idx, op_idx, pauli_op_idx); + return; + } + } + + // No noise to apply, just set up the shot to execute the op as-is + shot.op_idx = op_idx; + shot.op_type = op.id; + + // Turn any Rxx, Ryy, or Rzz gates into a gate from the shot buffer + // NOTE: Should probably just do this for all gates + if (op.id == OPID_RXX || op.id == OPID_RYY || op.id == OPID_MAT2Q || op.id == OPID_SWAP) { + shot.op_type = OPID_SHOT_BUFF_2Q; // Indicate to use the matrix in the shot buffer + } + + if (op.id > OPID_RESET && op.id < OPID_CX) { + shot.op_type = OPID_SHOT_BUFF_1Q; // Indicate to use the matrix in the shot buffer + } + + if (is_1q_phase_gate(op.id)) { + // For phase gates, treat everything as RZ for execution purposes + shot.op_type = OPID_RZ; + } + + // Set this so the next prepare_op stage knows which qubits to update probabilities for + switch shot.op_type { + case OPID_ID, OPID_CZ, OPID_RZ, OPID_RZZ { + shot.qubits_updated_last_op_mask = 0u; + } + case OPID_SHOT_BUFF_1Q { + shot.qubits_updated_last_op_mask = 1u << op.q1; + } + case OPID_CX, OPID_SHOT_BUFF_2Q { + shot.qubits_updated_last_op_mask = (1u << op.q1) | (1u << op.q2); + } + default { + // TODO: Set error/diagnostic info here + } + } +} + +@compute @workgroup_size(THREADS_PER_WORKGROUP) +fn initialize( + @builtin(workgroup_id) workgroupId: vec3, + @builtin(local_invocation_index) tid: u32) { + // Get the params + let params = get_shot_params(workgroupId.x, tid, 0 /* qubits per op */); + + // We want every thread to zero out its portion of the state vector for the shot + // We also want threads executing in lockstep to update adjacent entries for better memory access patterns + for (var i = 0; i < params.op_iterations; i++) { + let entry_index: i32 = params.thread_idx_in_shot + i * params.total_threads_per_shot; + stateVector[params.shot_state_vector_start + entry_index] = vec2f(0.0, 0.0); + } + + // NOTE: No need to synchronize here, as each thread is writing to unique locations + if (params.thread_idx_in_shot == 0) { + // Set the |0...0> amplitude to 1.0 from the first workgroup & thread for the shot + stateVector[params.shot_state_vector_start] = vec2f(1.0, 0.0); + reset_all(params.shot_idx); + } +} + +@compute @workgroup_size(THREADS_PER_WORKGROUP) +fn execute_op( + @builtin(workgroup_id) workgroupId: vec3, + @builtin(local_invocation_index) tid: u32) { + // Get the params + let params = get_shot_params(workgroupId.x, tid, 1 /* qubits per op */); + + let shot = &shots[params.shot_idx]; + let op_idx = shot.op_idx; + let op = &ops[op_idx]; + let scale = shot.renormalize; + + // Handle correlated noise specially - it has its own iteration pattern + if (shot.op_type == OPID_CORRELATED_NOISE) { + // For correlated noise, we need to iterate over the full state vector + let correlated_params = get_shot_params(workgroupId.x, tid, 0 /* qubits per op */); + apply_correlated_noise(correlated_params); + // No probability updates needed - they were handled in prepare_op + } else if (shot.op_type != OPID_ID) { + // Skip doing any work if the op is ID (no-op) + let lowMask = (1 << op.q1) - 1; + let highMask = (1 << u32(QUBIT_COUNT)) - 1 - lowMask; + + // For now, always recompute the probabilities from scratch when a qubit is acted upon. + // (Could me a minor optimization to skip if the unitary doesn't change 0/1 probabilities, e.g., Id, S, Rz, etc.) + var summed_probs: vec4f = vec4f(); + + /* This loop is where all the real work happens. Try to keep this tight and efficient. + + We want a 'structure of arrays' like access pattern here for efficiency, so we process the state vector + in blocks where each thread in the workgroup(s) handle an adjacent entry to be processed. + + Each thread should start at the state vector shot start + 'thread_idx_in_shot', which is sequential across the workgroup threads + Each next entry for the thread is WORKGROUPS_PER_SHOT * THREADS_PER_WORKGROUP away. + The thread should process zero_entries / threads_per_shot iterations, which is stored in op_iterations. + */ + var entry_index = params.thread_idx_in_shot; + + for (var i = 0; i < params.op_iterations; i++) { + let offset0: i32 = (entry_index & lowMask) | ((entry_index & highMask) << 1); + let offset1: i32 = offset0 | (1 << op.q1); + + // See if we can skip doing any work for this pair, because the state vector entries to processes + // are both definitely 0.0, as we know they are for states where other qubits are in definite opposite state. + let skip_processing = + ((offset0 & i32(shots[params.shot_idx].qubit_is_0_mask)) != 0) || + ((~offset1 & i32(shots[params.shot_idx].qubit_is_1_mask)) != 0); + + if (!skip_processing) { + if shot.op_type == OPID_RZ { + // For RZ, we can skip reading/writing the |0> amplitude, as it is unchanged. + // Just apply the phase to the |1> amplitude. Probabilities also don't change. + let amp1: vec2f = stateVector[params.shot_state_vector_start + offset1]; + let new1 = cplxMul(amp1, shot.unitary[5]); + stateVector[params.shot_state_vector_start + offset1] = new1; + } else { + let amp0: vec2f = stateVector[params.shot_state_vector_start + offset0]; + let amp1: vec2f = stateVector[params.shot_state_vector_start + offset1]; + + let new0 = scale * (cplxMul(amp0, shot.unitary[0]) + cplxMul(amp1, shot.unitary[1])); + let new1 = scale * (cplxMul(amp0, shot.unitary[4]) + cplxMul(amp1, shot.unitary[5])); + + stateVector[params.shot_state_vector_start + offset0] = new0; + stateVector[params.shot_state_vector_start + offset1] = new1; + + if shot.op_type == OPID_MRESETZ || scale != 1.0 { + // For MResetZ or renormalization, we need to update the probabilities for all qubits + update_all_qubit_probs(u32(offset0), new0, tid); + update_all_qubit_probs(u32(offset1), new1, tid); + } else { + summed_probs[0] += cplxMag2(new0); + summed_probs[1] += cplxMag2(new1); + } + } + } + entry_index += params.total_threads_per_shot; + } + + if scale == 1.0 && shot.op_type != OPID_RZ && shot.op_type != OPID_MRESETZ { + // Update this thread's totals for the two qubits in the workgroup storage + qubitProbabilities[tid].zero[op.q1] = summed_probs[0]; + qubitProbabilities[tid].one[op.q1] = summed_probs[1]; + } + } + + // workgroupBarrier can't be conditional in DX12 backend, so we have to do an unconditional one here + // outside of the skip_work conditional above. + workgroupBarrier(); + + // If the workgroup is done updating, have the first thread reduce the per-thread probabilities into the + // totals for this workgroup. The subsequent 'prepare_op' will sum the workgroup entries into the shot state. + // Skip for correlated noise since probabilities were already updated in prepare_op. + if (tid == 0 && shot.op_type != OPID_RZ && shot.op_type != OPID_ID && shot.op_type != OPID_CORRELATED_NOISE) { + for (var q: u32 = 0u; q < u32(QUBIT_COUNT); q++) { + if (shot.qubits_updated_last_op_mask & (1u << q)) != 0u { + sum_thread_totals_to_shot(q, params.shot_idx, params.workgroup_collation_idx); + } + } + } +} + +fn apply_correlated_noise(params: ShotParams) { + // Probabilities are already updated in the prepare_op stage + // Here we just need to apply the bit-flips and phase-flips to the state vector amplitudes + + let shot = &shots[params.shot_idx]; + + // Get the bit-flip and phase-flip masks from the shot buffer (stored by prep_correlated_noise) + let bit_flip_mask = bitcast(shot.unitary[0].x); + let phase_flip_mask = bitcast(shot.unitary[0].y); + + // If no flips to apply, early exit + if (bit_flip_mask == 0u && phase_flip_mask == 0u) { + return; + } + + var entry_index = params.thread_idx_in_shot; + + for (var i = 0; i < params.op_iterations; i++) { + // Get the target index to swap the state with by flipping the bits as indicated in the bit_flip_mask + let target_index = entry_index ^ i32(bit_flip_mask); + + // If there are an odd number of phase flips for the entry, we need to negate the amplitude + let negate_index: f32 = select(1.0, -1.0, (countOneBits(entry_index & i32(phase_flip_mask)) & 1) != 0); + + if (bit_flip_mask == 0u && negate_index == -1.0) { + // No bit flips to perform, but need to negate this entry (phase flip only) + stateVector[params.shot_state_vector_start + entry_index] = cplxNeg(stateVector[params.shot_state_vector_start + entry_index]); + } else if (entry_index < target_index) { + // Bit flips are happening (as the indices are different), but to avoid double swapping only handle the swap + // when entry_index < target_index (avoid reprocessing when later we encounter the target_index entry as the entry_index) + + let amp_entry: vec2f = stateVector[params.shot_state_vector_start + entry_index]; + let amp_target: vec2f = stateVector[params.shot_state_vector_start + target_index]; + + // If there are an odd number of phase flips for the target, we need to negate that amplitude too + let negate_target: f32 = select(1.0, -1.0, (countOneBits(target_index & i32(phase_flip_mask)) & 1) != 0); + + // Swap and apply any negations for phase flips. + // Note this only applies -1 & 1 to the phase, not -i and i as the 'canonical' Y gate does. + // However, this is sufficient for simulating noise, as the global phase doesn't matter. + stateVector[params.shot_state_vector_start + entry_index] = cplxMul(amp_target, vec2f(negate_index, 0.0)); + stateVector[params.shot_state_vector_start + target_index] = cplxMul(amp_entry, vec2f(negate_target, 0.0)); + } + + // Jump ahead to the next entry to process + entry_index += params.total_threads_per_shot; + } +} + +@compute @workgroup_size(THREADS_PER_WORKGROUP) +fn execute_2q_op( + @builtin(workgroup_id) workgroupId: vec3, + @builtin(local_invocation_index) tid: u32) { + // Get the params + let params = get_shot_params(workgroupId.x, tid, 2 /* qubits per op */); + + // Workgroups are per shot if 22 or less qubits, else 2 workgroups for 23 qubits, 4 for 24, etc.. + let shot = &shots[params.shot_idx]; + + let op_idx = shot.op_idx; + let op = &ops[op_idx]; + + let update_probs = shot.op_type != OPID_CZ && shot.op_type != OPID_RZZ && shot.op_type != OPID_ID; + + // Sometimes a 2-qubit op may be converted to a no-op (ID) due to qubit loss etc., so skip processing in that case + if (shot.op_type != OPID_ID) { + // Calculate masks to split the index into low, mid, and high bits around the two qubits + let lowQubit = select(op.q1, op.q2, op.q1 > op.q2); + let hiQubit = select(op.q1, op.q2, op.q1 < op.q2); + + // Number of bits in each section + let lowBitCount = lowQubit; + let midBitCount = hiQubit - lowQubit - 1; + let hiBitCount = u32(QUBIT_COUNT) - hiQubit - 1; + + // The masks below help extract the low, mid, and high bits from the counter to use around the two qubits locations + let lowMask = (1 << lowBitCount) - 1; + let midMask = (1 << (lowBitCount + midBitCount)) - 1 - lowMask; + let hiMask = (1 << u32(QUBIT_COUNT)) - 1 - midMask - lowMask; + + // Each iteration processes 4 amplitudes (the four affected by the 2-qubit gate), so quarter as many iterations as chunk size + var entry_index = params.thread_idx_in_shot; + var summed_probs: vec4f = vec4f(); + + for (var i = 0; i < params.op_iterations; i++) { + // q1 is the control, q2 is the target + let offset00: i32 = (entry_index & lowMask) | ((entry_index & midMask) << 1) | ((entry_index & hiMask) << 2); + let offset01: i32 = offset00 | (1 << op.q2); + let offset10: i32 = offset00 | (1 << op.q1); + let offset11: i32 = offset10 | (1 << op.q2); + + let can_skip_processing = + (((u32(offset00) & shot.qubit_is_0_mask) != 0) || + ((~(u32(offset11)) & shot.qubit_is_1_mask) != 0)); + if !can_skip_processing { + switch shot.op_type { + case OPID_CZ { + let amp11: vec2f = stateVector[params.shot_state_vector_start + offset11]; + stateVector[params.shot_state_vector_start + offset11] = cplxNeg(amp11); + // CZ doesn't change any probabilities, so no need to update summed_probs + } + case OPID_RZZ { + // Firt and last entries are unchanged, only need to update the middle two + let amp01: vec2f = stateVector[params.shot_state_vector_start + offset01]; + let amp10: vec2f = stateVector[params.shot_state_vector_start + offset10]; + // Unitary matrix second entry in the second row is 5, third entry in the third row is 10 + stateVector[params.shot_state_vector_start + offset01] = cplxMul(amp01, shot.unitary[5]); + stateVector[params.shot_state_vector_start + offset10] = cplxMul(amp10, shot.unitary[10]); + } + case OPID_CX { + // Need to read all 4 to update the probabilities correctly, but only swap the |10> and |11> entries + let amp00: vec2f = stateVector[params.shot_state_vector_start + offset00]; + let amp01: vec2f = stateVector[params.shot_state_vector_start + offset01]; + let amp10: vec2f = stateVector[params.shot_state_vector_start + offset10]; + let amp11: vec2f = stateVector[params.shot_state_vector_start + offset11]; + stateVector[params.shot_state_vector_start + offset10] = amp11; + stateVector[params.shot_state_vector_start + offset11] = amp10; + summed_probs[0] += (cplxMag2(amp00) + cplxMag2(amp01)); + summed_probs[1] += (cplxMag2(amp11) + cplxMag2(amp10)); + summed_probs[2] += (cplxMag2(amp00) + cplxMag2(amp11)); + summed_probs[3] += (cplxMag2(amp01) + cplxMag2(amp10)); + } + default { + // Assume OPID_SHOT_BUFF_2Q + // Get the state vector entries + let states = array( + stateVector[params.shot_state_vector_start + offset00], + stateVector[params.shot_state_vector_start + offset01], + stateVector[params.shot_state_vector_start + offset10], + stateVector[params.shot_state_vector_start + offset11] + ); + // Apply the unitary from the shot buffer + let result00 = innerProduct(getUnitaryRow(params.shot_idx, 0), states); + let result01 = innerProduct(getUnitaryRow(params.shot_idx, 1), states); + let result10 = innerProduct(getUnitaryRow(params.shot_idx, 2), states); + let result11 = innerProduct(getUnitaryRow(params.shot_idx, 3), states); + // Write back the results + stateVector[params.shot_state_vector_start + offset00] = result00; + stateVector[params.shot_state_vector_start + offset01] = result01; + stateVector[params.shot_state_vector_start + offset10] = result10; + stateVector[params.shot_state_vector_start + offset11] = result11; + // Update the probabilities for the acted on qubits + summed_probs[0] += (cplxMag2(result00) + cplxMag2(result01)); + summed_probs[1] += (cplxMag2(result10) + cplxMag2(result11)); + summed_probs[2] += (cplxMag2(result00) + cplxMag2(result10)); + summed_probs[3] += (cplxMag2(result01) + cplxMag2(result11)); + } + } + } + + entry_index += params.total_threads_per_shot; + } + + // Update this thread's totals for the two qubits in the workgroup storage + if (update_probs) { + // Update all for other 2-qubit gates + qubitProbabilities[tid].zero[op.q1] = summed_probs[0]; + qubitProbabilities[tid].one[op.q1] = summed_probs[1]; + qubitProbabilities[tid].zero[op.q2] = summed_probs[2]; + qubitProbabilities[tid].one[op.q2] = summed_probs[3]; + } + } + + workgroupBarrier(); + + // If the workgroup is done updating, have the first thread reduce the per-thread probabilities into the + // totals for this workgroup. The subsequent 'prepare_op' will sum the workgroup entries into the shot state. + if (tid == 0) { + if (update_probs) { + sum_thread_totals_to_shot(op.q1, params.shot_idx, params.workgroup_collation_idx); + sum_thread_totals_to_shot(op.q2, params.shot_idx, params.workgroup_collation_idx); + } + } +} + +// For the state vector index and amplitude probability, update all the qubit probabilities for this thread +fn update_all_qubit_probs(stateVectorIndex: u32, amplitude: vec2f, tid: u32) { + var mask: u32 = 1u; + for (var q: u32 = 0u; q < u32(QUBIT_COUNT); q++) { + let is_one: bool = (stateVectorIndex & mask) != 0u; + let prob: f32 = cplxMag2(amplitude); + if (is_one) { + qubitProbabilities[tid].one[q] += prob; + } else { + qubitProbabilities[tid].zero[q] += prob; + } + mask = mask << 1u; + } +} + +fn sum_thread_totals_to_shot(q: u32, shot_idx: i32, wkg_collation_idx: i32) { + var total_zero: f32 = 0.0; + var total_one: f32 = 0.0; + for (var j = 0; j < THREADS_PER_WORKGROUP; j++) { + total_zero += qubitProbabilities[j].zero[q]; + total_one += qubitProbabilities[j].one[q]; + } + if (wkg_collation_idx >= 0) { + // Write to the workgroup collation buffer for later summation into the shot state + workgroup_collation.sums[wkg_collation_idx].qubits[q] = vec2f(total_zero, total_one); + } else { + // Single workgroup per shot case - write directly to the shot state + let within_threshold = abs(1.0 - (total_zero + total_one)) < PROB_THRESHOLD; + if !within_threshold { + // Populate the diagnostics buffer, if not already set + let old_value = atomicCompareExchangeWeak( + &diagnostics.error_code, + 0u, + ERR_INVALID_THREAD_TOTAL); + if old_value.exchanged { + // This is the first error - fill in the details + let shot = &shots[shot_idx]; + diagnostics.extra1 = q; + diagnostics.extra2 = total_zero; + diagnostics.extra3 = total_one; + // DX12 backend has issues copying structs. See https://github.com/gfx-rs/wgpu/issues/8552 + // DX12-start-strip + diagnostics.shot = *shot; + diagnostics.op = ops[shot.op_idx]; + // DX12-end-strip + } + let err_index = (shot_idx + 1) * i32(RESULT_COUNT) - 1; + atomicCompareExchangeWeak( + &results[err_index], + 0u, + ERR_INVALID_THREAD_TOTAL); + } else { + shots[shot_idx].qubit_state[q].zero_probability = total_zero; + shots[shot_idx].qubit_state[q].one_probability = total_one; + } + } +} + +// Complex number utilities + +// Get the magnitude squared of a complex number +fn cplxMag2(a: vec2f) -> f32 { + return (a.x * a.x + a.y * a.y); +} + +// Complex multiplication +fn cplxMul(a: vec2f, b: vec2f) -> vec2f { + return vec2f( + a.x * b.x - a.y * b.y, + a.x * b.y + a.y * b.x + ); +} + +// Complex negation +fn cplxNeg(a: vec2f) -> vec2f { + return vec2f(-a.x, -a.y); +} + +// Negate all elements in a 4-element row of complex numbers +fn rowNeg(a: array) -> array { + return array( + cplxNeg(a[0]), + cplxNeg(a[1]), + cplxNeg(a[2]), + cplxNeg(a[3])); +} + +// Compute the inner product of two 4-element rows of complex numbers +fn innerProduct(a: array, b: array) -> vec2f { + var result: vec2f = vec2f(0.0, 0.0); + for (var i: u32 = 0u; i < 4u; i++) { + result += cplxMul(a[i], b[i]); + } + return result; +} + +fn getOpRow(op_idx: u32, row: u32) -> array { + let op = &ops[op_idx]; + return array( + op.unitary[row * 4 + 0], + op.unitary[row * 4 + 1], + op.unitary[row * 4 + 2], + op.unitary[row * 4 + 3]); +} + +fn getUnitaryRow(shot_idx: i32, row: u32) -> array { + let shot = &shots[shot_idx]; + return array( + shot.unitary[row * 4 + 0], + shot.unitary[row * 4 + 1], + shot.unitary[row * 4 + 2], + shot.unitary[row * 4 + 3]); +} + +fn setUnitaryRow(shot_idx: u32, row: u32, newRow: array) { + let shot = &shots[shot_idx]; + shot.unitary[row * 4 + 0] = newRow[0]; + shot.unitary[row * 4 + 1] = newRow[1]; + shot.unitary[row * 4 + 2] = newRow[2]; + shot.unitary[row * 4 + 3] = newRow[3]; +} + +// Performas a binary search on a correlated noise probability table +// +// Preconditions: +// - table is sorted ascending, with every entry higher than the prior +// - table entries are cumulative probabilities totaling <= 1.0 +// - 'start' is the offset into the buffer array where this table's entries begin +// - 'count' is the number of entries in this table +// - 'rand_lo' and 'rand_hi' form a Q1.63 format random number in [0.0, 1.0) to use for the search +// - This will only called if a result should be found, i.e., +// - count > 0 +// - rand < table[start + count - 1].probability +// +// Returns the index of the found entry relative to 'start', which is the smallest index where "rand < table[start + index].probability" +fn binary_search_noise_table(rand_lo: u32, rand_hi: u32, start: i32, count: i32) -> i32 { + var low: i32 = 0; + var high: i32 = count; + + while (low < high) { + let mid: i32 = low + (high - low) / 2; + + let p_lo = correlated_noise_entries[start + mid].probability_lo; + let p_hi = correlated_noise_entries[start + mid].probability_hi; + + if (rand_hi < p_hi || (rand_hi == p_hi && rand_lo < p_lo)) { + high = mid; + } else { + low = mid + 1; + } + } + return low; +} + +// Hash and random number generation functions + +// See https://www.reedbeta.com/blog/hash-functions-for-gpu-rendering/ +// Use PCG hash function to generate a well-distributed hash from a simple integer input (e.g., shot id) +fn hash_pcg(input: u32) -> u32 { + var state = input * 747796405u + 2891336453u; + var word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; + return (word >> 22u) ^ word; +} + +// Returns a random u32 value based on the xorwow algorithm +fn next_rand_u32(shot_idx: u32) -> u32 { + // Based on https://en.wikipedia.org/wiki/Xorshift + let rng_state = &shots[shot_idx].rng_state; + + var t: u32 = rng_state.x[4]; + let s: u32 = rng_state.x[0]; + rng_state.x[4] = rng_state.x[3]; + rng_state.x[3] = rng_state.x[2]; + rng_state.x[2] = rng_state.x[1]; + rng_state.x[1] = s; + + t = t ^ (t >> 2u); + t = t ^ (t << 1u); + t = t ^ s ^ (s << 4u); + rng_state.x[0] = t; + rng_state.counter = rng_state.counter + 362437u; + return t + rng_state.counter; +} + +fn next_rand_f32(shot_idx: u32) -> f32 { + let rand_u32: u32 = next_rand_u32(shot_idx); + + // Convert the 32 random bits to a float in the [0.0, 1.0) range + + // Keep only the lower 23 bits (the fraction portion of a float) with a 0 exponent biased to 127 + let rand_f32_bits = (rand_u32 & 0x7FFFFF) | (127 << 23); + // Bitcast to an f32 in the [1.0, 2.0) range + let f: f32 = bitcast(rand_f32_bits); + // And decrement by 1 to return values from [0..1) + return f - 1.0; +} diff --git a/source/simulators/src/gpu_full_state_simulator/tests.rs b/source/simulators/src/gpu_full_state_simulator/tests.rs new file mode 100644 index 0000000000..6c7b8a87ec --- /dev/null +++ b/source/simulators/src/gpu_full_state_simulator/tests.rs @@ -0,0 +1,990 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#![allow(dead_code)] + +/* TODO: Rewrite these tests for the new GPU simulator API */ + +/* +use std::{f32::consts::PI, fmt::Write}; + +use expect_test::expect; + +use crate::shader_types::{Op, ops}; + + +/// This code isn't generally safe to use as it gives all states +/// and should only be used in tests +fn write_probabilities(num_qubits: u32, r: &[super::shader_types::Result]) -> String { + let mut prob_iter = r.iter(); + let mut prob = prob_iter.next(); + let mut prob_str = String::new(); + let mut formatted_results = Vec::with_capacity(2u32.pow(num_qubits) as usize); + writeln!(&mut prob_str, "Probabilities:").expect("failed to write"); + for i in 0..(2u32.pow(num_qubits)) { + if let Some(res) = prob + && res.entry_idx == i + { + formatted_results.push(( + format!("{:0width$b}", i, width = num_qubits as usize) + .chars() + .rev() + .collect::(), + res.probability, + )); + + prob = prob_iter.next(); + } else { + formatted_results.push(( + format!("{:0width$b}", i, width = num_qubits as usize) + .chars() + .rev() + .collect::(), + 0.0, + )); + } + } + formatted_results.sort_by_key(|r| r.0.clone()); + for (bits, prob) in formatted_results { + writeln!(prob_str, "|{bits}⟩: {prob:.6}").expect("failed to write"); + } + prob_str +} + +fn gate_op(id: u32, q1: u32, q2: u32, q3: u32) -> Op { + Op { + id, + q1, + q2, + q3, + ..Default::default() + } +} + +fn m_every_z() -> Op { + gate_op(ops::MEVERYZ, 0, 0, 0) +} + +fn two_qubit_gate(id: u32, qubit1: u32, qubit2: u32) -> Op { + gate_op(id, qubit1, qubit2, 0) +} + +fn two_qubit_rotation_gate(id: u32, qubit1: u32, qubit2: u32) -> Op { + gate_op(id, qubit1, qubit2, 0) +} + +fn three_qubit_gate(id: u32, qubit1: u32, qubit2: u32, qubit3: u32) -> Op { + gate_op(id, qubit1, qubit2, qubit3) +} + +#[test] +fn x_gate() -> Result<(), String> { + let op = Op::new_x_gate(1); + let m = m_every_z(); + let ops = vec![op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 1.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn y_gate() -> Result<(), String> { + let op = Op::new_y_gate(0); + let m = m_every_z(); + let ops = vec![op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 1.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn z_gate() -> Result<(), String> { + let op = Op::new_z_gate(0); + let m = m_every_z(); + let ops = vec![op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 1.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn rx_gate() -> Result<(), String> { + let op0 = Op::new_rx_gate(PI, 0); + let op1 = Op::new_rx_gate(2.0 * PI, 1); + let m = m_every_z(); + let ops = vec![op0, op1, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 1.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn ry_gate() -> Result<(), String> { + let op0 = Op::new_ry_gate(PI, 0); + let op1 = Op::new_ry_gate(2.0 * PI, 1); + let m = m_every_z(); + let ops = vec![op0, op1, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 1.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn rz_gate() -> Result<(), String> { + let op0 = Op::new_x_gate(0); + let op1 = Op::new_rz_gate(PI, 0); + let op2 = Op::new_rz_gate(2.0 * PI, 1); + let m = m_every_z(); + let ops = vec![op0, op1, op2, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 1.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn x_is_self_adj() -> Result<(), String> { + let op = Op::new_x_gate(0); + let m = m_every_z(); + let ops = vec![op, op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 1.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn sx_gate_twice() -> Result<(), String> { + let op = Op::new_sx_gate(0); + let m = m_every_z(); + let ops = vec![op, op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 1.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn sx_sxadj() -> Result<(), String> { + let op0 = Op::new_sx_gate(0); + let op1 = Op::new_sx_adj_gate(0); + let m = m_every_z(); + let ops = vec![op0, op1, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 1.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn bell() -> Result<(), String> { + let op0 = Op::new_h_gate(0); + let op1 = Op::new_cx_gate(0, 1); + let m = m_every_z(); + let ops = vec![op0, op1, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.500000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 0.500000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn h_gate() -> Result<(), String> { + let op = Op::new_h_gate(0); + let m = m_every_z(); + let ops = vec![op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.500000 + |01⟩: 0.000000 + |10⟩: 0.500000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn s_gate() -> Result<(), String> { + let op = Op::new_s_gate(0); + let m = m_every_z(); + let ops = vec![op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 1.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn s_adj_gate() -> Result<(), String> { + let op = Op::new_s_adj_gate(0); + let m = m_every_z(); + let ops = vec![op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 1.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn t_gate() -> Result<(), String> { + let op = Op::new_t_gate(0); + let m = m_every_z(); + let ops = vec![op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 1.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn t_adj_gate() -> Result<(), String> { + let op = Op::new_t_adj_gate(0); + let m = m_every_z(); + let ops = vec![op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 1.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn s_s_adj() -> Result<(), String> { + let op0 = Op::new_x_gate(0); + let op1 = Op::new_s_gate(0); + let op2 = Op::new_s_adj_gate(0); + let m = m_every_z(); + let ops = vec![op0, op1, op2, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 1.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn t_t_t_t() -> Result<(), String> { + let op0 = Op::new_x_gate(0); + let op1 = Op::new_t_gate(0); + let op2 = Op::new_t_gate(0); + let op3 = Op::new_t_gate(0); + let op4 = Op::new_t_gate(0); + let m = m_every_z(); + let ops = vec![op0, op1, op2, op3, op4, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 1.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn cz_gate() -> Result<(), String> { + let op0 = Op::new_x_gate(0); + let op1 = Op::new_x_gate(1); + let op2 = two_qubit_gate(ops::CZ, 0, 1); + let m = m_every_z(); + let ops = vec![op0, op1, op2, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 1.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn swap_gate() -> Result<(), String> { + let op0 = Op::new_x_gate(1); + let op1 = two_qubit_gate(ops::SWAP, 0, 1); + let m = m_every_z(); + let ops = vec![op0, op1, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 1.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn rxx_gate() -> Result<(), String> { + let op0 = Op::new_rxx_gate(PI, 0, 1); + let m = m_every_z(); + let ops = vec![op0, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 1.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn ryy_gate() -> Result<(), String> { + let op0 = Op::new_ryy_gate(PI, 0, 1); + let m = m_every_z(); + let ops = vec![op0, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 1.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn rzz_gate() -> Result<(), String> { + let op0 = Op::new_rzz_gate(PI, 0, 1); + let m = m_every_z(); + let ops = vec![op0, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 1.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn h_on_all() -> Result<(), String> { + let num_qubits = 3; + let mut ops = Vec::new(); + for i in 0..num_qubits { + ops.push(Op::new_h_gate(i)); + } + ops.push(m_every_z()); + let r = run_gpu_simulator(num_qubits, ops)?; + + let prob_str = write_probabilities(num_qubits, &r); + expect![[r#" + Probabilities: + |000⟩: 0.125000 + |001⟩: 0.125000 + |010⟩: 0.125000 + |011⟩: 0.125000 + |100⟩: 0.125000 + |101⟩: 0.125000 + |110⟩: 0.125000 + |111⟩: 0.125000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +#[ignore = "unimplemented"] +fn ccx_gate_1_1_controls() -> Result<(), String> { + // Test CCX (Toffoli) gate: controlled-controlled-X + // Only flips target qubit when both control qubits are |1⟩ + + // CCX on |110⟩ should give |111⟩ (target flipped) + let num_qubits = 3; + let ops = vec![ + Op::new_x_gate(0), // Set qubit 0 to |1⟩ + Op::new_x_gate(1), // Set qubit 1 to |1⟩ + three_qubit_gate(ops::CCX, 0, 1, 2), // CCX with controls 0,1 and target 2 + m_every_z(), + ]; + let r = run_gpu_simulator(num_qubits, ops)?; + let prob_str = write_probabilities(num_qubits, &r); + expect![[r#" + Probabilities: + |000⟩: 0.000000 + |001⟩: 0.000000 + |010⟩: 0.000000 + |011⟩: 0.000000 + |100⟩: 0.000000 + |101⟩: 0.000000 + |110⟩: 0.000000 + |111⟩: 1.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +#[ignore = "unimplemented"] +fn ccx_gate_1_1_controls_mixed_order() -> Result<(), String> { + // Test CCX (Toffoli) gate: controlled-controlled-X + // Only flips target qubit when both control qubits are |1⟩ + + // CCX on |101⟩ should give |111⟩ (target flipped) + let num_qubits = 3; + let ops = vec![ + Op::new_x_gate(0), // Set qubit 0 to |1⟩ + Op::new_x_gate(2), // Set qubit 1 to |1⟩ + three_qubit_gate(ops::CCX, 0, 2, 1), // CCX with controls 0,1 and target 2 + m_every_z(), + ]; + let r = run_gpu_simulator(num_qubits, ops)?; + let prob_str = write_probabilities(num_qubits, &r); + expect![[r#" + Probabilities: + |000⟩: 0.000000 + |001⟩: 0.000000 + |010⟩: 0.000000 + |011⟩: 0.000000 + |100⟩: 0.000000 + |101⟩: 0.000000 + |110⟩: 0.000000 + |111⟩: 1.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +#[ignore = "unimplemented"] +fn ccx_gate_1_0_controls() -> Result<(), String> { + // Test CCX (Toffoli) gate: controlled-controlled-X + // Only flips target qubit when both control qubits are |1⟩ + + let num_qubits = 3; + + // CCX on |100⟩ should remain |100⟩ (control qubit 1 is |0⟩) + let ops = vec![ + Op::new_x_gate(0), // Set qubit 0 to |1⟩ + three_qubit_gate(ops::CCX, 0, 1, 2), // CCX with controls 0,1 and target 2 + m_every_z(), + ]; + let r = run_gpu_simulator(num_qubits, ops)?; + let prob_str = write_probabilities(num_qubits, &r); + expect![[r#" + Probabilities: + |000⟩: 0.000000 + |001⟩: 0.000000 + |010⟩: 0.000000 + |011⟩: 0.000000 + |100⟩: 1.000000 + |101⟩: 0.000000 + |110⟩: 0.000000 + |111⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +#[ignore = "unimplemented"] +fn ccx_gate_0_1_controls() -> Result<(), String> { + // Test CCX (Toffoli) gate: controlled-controlled-X + // Only flips target qubit when both control qubits are |1⟩ + + let num_qubits = 3; + + // CCX on |010⟩ should remain |010⟩ (control qubit 0 is |0⟩) + let ops = vec![ + Op::new_x_gate(1), // Set qubit 1 to |1⟩ + three_qubit_gate(ops::CCX, 0, 1, 2), // CCX with controls 0,1 and target 2 + m_every_z(), + ]; + let r = run_gpu_simulator(num_qubits, ops)?; + let prob_str = write_probabilities(num_qubits, &r); + expect![[r#" + Probabilities: + |000⟩: 0.000000 + |001⟩: 0.000000 + |010⟩: 1.000000 + |011⟩: 0.000000 + |100⟩: 0.000000 + |101⟩: 0.000000 + |110⟩: 0.000000 + |111⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn test_gate_utility_functions() { + // Test basic gate utility functions create correct matrix representations + let x_gate = Op::new_x_gate(0); + assert_eq!(x_gate.id, ops::X); + assert_eq!(x_gate.q1, 0); + // X gate matrix: [[0, 1], [1, 0]] + assert!((x_gate._00r - 0.0).abs() < f32::EPSILON); + assert!((x_gate._01r - 1.0).abs() < f32::EPSILON); + assert!((x_gate._10r - 1.0).abs() < f32::EPSILON); + assert!((x_gate._11r - 0.0).abs() < f32::EPSILON); + + let h_gate = Op::new_h_gate(1); + assert_eq!(h_gate.id, ops::H); + assert_eq!(h_gate.q1, 1); + // H gate matrix: [[1/√2, 1/√2], [1/√2, -1/√2]] + let expected_val = 1.0 / (2.0_f32).sqrt(); + assert!((h_gate._00r - expected_val).abs() < f32::EPSILON); + assert!((h_gate._01r - expected_val).abs() < f32::EPSILON); + assert!((h_gate._10r - expected_val).abs() < f32::EPSILON); + assert!((h_gate._11r - (-expected_val)).abs() < f32::EPSILON); + + let s_gate = Op::new_s_gate(2); + assert_eq!(s_gate.id, ops::S); + assert_eq!(s_gate.q1, 2); + // S gate matrix: [[1, 0], [0, i]] + assert!((s_gate._00r - 1.0).abs() < f32::EPSILON); + assert!((s_gate._00i - 0.0).abs() < f32::EPSILON); + assert!((s_gate._11r - 0.0).abs() < f32::EPSILON); + assert!((s_gate._11i - 1.0).abs() < f32::EPSILON); + + let t_gate = Op::new_t_gate(3); + assert_eq!(t_gate.id, ops::T); + assert_eq!(t_gate.q1, 3); + // T gate matrix: [[1, 0], [0, e^(iπ/4)]] + let pi_4 = PI / 4.0; + assert!((t_gate._00r - 1.0).abs() < f32::EPSILON); + assert!((t_gate._11r - pi_4.cos()).abs() < f32::EPSILON); + assert!((t_gate._11i - pi_4.sin()).abs() < f32::EPSILON); +} + +#[test] +fn test_rotation_gate_utility_functions() { + // Test parametric rotation gates + let angle = PI / 2.0; + + let rx_gate = Op::new_rx_gate(angle, 0); + assert_eq!(rx_gate.id, ops::RX); + // RX(π/2) should have cos(π/4) on diagonal, -i*sin(π/4) off-diagonal + let half_angle = angle / 2.0; + assert!((rx_gate._00r - half_angle.cos()).abs() < f32::EPSILON); + assert!((rx_gate._11r - half_angle.cos()).abs() < f32::EPSILON); + assert!((rx_gate._01i - (-half_angle.sin())).abs() < f32::EPSILON); + assert!((rx_gate._10i - (-half_angle.sin())).abs() < f32::EPSILON); + + let ry_operation = Op::new_ry_gate(angle, 1); + assert_eq!(ry_operation.id, ops::RY); + // RY(π/2) should have cos(π/4) on diagonal, ±sin(π/4) off-diagonal + assert!((ry_operation._00r - half_angle.cos()).abs() < f32::EPSILON); + assert!((ry_operation._11r - half_angle.cos()).abs() < f32::EPSILON); + assert!((ry_operation._01r - (-half_angle.sin())).abs() < f32::EPSILON); + assert!((ry_operation._10r - half_angle.sin()).abs() < f32::EPSILON); + + let rz_op = Op::new_rz_gate(angle, 2); + assert_eq!(rz_op.id, ops::RZ); + // RZ(π/2) should have e^(-iπ/4) and e^(iπ/4) on diagonal + assert!((rz_op._00r - (-half_angle).cos()).abs() < f32::EPSILON); + assert!((rz_op._00i - (-half_angle).sin()).abs() < f32::EPSILON); + assert!((rz_op._11r - half_angle.cos()).abs() < f32::EPSILON); + assert!((rz_op._11i - half_angle.sin()).abs() < f32::EPSILON); +} + +#[test] +fn test_x_gate_using_utility() -> Result<(), String> { + // Test that X gate created with utility function works correctly + let op = Op::new_x_gate(1); + let m = m_every_z(); + let operations = vec![op, m]; + let r = run_gpu_simulator(2, operations)?; + let prob_str = write_probabilities(2, &r); + + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 1.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn test_h_gate_using_utility() -> Result<(), String> { + // Test that H gate created with utility function works correctly + let op = Op::new_h_gate(0); + let m = m_every_z(); + let operations = vec![op, m]; + let r = run_gpu_simulator(2, operations)?; + let prob_str = write_probabilities(2, &r); + + expect![[r#" + Probabilities: + |00⟩: 0.500000 + |01⟩: 0.000000 + |10⟩: 0.500000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn kraus_gate_as_x_gate() -> Result<(), String> { + // Test Kraus operation by implementing X gate: [[0, 1], [1, 0]] + let op = Op::new_matrix_gate( + 1, // target qubit + (0.0, 0.0), // m00 = 0 + 0i + (1.0, 0.0), // m01 = 1 + 0i + (1.0, 0.0), // m10 = 1 + 0i + (0.0, 0.0), // m11 = 0 + 0i + ); + let m = m_every_z(); + let ops = vec![op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 1.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn kraus_gate_as_y_gate() -> Result<(), String> { + // Test Kraus operation by implementing Y gate: [[0, -i], [i, 0]] + let op = Op::new_matrix_gate( + 1, // target qubit + (0.0, 0.0), // m00 = 0 + 0i + (0.0, -1.0), // m01 = 0 - 1i + (0.0, 1.0), // m10 = 0 + 1i + (0.0, 0.0), // m11 = 0 + 0i + ); + let m = m_every_z(); + let ops = vec![op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 1.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn test_2q_kraus_identity() -> Result<(), String> { + // Create identity 2-qubit Kraus operation + let identity_kraus_op = Op::new_matrix_2q_gate( + 0, + 1, // qubits 0 and 1 + // Row 0: |00⟩ output coefficients (identity for |00⟩) + [(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0)], + // Row 1: |01⟩ output coefficients (identity for |01⟩) + [(0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0)], + // Row 2: |10⟩ output coefficients (identity for |10⟩) + [(0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0)], + // Row 3: |11⟩ output coefficients (identity for |11⟩) + [(0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0)], + ); + + let m = Op::new_m_every_z_gate(); // measure all qubits + let ops = vec![identity_kraus_op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + + expect![[r#" + Probabilities: + |00⟩: 1.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn test_2q_kraus_bit_flip() -> Result<(), String> { + // Create H gate on first qubit to create superposition + let h0 = Op::new_h_gate(0); + + // Create 2-qubit Kraus operation that flips |00⟩ ↔ |01⟩ + let bit_flip_kraus_op = Op::new_matrix_2q_gate( + 0, + 1, // qubits 0 and 1 + // Row 0: |00⟩ output gets |01⟩ input + [(0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0)], + // Row 1: |01⟩ output gets |00⟩ input + [(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0)], + // Row 2: |10⟩ output unchanged (identity for |10⟩) + [(0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0)], + // Row 3: |11⟩ output is zeroed out + [(0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0)], + ); + + let m = Op::new_m_every_z_gate(); // measure all qubits + let ops = vec![h0, bit_flip_kraus_op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + + // After H on qubit 0, we have (|0⟩ + |1⟩)/√2 (on qubit 0) ⊗ |0⟩ (on qubit 1) + // = 0.5 * |00⟩ + 0.5 * |10⟩ + // The Kraus operation flips |00⟩ → |01⟩, leaves |10⟩ unchanged + // So result should be 0.5 * |01⟩ + 0.5 * |10⟩ + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.500000 + |10⟩: 0.500000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn test_2q_kraus_affects_11_state() -> Result<(), String> { + // Create H gates on both qubits to create equal superposition over all 4 states + let h0 = Op::new_h_gate(0); + let h1 = Op::new_h_gate(1); + + // Create 2-qubit Kraus operation that only affects |11⟩ state + // This should map |11⟩ → |00⟩ and leave other states unchanged + let kraus_op = Op::new_matrix_2q_gate( + 0, + 1, // qubits 0 and 1 + // Row 0: |00⟩ output gets |00⟩ + |11⟩ inputs (identity + contribution from |11⟩) + [(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0)], + // Row 1: |01⟩ output gets only |01⟩ input (identity for |01⟩) + [(0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0)], + // Row 2: |10⟩ output gets only |10⟩ input (identity for |10⟩) + [(0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0)], + // Row 3: |11⟩ output gets nothing (|11⟩ is mapped to |00⟩) + [(0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0)], + ); + + let m = Op::new_m_every_z_gate(); // measure all qubits + let ops = vec![h0, h1, kraus_op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + + // After H gates on both qubits: 0.25 * (|00⟩ + |01⟩ + |10⟩ + |11⟩) + // The Kraus operation tries to move |11⟩ → |00⟩, but with current 3-row limitation, + // |11⟩ → |11⟩ (identity fallback). So the |11⟩ → |00⟩ mapping is not applied. + // Current result: |00⟩: 0.25 + 0.25 = 0.5, |01⟩: 0.25, |10⟩: 0.25, |11⟩: 0.25 + expect![[r#" + Probabilities: + |00⟩: 1.000000 + |01⟩: 0.250000 + |10⟩: 0.250000 + |11⟩: 0.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn test_2q_kraus_debug_simple() -> Result<(), String> { + // Start with just |11⟩ state to see what happens + let x0 = Op::new_x_gate(0); + let x1 = Op::new_x_gate(1); + + // Create identity Kraus operation to see baseline behavior + let identity_kraus_op = Op::new_matrix_2q_gate( + 0, + 1, // qubits 0 and 1 + // Row 0: |00⟩ output = identity for |00⟩ + [(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0)], + // Row 1: |01⟩ output = identity for |01⟩ + [(0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0)], + // Row 2: |10⟩ output = identity for |10⟩ + [(0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0)], + // Row 3: |11⟩ output = identity for |11⟩ + [(0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0)], + ); + + let m = Op::new_m_every_z_gate(); // measure all qubits + let ops = vec![x0, x1, identity_kraus_op, m]; // Create |11⟩, then apply identity Kraus + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + + // Should be: |11⟩: 1.0 (identity operation) + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 1.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} + +#[test] +fn test_2q_kraus_preserves_11_state() -> Result<(), String> { + // This test verifies the bug fix: |11⟩ is no longer zeroed out + // Create |11⟩ state + let x0 = Op::new_x_gate(0); + let x1 = Op::new_x_gate(1); + + // Create a Kraus operation that should preserve |11⟩ + let kraus_op = Op::new_matrix_2q_gate( + 0, + 1, // qubits 0 and 1 + // Row 0: |00⟩ output = zero everything + [(0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0)], + // Row 1: |01⟩ output = zero everything + [(0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0)], + // Row 2: |10⟩ output = zero everything + [(0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0)], + // Row 3: |11⟩ output = identity for |11⟩ (preserve |11⟩ state) + [(0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0)], + ); + + let m = Op::new_m_every_z_gate(); + let ops = vec![x0, x1, kraus_op, m]; + let r = run_gpu_simulator(2, ops)?; + let prob_str = write_probabilities(2, &r); + + // Before the fix: |11⟩ would be 0.0 (zeroed out) + // After the fix: |11⟩ should be 1.0 (preserved by identity fallback) + expect![[r#" + Probabilities: + |00⟩: 0.000000 + |01⟩: 0.000000 + |10⟩: 0.000000 + |11⟩: 1.000000 + "#]] + .assert_eq(&prob_str); + Ok(()) +} +*/ diff --git a/source/simulators/src/gpu_full_state_simulator/xcode-runner/.gitignore b/source/simulators/src/gpu_full_state_simulator/xcode-runner/.gitignore new file mode 100644 index 0000000000..1fc554cba3 --- /dev/null +++ b/source/simulators/src/gpu_full_state_simulator/xcode-runner/.gitignore @@ -0,0 +1,3 @@ +**/*.xcuserstate +xcuserdata/ +project.xcworkspace/ diff --git a/source/simulators/src/gpu_full_state_simulator/xcode-runner/README.md b/source/simulators/src/gpu_full_state_simulator/xcode-runner/README.md new file mode 100644 index 0000000000..ffbd261e5e --- /dev/null +++ b/source/simulators/src/gpu_full_state_simulator/xcode-runner/README.md @@ -0,0 +1,9 @@ +# xcode-runner + +This project exists to easily launch the `gpu-runner` binary under Xcode for shader debugging purposes. If you are able to reproduce an issue with the GPU full state simulator, write code in the `gpu-runner` binary to trigger the issue, then use this project to launch the simulator under Xcode and use its GPU debugging tools. + +## Why? + +Debugging GPU shaders can be difficult. Xcode provides a convenient way to launch and debug GPU applications on macOS. This is a lot easier than trying to attach to a running process or figure out how to launch a specific Rust unit tests from the command line. + +See for more information on debugging GPU shaders with Xcode. diff --git a/source/simulators/src/gpu_full_state_simulator/xcode-runner/gpu-runner/gpu-runner.xcodeproj/project.pbxproj b/source/simulators/src/gpu_full_state_simulator/xcode-runner/gpu-runner/gpu-runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..1b330c8d5c --- /dev/null +++ b/source/simulators/src/gpu_full_state_simulator/xcode-runner/gpu-runner/gpu-runner.xcodeproj/project.pbxproj @@ -0,0 +1,231 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXGroup section */ + 88A565322EA42C3300357839 = { + isa = PBXGroup; + children = ( + ); + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXLegacyTarget section */ + 88A565372EA42C3300357839 /* gpu-runner */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "$(ACTION)"; + buildConfigurationList = 88A5653A2EA42C3300357839 /* Build configuration list for PBXLegacyTarget "gpu-runner" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/true; + dependencies = ( + ); + name = "gpu-runner"; + packageProductDependencies = ( + ); + passBuildSettingsInEnvironment = 1; + productName = "gpu-runner"; + }; +/* End PBXLegacyTarget section */ + +/* Begin PBXProject section */ + 88A565332EA42C3300357839 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastUpgradeCheck = 2600; + TargetAttributes = { + 88A565372EA42C3300357839 = { + CreatedOnToolsVersion = 26.0; + }; + }; + }; + buildConfigurationList = 88A565362EA42C3300357839 /* Build configuration list for PBXProject "gpu-runner" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 88A565322EA42C3300357839; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 88A565372EA42C3300357839 /* gpu-runner */, + ); + }; +/* End PBXProject section */ + +/* Begin XCBuildConfiguration section */ + 88A565382EA42C3300357839 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 7WL2LM549D; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + }; + name = Debug; + }; + 88A565392EA42C3300357839 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 7WL2LM549D; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + }; + name = Release; + }; + 88A5653B2EA42C3300357839 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEBUGGING_SYMBOLS = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 7WL2LM549D; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 88A5653C2EA42C3300357839 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 7WL2LM549D; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 88A565362EA42C3300357839 /* Build configuration list for PBXProject "gpu-runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 88A565382EA42C3300357839 /* Debug */, + 88A565392EA42C3300357839 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 88A5653A2EA42C3300357839 /* Build configuration list for PBXLegacyTarget "gpu-runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 88A5653B2EA42C3300357839 /* Debug */, + 88A5653C2EA42C3300357839 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 88A565332EA42C3300357839 /* Project object */; +} diff --git a/source/simulators/src/gpu_full_state_simulator/xcode-runner/gpu-runner/gpu-runner.xcodeproj/xcshareddata/xcschemes/gpu-runner.xcscheme b/source/simulators/src/gpu_full_state_simulator/xcode-runner/gpu-runner/gpu-runner.xcodeproj/xcshareddata/xcschemes/gpu-runner.xcscheme new file mode 100644 index 0000000000..b2b812af7a --- /dev/null +++ b/source/simulators/src/gpu_full_state_simulator/xcode-runner/gpu-runner/gpu-runner.xcodeproj/xcshareddata/xcschemes/gpu-runner.xcscheme @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/simulators/src/lib.rs b/source/simulators/src/lib.rs index c99a27f347..95ad26112c 100644 --- a/source/simulators/src/lib.rs +++ b/source/simulators/src/lib.rs @@ -1,4 +1,106 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +pub mod noise_config; pub use quantum_sparse_sim::QuantumSim; +pub mod cpu_full_state_simulator; +mod gpu_full_state_simulator; +pub mod stabilizer_simulator; +pub use gpu_full_state_simulator::*; + +/// A qubit ID. +pub type QubitID = usize; + +/// The result of a mesasurement in the Z-basis. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum MeasurementResult { + Zero, + One, + Loss, +} + +pub trait Simulator { + type Noise; + + /// Creates a new simulator. + fn new(num_qubits: usize, num_results: usize, seed: u32, noise: Self::Noise) -> Self; + + /// Single qubit X gate. + fn x(&mut self, target: QubitID); + + /// Single qubit Y gate. + fn y(&mut self, target: QubitID); + + /// Single qubit Z gate. + fn z(&mut self, target: QubitID); + + /// Single qubit H gate. + fn h(&mut self, target: QubitID); + + /// Single qubit S gate. + fn s(&mut self, target: QubitID); + + /// Single qubit S adjoint gate. + fn s_adj(&mut self, target: QubitID); + + /// Single qubit SX gate. + fn sx(&mut self, target: QubitID); + + /// Single qubit SX adjoint gate. + fn sx_adj(&mut self, target: QubitID); + + /// Single qubit T gate. + fn t(&mut self, target: QubitID); + + /// Single qubit T adjoint gate. + fn t_adj(&mut self, target: QubitID); + + /// Single qubit RX gate. + fn rx(&mut self, angle: f64, target: QubitID); + + /// Single qubit RY gate. + fn ry(&mut self, angle: f64, target: QubitID); + + /// Single qubit RZ gate. + fn rz(&mut self, angle: f64, target: QubitID); + + /// Controlled-X gate. + fn cx(&mut self, control: QubitID, target: QubitID); + + /// Controlled-Z gate. + fn cz(&mut self, control: QubitID, target: QubitID); + + /// Two qubits RXX gate. + fn rxx(&mut self, angle: f64, q1: QubitID, q2: QubitID); + + /// Two qubits RYY gate. + fn ryy(&mut self, angle: f64, q1: QubitID, q2: QubitID); + + /// Two qubits RZZ gate. + fn rzz(&mut self, angle: f64, q1: QubitID, q2: QubitID); + + /// Two qubits SWAP gate. + fn swap(&mut self, q1: QubitID, q2: QubitID); + + /// `MZ` operation. + fn mz(&mut self, target: QubitID, result_id: QubitID); + + /// `MResetZ` operation. + fn mresetz(&mut self, target: QubitID, result_id: QubitID); + + /// `ResetZ` operation. + fn resetz(&mut self, target: QubitID); + + /// Move operation. The purpose of this operation is modeling + /// the noise coming from qubit movement in neutral atom machines. + fn mov(&mut self, target: QubitID); + + /// Applies a correlated noise intrinsic to `targets`. + fn correlated_noise_intrinsic(&mut self, intrinsic_id: u32, targets: &[usize]); + + /// Returns a list of the measurements recorded during the simulation. + fn measurements(&self) -> &[MeasurementResult]; + + /// Returns a list of the measurements recorded during the simulation. + fn take_measurements(&mut self) -> Vec; +} diff --git a/source/simulators/src/noise_config.rs b/source/simulators/src/noise_config.rs new file mode 100644 index 0000000000..e79576d190 --- /dev/null +++ b/source/simulators/src/noise_config.rs @@ -0,0 +1,340 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#[cfg(test)] +mod tests; +pub(crate) mod uq1_63; + +use num_traits::{ConstZero, Float}; +use rustc_hash::FxHashMap; +use std::hash::BuildHasherDefault; + +pub(crate) type IntrinsicID = u32; + +pub trait Fault { + fn none() -> Self; + fn loss() -> Self; +} + +/// Noise description for each operation. +/// +/// This is the format in which the user config files are +/// written. +#[derive(Clone, Debug)] +pub struct NoiseConfig { + pub i: NoiseTable, + pub x: NoiseTable, + pub y: NoiseTable, + pub z: NoiseTable, + pub h: NoiseTable, + pub s: NoiseTable, + pub s_adj: NoiseTable, + pub t: NoiseTable, + pub t_adj: NoiseTable, + pub sx: NoiseTable, + pub sx_adj: NoiseTable, + pub rx: NoiseTable, + pub ry: NoiseTable, + pub rz: NoiseTable, + pub cx: NoiseTable, + pub cz: NoiseTable, + pub rxx: NoiseTable, + pub ryy: NoiseTable, + pub rzz: NoiseTable, + pub swap: NoiseTable, + pub mov: NoiseTable, + pub mresetz: NoiseTable, + pub idle: IdleNoiseParams, + pub intrinsics: FxHashMap>, +} + +#[must_use] +pub const fn const_empty_hash_map() -> FxHashMap { + const HASH_BUILDER: BuildHasherDefault = BuildHasherDefault::new(); + #[allow(clippy::disallowed_types, reason = "we are using FxHasher here")] + const { + std::collections::HashMap::with_hasher(HASH_BUILDER) + } +} + +impl NoiseConfig { + pub const NOISELESS: Self = Self { + i: NoiseTable::::noiseless(1), + x: NoiseTable::::noiseless(1), + y: NoiseTable::::noiseless(1), + z: NoiseTable::::noiseless(1), + h: NoiseTable::::noiseless(1), + s: NoiseTable::::noiseless(1), + s_adj: NoiseTable::::noiseless(1), + t: NoiseTable::::noiseless(1), + t_adj: NoiseTable::::noiseless(1), + sx: NoiseTable::::noiseless(1), + sx_adj: NoiseTable::::noiseless(1), + rx: NoiseTable::::noiseless(1), + ry: NoiseTable::::noiseless(1), + rz: NoiseTable::::noiseless(1), + cx: NoiseTable::::noiseless(2), + cz: NoiseTable::::noiseless(2), + rxx: NoiseTable::::noiseless(2), + ryy: NoiseTable::::noiseless(2), + rzz: NoiseTable::::noiseless(2), + swap: NoiseTable::::noiseless(2), + mov: NoiseTable::::noiseless(1), + mresetz: NoiseTable::::noiseless(1), + idle: IdleNoiseParams::NOISELESS, + intrinsics: const_empty_hash_map(), + }; +} + +/// The probability of idle noise is computed using the equation: +/// `idle_noise_prob(steps) = (s_probability + 1.0).pow(step) - 1.0` +/// +/// Where: +/// - `s_probability`: is the probability of an `S` happening during +/// an idle a step, and is in the range `[0, 1]`. +/// +/// This structure allows the user to paremetrize the equation. +#[derive(Clone, Copy, Debug)] +pub struct IdleNoiseParams { + pub s_probability: f32, +} + +impl IdleNoiseParams { + pub const NOISELESS: Self = Self { s_probability: 0.0 }; + + #[must_use] + pub fn s_probability(self, steps: u32) -> f32 { + (self.s_probability + 1.0).powi(i32::try_from(steps).expect("steps should fit in 31 bits")) + - 1.0 + } +} + +/// Noise description for an operation. +/// +/// `pauli_strings[i]` contains the ith Pauli string +/// specified by the user, which we need to apply +/// with the probability `probabilities[i]`. All pauli +/// strings are mutually exclusive. Therefore, their probabilities +/// must add up to a number less or equal than `1.0`. +#[derive(Clone, Debug)] +pub struct NoiseTable { + pub qubits: u32, + pub pauli_strings: Vec, + pub probabilities: Vec, + pub loss: T, +} + +impl NoiseTable { + #[must_use] + pub const fn noiseless(qubits: u32) -> Self { + Self { + qubits, + pauli_strings: Vec::new(), + probabilities: Vec::new(), + loss: num_traits::ConstZero::ZERO, + } + } +} + +impl NoiseTable { + #[must_use] + pub fn is_noiseless(&self) -> bool { + self.probabilities.is_empty() && self.loss == T::zero() + } + + #[must_use] + pub fn has_pauli_noise(&self) -> bool { + self.probabilities.iter().any(|p| *p > T::zero()) + } +} + +/// Describes the noise configuration for each operation. +/// +/// This is the internal format used by the simulator. +pub struct CumulativeNoiseConfig { + pub i: CumulativeNoiseTable, + pub x: CumulativeNoiseTable, + pub y: CumulativeNoiseTable, + pub z: CumulativeNoiseTable, + pub h: CumulativeNoiseTable, + pub s: CumulativeNoiseTable, + pub s_adj: CumulativeNoiseTable, + pub t: CumulativeNoiseTable, + pub t_adj: CumulativeNoiseTable, + pub sx: CumulativeNoiseTable, + pub sx_adj: CumulativeNoiseTable, + pub rx: CumulativeNoiseTable, + pub ry: CumulativeNoiseTable, + pub rz: CumulativeNoiseTable, + pub cx: CumulativeNoiseTable, + pub cz: CumulativeNoiseTable, + pub rxx: CumulativeNoiseTable, + pub ryy: CumulativeNoiseTable, + pub rzz: CumulativeNoiseTable, + pub swap: CumulativeNoiseTable, + pub mov: CumulativeNoiseTable, + pub mresetz: CumulativeNoiseTable, + pub idle: IdleNoiseParams, + pub intrinsics: FxHashMap>, +} + +impl From> for CumulativeNoiseConfig +where + F: Fault + Clone + for<'s> From<&'s str>, +{ + fn from(value: NoiseConfig) -> Self { + let intrinsics = value + .intrinsics + .into_iter() + .map(|(k, v)| (k, v.into())) + .collect::>(); + + Self { + i: value.i.into(), + x: value.x.into(), + y: value.y.into(), + z: value.z.into(), + h: value.h.into(), + s: value.s.into(), + s_adj: value.s_adj.into(), + t: value.t.into(), + t_adj: value.t_adj.into(), + sx: value.sx.into(), + sx_adj: value.sx_adj.into(), + rx: value.rx.into(), + ry: value.ry.into(), + rz: value.rz.into(), + cx: value.cx.into(), + cz: value.cz.into(), + rxx: value.rxx.into(), + ryy: value.ryy.into(), + rzz: value.rzz.into(), + swap: value.swap.into(), + mov: value.mov.into(), + mresetz: value.mresetz.into(), + idle: value.idle, + intrinsics, + } + } +} + +/// A cumulative representation of the `NoiseTable` to make +/// computation more efficient. +/// +/// This is the internal format used by the simulator. +pub struct CumulativeNoiseTable { + pub sampler: CorrelatedNoiseSampler, + pub loss: f64, +} + +impl From> for CumulativeNoiseTable +where + F: Fault + Clone + for<'s> From<&'s str>, +{ + fn from(value: NoiseTable) -> Self { + let choices = value.pauli_strings.into_iter().map(|p| F::from(&p)); + let probs = value.probabilities.into_iter().map(uq1_63::from_prob); + Self { + sampler: CorrelatedNoiseSampler::new(choices, probs), + loss: value.loss, + } + } +} + +impl CumulativeNoiseTable +where + F: Fault + Clone, +{ + /// Samples a float in the range [0, 1] and picks one of the faults + /// `X`, `Y`, `Z`, `Loss` based on the provided noise table. + #[must_use] + pub fn gen_operation_fault(&self, rng: &mut impl rand::Rng) -> F { + let sample: f64 = rng.gen_range(0.0..1.0); + if sample < self.loss { + return F::loss(); + } + self.sampler.sample(rng) + } +} + +pub struct CorrelatedNoiseSampler { + /// The total probability of any noise. + noise_probability: u64, + /// The errors to choose from. + choices: Vec, + /// Cumulative probabilities in the [`uq1_63`] format. + cumulative_probabilities: Vec, +} + +impl From> for CorrelatedNoiseSampler +where + F: Fault + Clone + for<'a> From<&'a str>, +{ + fn from(value: NoiseTable) -> Self { + assert!( + !value.pauli_strings.is_empty(), + "there should be at least one pauli_string" + ); + let choices = value.pauli_strings.iter().map(|p| F::from(p.as_str())); + let probs = value.probabilities.into_iter().map(uq1_63::from_prob); + Self::new(choices, probs) + } +} + +impl CorrelatedNoiseSampler { + #[must_use] + pub fn new(choices: Choices, probs: Probabilities) -> Self + where + Choices: IntoIterator, + Probabilities: IntoIterator, + { + let probs = probs.into_iter(); + let mut cumulative_probabilities: Vec = Vec::with_capacity(probs.size_hint().0); + let mut noise_probability: u64 = 0; + + for p in probs { + noise_probability += p; + assert!( + noise_probability <= uq1_63::ONE, + "total probability should not exceed 1.0" + ); + cumulative_probabilities.push(noise_probability); + } + + Self { + noise_probability, + choices: choices.into_iter().collect(), + cumulative_probabilities, + } + } + + #[must_use] + pub fn sample(&self, rng: &mut impl rand::Rng) -> F { + let distr = rand::distributions::Uniform::new(0, uq1_63::ONE); + let random_sample: u64 = rng.sample(distr); + self.sample_with_value(random_sample) + } + + /// Samples a fault given a pre-generated random value in the range `[0, uq1_63::ONE)`. + /// This is useful for testing purposes. + #[must_use] + pub fn sample_with_value(&self, random_sample: u64) -> F { + // This codepath will be taken > 99.9% of times, since the total error probability + // is usually very low. + if random_sample >= self.noise_probability { + return F::none(); + } + // Find the index of the first cumulative probability greater than the chosen sample. + let idx = self + .cumulative_probabilities + .partition_point(|p| *p <= random_sample); + + self.choices[idx].clone() + } +} + +/// Checks if a pauli string is the identity. +#[must_use] +pub fn is_pauli_identity(pauli_string: &str) -> bool { + pauli_string.chars().all(|c| c == 'I') +} diff --git a/source/simulators/src/noise_config/tests.rs b/source/simulators/src/noise_config/tests.rs new file mode 100644 index 0000000000..74ce98959d --- /dev/null +++ b/source/simulators/src/noise_config/tests.rs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use crate::noise_config::{self, CorrelatedNoiseSampler, uq1_63}; + +#[derive(Debug, Clone, PartialEq)] +enum Fault { + None, + Value(u64), +} + +impl noise_config::Fault for Fault { + fn none() -> Self { + Self::None + } + + fn loss() -> Self { + unimplemented!() + } +} + +#[test] +fn sample_smallest_probability_element_at_start() { + let choices = vec![Fault::Value(0), Fault::Value(1)]; + let probs = vec![1, 1]; + let sampler = CorrelatedNoiseSampler::new(choices, probs); + assert_eq!(Fault::Value(0), sampler.sample_with_value(0)); + assert_eq!(Fault::Value(1), sampler.sample_with_value(1)); + assert_eq!(Fault::None, sampler.sample_with_value(2)); +} + +#[test] +fn sample_smallest_probability_element_at_end() { + let choices = vec![Fault::Value(0), Fault::Value(1)]; + let probs = vec![uq1_63::ONE - 1, 1]; + let sampler = CorrelatedNoiseSampler::new(choices, probs); + assert_eq!(Fault::Value(0), sampler.sample_with_value(uq1_63::ONE - 2)); + assert_eq!(Fault::Value(1), sampler.sample_with_value(uq1_63::ONE - 1)); +} + +#[test] +fn binary_search_works_as_expected() { + let mut choices = Vec::new(); + let mut probs = Vec::new(); + + for i in 0..100 { + choices.push(Fault::Value(i)); + probs.push(1); + } + + let sampler = CorrelatedNoiseSampler::new(choices, probs); + for i in 0..100 { + assert_eq!(Fault::Value(i), sampler.sample_with_value(i)); + } +} diff --git a/source/simulators/src/noise_config/uq1_63.rs b/source/simulators/src/noise_config/uq1_63.rs new file mode 100644 index 0000000000..e0d326f7a7 --- /dev/null +++ b/source/simulators/src/noise_config/uq1_63.rs @@ -0,0 +1,48 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#[cfg(test)] +mod tests; + +/// This value is 1.0 in `UQ1.63` format (high order bit is 1, rest are 0). +pub(crate) const ONE: u64 = 1u64 << 63; + +/// Maps an `f64` in the range`[0.0, 1.0]` to a `u64` in the `UQ1.63` format. +/// +/// You can learn more at: . +pub(crate) fn from_prob(p: f64) -> u64 { + // Only allow values from 0 to 1.0 for the incoming probability. + assert!( + (0.0..=1.0).contains(&p), + "a probability should be a number between 0.0 and 1.0" + ); + let bits: u64 = p.to_bits(); + + // For a double-precision float: + // - 1 bit sign (bit 63) + // - 11 bits exponent (bits 62-52) + // - 52 bits fraction (bits 51-0) + // + // The exponent is stored with a bias of 1023 (i.e., actual exponent + 1023). + + let exponent = (bits >> 52) & 0x7FF; + let fraction = bits & ((1u64 << 52) - 1); + + if exponent == 0 { + // zero or subnormal value + return 0; + } + // Add back the implicit leading 1 to the significand + let m = (1u64 << 52) | fraction; + // For Q1.63, we need to adjust the exponent. Shift by 11 to account for the fixed-point format. + let k = (exponent as i32) - 1012; + if k >= 0 { + m << k + } else { + let r = -k; + if r >= 64 { + return 0; + } + m >> r + } +} diff --git a/source/simulators/src/noise_config/uq1_63/tests.rs b/source/simulators/src/noise_config/uq1_63/tests.rs new file mode 100644 index 0000000000..807809b777 --- /dev/null +++ b/source/simulators/src/noise_config/uq1_63/tests.rs @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use super::from_prob; + +#[test] +fn test_1_as_q1_63() { + let uq1_63 = from_prob(1.0); + assert_eq!(uq1_63, 0x8000_0000_0000_0000); +} + +#[test] +fn test_05_as_q1_63() { + let uq1_63 = from_prob(0.5); + assert_eq!(uq1_63, 0x4000_0000_0000_0000); +} + +#[test] +fn test_tiny_float() { + // approx 8.8817842E-16 + #[allow(clippy::cast_precision_loss)] + let num: f64 = 1.0 / (1u64 << 50) as f64; + let uq1_63 = from_prob(num); + assert_eq!(uq1_63, 0x0000_0000_0000_2000); +} + +#[test] +fn test_tiniest_float() { + // approx 1.0842E-19 + #[allow(clippy::cast_precision_loss)] + let num: f64 = 1.0 / (1u64 << 63) as f64; + let uq1_63 = from_prob(num); + assert_eq!(uq1_63, 0x0000_0000_0000_0001); +} + +#[test] +fn float_with_significant_bits() { + // approx 1.5521806e-10 + let num: f32 = f32::from_bits(0x2f2a_aa00); + // signficand (with implicit 1) becomes 1010_1010_1010_1010 + // Shifted right 33 bits will become 0x...5555... + let uq1_63 = from_prob(f64::from(num)); + assert_eq!(uq1_63, 0x0000_0000_5555_0000); +} diff --git a/source/simulators/src/stabilizer_simulator.rs b/source/simulators/src/stabilizer_simulator.rs new file mode 100644 index 0000000000..2028df938a --- /dev/null +++ b/source/simulators/src/stabilizer_simulator.rs @@ -0,0 +1,399 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +//! This crate implements a stabilizer simulator for the QDK. + +pub mod noise; +pub mod operation; + +use crate::{ + MeasurementResult, QubitID, Simulator, + noise_config::{CumulativeNoiseConfig, IntrinsicID}, +}; +use noise::Fault; +use operation::Operation; +use paulimer::{ + Simulation, UnitaryOp, + outcome_specific_simulation::{OutcomeSpecificSimulation, apply_hadamard}, + quantum_core, +}; +use rand::{SeedableRng as _, rngs::StdRng}; +use std::sync::Arc; + +/// A stabilizer simulator with the ability to simulate atom loss. +pub struct StabilizerSimulator { + /// The noise configuration for the simulation. + noise_config: Arc>, + /// Random number generator used to sample from [`Self::noise_config`]. + rng: StdRng, + /// The current inverse state of the simulation. + state: OutcomeSpecificSimulation, + /// A vector storing whether a qubit was lost or not. + loss: Vec, + /// Measurement results. + measurements: Vec, + /// The last time each qubit was operated upon. + last_operation_time: Vec, + /// Current simulation time. + time: u32, +} + +impl StabilizerSimulator { + /// Increment the simulation time by one. + /// This is used to compute the idle noise on qubits. + pub fn step(&mut self) { + self.time += 1; + } + + /// Increment the simulation time by `steps`. + /// This is used to compute the idle noise on qubits. + pub fn steps(&mut self, steps: u32) { + self.time += steps; + } + + /// Reload a qubit. + pub fn reload_qubit(&mut self, target: QubitID) { + self.loss[target] = false; + } + + /// Reload a list of qubits. + pub fn reload_qubits(&mut self, targets: &[QubitID]) { + for q in targets { + self.reload_qubit(*q); + } + } + + /// Applies a list of gates to the system. + pub fn apply_gates(&mut self, gates: &[Operation]) { + for gate in gates { + self.apply_gate_in_place(gate); + } + } + + fn apply_gate_in_place(&mut self, gate: &Operation) { + match *gate { + Operation::I { .. } => (), + Operation::X { target } => self.x(target), + Operation::Y { target } => self.y(target), + Operation::Z { target } => self.z(target), + Operation::H { target } => self.h(target), + Operation::S { target } => self.s(target), + Operation::SAdj { target } => self.s_adj(target), + Operation::SX { target } => self.sx(target), + Operation::CZ { control, target } => self.cz(control, target), + Operation::Move { target } => self.mov(target), + Operation::MResetZ { target, result_id } => self.mresetz(target, result_id), + } + } + + fn apply_idle_noise(&mut self, target: QubitID) { + let idle_time = self.time - self.last_operation_time[target]; + self.last_operation_time[target] = self.time; + let fault = self.noise_config.gen_idle_fault(&mut self.rng, idle_time); + self.apply_fault(fault, &[target]); + } + + fn apply_fault(&mut self, fault: Fault, targets: &[QubitID]) { + match fault { + Fault::None => (), + Fault::Pauli(pauli_observables) => { + let observable: Vec<_> = pauli_observables + .into_iter() + .zip(targets) + .filter(|(_, q)| !self.loss[**q]) // We don't apply faults on lost qubits. + .map(|(pauli, q)| (pauli, *q).into()) + .collect(); + self.state.pauli(&observable); + } + Fault::S => { + if !self.loss[targets[0]] { + self.state.apply_unitary(UnitaryOp::SqrtZ, targets); + } + } + Fault::Loss => { + for target in targets { + self.mresetz_impl(*target); + self.loss[*target] = true; + } + } + } + } + + /// Records a z-measurement on the given `target`. + fn record_mz(&mut self, target: QubitID, result_id: QubitID) { + let measurement = self.mz_impl(target); + self.measurements[result_id] = measurement; + } + + /// Records a z-measurement on the given `target` and resets the qubit to the zero state. + fn record_mresetz(&mut self, target: QubitID, result_id: QubitID) { + let measurement = self.mresetz_impl(target); + self.measurements[result_id] = measurement; + } + + /// Measures a Z observable on the given `target`. + fn mz_impl(&mut self, target: QubitID) -> MeasurementResult { + if self.loss[target] { + self.loss[target] = false; + return MeasurementResult::Loss; + } + + self.state.measure(&[quantum_core::z(target)]); + + if *self + .state + .outcome_vector() + .last() + .expect("there should be at least one measurement") + { + MeasurementResult::One + } else { + MeasurementResult::Zero + } + } + + /// Measures a Z observable on the given `target` and reset the qubit to the zero state. + fn mresetz_impl(&mut self, target: QubitID) -> MeasurementResult { + if self.loss[target] { + self.loss[target] = false; + return MeasurementResult::Loss; + } + + let r = self.state.measure(&[quantum_core::z(target)]); + self.state + .conditional_pauli(&[quantum_core::x(target)], &[r], true); + + if *self + .state + .outcome_vector() + .last() + .expect("there should be at least one measurement") + { + MeasurementResult::One + } else { + MeasurementResult::Zero + } + } +} + +impl Simulator for StabilizerSimulator { + type Noise = Arc>; + + fn new(num_qubits: usize, num_results: usize, seed: u32, noise_config: Self::Noise) -> Self { + Self { + noise_config, + rng: StdRng::seed_from_u64(u64::from(seed)), + state: OutcomeSpecificSimulation::new_with_random_outcomes(num_qubits, num_results), + loss: vec![false; num_qubits], + measurements: vec![MeasurementResult::Zero; num_results], + last_operation_time: vec![0; num_qubits], + time: 0, + } + } + + fn x(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state.apply_unitary(UnitaryOp::X, &[target]); + let fault = self.noise_config.x.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn y(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state.apply_unitary(UnitaryOp::Y, &[target]); + let fault = self.noise_config.y.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn z(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state.apply_unitary(UnitaryOp::Z, &[target]); + let fault = self.noise_config.z.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn h(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + apply_hadamard(&mut self.state, target); + let fault = self.noise_config.h.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn s(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state.apply_unitary(UnitaryOp::SqrtZ, &[target]); + let fault = self.noise_config.s.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn s_adj(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state.apply_unitary(UnitaryOp::SqrtZInv, &[target]); + let fault = self.noise_config.s_adj.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn sx(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state.apply_unitary(UnitaryOp::SqrtX, &[target]); + let fault = self.noise_config.sx.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn sx_adj(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + self.state.apply_unitary(UnitaryOp::SqrtXInv, &[target]); + let fault = self.noise_config.sx_adj.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn cx(&mut self, control: QubitID, target: QubitID) { + if !self.loss[control] && !self.loss[target] { + self.apply_idle_noise(control); + self.apply_idle_noise(target); + self.state + .apply_unitary(UnitaryOp::ControlledX, &[control, target]); + } + // We still apply operation faults to non-lost qubits. + let fault = self.noise_config.cx.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[control, target]); + } + + fn cz(&mut self, control: QubitID, target: QubitID) { + if !self.loss[control] && !self.loss[target] { + self.apply_idle_noise(control); + self.apply_idle_noise(target); + self.state + .apply_unitary(UnitaryOp::ControlledZ, &[control, target]); + } + // We still apply operation faults to non-lost qubits. + let fault = self.noise_config.cz.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[control, target]); + } + + fn swap(&mut self, q1: QubitID, q2: QubitID) { + match (self.loss[q1], self.loss[q2]) { + (true, true) => (), + (true, false) => { + self.apply_idle_noise(q2); + self.state.apply_permutation(&[1, 0], &[q1, q2]); + } + (false, true) => { + self.apply_idle_noise(q1); + self.state.apply_permutation(&[1, 0], &[q1, q2]); + } + (false, false) => { + self.apply_idle_noise(q1); + self.apply_idle_noise(q2); + self.state.apply_permutation(&[1, 0], &[q1, q2]); + } + } + // There are three kinds of swaps: + // 1. A logical swap, also called a relabel. + // 2. A swap by physically exchanging the location of the qubits. + // 3. An exchange of information by doing three CX. + // + // This method is concerned with the kinds (1) and (2), since (3) + // gets decomposed into other instructions before making it to the simulator. + // In both (1) and (2), the loss state of the qubits gets exchanged. + self.loss.swap(q1, q2); + + // Is up to the user if swap is a virtual operation or not. + // If they don't specify noise/loss probability for swap, then it is virtual. + let fault = self.noise_config.swap.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[q1, q2]); + } + + fn mz(&mut self, target: QubitID, result_id: QubitID) { + self.apply_idle_noise(target); + self.record_mz(target, result_id); + let fault = self.noise_config.mresetz.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + + fn mresetz(&mut self, target: QubitID, result_id: QubitID) { + self.apply_idle_noise(target); + self.record_mresetz(target, result_id); + let fault = self.noise_config.mresetz.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + + fn resetz(&mut self, target: QubitID) { + self.apply_idle_noise(target); + self.mresetz_impl(target); + let fault = self.noise_config.mresetz.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + + fn mov(&mut self, target: QubitID) { + if !self.loss[target] { + self.apply_idle_noise(target); + let fault = self.noise_config.mov.gen_operation_fault(&mut self.rng); + self.apply_fault(fault, &[target]); + } + } + + fn correlated_noise_intrinsic(&mut self, intrinsic_id: IntrinsicID, targets: &[usize]) { + let fault = match self.noise_config.intrinsics.get(&intrinsic_id) { + Some(correlated_noise) => correlated_noise.sample(&mut self.rng), + None => return, + }; + self.apply_fault(fault, targets); + } + + fn measurements(&self) -> &[MeasurementResult] { + &self.measurements + } + + fn take_measurements(&mut self) -> Vec { + std::mem::take(&mut self.measurements) + } + + fn t(&mut self, _target: QubitID) { + unimplemented!("unssuported instruction in stabilizer simulator: T") + } + + fn t_adj(&mut self, _target: QubitID) { + unimplemented!("unssuported instruction in stabilizer simulator: T_ADJ") + } + + fn rx(&mut self, _angle: f64, _target: QubitID) { + unimplemented!("unssuported instruction in stabilizer simulator: Rx") + } + + fn ry(&mut self, _angle: f64, _target: QubitID) { + unimplemented!("unssuported instruction in stabilizer simulator: Ry") + } + + fn rz(&mut self, _angle: f64, _target: QubitID) { + unimplemented!("unssuported instruction in stabilizer simulator: Rz") + } + + fn rxx(&mut self, _angle: f64, _q1: QubitID, _q2: QubitID) { + unimplemented!("unssuported instruction in stabilizer simulator: Rxx") + } + + fn ryy(&mut self, _angle: f64, _q1: QubitID, _q2: QubitID) { + unimplemented!("unssuported instruction in stabilizer simulator: Ryy") + } + + fn rzz(&mut self, _angle: f64, _q1: QubitID, _q2: QubitID) { + unimplemented!("unssuported instruction in stabilizer simulator: Rzz") + } +} diff --git a/source/simulators/src/stabilizer_simulator/noise.rs b/source/simulators/src/stabilizer_simulator/noise.rs new file mode 100644 index 0000000000..e72b2de717 --- /dev/null +++ b/source/simulators/src/stabilizer_simulator/noise.rs @@ -0,0 +1,67 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use crate::noise_config::{self, CumulativeNoiseConfig, is_pauli_identity}; +use paulimer::quantum_core::{self, PauliObservable}; + +#[derive(Clone, Debug, Default, PartialEq, Eq)] +pub enum Fault { + /// No fault occurred. + #[default] + None, + /// A Pauli fault. + Pauli(Vec), + /// A gradual dephasing fault. Qubits are always slowly + /// rotating along the Z-axis with an unknown rate, + /// eventually resulting in an `S` gate. + S, + /// The qubit was lost. + Loss, +} + +impl noise_config::Fault for Fault { + fn none() -> Self { + Self::None + } + + fn loss() -> Self { + Self::Loss + } +} + +impl> From for Fault { + fn from(pauli_string: S) -> Self { + let pauli_string: &str = pauli_string.as_ref(); + assert!( + !is_pauli_identity(pauli_string), + "the NoiseTable input validation should ensure we don't insert the identity string" + ); + + let pauli_product = pauli_string + .chars() + .map(|c| match c { + 'I' => PauliObservable::PlusI, + 'X' => PauliObservable::PlusX, + 'Y' => PauliObservable::PlusY, + 'Z' => PauliObservable::PlusZ, + _ => panic!("invalid character in pauli string {c}"), + }) + .collect(); + + Self::Pauli(pauli_product) + } +} + +impl CumulativeNoiseConfig { + /// Samples a float in the range [0, 1] and picks one of the faults + /// `X`, `Y`, `Z`, `S` based on the provided noise table. + #[must_use] + pub fn gen_idle_fault(&self, rng: &mut impl rand::Rng, idle_steps: u32) -> Fault { + let sample: f32 = rng.gen_range(0.0..1.0); + if sample < self.idle.s_probability(idle_steps) { + Fault::S + } else { + Fault::None + } + } +} diff --git a/source/simulators/src/stabilizer_simulator/operation.rs b/source/simulators/src/stabilizer_simulator/operation.rs new file mode 100644 index 0000000000..4c40c24581 --- /dev/null +++ b/source/simulators/src/stabilizer_simulator/operation.rs @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +use super::QubitID; + +/// An extension of the Clifford gates, also including a `Move` operation. +/// A gate C is Clifford if it conjugates all elements of the Pauli group into +/// elements of the pauli group. That is, ∀ p ∈ `PauliGroup`, C†pC ∈ `PauliGroup`. +#[derive(Debug)] +pub enum Operation { + I { target: QubitID }, + X { target: QubitID }, + Y { target: QubitID }, + Z { target: QubitID }, + H { target: QubitID }, + S { target: QubitID }, + SAdj { target: QubitID }, + SX { target: QubitID }, + CZ { control: QubitID, target: QubitID }, + Move { target: QubitID }, + MResetZ { target: QubitID, result_id: QubitID }, +} + +#[must_use] +pub fn id(target: QubitID) -> Operation { + Operation::I { target } +} + +#[must_use] +pub fn x(target: QubitID) -> Operation { + Operation::X { target } +} + +#[must_use] +pub fn y(target: QubitID) -> Operation { + Operation::Y { target } +} + +#[must_use] +pub fn z(target: QubitID) -> Operation { + Operation::Z { target } +} + +#[must_use] +pub fn h(target: QubitID) -> Operation { + Operation::H { target } +} + +#[must_use] +pub fn s(target: QubitID) -> Operation { + Operation::S { target } +} + +#[must_use] +pub fn cz(control: QubitID, target: QubitID) -> Operation { + Operation::CZ { control, target } +} + +#[must_use] +pub fn mz(target: QubitID) -> Operation { + Operation::MResetZ { + target, + result_id: target, + } +} + +#[must_use] +pub fn mov(target: QubitID) -> Operation { + Operation::Move { target } +} diff --git a/source/vscode/test/runTests.mjs b/source/vscode/test/runTests.mjs index 062ddcf735..b9112790b9 100644 --- a/source/vscode/test/runTests.mjs +++ b/source/vscode/test/runTests.mjs @@ -18,17 +18,17 @@ // Q# extension logs are usually more relevant for debugging tests. // To control the Q# extension log level see: suites/extensionUtils.ts -import { runTests } from "@vscode/test-web"; +// import { runTests } from "@vscode/test-web"; import { readFileSync } from "node:fs"; import { SourceMap } from "node:module"; import path, { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; const attachArgName = "--waitForDebugger="; -const verboseArgName = "--verbose"; +// const verboseArgName = "--verbose"; const suiteArgName = "--suite="; -const verbose = process.argv.includes(verboseArgName); +// const verbose = process.argv.includes(verboseArgName); const waitForDebugger = process.argv.find((arg) => arg.startsWith(attachArgName), ); @@ -46,7 +46,7 @@ if (waitForDebugger && !selectedSuite) { const thisDir = dirname(fileURLToPath(import.meta.url)); // The folder containing the Extension Manifest package.json -const extensionDevelopmentPath = join(thisDir, ".."); +// const extensionDevelopmentPath = join(thisDir, ".."); try { const suites = ["language-service", "debugger"]; @@ -63,8 +63,8 @@ try { } async function runSuite(name) { - const extensionTestsPath = join(thisDir, "out", name, "index"); - const workspacePath = join(thisDir, "suites", name, "test-workspace"); + // const extensionTestsPath = join(thisDir, "out", name, "index"); + // const workspacePath = join(thisDir, "suites", name, "test-workspace"); // Capture console output before running tests, // so that we can map stack traces to original source files. @@ -72,19 +72,22 @@ async function runSuite(name) { try { // Start a web server that serves VS Code in a browser, run the tests - await runTests({ - headless: true, // pass false to see VS Code UI - browserType: "chromium", - extensionDevelopmentPath, - extensionTestsPath, - folderPath: workspacePath, - quality: "stable", - printServerLog: verbose, - verbose, - waitForDebugger: waitForDebugger - ? Number(waitForDebugger.slice(attachArgName.length)) - : undefined, - }); + // TODO: reenable tests once network failures are addressed + // (https://github.com/microsoft/qdk/pull/2764) + void name; + // await runTests({ + // headless: true, // pass false to see VS Code UI + // browserType: "chromium", + // extensionDevelopmentPath, + // extensionTestsPath, + // folderPath: workspacePath, + // quality: "stable", + // printServerLog: verbose, + // verbose, + // waitForDebugger: waitForDebugger + // ? Number(waitForDebugger.slice(attachArgName.length)) + // : undefined, + // }); } finally { restoreConsole(); } diff --git a/source/widgets/js/index.tsx b/source/widgets/js/index.tsx index 8541294c5c..6647dd12c2 100644 --- a/source/widgets/js/index.tsx +++ b/source/widgets/js/index.tsx @@ -12,6 +12,10 @@ import { ReData, Circuit, setRenderer, + Atoms, + type MachineLayout, + type TraceData, + MoleculeViewer, } from "qsharp-lang/ux"; import markdownIt from "markdown-it"; import "./widgets.css"; @@ -76,6 +80,12 @@ function render({ model, el }: RenderArgs) { case "Circuit": renderCircuit({ model, el }); break; + case "Atoms": + renderAtoms({ model, el }); + break; + case "MoleculeViewer": + renderMoleculeViewer({ model, el }); + break; default: throw new Error(`Unknown component type ${componentType}`); } @@ -274,3 +284,40 @@ function renderCircuit({ model, el }: RenderArgs) { onChange(); model.on("change:circuit_json", onChange); } + +function renderAtoms({ model, el }: RenderArgs) { + const onChange = () => { + const machineLayout = model.get("machine_layout") as MachineLayout; + const traceData = model.get("trace_data") as TraceData; + + if (!machineLayout || !traceData) { + return; + } + + Atoms(el, machineLayout, traceData); + }; + + onChange(); + model.on("change:machine_layout", onChange); + model.on("change:trace_data", onChange); +} + +function renderMoleculeViewer({ model, el }: RenderArgs) { + const onChange = () => { + const moleculeData = model.get("molecule_data") as string; + const cubeData = model.get("cube_data") as { [key: string]: string }; + const isoval = model.get("isoval") as number; + prender( + , + el, + ); + }; + onChange(); + model.on("change:molecule_data", onChange); + model.on("change:cube_data", onChange); + model.on("change:isoval", onChange); +} diff --git a/source/widgets/src/qsharp_widgets/__init__.py b/source/widgets/src/qsharp_widgets/__init__.py index 070462fcbd..6680273098 100644 --- a/source/widgets/src/qsharp_widgets/__init__.py +++ b/source/widgets/src/qsharp_widgets/__init__.py @@ -210,3 +210,36 @@ class Circuit(anywidget.AnyWidget): def __init__(self, circuit): super().__init__(circuit_json=circuit.json()) self.layout.overflow = "visible scroll" + + +class Atoms(anywidget.AnyWidget): + _esm = pathlib.Path(__file__).parent / "static" / "index.js" + _css = pathlib.Path(__file__).parent / "static" / "index.css" + + comp = traitlets.Unicode("Atoms").tag(sync=True) + machine_layout = traitlets.Dict().tag(sync=True) + trace_data = traitlets.Dict().tag(sync=True) + + def __init__(self, machine_layout, trace_data): + super().__init__(machine_layout=machine_layout, trace_data=trace_data) + + +class MoleculeViewer(anywidget.AnyWidget): + _esm = pathlib.Path(__file__).parent / "static" / "index.js" + _css = pathlib.Path(__file__).parent / "static" / "index.css" + + comp = traitlets.Unicode("MoleculeViewer").tag(sync=True) + molecule_data = traitlets.Unicode().tag(sync=True) + cube_data = traitlets.Dict().tag(sync=True) + isoval = traitlets.Float(0.02).tag(sync=True) + + def __init__(self, molecule_data, cube_data={}, isoval=0.02): + """ + This function generates a 3D molecule viewer for the provided molecular data in XYZ format. + + Parameters: + - molecule_data: string containing the molecular data in XYZ format. + """ + super().__init__( + molecule_data=molecule_data, cube_data=cube_data, isoval=isoval + )