From: machenbach@chromium.org Date: Wed, 26 Jun 2013 14:23:30 +0000 (+0000) Subject: Migrate blink tests that are not relevant to blink into a new V8 test suite called... X-Git-Tag: upstream/4.7.83~13671 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f3f14fc7ed5162ff3a5e426b620e89bb87f63d2e;p=platform%2Fupstream%2Fv8.git Migrate blink tests that are not relevant to blink into a new V8 test suite called 'blink'. This initial CL contains the new test suite code and two tests for demonstration. Other tests will follow in a separate CL. R=jkummerow@chromium.org Review URL: https://codereview.chromium.org/17260002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15339 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/.gitignore b/.gitignore index a04811d..656c4b3 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ shell_g /test/test262/data /test/test262/test262-* /test/test262/test262.status2 +/test/webkit/webkit.status2 /third_party /tools/jsfunfuzz /tools/jsfunfuzz.zip diff --git a/test/message/testcfg.py b/test/message/testcfg.py index 11c0d19..411f71c 100644 --- a/test/message/testcfg.py +++ b/test/message/testcfg.py @@ -95,7 +95,8 @@ class MessageTestSuite(testsuite.TestSuite): env = { "basename": os.path.basename(testpath + ".js") } if len(expected_lines) != len(actual_lines): return True - for (expected, actual) in itertools.izip(expected_lines, actual_lines): + for (expected, actual) in itertools.izip_longest( + expected_lines, actual_lines, fillvalue=''): pattern = re.escape(expected.rstrip() % env) pattern = pattern.replace("\\*", ".*") pattern = "^%s$" % pattern diff --git a/test/webkit/concat-while-having-a-bad-time-expected.txt b/test/webkit/concat-while-having-a-bad-time-expected.txt new file mode 100644 index 0000000..f949db9 --- /dev/null +++ b/test/webkit/concat-while-having-a-bad-time-expected.txt @@ -0,0 +1,33 @@ +# Copyright 2013 the V8 project authors. All rights reserved. +# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Tests the behavior of Array.prototype.concat while the array is having a bad time due to one of the elements we are concatenating. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS [42].concat() is [42] +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/test/webkit/concat-while-having-a-bad-time.js b/test/webkit/concat-while-having-a-bad-time.js new file mode 100644 index 0000000..dfda1e0 --- /dev/null +++ b/test/webkit/concat-while-having-a-bad-time.js @@ -0,0 +1,31 @@ +// Copyright 2013 the V8 project authors. All rights reserved. +// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +description( +"Tests the behavior of Array.prototype.concat while the array is having a bad time due to one of the elements we are concatenating." +); + +Object.defineProperty(Array.prototype, 0, { writable: false }); +shouldBe("[42].concat()", "[42]"); + + diff --git a/test/webkit/dfg-inlining-reg-alloc-expected.txt b/test/webkit/dfg-inlining-reg-alloc-expected.txt new file mode 100644 index 0000000..8e7c55c --- /dev/null +++ b/test/webkit/dfg-inlining-reg-alloc-expected.txt @@ -0,0 +1,3032 @@ +# Copyright 2013 the V8 project authors. All rights reserved. +# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +This tests that register allocation still works under register pressure induced by inlining, out-of-line function calls (i.e. unconditional register flushing), and slow paths for object creation (i.e. conditional register flushing). + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS o.a is bar(2 * i + 1, i) +PASS o.b is bar(2 * i, i) +PASS o.c is i +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/test/webkit/dfg-inlining-reg-alloc.js b/test/webkit/dfg-inlining-reg-alloc.js new file mode 100644 index 0000000..5429641 --- /dev/null +++ b/test/webkit/dfg-inlining-reg-alloc.js @@ -0,0 +1,166 @@ +// Copyright 2013 the V8 project authors. All rights reserved. +// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +description( +"This tests that register allocation still works under register pressure induced by inlining, out-of-line function calls (i.e. unconditional register flushing), and slow paths for object creation (i.e. conditional register flushing)." +); + +// Inlineable constructor. +function foo(a, b, c) { + this.a = a; + this.b = b; + this.c = c; +} + +// Non-inlineable function. This relies on a size limit for inlining, but still +// produces integers. It also relies on the VM not reasoning about Math.log deeply +// enough to find some way of optimizing this code to be small enough to inline. +function bar(a, b) { + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + a += b; + a -= b; + b ^= a; + a += Math.log(b); + b += a; + b -= a; + a ^= b; + return (a - b) | 0; +} + +// Function into which we will inline foo but not bar. +function baz(a, b) { + return new foo(bar(2 * a + 1, b - 1), bar(2 * a, b - 1), a); +} + +// Do the test. It's crucial that o.a, o.b, and o.c are checked on each +// loop iteration. +for (var i = 0; i < 1000; ++i) { + var o = baz(i, i + 1); + shouldBe("o.a", "bar(2 * i + 1, i)"); + shouldBe("o.b", "bar(2 * i, i)"); + shouldBe("o.c", "i"); +} diff --git a/test/webkit/resources/standalone-post.js b/test/webkit/resources/standalone-post.js new file mode 100644 index 0000000..d157e78 --- /dev/null +++ b/test/webkit/resources/standalone-post.js @@ -0,0 +1,26 @@ +// Copyright 2013 the V8 project authors. All rights reserved. +// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +wasPostTestScriptParsed = true; + +finishJSTest(); diff --git a/test/webkit/resources/standalone-pre.js b/test/webkit/resources/standalone-pre.js new file mode 100644 index 0000000..f1cbe9f --- /dev/null +++ b/test/webkit/resources/standalone-pre.js @@ -0,0 +1,191 @@ +// Copyright 2013 the V8 project authors. All rights reserved. +// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +var wasPostTestScriptParsed = false; +var errorMessage; + +function description(msg) +{ + print(msg); + print("\nOn success, you will see a series of \"PASS\" messages, followed by \"TEST COMPLETE\".\n"); + print(); +} + +function debug(msg) +{ + print(msg); +} + +function escapeString(text) +{ + return text.replace(/\0/g, ""); +} + +function testPassed(msg) +{ + print("PASS", escapeString(msg)); +} + +function testFailed(msg) +{ + errorMessage = msg; + print("FAIL", escapeString(msg)); +} + +function areArraysEqual(_a, _b) +{ + if (Object.prototype.toString.call(_a) != Object.prototype.toString.call([])) + return false; + if (_a.length !== _b.length) + return false; + for (var i = 0; i < _a.length; i++) + if (_a[i] !== _b[i]) + return false; + return true; +} + +function isMinusZero(n) +{ + // the only way to tell 0 from -0 in JS is the fact that 1/-0 is + // -Infinity instead of Infinity + return n === 0 && 1/n < 0; +} + +function isResultCorrect(_actual, _expected) +{ + if (_expected === 0) + return _actual === _expected && (1/_actual) === (1/_expected); + if (_actual === _expected) + return true; + if (typeof(_expected) == "number" && isNaN(_expected)) + return typeof(_actual) == "number" && isNaN(_actual); + if (Object.prototype.toString.call(_expected) == Object.prototype.toString.call([])) + return areArraysEqual(_actual, _expected); + return false; +} + +function stringify(v) +{ + if (v === 0 && 1/v < 0) + return "-0"; + else return "" + v; +} + +function shouldBe(_a, _b) +{ + if (typeof _a != "string" || typeof _b != "string") + debug("WARN: shouldBe() expects string arguments"); + var exception; + var _av; + try { + _av = eval(_a); + } catch (e) { + exception = e; + } + var _bv = eval(_b); + + if (exception) + testFailed(_a + " should be " + _bv + ". Threw exception " + exception); + else if (isResultCorrect(_av, _bv)) + testPassed(_a + " is " + _b); + else if (typeof(_av) == typeof(_bv)) + testFailed(_a + " should be " + _bv + ". Was " + stringify(_av) + "."); + else + testFailed(_a + " should be " + _bv + " (of type " + typeof _bv + "). Was " + _av + " (of type " + typeof _av + ")."); +} + +function shouldBeTrue(_a) { shouldBe(_a, "true"); } +function shouldBeFalse(_a) { shouldBe(_a, "false"); } +function shouldBeNaN(_a) { shouldBe(_a, "NaN"); } +function shouldBeNull(_a) { shouldBe(_a, "null"); } + +function shouldBeEqualToString(a, b) +{ + if (typeof a !== "string" || typeof b !== "string") + debug("WARN: shouldBeEqualToString() expects string arguments"); + var unevaledString = JSON.stringify(b); + shouldBe(a, unevaledString); +} + +function shouldBeUndefined(_a) +{ + var exception; + var _av; + try { + _av = eval(_a); + } catch (e) { + exception = e; + } + + if (exception) + testFailed(_a + " should be undefined. Threw exception " + exception); + else if (typeof _av == "undefined") + testPassed(_a + " is undefined."); + else + testFailed(_a + " should be undefined. Was " + _av); +} + + +function shouldThrow(_a, _e) +{ + var exception; + var _av; + try { + _av = eval(_a); + } catch (e) { + exception = e; + } + + var _ev; + if (_e) + _ev = eval(_e); + + if (exception) { + if (typeof _e == "undefined" || exception == _ev) + testPassed(_a + " threw exception " + exception + "."); + else + testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Threw exception " + exception + "."); + } else if (typeof _av == "undefined") + testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was undefined."); + else + testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was " + _av + "."); +} + +function isSuccessfullyParsed() +{ + // FIXME: Remove this and only report unexpected syntax errors. + if (!errorMessage) + successfullyParsed = true; + shouldBeTrue("successfullyParsed"); + debug("\nTEST COMPLETE\n"); +} + +// It's possible for an async test to call finishJSTest() before js-test-post.js +// has been parsed. +function finishJSTest() +{ + wasFinishJSTestCalled = true; + if (!wasPostTestScriptParsed) + return; + isSuccessfullyParsed(); +} diff --git a/test/webkit/testcfg.py b/test/webkit/testcfg.py new file mode 100644 index 0000000..2c4a29c --- /dev/null +++ b/test/webkit/testcfg.py @@ -0,0 +1,135 @@ +# Copyright 2013 the V8 project authors. All rights reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import itertools +import os +import re + +from testrunner.local import testsuite +from testrunner.objects import testcase + +FLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)") +FILES_PATTERN = re.compile(r"//\s+Files:(.*)") +SELF_SCRIPT_PATTERN = re.compile(r"//\s+Env: TEST_FILE_NAME") + + +# TODO (machenbach): Share commonalities with mjstest. +class WebkitTestSuite(testsuite.TestSuite): + + def __init__(self, name, root): + super(WebkitTestSuite, self).__init__(name, root) + + def ListTests(self, context): + tests = [] + for dirname, dirs, files in os.walk(self.root): + for dotted in [x for x in dirs if x.startswith('.')]: + dirs.remove(dotted) + if 'resources' in dirs: + dirs.remove('resources') + + dirs.sort() + files.sort() + for filename in files: + if filename.endswith(".js"): + testname = os.path.join(dirname[len(self.root) + 1:], filename[:-3]) + test = testcase.TestCase(self, testname) + tests.append(test) + return tests + + def GetFlagsForTestCase(self, testcase, context): + source = self.GetSourceForTest(testcase) + flags = [] + context.mode_flags + flags_match = re.findall(FLAGS_PATTERN, source) + for match in flags_match: + flags += match.strip().split() + + files_list = [] # List of file names to append to command arguments. + files_match = FILES_PATTERN.search(source); + # Accept several lines of 'Files:'. + while True: + if files_match: + files_list += files_match.group(1).strip().split() + files_match = FILES_PATTERN.search(source, files_match.end()) + else: + break + files = [ os.path.normpath(os.path.join(self.root, '..', '..', f)) + for f in files_list ] + testfilename = os.path.join(self.root, testcase.path + self.suffix()) + if SELF_SCRIPT_PATTERN.search(source): + env = ["-e", "TEST_FILE_NAME=\"%s\"" % testfilename.replace("\\", "\\\\")] + files = env + files + files.append(os.path.join(self.root, "resources/standalone-pre.js")) + files.append(testfilename) + files.append(os.path.join(self.root, "resources/standalone-post.js")) + + flags += files + if context.isolates: + flags.append("--isolate") + flags += files + + return testcase.flags + flags + + def GetSourceForTest(self, testcase): + filename = os.path.join(self.root, testcase.path + self.suffix()) + with open(filename) as f: + return f.read() + + # TODO(machenbach): Share with test/message/testcfg.py + def _IgnoreLine(self, string): + """Ignore empty lines, valgrind output and Android output.""" + if not string: return True + return (string.startswith("==") or string.startswith("**") or + string.startswith("ANDROID") or + # These five patterns appear in normal Native Client output. + string.startswith("DEBUG MODE ENABLED") or + string.startswith("tools/nacl-run.py") or + string.find("BYPASSING ALL ACL CHECKS") > 0 or + string.find("Native Client module will be loaded") > 0 or + string.find("NaClHostDescOpen:") > 0) + + def IsFailureOutput(self, output, testpath): + if super(WebkitTestSuite, self).IsFailureOutput(output, testpath): + return True + file_name = os.path.join(self.root, testpath) + "-expected.txt" + with file(file_name, "r") as expected: + def ExpIterator(): + for line in expected.readlines(): + if line.startswith("#") or not line.strip(): continue + yield line.strip() + def ActIterator(): + for line in output.stdout.splitlines(): + if self._IgnoreLine(line.strip()): continue + yield line.strip() + for (expected, actual) in itertools.izip_longest( + ExpIterator(), ActIterator(), fillvalue=''): + if expected != actual: + return True + return False + + +def GetSuite(name, root): + return WebkitTestSuite(name, root) diff --git a/test/webkit/webkit.status b/test/webkit/webkit.status new file mode 100644 index 0000000..f425364 --- /dev/null +++ b/test/webkit/webkit.status @@ -0,0 +1,26 @@ +# Copyright 2013 the V8 project authors. All rights reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/tools/testrunner/local/old_statusfile.py b/tools/testrunner/local/old_statusfile.py index a16941b..a9a6203 100644 --- a/tools/testrunner/local/old_statusfile.py +++ b/tools/testrunner/local/old_statusfile.py @@ -386,7 +386,7 @@ class ConvertNotation(object): self.init = True def CloseGlobal(self): - if not self.init: return + if not self.init: self.OpenGlobal() print >> self.out, "]" self.init = False