diff --git a/CHANGELOG.md b/CHANGELOG.md index 8794d2c2b..b34604863 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,9 +19,10 @@ Deprecated API's New features ------------ +* Sub-strings can now be selected from full strings by indexing via ranges (e.g. `s[1..4]`). * New options `Engine::set_max_strings_interned` and `Engine::max_strings_interned` are added to limit the maximum number of strings interned in the `Engine`'s string interner. -* A new advanced callback can now be registered (gated under the `internals` feature), `Engine::on_invalid_array_index`, to handle access to missing properties in object maps. -* A new advanced callback can now be registered (gated under the `internals` feature), `Engine::on_missing_map_property`, to handle out-of-bound index into arrays. +* A new advanced callback, `Engine::on_invalid_array_index`, is added (gated under the `internals` feature) to handle access to missing properties in object maps. +* A new advanced callback, `Engine::on_missing_map_property`, is added (gated under the `internals` feature) to handle out-of-bound index into arrays. Enhancements ------------ diff --git a/fuzz/clusterfuzz-testcase-fuzz_serde-4745120863813632 b/fuzz/clusterfuzz-testcase-fuzz_serde-4745120863813632 deleted file mode 100644 index 10677e9d5..000000000 Binary files a/fuzz/clusterfuzz-testcase-fuzz_serde-4745120863813632 and /dev/null differ diff --git a/fuzz/clusterfuzz-testcase-scripting-4756460147900416 b/fuzz/clusterfuzz-testcase-scripting-4756460147900416 deleted file mode 100644 index 8ef14c69e..000000000 --- a/fuzz/clusterfuzz-testcase-scripting-4756460147900416 +++ /dev/null @@ -1 +0,0 @@ -55>>-666+66666+e66+-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|kbbbbbbbbbbbbbbbbbbbbbbb|pppppn-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||f||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|ppppp||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pn-oo||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||||||||o;|||||oo|o|k|ppp|-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||||||||o;|||||ppppxpppppp|oo|o|k|pppppo;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|yitsTTTTTTpppppn-||||||||||||o;||||47>>-666+128+e66+-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||f||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-+n-O||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pn-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|pppn-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||||||||o;|||||ppppxpppppp|oo|o|k|pppppo;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|yitsTTTTTTpppppn-||||||||||||o;||||-+n-||||||||||||o;||||!oo|o|k|ppppp||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp-+n-||||||||||||o;|||||oo|o|k|ppppp||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||fo;|||||oo|o|k|pppppp+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|ppppp||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+o|k|pppppp+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||z|oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|ppppp||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|pk|ppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o||||o;||||-+n-||||||||||||o;|||||oo|o|k|ppppp||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o||||o;||||-+n-||||||||||||o;|||||oo|o|k|ppppp||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-+n-||||||||||-||o;|||||oo|o|k|pppppn-||||||||||||o;||||-+n-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppn-||||||||||||o;|||||oo|o|k|pppppp+o|k|pppppp+n-||||||||||||o;|||||oo|o|k|ppp \ No newline at end of file diff --git a/src/api/run.rs b/src/api/run.rs index faf544fbc..148e3c2be 100644 --- a/src/api/run.rs +++ b/src/api/run.rs @@ -128,9 +128,7 @@ impl Engine { global.lib.push(ast.shared_lib().clone()); #[cfg(not(feature = "no_module"))] - { - global.embedded_module_resolver = ast.resolver.clone(); - } + global.embedded_module_resolver.clone_from(&ast.resolver); let _ = self.eval_global_statements(global, caches, scope, ast.statements(), true)?; diff --git a/src/ast/ast.rs b/src/ast/ast.rs index 05a8cdb3b..e2da97d4d 100644 --- a/src/ast/ast.rs +++ b/src/ast/ast.rs @@ -479,8 +479,8 @@ impl AST { other.resolver.as_deref().map_or(true, |r| r.is_empty()), ) { (true, true) => (), - (false, true) => _ast.resolver = self.resolver.clone(), - (true, false) => _ast.resolver = other.resolver.clone(), + (false, true) => _ast.resolver.clone_from(&self.resolver), + (true, false) => _ast.resolver.clone_from(&other.resolver), (false, false) => { let mut resolver = self.resolver.as_deref().unwrap().clone(); for (k, v) in other.resolver.as_deref().unwrap() { @@ -573,7 +573,7 @@ impl AST { other.resolver.as_deref().map_or(true, |r| r.is_empty()), ) { (_, true) => (), - (true, false) => self.resolver = other.resolver.clone(), + (true, false) => self.resolver.clone_from(&other.resolver), (false, false) => { let resolver = crate::func::shared_make_mut(self.resolver.as_mut().unwrap()); let other_resolver = crate::func::shared_take_or_clone(other.resolver.unwrap()); diff --git a/src/ast/expr.rs b/src/ast/expr.rs index 71bb924d1..d95b0bcb2 100644 --- a/src/ast/expr.rs +++ b/src/ast/expr.rs @@ -533,6 +533,9 @@ impl Expr { (Self::IntegerConstant(ref start, ..), Self::Unit(..)) => { (*start..INT::MAX).into() } + (Self::Unit(..), Self::IntegerConstant(ref start, ..)) => { + (0..*start).into() + } _ => return None, }, // x..=y @@ -544,6 +547,9 @@ impl Expr { (Self::IntegerConstant(ref start, ..), Self::Unit(..)) => { (*start..=INT::MAX).into() } + (Self::Unit(..), Self::IntegerConstant(ref start, ..)) => { + (0..=*start).into() + } _ => return None, }, _ => return None, diff --git a/src/eval/chaining.rs b/src/eval/chaining.rs index 3d72c9ace..8efaaf470 100644 --- a/src/eval/chaining.rs +++ b/src/eval/chaining.rs @@ -4,11 +4,10 @@ use super::{Caches, GlobalRuntimeState, Target}; use crate::ast::{ASTFlags, BinaryExpr, Expr, OpAssignment}; use crate::engine::{FN_IDX_GET, FN_IDX_SET}; -use crate::tokenizer::Token; use crate::types::dynamic::Union; use crate::{ - calc_fn_hash, Dynamic, Engine, FnArgsVec, OnceCell, Position, RhaiResult, RhaiResultOf, Scope, - ERR, + calc_fn_hash, Dynamic, Engine, ExclusiveRange, FnArgsVec, InclusiveRange, OnceCell, Position, + RhaiResult, RhaiResultOf, Scope, ERR, }; use std::hash::Hash; #[cfg(feature = "no_std")] @@ -347,75 +346,71 @@ impl Engine { index: offset, }) } - Err(typ) => { - if typ == "core::ops::range::Range" { - // val_str[range] - let idx = idx.read_lock::>().unwrap(); - let range = &*idx; - let chars_count = s.chars().count(); - let start = if range.start >= 0 { - range.start as usize - } else { - super::calc_index(chars_count, range.start, true, || { - ERR::ErrorStringBounds(chars_count, range.start, idx_pos).into() - })? - }; - let end = if range.end >= 0 { - range.end as usize - } else { - super::calc_index(chars_count, range.end, true, || { - ERR::ErrorStringBounds(chars_count, range.end, idx_pos).into() - }) - .unwrap_or(0) - }; - - let take = if end > start { end - start } else { 0 }; - - let value = s.chars().skip(start).take(take).collect::(); - return Ok(Target::StringSlice { - source: target, - value: value.into(), - start: start, - end: end, - exclusive: true, - }); - } else if typ == "core::ops::range::RangeInclusive" { - // val_str[range] - let idx = idx.read_lock::>().unwrap(); - let range = &*idx; - let chars_count = s.chars().count(); - let start = if *range.start() >= 0 { - *range.start() as usize - } else { - super::calc_index(chars_count, *range.start(), true, || { - ERR::ErrorStringBounds(chars_count, *range.start(), idx_pos) - .into() - })? - }; - let end = if *range.end() >= 0 { - *range.end() as usize - } else { - super::calc_index(chars_count, *range.end(), true, || { - ERR::ErrorStringBounds(chars_count, *range.end(), idx_pos) - .into() - }) - .unwrap_or(0) - }; + Err(typ) if typ == std::any::type_name::() => { + // val_str[range] + let idx = idx.read_lock::().unwrap(); + let range = &*idx; + let chars_count = s.chars().count(); + let start = if range.start >= 0 { + range.start as usize + } else { + super::calc_index(chars_count, range.start, true, || { + ERR::ErrorStringBounds(chars_count, range.start, idx_pos).into() + })? + }; + let end = if range.end >= 0 { + range.end as usize + } else { + super::calc_index(chars_count, range.end, true, || { + ERR::ErrorStringBounds(chars_count, range.end, idx_pos).into() + }) + .unwrap_or(0) + }; - let take = if end > start { end - start + 1 } else { 0 }; + let take = if end > start { end - start } else { 0 }; + let value = s.chars().skip(start).take(take).collect::(); - let value = s.chars().skip(start).take(take).collect::(); - return Ok(Target::StringSlice { - source: target, - value: value.into(), - start, - end, - exclusive: false, - }); + Ok(Target::StringSlice { + source: target, + value: value.into(), + start: start, + end: end, + exclusive: true, + }) + } + Err(typ) if typ == std::any::type_name::() => { + // val_str[range] + let idx = idx.read_lock::().unwrap(); + let range = &*idx; + let chars_count = s.chars().count(); + let start = if *range.start() >= 0 { + *range.start() as usize } else { - return Err(self.make_type_mismatch_err::(typ, idx_pos)); - } + super::calc_index(chars_count, *range.start(), true, || { + ERR::ErrorStringBounds(chars_count, *range.start(), idx_pos).into() + })? + }; + let end = if *range.end() >= 0 { + *range.end() as usize + } else { + super::calc_index(chars_count, *range.end(), true, || { + ERR::ErrorStringBounds(chars_count, *range.end(), idx_pos).into() + }) + .unwrap_or(0) + }; + + let take = if end > start { end - start + 1 } else { 0 }; + let value = s.chars().skip(start).take(take).collect::(); + + Ok(Target::StringSlice { + source: target, + value: value.into(), + start, + end, + exclusive: false, + }) } + Err(typ) => Err(self.make_type_mismatch_err::(typ, idx_pos)), } } @@ -476,8 +471,8 @@ impl Engine { } #[cfg(not(feature = "no_index"))] (Expr::FnCall(fnc, _), ChainType::Indexing) - if fnc.op_token == Some(Token::InclusiveRange) - || fnc.op_token == Some(Token::ExclusiveRange) => + if fnc.op_token == Some(crate::tokenizer::Token::InclusiveRange) + || fnc.op_token == Some(crate::tokenizer::Token::ExclusiveRange) => { idx_values.push(rhs.get_literal_value().unwrap()) } diff --git a/src/eval/target.rs b/src/eval/target.rs index cdf54f7d9..298bc733e 100644 --- a/src/eval/target.rs +++ b/src/eval/target.rs @@ -189,14 +189,13 @@ impl<'a> Target<'a> { Self::RefMut(..) => true, #[cfg(not(feature = "no_closure"))] Self::SharedValue { .. } => true, - #[cfg(not(feature = "no_index"))] - Self::StringSlice { .. } => true, Self::TempValue(..) => false, #[cfg(not(feature = "no_index"))] Self::Bit { .. } | Self::BitField { .. } | Self::BlobByte { .. } - | Self::StringChar { .. } => false, + | Self::StringChar { .. } + | Self::StringSlice { .. } => false, } } /// Is the [`Target`] a temp value? @@ -207,14 +206,13 @@ impl<'a> Target<'a> { Self::RefMut(..) => false, #[cfg(not(feature = "no_closure"))] Self::SharedValue { .. } => false, - #[cfg(not(feature = "no_index"))] - Self::StringSlice { .. } => true, Self::TempValue(..) => true, #[cfg(not(feature = "no_index"))] Self::Bit { .. } | Self::BitField { .. } | Self::BlobByte { .. } - | Self::StringChar { .. } => false, + | Self::StringChar { .. } + | Self::StringSlice { .. } => false, } } /// Is the [`Target`] a shared value? @@ -225,13 +223,13 @@ impl<'a> Target<'a> { return match self { Self::RefMut(r) => r.is_shared(), Self::SharedValue { .. } => true, - Self::StringSlice { .. } => true, Self::TempValue(value) => value.is_shared(), #[cfg(not(feature = "no_index"))] Self::Bit { .. } | Self::BitField { .. } | Self::BlobByte { .. } - | Self::StringChar { .. } => false, + | Self::StringChar { .. } + | Self::StringSlice { .. } => false, }; #[cfg(feature = "no_closure")] return false; @@ -245,18 +243,11 @@ impl<'a> Target<'a> { Self::SharedValue { shared_value, .. } => shared_value, // Original shared value is simply taken Self::TempValue(value) => value, // Owned value is simply taken #[cfg(not(feature = "no_index"))] - Self::Bit { value, .. } => value, // boolean is taken - #[cfg(not(feature = "no_index"))] - Self::BitField { value, .. } => value, // INT is taken - #[cfg(not(feature = "no_index"))] - Self::BlobByte { value, .. } => value, // byte is taken - #[cfg(not(feature = "no_index"))] - Self::StringChar { value, .. } => value, // char is taken - #[cfg(not(feature = "no_index"))] - Self::StringSlice { value, .. } => { - // Slice of a string is cloned - Dynamic::from(value.to_string()) - } + Self::Bit { value, .. } + | Self::BitField { value, .. } + | Self::BlobByte { value, .. } + | Self::StringChar { value, .. } + | Self::StringSlice { value, .. } => value, // Intermediate value is simply taken } } /// Take a `&mut Dynamic` reference from the `Target`. @@ -288,15 +279,11 @@ impl<'a> Target<'a> { Self::SharedValue { guard, .. } => guard, Self::TempValue(value) => value, #[cfg(not(feature = "no_index"))] - Self::Bit { source, .. } => source, - #[cfg(not(feature = "no_index"))] - Self::BitField { source, .. } => source, - #[cfg(not(feature = "no_index"))] - Self::BlobByte { source, .. } => source, - #[cfg(not(feature = "no_index"))] - Self::StringChar { source, .. } => source, - #[cfg(not(feature = "no_index"))] - Self::StringSlice { source, .. } => source, + Self::Bit { source, .. } + | Self::BitField { source, .. } + | Self::BlobByte { source, .. } + | Self::StringChar { source, .. } + | Self::StringSlice { source, .. } => source, } } /// Propagate a changed value back to the original source. diff --git a/src/func/builtin.rs b/src/func/builtin.rs index d56e31777..80cebac33 100644 --- a/src/func/builtin.rs +++ b/src/func/builtin.rs @@ -448,6 +448,29 @@ pub fn get_builtin_binary_op_fn(op: &Token, x: &Dynamic, y: &Dynamic) -> Option< impl_decimal!(INT, as_int, Decimal, as_decimal); } + // Ranges + if *op == ExclusiveRange && type1 == TypeId::of::() && type2 == TypeId::of::<()>() { + return Some(( + |_ctx, args| Ok((args[0].as_int().unwrap()..INT::MAX).into()), + false, + )); + } else if *op == ExclusiveRange && type1 == TypeId::of::<()>() && type2 == TypeId::of::() { + return Some(( + |_ctx, args| Ok((0..args[1].as_int().unwrap()).into()), + false, + )); + } else if *op == ExclusiveRange && type1 == TypeId::of::() && type2 == TypeId::of::<()>() { + return Some(( + |_ctx, args| Ok((args[0].as_int().unwrap()..=INT::MAX).into()), + false, + )); + } else if *op == ExclusiveRange && type1 == TypeId::of::<()>() && type2 == TypeId::of::() { + return Some(( + |_ctx, args| Ok((0..=args[1].as_int().unwrap()).into()), + false, + )); + } + // char op string if (type1, type2) == (TypeId::of::(), TypeId::of::()) { fn get_s1s2(args: &FnCallArgs) -> ([Option; 2], [Option; 2]) { diff --git a/src/module/mod.rs b/src/module/mod.rs index 0a9b3e10f..1478e76d5 100644 --- a/src/module/mod.rs +++ b/src/module/mod.rs @@ -2029,7 +2029,7 @@ impl Module { }) .map(|(&k, f)| (k, f.clone())), ), - None => self.functions = other.functions.clone(), + None => self.functions.clone_from(&other.functions), } } self.dynamic_functions_filter += &other.dynamic_functions_filter;