pax_global_header00006660000000000000000000000064136327722010014515gustar00rootroot0000000000000052 comment=d6a087cb98e83258104190cf2a2fa7de6faa9be5 q3c-2.0.0/000077500000000000000000000000001363277220100122025ustar00rootroot00000000000000q3c-2.0.0/.gitignore000066400000000000000000000000541363277220100141710ustar00rootroot00000000000000*~ *.o *.so dump.c gen_data prepare results/q3c-2.0.0/.travis.yml000066400000000000000000000044771363277220100143270ustar00rootroot00000000000000sudo: required dist: xenial language: c before_install: - psql --version - sudo /etc/init.d/postgresql stop - sudo apt-get -y --purge remove postgresql libpq-dev libpq5 postgresql-client-common postgresql-common - sudo rm -rf /var/lib/postgresql - wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - - sudo sh -c "echo deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main $PGVERSION >> /etc/apt/sources.list.d/postgresql.list" - sudo sh -c "echo deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg-testing main $PGVERSION >> /etc/apt/sources.list.d/postgresql.list" - sudo apt-get update -qq - sudo apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::="--force-confnew" install postgresql-$PGVERSION postgresql-server-dev-$PGVERSION - sudo chmod 777 /etc/postgresql/$PGVERSION/main/pg_hba.conf - sudo echo "local all postgres trust" > /etc/postgresql/$PGVERSION/main/pg_hba.conf - sudo echo "local all all trust" >> /etc/postgresql/$PGVERSION/main/pg_hba.conf - sudo echo "host all all 127.0.0.1/32 trust" >> /etc/postgresql/$PGVERSION/main/pg_hba.conf - sudo echo "host all all ::1/128 trust" >> /etc/postgresql/$PGVERSION/main/pg_hba.conf - sudo /etc/init.d/postgresql restart before_script: - createuser -U postgres -s travis install: make && sudo make install script: if [ ${COVERITY_SCAN_BRANCH} != 1 ]; then make test ; fi compiler: - clang - gcc env: global: # The next declaration is the encrypted COVERITY_SCAN_TOKEN, created # via the "travis encrypt" command using the project repo's public key - secure: "E3KdO0b04kO/0j6Kf87d+mHerK/9ZOBevibds1/wlm8T9F7PAKclTGgh6rxJZUWwTAbgbGxBv7GddIHbWTkrOjvIj7WP2/5sSg34P8q8aEeWvx/E99q8auVQge0/2MkNLcTIxfncqRnzbVbJjGpIvN0jkZ/A3t7DKlQquhvuMxw=" matrix: - PGVERSION=12 - PGVERSION=11 - PGVERSION=10 - PGVERSION=9.6 - PGVERSION=9.5 - PGVERSION=9.4 - PGVERSION=9.3 - PGVERSION=9.2 addons: coverity_scan: project: name: "segasai/q3c" description: "Q3C sky indexing" notification_email: koposov@ast.cam.ac.uk build_command_prepend: "make clean" build_command: "make" branch_pattern: coverity_branch q3c-2.0.0/COPYING000066400000000000000000000431101363277220100132340ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. q3c-2.0.0/Makefile000066400000000000000000000120451363277220100136440ustar00rootroot00000000000000EXTENSION = q3c EXTVERSION := $(shell grep default_version $(EXTENSION).control | \ sed -e "s/default_version[[:space:]]*=[[:space:]]*'\([^']*\)'/\1/") DOCS = README.md OBJS = dump.o q3c.o q3c_poly.o q3cube.o MODULE_big = q3c DATA = $(wildcard scripts/*sql) PG_CONFIG = pg_config SHLIB_LINK += $(filter -lm, $(LIBS)) EXTRA_CLEAN = dump.c prepare prepare.o gen_data.o \ results/join.out results/cone.out results/ellipse.out \ results/version.out results/poly.out results/area.out \ gen_data OPT = -O3 OPT_LOW = -O2 #DEBUG = -O0 -g3 -ggdb -DQ3C_DEBUG PG_CPPFLAGS = $(DEBUG) $(OPT) -D_GNU_SOURCE -D__STDC_FORMAT_MACROS -DQ3C_VERSION='"'$(EXTVERSION)'"' CPPFLAGS = $(CPPFLAGS) -D$(Q3CVERSION) PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) PGVERNEW := $(shell if [ $(MAJORVERSION) -ge 12 ] ; then echo N ; else echo O ; fi ) ifeq ($(PGVERNEW), N) PG_LIBS += -L$(shell $(PG_CONFIG) --pkglibdir) LIBS := $(filter-out -lpam -lxml2 -lxslt -lselinux -ledit, $(LIBS)) MYBINLIBS := $(LIBS) $(PG_LIBS) -lm else MYBINLIBS := $(PG_LIBS) -lm endif dump.c: prepare ./prepare prepare: prepare.o q3cube.o q3c_poly.o $(CC) prepare.o q3cube.o q3c_poly.o $(PG_LDFLAGS) $(LDFLAGS) $(MYBINLIBS) -o $@ gen_data: gen_data.c $(CC) $< $(CPPFLAGS) $(PG_LFGLAGS) $(LDFLAGS) $(MYBINLIBS) -o $@ test: gen_data all createdb q3c_test psql q3c_test -c "CREATE TABLE test (ra double precision, dec double precision)" psql q3c_test -c "CREATE TABLE test1 (ra double precision, dec double precision)" psql q3c_test -c "CREATE TABLE test_pm0 (ra double precision, dec double precision, pmra real, pmdec real, epoch real)" psql q3c_test -c "CREATE TABLE test_pm1 (ra double precision, dec double precision, pmra real, pmdec real, epoch real)" psql q3c_test -c "CREATE TABLE test_small (ra double precision, dec double precision)" ./gen_data 1 1000000 | psql q3c_test -c "COPY test FROM STDIN WITH DELIMITER ' '" ./gen_data 2 1000000 | psql q3c_test -c "COPY test1 FROM STDIN WITH DELIMITER ' '" ./gen_data 3 100000 | psql q3c_test -c "COPY test_small FROM STDIN WITH DELIMITER ' '" ./gen_data 4 1000000 --withpm --pmscale=0 --randomepoch | psql q3c_test -c "COPY test_pm0 FROM STDIN WITH DELIMITER ' '" ./gen_data 5 1000000 --withpm --pmscale=1000 --epoch=2015 | psql q3c_test -c "COPY test_pm1 FROM STDIN WITH DELIMITER ' '" psql q3c_test -c 'CREATE EXTENSION q3c' psql q3c_test -c 'CREATE INDEX q3c_idx1 ON test1 (q3c_ang2ipix(ra,dec))' psql q3c_test -c 'CREATE INdex ON test_pm0 (q3c_ang2ipix(ra,dec))' psql q3c_test -c 'CREATE INDEX on test_pm1 (q3c_ang2ipix(ra,dec))' psql q3c_test -c 'CREATE INDEX q3c_idx ON test (q3c_ang2ipix(ra,dec))' psql q3c_test -c 'CREATE INDEX q3c_idx_small ON test_small (q3c_ang2ipix(ra,dec))' psql q3c_test -c 'ANALYZE test' psql q3c_test -c 'ANALYZE test1' psql q3c_test -c 'ANALYZE test_pm0' psql q3c_test -c 'ANALYZE test_pm1' psql q3c_test -c 'ANALYZE test_small' mkdir -p results cat sql/ang2ipix.sql | psql q3c_test > results/ang2ipix.out diff results/ang2ipix.out expected/ang2ipix.expected cat sql/cone.sql | psql q3c_test > results/cone.out diff results/cone.out expected/cone.expected cat sql/cone_join_rev.sql | psql q3c_test > results/cone.out diff results/cone.out expected/cone.expected cat sql/ellipse.sql | psql q3c_test > results/ellipse.out diff results/ellipse.out expected/ellipse.expected cat sql/join.sql | psql q3c_test > results/join.out diff results/join.out expected/join.expected cat sql/join_pm1.sql | psql q3c_test > results/join_pm1.out diff results/join_pm1.out expected/join_pm1.expected cat sql/join_pm2.sql | psql q3c_test > results/join_pm2.out diff results/join_pm2.out expected/join_pm2.expected cat sql/poly.sql | psql q3c_test > results/poly.out diff results/poly.out expected/poly.expected cat sql/poly1.sql | psql q3c_test > results/poly1.out diff results/poly1.out expected/poly.expected cat sql/version.sql | psql q3c_test > results/version.out diff results/version.out expected/version.expected cat sql/area.sql | psql q3c_test > results/area.out diff results/area.out expected/area.expected dropdb q3c_test createdb q3c_test psql q3c_test -c 'CREATE EXTENSION q3c VERSION "1.6.0"' psql q3c_test -c 'ALTER EXTENSION q3c UPDATE TO "1.7.0"' psql q3c_test -c 'ALTER EXTENSION q3c UPDATE TO "1.8.0"' psql q3c_test -c 'ALTER EXTENSION q3c UPDATE TO "2.0.0"' dropdb q3c_test createdb q3c_test psql q3c_test -c "CREATE TABLE test (ra double precision, dec double precision)" psql q3c_test -c "CREATE TABLE test1 (ra double precision, dec double precision)" ./gen_data 1 1000000 | psql q3c_test -c "COPY test FROM STDIN WITH DELIMITER ' '" ./gen_data 2 1000000 | psql q3c_test -c "COPY test1 FROM STDIN WITH DELIMITER ' '" psql q3c_test -c 'CREATE schema tests' psql q3c_test -c 'CREATE EXTENSION q3c schema tests' psql q3c_test -c 'set search_path to public,tests; CREATE INDEX q3c_idx1 ON test1 (q3c_ang2ipix(ra,dec))' psql q3c_test -c 'ANALYZE test' psql q3c_test -c 'ANALYZE test1' cat sql/relocation.sql | psql q3c_test > results/relocation.out diff results/relocation.out expected/relocation.expected dropdb q3c_test q3c-2.0.0/README.md000066400000000000000000000347761363277220100135020ustar00rootroot00000000000000[![Build Status](https://travis-ci.org/segasai/q3c.svg?branch=master)](https://travis-ci.org/segasai/q3c) # Q3C Author: Sergey Koposov, Carnegie Mellon University Copyright (c) 2004-2020 Sergey Koposov Email: skoposov _AT_ cmu _DOT_ edu Fresh versions of the software could be obtained here: https://github.com/segasai/q3c To read more about the Q3C indexing, you can check out the paper published in ADASS conference proceedings http://adsabs.harvard.edu/abs/2006ASPC..351..735K The citation is "Koposov, S., & Bartunov, O. 2006, Astronomical Society of the Pacific Conference Series, 351, 735". Q3C is also registered in the ASCL library https://ascl.net/1905.008 . If you use Q3C you are kindly asked to cite the 2006 paper. I would be also happy to hear about any usage of Q3C. ## Prerequisites In order to use Q3C you need to have a PostgreSQL database installed (version 9.1 or later). If you have PostgreSQL version lower than 9.1 your will need to use an older version of Q3C (1.4.x). To successfully compile Q3C you must have pg_config in your PATH (that means that you may need to install the -devel versions of PostgreSQL packages) ## Installation - make - make install - Execute "create extension q3c" in the PostgreSQL client(psql) for the database where you plan to use q3c After the installation you will have several new functions in PostgreSQL. All names of these functions start with the "q3c_" prefix. ## Table preparation for Q3C To begin use Q3C for searches and cross-matches you should create the indexes on your tables. In this demonstration we'll assume that you have the table called "mytable" with "ra" and "dec" columns (right ascension and declination in degrees). First, you will need to create the spatial index, using the following command: `my_db# CREATE INDEX ON mytable (q3c_ang2ipix(ra, dec)); ` The next procedure is optional but strongly recommended: cluster the table using newly created index. The clustering procedure is the procedure of ordering the data on the disk according to the Q3C spatial index values, which will ensure faster queries if your table is very large. If the data have been ingested in the database in ordered fashion (i.e. along some spherical zones), the clustering step can be omitted (although still recommended). The clustering step may take a while (hours) if your dataset is large. `my_db# CLUSTER mytable_q3c_ang2ipix_idx ON mytable;` Alternatively, instead of CLUSTER, you can also just reorder your table yourself before indexing (can be faster) `my_db# create table mytable1 as select * from mytable order by q3c_ang2ipix(ra,dec);` The last step is analyzing your table: `my_db# ANALYZE mytable;` Now you should be able to use q3c queries. ## Q3C functions *IMPORTANT* Throughout q3c it is assumed that all the angles (ra, dec and distances) are in units of angular degrees, the proper motions are in mas/year, and that the units for the epochs are years, i.e. 2000.5, 2010.5. The functions installed by Q3C are: - q3c_ang2ipix(ra, dec) -- returns the ipix value at ra and dec - q3c_dist(ra1, dec1, ra2, dec2) -- returns the distance in degrees between two points (ra1,dec1) and (ra2,dec2) - q3c_dist_pm(ra1, dec1, pmra1, pmdec1, cosdec_flag, epoch1, ra2, dec2, epoch2) -- returns the distance in degrees between two points (ra1,dec1) and (ra2,dec2) at the epoch epoch2 while taking the proper motion into account. *IMPORTANT* The cosdec flag (0 or 1) is telling whether the proper motion is computed with the cos(dec) term or without it. The previous versions (q3c 1.8) did not have that parameter and assumed pmra without cos(dec)) - q3c_join(ra1, dec1, ra2, dec2, radius) -- returns true if (ra1, dec1) is within radius spherical distance of (ra2, dec2). It should be used when the index on q3c_ang2ipix(ra2, dec2) is created. See below for examples. - q3c_join_pm(ra1, dec1, pmra1, pmdec1, cosdec_flag, epoch1, ra2, dec2, epoch2, max_delta_epoch, radius) -- returns true if (ra1, dec1) is within radius spherical distance of (ra2, dec2). It takes into account the proper motion of the source pmra1, pmdec1 (in mas/yr) and epochs of the source coordinates epoch1, and epoch2 (in years). max_delta_epoch is the maximum epoch difference possible between two tables (i.e. if the oldest epoch in catalog1 is 1970 and the newest epoch in catalog2 is 2015, then the max_delta_epoch should be 45). You should use this function if the index on q3c_ang2ipix(ra2,dec2) was created. *IMPORTANT* The cosdec flag (0 or 1) is telling whether the proper motion is computed with the cos(dec) term or without it. The previous versions (q3c 1.8) did not have that parameter and assumed pmra without cos(dec)) - q3c_ellipse_join(ra1, dec1, ra2, dec2, major, ratio, pa) -- like q3c_join, except (ra1, dec1) have to be within an ellipse with major axis major, the axis ratio ratio and the position angle pa (from north through east) - q3c_radial_query(ra, dec, center_ra, center_dec, radius) -- returns true if ra, dec is within radius degrees of center_ra, center_dec. This is the main function for cone searches. This function should be used when the index on q3c_ang2ipix(ra,dec) is created. - q3c_ellipse_query(ra, dec, center_ra, center_dec, maj_ax, axis_ratio, PA ) -- returns true if ra, dec is within the ellipse from center_ra, center_dec. The ellipse is specified by major axis, axis ratio and positional angle. This function should be used if when the index on q3c_ang2ipix(ra,dec) is created. - q3c_poly_query(ra, dec, poly) -- returns true if ra, dec is within the spherical polygon specified as an array of right ascensions and declinations Alternatively poly can be an PostgreSQL polygon type. This function uses the index for faster queries, assuming the index on q3c_ang2ipix(ra,dec) was created. - q3c_ipix2ang(ipix) -- returns a two-element array of (ra,dec) corresponding to a given ipix. - q3c_pixarea(ipix, bits) -- returns the area corresponding to a given ipix at the pixelisation level given by bits (1 is smallest, 30 is the cube face) in steradians. - q3c_ipixcenter(ra, dec, bits) -- returns the ipix value of the pixel center at certain pixel depth covering the specified (ra,dec) - q3c_in_poly(ra, dec, poly) -- returns true/false if point is inside a polygon. This function will not use the index. - q3c_version() -- returns the version of Q3C that is installed ## Query examples - The cone search (the query of all objects within the circular region of the sky): For example to query all objects within radius of 0.1 deg from (ra,dec) = (11,12)deg in the table mytable you would do: ``` my_db# SELECT * FROM mytable WHERE q3c_radial_query(ra, dec, 11, 12, 0.1); ``` The order of arguments is important, so that the column names of the table should come first, and the location where you search after, otherwise the index won't be used. There is also an alternative way of doing cone searches which could be a bit faster if the table that you are working with that table that is small. In that case q3c_radial_query may be too CPU heavy. So you may want to query the table: ``` my_db# SELECT * FROM mytable WHERE q3c_join(11, 12, ra, dec, 0.1); ``` - The ellipse search: search for objects within the ellipse from a given point: ``` my_db=# select * from mytable WHERE q3c_ellipse_query(ra, dec, 10, 20, 1, 0.5 ,10); ``` returns the objects which are within the ellipse with the center at (ra,dec)=(10,20) major axis of 1 degree, axis ratio of 0.5 and positional angle of 10 degrees. - The polygonal query, i.e. the query of the objects which lie inside the region bounded by the polygon on the sphere. To query the objects in the polygon ((0,0),(2,0),(2,1),(0,1)) ) (this is the spherical polygon with following vertices: (ra=0, dec=0) ; (ra=2, dec=0); (ra=2, dec=1); (ra=0, dec=1)): ``` my_db# SELECT * FROM mytable WHERE q3c_poly_query(ra, dec, '{0, 0, 2, 0, 2, 1, 0, 1}'); ``` - The polygonal query using PostgreSQL polygon type ``` my_db# SELECT * FROM mytable WHERE q3c_poly_query(ra, dec, '((0, 0), (2, 0), (2, 1), (0, 1))'::polygon); ``` - The positional cross-match of the tables: In this example we will assume that we have a huge table "table2" with ra and dec columns and an already created index on q3c_ang2ipix(ra,dec) and a smaller table "table1" with ra and dec columns. Now, if we want to cross-match the tables "table1" and "table2" by position with the crossmatch radius of 0.001 degrees, we would do it with the following query: ``` my_db# SELECT * FROM table1 AS a, table2 AS b WHERE q3c_join(a.ra, a.dec, b.ra, b.dec, 0.001); ``` The order of arguments is important again, because it determines whether an index is going to be used or not. The ra,dec columns from the table with the index should go after the ra,dec columns from the table without the index. It is important that the query will return *ALL* the pairs within the matching distance, rather than just nearest neighbors. See the nearest neighbors queries below. If every object in table1 have his own error circle ( we'll assume that the radius of that circle in degrees is stored in the column "err"), then you should run the query: ``` my_db# SELECT * FROM table1 AS a, table2 AS b WHERE q3c_join(a.ra, a.dec, b.ra, b.dec, a.err); ``` - The positional cross-match of the tables with the ellipse error-area: (for example if you want to find all the objects from one catalogue which lies inside the elliptical bodies of the galaxies from the second catalogue) It is possible to do the join when the error area of each record of the catalogue is an ellipse. Then you can do the query like this ``` my_db# SELECT * FROM table1 AS a, table2 AS b WHERE q3c_ellipse_join(a.ra, a.dec, b.ra, b.dec, a.maj_ax a.axis_ratio, a.PA); ``` where axis_ratio is the column with axis ratio of the ellipses and PA is the column with the positional angles of them, and maj_ax is the column with major axises of those ellipses. - The positional cross-match of the tables with proper motions taken into account In this example we will assume that we have a huge table "table2" with ra and dec columns and an already created index on q3c_ang2ipix(ra,dec) and a smaller table "table1" with ra and dec columns. We will also assume that this table1 has an epoch column (in year units) as well as pmra, pmdec columns (in units of mas/yr), while the table2 only has the epoch column. We will also assume that the pmra columns has the cos(dec) factor. and that we know the upper bound on the epoch difference between the two catalogs is say 30 years. (it doesn't have to be precise, but it is important that the true largest epoch difference is not larger than the specified number). Now, if we want to cross-match the tables "table1" and "table2" by position with the crossmatch radius of 0.001 degrees, we would do it with the following query: ``` my_db# SELECT * FROM table1 AS a, table2 AS b WHERE q3c_join_pm (a.ra, a.dec, a.pmra, a.pmdec, 1, a.epoch, b.ra, b.dec, b.epoch, 30, 0.001); ``` - The density estimation of your objects using pixelation depth of 25: ``` my_db# SELECT (q3c_ipix2ang(i))[1] as ra ,(q3c_ipix2ang(i))[2] as dec ,c, q3c_pixarea(i,25) as area from (select q3c_ipixcenter(ra,dec, 25) as i, count(*) as c from mytable group by i) as x; ``` returns the list of ra,dec of the Q3C pixel center, number of objects within a given pixel, and pixel area. If you use that query you should keep in mind that Q3C doesn't have the property of uniform pixel areas (as opposed to HEALPIX). - Nearest neighbor queries: This query selects the only nearest neighbor for each row in your table. If there is no neighbor, the columns are filled with nulls. ``` my_db# SELECT t.*, ss.* FROM mytable AS t LEFT JOIN LATERAL ( SELECT s.* FROM sdssdr9.phototag AS s WHERE q3c_join(t.ra, t.dec, s.ra, s.dec, 1./3600) ORDER BY q3c_dist(t.ra,t.dec,s.ra,s.dec) ASC LIMIT 1 ) as ss ON true; ``` The idea behind the query is that for every row of your table LATERAL() executes the subquery, that retuns all the neihhbours within the aperture and then orders them by distance takes the top one. If you want only the objects that have the neighbors then the query will look like that ``` my_db# SELECT t.*, ss.* FROM mytable AS t, LATERAL ( SELECT s.* FROM sdssdr9.phototag AS s WHERE q3c_join(t.ra, t.dec, s.ra, s.dec, 1./3600) ORDER BY q3c_dist(t.ra,t.dec,s.ra,s.dec) ASC LIMIT 1 ) as ss ; ``` - Nearest neighbor 2 This query selects the only nearest neighbor for each row in your table. If there are no neighbor, the columns are filled with nulls. This query requires presence of some object id column with the index on the table. ``` my_db# WITH x AS ( SELECT *, ( SELECT objid FROM sdssdr9.phototag AS p WHERE q3c_join(m.ra, m.dec, p.ra, p.dec, 1./3600) ORDER BY q3c_dist(m.ra, m.dec, p.ra, p.dec) ASC LIMIT 1) AS match_objid FROM mytable AS m ) SELECT * FROM x, sdssdr9.phototag AS s WHERE x.match_objid=s.objid; ``` ## Perfomance issues/Slow queries If you experience slow q3c queries, the following list may suggest possible solutions. - Check that you are using the correct order of arguments in the q3c functions. I.e. q3c_radial_query(120,3,ra,dec,1) instead of q3c_radial_query(ra,dec,120,3,1) - Verify the plan of the query using 'EXPLAIN ...' command. That will tell you how PG tries to execute it. If you see something involving merge_join, or just seq scans (instead of bitmap scans using the q3c index), likely the plan is wrong and you have to fix it - Force postgresql to use the q3c_index by disabling seq scans or merge and hash joins by setting 'set enable_mergejoin to off; set enable_seqscan to off; set enable hashjoin to off;' - Cluster your table using q3c index to sort your table by position. - Check if you are using q3c_join() query together with additional clauses. I.e. the query select * from t1, t2 where q3c_join(t1.ra,t1.dec,t2.ra,t2.dec,1./3600) and t1.mag<1 and t2.mag>33 likely will NOT execute properly, you will likely need to rewrite it as ``` with x as (select * from t1 where t1.mag<1) y as (select *, t2.mag as t2mag from x, t2 where q3c_join(t1.ra,t1.dec,t2.ra,t2.dec,1./3600) ) select * from y where t2mag>33 ``` q3c-2.0.0/common.h000066400000000000000000000262551363277220100136550ustar00rootroot00000000000000/* Copyright (C) 2004-2015 Sergey Koposov Email: koposov@ast.cam.ac.uk This file is part of Q3C. Q3C is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Q3C is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Q3C; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include "postgres.h" #ifndef __STDC_FORMAT_MACROS #define __STDC_FORMAT_MACROS #endif #include #include #ifndef Q3C_COMMON_H #define Q3C_COMMON_H #ifndef q3c_ipix_t /*#define q3c_ipix_t long long typedef long long q3c_ipix_t ;*/ typedef int64 q3c_ipix_t ; #endif /* q3c_ipix_t */ #ifndef Q3C_IPIX_FMT #define Q3C_IPIX_FMT INT64_FORMAT #define Q3C_CONST(c) INT64CONST(c) #endif /* Q3C_IPIX_FMT */ /* If You have not specified the Q3C_LONG_DOUBLE macro then we will use simple double functions */ #ifndef Q3C_LONG_DOUBLE typedef double q3c_coord_t; #define q3c_pow(a,b) pow(a, b) #define q3c_fabs(a) fabs(a) #define q3c_fmod(a,b) fmod(a, b) #define q3c_cos(a) cos(a) #define q3c_sin(a) sin(a) #define q3c_asin(a) asin(a) #define q3c_acos(a) acos(a) #define q3c_sincos0(a, b, c) sincos(a, b, c) #define q3c_tan(a) tan(a) #define q3c_atan(a) atan(a) #define q3c_atan2(a,b) atan2(a, b) #define q3c_sqrt(a) sqrt(a) #define q3c_log(a) log(a) #define q3c_ceil(a) ceil(a) #define Q3C_HALF 0.5 #define Q3C_COORD_FMT "%f" #define Q3C_PI 3.1415926535897932384626433832795028841968 #define Q3C_2PI 6.2831853071795864769252867665590057683936 #define Q3C_PI_2 1.5707963267948966192313216916397514420984 #define Q3C_DEGRA 0.0174532925199432957692369076848861271344 #define Q3C_RADEG 57.2957795130823208767981548141051703324122 #define Q3C_LG2 0.6931471805599453094172321214581765680755 /* I really do not see the reason to set them as const ... const q3c_coord_t Q3C_PI=3.1415926535897932384626433832795028841968; const q3c_coord_t Q3C_2PI=6.2831853071795864769252867665590057683936; const q3c_coord_t Q3C_PI_2=1.5707963267948966192313216916397514420984; const q3c_coord_t Q3C_DEGRA=0.0174532925199432957692369076848861271344; const q3c_coord_t Q3C_RADEG=57.2957795130823208767981548141051703324122; const q3c_coord_t Q3C_LG2=0.6931471805599453094172321214581765680755; */ #else /* Q3C_LONG_DOUBLE */ typedef long double q3c_coord_t; #define q3c_pow(a,b) powl(a, b) #define q3c_fabs(a) fabsl(a) #define q3c_fmod(a,b) fmodl(a, b) #define q3c_cos(a) cosl(a) #define q3c_sin(a) sinl(a) #define q3c_asin(a) asinl(a) #define q3c_acos(a) acosl(a) #define q3c_sincos0(a, b, c) sincosl(a, b, c) #define q3c_tan(a) tanl(a) #define q3c_atan(a) atanl(a) #define q3c_atan2(a,b) atan2l(a, b) #define q3c_sqrt(a) sqrtl(a) #define q3c_log(a) logl(a) #define q3c_ceil(a) ceill(a) #define Q3C_HALF 0.5L #define Q3C_COORD_FMT "%.15Lf" #define Q3C_PI 3.1415926535897932384626433832795028841968L #define Q3C_2PI 6.2831853071795864769252867665590057683936L #define Q3C_PI_2 1.5707963267948966192313216916397514420984L #define Q3C_DEGRA 0.0174532925199432957692369076848861271344L #define Q3C_RADEG 57.2957795130823208767981548141051703324122L #define Q3C_LG2 0.6931471805599453094172321214581765680755L #endif /* Q3C_LONG_DOUBLE */ #ifndef Q3C_CBITS #define Q3C_CBITS sizeof(q3c_coord_t) #endif /* Q3C_CBITS */ #ifndef Q3C_IBITS #define Q3C_IBITS sizeof(q3c_ipix_t) #endif /* Q3C_IBITS */ #ifndef Q3C_INTERLEAVED_NBITS #define Q3C_INTERLEAVED_NBITS 16 #endif /* Q3C_INTERLEAVED_NBITS */ #ifndef Q3C_I1 #define Q3C_I1 (1 << (Q3C_INTERLEAVED_NBITS)) #endif /* Q3C_INTERLEAVED_NBITS */ /* this probably will work only in the case of long double variables ?? */ /*#define Q3C_PI 3.1415926535897932384626433832795029L #define q3c_2_PI 3.1415926535897932384626433832795029L #define Q3C_2PI 6.2831853071795864769252867665590058L #define Q3C_PI_2 1.5707963267948966192313216916397514L #define Q3C_DEGRA 0.01745329251994329576923690768488612L #define Q3C_RADEG 57.295779513082320876798154814105170L #define Q3C_LG2 0.301029995663981195213738894724493026768L #define Q3C_LG2 0.6931471805599453094172321214581765680755L*/ #define Q3C_BOX_INTERSECT(x0, x1, y0, y1, a0, a1, b0, b1) ((((x0 < a0) && \ (x1 >= a0)) || \ (x0 <= a1)) && \ (((y0 < b0) && \ (y1 >= b0)) || \ (y0 <= b1))) /* True if square(x0,x1,y0,y1) and square(a0,a1,b0,b1) have any common point*/ #define Q3C_INTERSECT(a, b, x, y) (((a <= y) && (a >= x)) || \ ((a < x) && (b >= x))) #define Q3C_DISJUNCT 0 /* disjunct areas */ #define Q3C_PARTIAL 1 /* partial coverage */ #define Q3C_EDGE 1 /* point lie on the edge of the region */ #define Q3C_COVER 2 /* the point or the region is completely inside other */ #define Q3C_MAX_N_POLY_VERTEX 100 /* Maximal number of vertices in the polygon */ #define Q3C_NPARTIALS 50 /*length of the list of the partially covered ipix ranges*/ #define Q3C_NFULLS 50 /*length of the list of the fully covered ipix ranges*/ #define Q3C_MAX_DEPTH 4 /*the maximum depth of going down the quadtree when doing spatial searches */ #define Q3C_STACK_SIZE 11000 /* the size of the stacks for quadtrees when doing spatial searches */ /* !!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!! * Consider that the size of the stacks should directly depend on the * value of res_depth variable ! * It seems that each of stacks should have the size 4*(2^(depth-1)) */ #define Q3C_MAXRAD 35 /* maximum allowed radius for circles and ellipses */ #define Q3C_MINDISCR 1e-10 /* minimum possible value of the discriminant of the 2nd order curves, before we start assuming parabola or hyperbola */ #define UNWRAP_RA(ra) ( (ra < 0) ? \ (q3c_fmod(ra, 360) + 360) : \ ( (ra > 360) ? q3c_fmod(ra, 360) : ra ) \ ) #ifdef __USE_GNU #define q3c_sincos(a,b,c) q3c_sincos0(a,&b,&c) #else #define q3c_sincos(a,b,c) do {\ b=q3c_sin(a);\ c=q3c_cos(a);\ } while(0); #endif struct q3c_prm { q3c_ipix_t nside; q3c_ipix_t *xbits; q3c_ipix_t *ybits; q3c_ipix_t *xbits1; q3c_ipix_t *ybits1; }; struct q3c_square { q3c_ipix_t x0, y0; /* Integer coordinates of the center of the square for */ int nside0; /* the nside0 segmentation */ char status; }; #define SET_SQUARE(sq, x, y, n) do {\ sq->x0=x;\ sq->y0=y;\ sq->nside0=n;\ } while(0); typedef struct { int n; q3c_coord_t *ra; /* array of RAs of vertices */ q3c_coord_t *dec; /* array of DECs of vertices */ q3c_coord_t *x; /* array of X coords on the cube face of vertices */ q3c_coord_t *y; /* array of Y coords on the cube face of vertices */ q3c_coord_t *ax; /* array of x projections of the edge between vertices */ q3c_coord_t *ay; /* array of y projections of the edge between vertices */ } q3c_poly; typedef struct { q3c_coord_t ra; q3c_coord_t dec; q3c_coord_t rad; } q3c_circle_region; typedef struct { q3c_coord_t ra; q3c_coord_t dec; q3c_coord_t rad; /* major axis */ q3c_coord_t e; /* eccentricity */ q3c_coord_t PA; } q3c_ellipse_region; typedef enum {Q3C_CIRCLE, Q3C_POLYGON, Q3C_ELLIPSE} q3c_region; void init_q3c(struct q3c_prm *, q3c_ipix_t); void init_q3c1(struct q3c_prm *, q3c_ipix_t); void q3c_dump_prm(struct q3c_prm *,char *); void q3c_ang2ipix(struct q3c_prm *, q3c_coord_t, q3c_coord_t, q3c_ipix_t *); void q3c_ipix2ang(struct q3c_prm *, q3c_ipix_t , q3c_coord_t *, q3c_coord_t *); q3c_coord_t q3c_pixarea(struct q3c_prm *hprm, q3c_ipix_t ipix, int depth); void q3c_get_nearby_split(struct q3c_prm *, q3c_coord_t, q3c_coord_t, q3c_coord_t, q3c_ipix_t *, int); void q3c_get_nearby(struct q3c_prm *, q3c_region, void *, q3c_ipix_t *); void q3c_get_xy_minmax(q3c_coord_t, q3c_coord_t, q3c_coord_t, q3c_coord_t, q3c_coord_t, q3c_coord_t, q3c_coord_t *, q3c_coord_t *, q3c_coord_t *, q3c_coord_t *, char *); void q3c_ang2ipix_xy(struct q3c_prm *hprm, q3c_coord_t ra, q3c_coord_t dec, char *out_face_num, q3c_ipix_t *ipix, q3c_coord_t *x_out, q3c_coord_t *y_out); void q3c_get_poly_coefs(char, q3c_coord_t, q3c_coord_t, q3c_coord_t, q3c_coord_t *, q3c_coord_t *, q3c_coord_t *, q3c_coord_t *, q3c_coord_t *, q3c_coord_t *); char q3c_xy2facenum(q3c_coord_t, q3c_coord_t, char); char q3c_get_facenum(q3c_coord_t, q3c_coord_t); char q3c_in_ellipse(q3c_coord_t alpha, q3c_coord_t delta0, q3c_coord_t alpha1, q3c_coord_t delta01, q3c_coord_t d0, q3c_coord_t e, q3c_coord_t PA0); q3c_coord_t q3c_dist(q3c_coord_t, q3c_coord_t, q3c_coord_t, q3c_coord_t); q3c_coord_t q3c_sindist(q3c_coord_t, q3c_coord_t, q3c_coord_t, q3c_coord_t); void q3c_radial_query(struct q3c_prm *hprm, q3c_coord_t ra0, q3c_coord_t dec0, q3c_coord_t rad, q3c_ipix_t *out_ipix_arr_fulls, q3c_ipix_t *out_ipix_arr_partials); void q3c_ellipse_query(struct q3c_prm *hprm, q3c_coord_t ra0, q3c_coord_t dec0, q3c_coord_t majax, q3c_coord_t PA, q3c_coord_t ell, q3c_ipix_t *out_ipix_arr_fulls, q3c_ipix_t *out_ipix_arr_partials); void q3c_init_poly(q3c_poly *qp, int n); void q3c_prepare_poly(q3c_poly *qp); void q3c_project_poly(q3c_poly *qp, char facenum, char *large_flag); char q3c_get_facenum_poly(q3c_poly *qp); int q3c_check_point_in_poly(q3c_poly *qp, q3c_coord_t x0, q3c_coord_t y0); int q3c_poly_cover_check(q3c_poly *qp, q3c_coord_t xc_cur, q3c_coord_t yc_cur, q3c_coord_t cur_size); void q3c_get_minmax_poly(q3c_poly *qp, q3c_coord_t *xmin, q3c_coord_t *xmax, q3c_coord_t *ymin, q3c_coord_t *ymax); void q3c_poly_query(struct q3c_prm *hprm, q3c_poly *qp, q3c_ipix_t *out_ipix_arr_fulls, q3c_ipix_t *out_ipix_arr_partials, char *too_large); int q3c_check_sphere_point_in_poly(struct q3c_prm *hprm, int n, q3c_coord_t in_ra[], q3c_coord_t in_dec[], q3c_coord_t ra0, q3c_coord_t dec0, char *too_large, int invocation, q3c_coord_t (*)[Q3C_MAX_N_POLY_VERTEX], q3c_coord_t (*)[Q3C_MAX_N_POLY_VERTEX], q3c_coord_t (*)[Q3C_MAX_N_POLY_VERTEX], q3c_coord_t (*)[Q3C_MAX_N_POLY_VERTEX], char *, char *); char q3c_get_region_facenum(q3c_region region, void *data); q3c_ipix_t q3c_xiyi2ipix(q3c_ipix_t nside, q3c_ipix_t *xbits, q3c_ipix_t *ybits, char face_num, q3c_ipix_t xi, q3c_ipix_t yi); void q3c_multi_face_check(q3c_coord_t *xmin0, q3c_coord_t *ymin0, q3c_coord_t *xmax0, q3c_coord_t *ymax0, q3c_coord_t *points, char *multi_flag); char q3c_too_big_check(q3c_region region, void * region_data) ; void q3c_get_version(char *, int); #endif/* Q3C_COMMON_H */ q3c-2.0.0/expected/000077500000000000000000000000001363277220100140035ustar00rootroot00000000000000q3c-2.0.0/expected/ang2ipix.expected000066400000000000000000000006411363277220100172500ustar00rootroot00000000000000 q3c_ang2ipix --------------------- 2017612633061982208 (1 row) q3c_ang2ipix -------------------- 480383960252852906 (1 row) q3c_ang2ipix -------------------- 480383960252852906 (1 row) q3c_ang2ipix --------------------- 1825388318008017157 (1 row) q3c_ang2ipix --------------------- 1825388318008017157 (1 row) q3c_ang2ipix -------------- (1 row) q3c-2.0.0/expected/area.expected000066400000000000000000000000421363277220100164320ustar00rootroot00000000000000 ?column? ---------- t (1 row) q3c-2.0.0/expected/cone.expected000066400000000000000000000563761363277220100164730ustar00rootroot00000000000000 count ------- 0 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 3 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 4 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 3 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 3 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 3 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 10 (1 row) count ------- 5 (1 row) count ------- 3 (1 row) count ------- 5 (1 row) count ------- 2 (1 row) count ------- 2 (1 row) count ------- 2 (1 row) count ------- 7 (1 row) count ------- 3 (1 row) count ------- 4 (1 row) count ------- 5 (1 row) count ------- 3 (1 row) count ------- 5 (1 row) count ------- 2 (1 row) count ------- 2 (1 row) count ------- 2 (1 row) count ------- 3 (1 row) count ------- 5 (1 row) count ------- 6 (1 row) count ------- 3 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 6 (1 row) count ------- 3 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 5 (1 row) count ------- 4 (1 row) count ------- 6 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 6 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 3 (1 row) count ------- 2 (1 row) count ------- 5 (1 row) count ------- 3 (1 row) count ------- 4 (1 row) count ------- 4 (1 row) count ------- 0 (1 row) count ------- 5 (1 row) count ------- 3 (1 row) count ------- 2 (1 row) count ------- 4 (1 row) count ------- 2 (1 row) count ------- 4 (1 row) count ------- 5 (1 row) count ------- 4 (1 row) count ------- 6 (1 row) count ------- 6 (1 row) count ------- 4 (1 row) count ------- 3 (1 row) count ------- 5 (1 row) count ------- 1 (1 row) count ------- 3 (1 row) count ------- 6 (1 row) count ------- 5 (1 row) count ------- 5 (1 row) count ------- 3 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 4 (1 row) count ------- 2 (1 row) count ------- 4 (1 row) count ------- 3 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 2 (1 row) count ------- 5 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 5 (1 row) count ------- 4 (1 row) count ------- 2 (1 row) count ------- 4 (1 row) count ------- 2 (1 row) count ------- 2 (1 row) count ------- 4 (1 row) count ------- 6 (1 row) count ------- 1 (1 row) count ------- 4 (1 row) count ------- 2 (1 row) count ------- 6 (1 row) count ------- 3 (1 row) count ------- 3 (1 row) count ------- 3 (1 row) count ------- 3 (1 row) count ------- 7 (1 row) count ------- 5 (1 row) count ------- 5 (1 row) count ------- 1 (1 row) count ------- 5 (1 row) count ------- 2 (1 row) count ------- 3 (1 row) count ------- 10 (1 row) count ------- 7 (1 row) count ------- 18 (1 row) count ------- 12 (1 row) count ------- 10 (1 row) count ------- 11 (1 row) count ------- 17 (1 row) count ------- 16 (1 row) count ------- 14 (1 row) count ------- 11 (1 row) count ------- 16 (1 row) count ------- 11 (1 row) count ------- 16 (1 row) count ------- 12 (1 row) count ------- 12 (1 row) count ------- 11 (1 row) count ------- 8 (1 row) count ------- 12 (1 row) count ------- 12 (1 row) count ------- 12 (1 row) count ------- 11 (1 row) count ------- 9 (1 row) count ------- 21 (1 row) count ------- 12 (1 row) count ------- 8 (1 row) count ------- 9 (1 row) count ------- 15 (1 row) count ------- 9 (1 row) count ------- 10 (1 row) count ------- 14 (1 row) count ------- 9 (1 row) count ------- 13 (1 row) count ------- 10 (1 row) count ------- 12 (1 row) count ------- 14 (1 row) count ------- 10 (1 row) count ------- 7 (1 row) count ------- 19 (1 row) count ------- 16 (1 row) count ------- 13 (1 row) count ------- 14 (1 row) count ------- 12 (1 row) count ------- 15 (1 row) count ------- 9 (1 row) count ------- 15 (1 row) count ------- 12 (1 row) count ------- 10 (1 row) count ------- 12 (1 row) count ------- 19 (1 row) count ------- 18 (1 row) count ------- 19 (1 row) count ------- 11 (1 row) count ------- 7 (1 row) count ------- 9 (1 row) count ------- 11 (1 row) count ------- 10 (1 row) count ------- 6 (1 row) count ------- 9 (1 row) count ------- 12 (1 row) count ------- 18 (1 row) count ------- 10 (1 row) count ------- 16 (1 row) count ------- 9 (1 row) count ------- 9 (1 row) count ------- 12 (1 row) count ------- 14 (1 row) count ------- 16 (1 row) count ------- 14 (1 row) count ------- 16 (1 row) count ------- 9 (1 row) count ------- 12 (1 row) count ------- 6 (1 row) count ------- 13 (1 row) count ------- 12 (1 row) count ------- 7 (1 row) count ------- 13 (1 row) count ------- 12 (1 row) count ------- 13 (1 row) count ------- 7 (1 row) count ------- 13 (1 row) count ------- 14 (1 row) count ------- 11 (1 row) count ------- 12 (1 row) count ------- 11 (1 row) count ------- 12 (1 row) count ------- 13 (1 row) count ------- 7 (1 row) count ------- 15 (1 row) count ------- 12 (1 row) count ------- 5 (1 row) count ------- 13 (1 row) count ------- 14 (1 row) count ------- 7 (1 row) count ------- 14 (1 row) count ------- 10 (1 row) count ------- 9 (1 row) count ------- 11 (1 row) count ------- 10 (1 row) count ------- 11 (1 row) count ------- 12 (1 row) count ------- 50 (1 row) count ------- 58 (1 row) count ------- 44 (1 row) count ------- 55 (1 row) count ------- 52 (1 row) count ------- 52 (1 row) count ------- 49 (1 row) count ------- 45 (1 row) count ------- 53 (1 row) count ------- 39 (1 row) count ------- 48 (1 row) count ------- 46 (1 row) count ------- 49 (1 row) count ------- 51 (1 row) count ------- 65 (1 row) count ------- 50 (1 row) count ------- 48 (1 row) count ------- 45 (1 row) count ------- 70 (1 row) count ------- 58 (1 row) count ------- 41 (1 row) count ------- 58 (1 row) count ------- 51 (1 row) count ------- 52 (1 row) count ------- 50 (1 row) count ------- 44 (1 row) count ------- 57 (1 row) count ------- 48 (1 row) count ------- 49 (1 row) count ------- 59 (1 row) count ------- 53 (1 row) count ------- 49 (1 row) count ------- 56 (1 row) count ------- 51 (1 row) count ------- 32 (1 row) count ------- 50 (1 row) count ------- 49 (1 row) count ------- 40 (1 row) count ------- 46 (1 row) count ------- 53 (1 row) count ------- 56 (1 row) count ------- 58 (1 row) count ------- 55 (1 row) count ------- 49 (1 row) count ------- 52 (1 row) count ------- 48 (1 row) count ------- 49 (1 row) count ------- 53 (1 row) count ------- 34 (1 row) count ------- 43 (1 row) count ------- 49 (1 row) count ------- 44 (1 row) count ------- 56 (1 row) count ------- 42 (1 row) count ------- 56 (1 row) count ------- 48 (1 row) count ------- 52 (1 row) count ------- 47 (1 row) count ------- 50 (1 row) count ------- 51 (1 row) count ------- 54 (1 row) count ------- 31 (1 row) count ------- 51 (1 row) count ------- 52 (1 row) count ------- 54 (1 row) count ------- 47 (1 row) count ------- 40 (1 row) count ------- 57 (1 row) count ------- 49 (1 row) count ------- 43 (1 row) count ------- 45 (1 row) count ------- 39 (1 row) count ------- 45 (1 row) count ------- 47 (1 row) count ------- 47 (1 row) count ------- 52 (1 row) count ------- 50 (1 row) count ------- 45 (1 row) count ------- 59 (1 row) count ------- 56 (1 row) count ------- 57 (1 row) count ------- 65 (1 row) count ------- 50 (1 row) count ------- 39 (1 row) count ------- 48 (1 row) count ------- 51 (1 row) count ------- 51 (1 row) count ------- 38 (1 row) count ------- 43 (1 row) count ------- 52 (1 row) count ------- 59 (1 row) count ------- 44 (1 row) count ------- 34 (1 row) count ------- 53 (1 row) count ------- 49 (1 row) count ------- 40 (1 row) count ------- 61 (1 row) count ------- 45 (1 row) count ------- 50 (1 row) count ------- 57 (1 row) count ------- 204 (1 row) count ------- 178 (1 row) count ------- 179 (1 row) count ------- 197 (1 row) count ------- 193 (1 row) count ------- 206 (1 row) count ------- 188 (1 row) count ------- 190 (1 row) count ------- 177 (1 row) count ------- 187 (1 row) count ------- 175 (1 row) count ------- 215 (1 row) count ------- 167 (1 row) count ------- 183 (1 row) count ------- 196 (1 row) count ------- 193 (1 row) count ------- 199 (1 row) count ------- 185 (1 row) count ------- 225 (1 row) count ------- 206 (1 row) count ------- 211 (1 row) count ------- 184 (1 row) count ------- 179 (1 row) count ------- 176 (1 row) count ------- 209 (1 row) count ------- 212 (1 row) count ------- 197 (1 row) count ------- 161 (1 row) count ------- 184 (1 row) count ------- 200 (1 row) count ------- 192 (1 row) count ------- 191 (1 row) count ------- 185 (1 row) count ------- 187 (1 row) count ------- 213 (1 row) count ------- 178 (1 row) count ------- 178 (1 row) count ------- 202 (1 row) count ------- 190 (1 row) count ------- 203 (1 row) count ------- 202 (1 row) count ------- 175 (1 row) count ------- 219 (1 row) count ------- 195 (1 row) count ------- 187 (1 row) count ------- 210 (1 row) count ------- 184 (1 row) count ------- 200 (1 row) count ------- 195 (1 row) count ------- 168 (1 row) count ------- 221 (1 row) count ------- 194 (1 row) count ------- 209 (1 row) count ------- 205 (1 row) count ------- 199 (1 row) count ------- 186 (1 row) count ------- 187 (1 row) count ------- 195 (1 row) count ------- 223 (1 row) count ------- 214 (1 row) count ------- 212 (1 row) count ------- 196 (1 row) count ------- 220 (1 row) count ------- 195 (1 row) count ------- 172 (1 row) count ------- 203 (1 row) count ------- 191 (1 row) count ------- 208 (1 row) count ------- 197 (1 row) count ------- 196 (1 row) count ------- 174 (1 row) count ------- 208 (1 row) count ------- 204 (1 row) count ------- 184 (1 row) count ------- 204 (1 row) count ------- 213 (1 row) count ------- 184 (1 row) count ------- 197 (1 row) count ------- 205 (1 row) count ------- 198 (1 row) count ------- 225 (1 row) count ------- 190 (1 row) count ------- 216 (1 row) count ------- 192 (1 row) count ------- 179 (1 row) count ------- 199 (1 row) count ------- 210 (1 row) count ------- 198 (1 row) count ------- 195 (1 row) count ------- 189 (1 row) count ------- 216 (1 row) count ------- 197 (1 row) count ------- 183 (1 row) count ------- 176 (1 row) count ------- 197 (1 row) count ------- 171 (1 row) count ------- 173 (1 row) count ------- 194 (1 row) count ------- 188 (1 row) count ------- 180 (1 row) count ------- 759 (1 row) count ------- 718 (1 row) count ------- 761 (1 row) count ------- 798 (1 row) count ------- 786 (1 row) count ------- 782 (1 row) count ------- 764 (1 row) count ------- 823 (1 row) count ------- 776 (1 row) count ------- 812 (1 row) count ------- 778 (1 row) count ------- 745 (1 row) count ------- 778 (1 row) count ------- 740 (1 row) count ------- 772 (1 row) count ------- 758 (1 row) count ------- 748 (1 row) count ------- 783 (1 row) count ------- 767 (1 row) count ------- 748 (1 row) count ------- 795 (1 row) count ------- 746 (1 row) count ------- 801 (1 row) count ------- 803 (1 row) count ------- 820 (1 row) count ------- 785 (1 row) count ------- 826 (1 row) count ------- 809 (1 row) count ------- 792 (1 row) count ------- 781 (1 row) count ------- 779 (1 row) count ------- 779 (1 row) count ------- 755 (1 row) count ------- 764 (1 row) count ------- 770 (1 row) count ------- 815 (1 row) count ------- 802 (1 row) count ------- 838 (1 row) count ------- 756 (1 row) count ------- 725 (1 row) count ------- 811 (1 row) count ------- 735 (1 row) count ------- 804 (1 row) count ------- 824 (1 row) count ------- 816 (1 row) count ------- 806 (1 row) count ------- 754 (1 row) count ------- 834 (1 row) count ------- 764 (1 row) count ------- 807 (1 row) count ------- 815 (1 row) count ------- 838 (1 row) count ------- 824 (1 row) count ------- 764 (1 row) count ------- 821 (1 row) count ------- 755 (1 row) count ------- 725 (1 row) count ------- 778 (1 row) count ------- 769 (1 row) count ------- 817 (1 row) count ------- 762 (1 row) count ------- 743 (1 row) count ------- 747 (1 row) count ------- 778 (1 row) count ------- 716 (1 row) count ------- 812 (1 row) count ------- 822 (1 row) count ------- 803 (1 row) count ------- 760 (1 row) count ------- 829 (1 row) count ------- 756 (1 row) count ------- 785 (1 row) count ------- 777 (1 row) count ------- 789 (1 row) count ------- 785 (1 row) count ------- 808 (1 row) count ------- 741 (1 row) count ------- 752 (1 row) count ------- 788 (1 row) count ------- 725 (1 row) count ------- 779 (1 row) count ------- 816 (1 row) count ------- 801 (1 row) count ------- 796 (1 row) count ------- 740 (1 row) count ------- 753 (1 row) count ------- 740 (1 row) count ------- 801 (1 row) count ------- 746 (1 row) count ------- 781 (1 row) count ------- 797 (1 row) count ------- 802 (1 row) count ------- 761 (1 row) count ------- 751 (1 row) count ------- 782 (1 row) count ------- 772 (1 row) count ------- 781 (1 row) count ------- 790 (1 row) count ------- 811 (1 row) count ------- 789 (1 row) count ------- 3072 (1 row) count ------- 3110 (1 row) count ------- 3036 (1 row) count ------- 3088 (1 row) count ------- 3250 (1 row) count ------- 3177 (1 row) count ------- 3097 (1 row) count ------- 3111 (1 row) count ------- 3160 (1 row) count ------- 3073 (1 row) count ------- 3124 (1 row) count ------- 3140 (1 row) count ------- 3055 (1 row) count ------- 3144 (1 row) count ------- 3075 (1 row) count ------- 3049 (1 row) count ------- 3021 (1 row) count ------- 3106 (1 row) count ------- 3161 (1 row) count ------- 2992 (1 row) count ------- 3171 (1 row) count ------- 3190 (1 row) count ------- 2983 (1 row) count ------- 3110 (1 row) count ------- 3197 (1 row) count ------- 3184 (1 row) count ------- 3197 (1 row) count ------- 3128 (1 row) count ------- 3146 (1 row) count ------- 3209 (1 row) count ------- 3121 (1 row) count ------- 3169 (1 row) count ------- 2988 (1 row) count ------- 3013 (1 row) count ------- 3164 (1 row) count ------- 3127 (1 row) count ------- 3148 (1 row) count ------- 3163 (1 row) count ------- 3203 (1 row) count ------- 3103 (1 row) count ------- 3140 (1 row) count ------- 3067 (1 row) count ------- 3137 (1 row) count ------- 3112 (1 row) count ------- 3163 (1 row) count ------- 2986 (1 row) count ------- 3112 (1 row) count ------- 3177 (1 row) count ------- 3019 (1 row) count ------- 3084 (1 row) count ------- 3045 (1 row) count ------- 3135 (1 row) count ------- 3193 (1 row) count ------- 3166 (1 row) count ------- 3074 (1 row) count ------- 3135 (1 row) count ------- 3086 (1 row) count ------- 3257 (1 row) count ------- 3113 (1 row) count ------- 3026 (1 row) count ------- 3146 (1 row) count ------- 3183 (1 row) count ------- 3099 (1 row) count ------- 3013 (1 row) count ------- 3250 (1 row) count ------- 3204 (1 row) count ------- 3178 (1 row) count ------- 3169 (1 row) count ------- 3151 (1 row) count ------- 3135 (1 row) count ------- 3095 (1 row) count ------- 3136 (1 row) count ------- 3130 (1 row) count ------- 3261 (1 row) count ------- 3124 (1 row) count ------- 3277 (1 row) count ------- 3114 (1 row) count ------- 3195 (1 row) count ------- 3059 (1 row) count ------- 3128 (1 row) count ------- 3104 (1 row) count ------- 3029 (1 row) count ------- 3261 (1 row) count ------- 3050 (1 row) count ------- 3129 (1 row) count ------- 3208 (1 row) count ------- 3106 (1 row) count ------- 3148 (1 row) count ------- 3232 (1 row) count ------- 3154 (1 row) count ------- 3097 (1 row) count ------- 3104 (1 row) count ------- 3205 (1 row) count ------- 3079 (1 row) count ------- 3080 (1 row) count ------- 3089 (1 row) count ------- 3053 (1 row) count ------- 3165 (1 row) count ------- 3200 (1 row) count ------- 3127 (1 row) count ------- 2715 (1 row) count ------- 2625 (1 row) count ------- 2699 (1 row) count ------- 2602 (1 row) count ------- 2810 (1 row) count ------- 2777 (1 row) count ------- 2798 (1 row) count ------- 2822 (1 row) count ------- 2650 (1 row) count ------- 2684 (1 row) count ------- 2565 (1 row) count ------- 2720 (1 row) count ------- 2659 (1 row) count ------- 2726 (1 row) count ------- 2633 (1 row) count ------- 2734 (1 row) count ------- 2810 (1 row) count ------- 2734 (1 row) count ------- 2767 (1 row) count ------- 2763 (1 row) count ------- 2646 (1 row) count ------- 2600 (1 row) count ------- 2625 (1 row) count ------- 2599 (1 row) count ------- 2745 (1 row) count ------- 2741 (1 row) count ------- 2732 (1 row) count ------- 2728 (1 row) count ------- 2715 (1 row) count ------- 2712 (1 row) count ------- 2730 (1 row) count ------- 2732 (1 row) count -------- 116628 (1 row) count -------- 116518 (1 row) count -------- 116370 (1 row) count -------- 116799 (1 row) count -------- 117118 (1 row) count -------- 116837 (1 row) count -------- 117260 (1 row) count -------- 116851 (1 row) count -------- 116762 (1 row) count -------- 116543 (1 row) count ------- 88 (1 row) q3c-2.0.0/expected/ellipse.expected000066400000000000000000000556401363277220100171750ustar00rootroot00000000000000 count ------- 0 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 3 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 4 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 3 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 3 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 3 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 1 (1 row) count ------- 10 (1 row) count ------- 5 (1 row) count ------- 3 (1 row) count ------- 5 (1 row) count ------- 2 (1 row) count ------- 2 (1 row) count ------- 2 (1 row) count ------- 7 (1 row) count ------- 3 (1 row) count ------- 4 (1 row) count ------- 5 (1 row) count ------- 3 (1 row) count ------- 5 (1 row) count ------- 2 (1 row) count ------- 2 (1 row) count ------- 2 (1 row) count ------- 3 (1 row) count ------- 5 (1 row) count ------- 6 (1 row) count ------- 3 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 6 (1 row) count ------- 3 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 5 (1 row) count ------- 4 (1 row) count ------- 6 (1 row) count ------- 2 (1 row) count ------- 0 (1 row) count ------- 6 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 3 (1 row) count ------- 2 (1 row) count ------- 5 (1 row) count ------- 3 (1 row) count ------- 4 (1 row) count ------- 4 (1 row) count ------- 0 (1 row) count ------- 5 (1 row) count ------- 3 (1 row) count ------- 2 (1 row) count ------- 4 (1 row) count ------- 2 (1 row) count ------- 4 (1 row) count ------- 5 (1 row) count ------- 4 (1 row) count ------- 6 (1 row) count ------- 6 (1 row) count ------- 4 (1 row) count ------- 3 (1 row) count ------- 5 (1 row) count ------- 1 (1 row) count ------- 3 (1 row) count ------- 6 (1 row) count ------- 5 (1 row) count ------- 5 (1 row) count ------- 3 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 4 (1 row) count ------- 2 (1 row) count ------- 4 (1 row) count ------- 3 (1 row) count ------- 1 (1 row) count ------- 0 (1 row) count ------- 2 (1 row) count ------- 5 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) count ------- 5 (1 row) count ------- 4 (1 row) count ------- 2 (1 row) count ------- 4 (1 row) count ------- 2 (1 row) count ------- 2 (1 row) count ------- 4 (1 row) count ------- 6 (1 row) count ------- 1 (1 row) count ------- 4 (1 row) count ------- 2 (1 row) count ------- 6 (1 row) count ------- 3 (1 row) count ------- 3 (1 row) count ------- 3 (1 row) count ------- 3 (1 row) count ------- 7 (1 row) count ------- 5 (1 row) count ------- 5 (1 row) count ------- 1 (1 row) count ------- 5 (1 row) count ------- 2 (1 row) count ------- 3 (1 row) count ------- 10 (1 row) count ------- 7 (1 row) count ------- 18 (1 row) count ------- 12 (1 row) count ------- 10 (1 row) count ------- 11 (1 row) count ------- 17 (1 row) count ------- 16 (1 row) count ------- 14 (1 row) count ------- 11 (1 row) count ------- 16 (1 row) count ------- 11 (1 row) count ------- 16 (1 row) count ------- 12 (1 row) count ------- 12 (1 row) count ------- 11 (1 row) count ------- 8 (1 row) count ------- 12 (1 row) count ------- 12 (1 row) count ------- 12 (1 row) count ------- 11 (1 row) count ------- 9 (1 row) count ------- 21 (1 row) count ------- 12 (1 row) count ------- 8 (1 row) count ------- 9 (1 row) count ------- 15 (1 row) count ------- 9 (1 row) count ------- 10 (1 row) count ------- 14 (1 row) count ------- 9 (1 row) count ------- 13 (1 row) count ------- 10 (1 row) count ------- 12 (1 row) count ------- 14 (1 row) count ------- 10 (1 row) count ------- 7 (1 row) count ------- 19 (1 row) count ------- 16 (1 row) count ------- 13 (1 row) count ------- 14 (1 row) count ------- 12 (1 row) count ------- 15 (1 row) count ------- 9 (1 row) count ------- 15 (1 row) count ------- 12 (1 row) count ------- 10 (1 row) count ------- 12 (1 row) count ------- 19 (1 row) count ------- 18 (1 row) count ------- 19 (1 row) count ------- 11 (1 row) count ------- 7 (1 row) count ------- 9 (1 row) count ------- 11 (1 row) count ------- 10 (1 row) count ------- 6 (1 row) count ------- 9 (1 row) count ------- 12 (1 row) count ------- 18 (1 row) count ------- 10 (1 row) count ------- 16 (1 row) count ------- 9 (1 row) count ------- 9 (1 row) count ------- 12 (1 row) count ------- 14 (1 row) count ------- 16 (1 row) count ------- 14 (1 row) count ------- 16 (1 row) count ------- 9 (1 row) count ------- 12 (1 row) count ------- 6 (1 row) count ------- 13 (1 row) count ------- 12 (1 row) count ------- 7 (1 row) count ------- 13 (1 row) count ------- 12 (1 row) count ------- 13 (1 row) count ------- 7 (1 row) count ------- 13 (1 row) count ------- 14 (1 row) count ------- 11 (1 row) count ------- 12 (1 row) count ------- 11 (1 row) count ------- 12 (1 row) count ------- 13 (1 row) count ------- 7 (1 row) count ------- 15 (1 row) count ------- 12 (1 row) count ------- 5 (1 row) count ------- 13 (1 row) count ------- 14 (1 row) count ------- 7 (1 row) count ------- 14 (1 row) count ------- 10 (1 row) count ------- 9 (1 row) count ------- 11 (1 row) count ------- 10 (1 row) count ------- 11 (1 row) count ------- 12 (1 row) count ------- 50 (1 row) count ------- 58 (1 row) count ------- 44 (1 row) count ------- 55 (1 row) count ------- 52 (1 row) count ------- 52 (1 row) count ------- 49 (1 row) count ------- 45 (1 row) count ------- 53 (1 row) count ------- 39 (1 row) count ------- 48 (1 row) count ------- 46 (1 row) count ------- 49 (1 row) count ------- 51 (1 row) count ------- 65 (1 row) count ------- 50 (1 row) count ------- 48 (1 row) count ------- 45 (1 row) count ------- 70 (1 row) count ------- 58 (1 row) count ------- 41 (1 row) count ------- 58 (1 row) count ------- 51 (1 row) count ------- 52 (1 row) count ------- 50 (1 row) count ------- 44 (1 row) count ------- 57 (1 row) count ------- 48 (1 row) count ------- 49 (1 row) count ------- 59 (1 row) count ------- 53 (1 row) count ------- 49 (1 row) count ------- 56 (1 row) count ------- 51 (1 row) count ------- 32 (1 row) count ------- 50 (1 row) count ------- 49 (1 row) count ------- 40 (1 row) count ------- 46 (1 row) count ------- 53 (1 row) count ------- 56 (1 row) count ------- 58 (1 row) count ------- 55 (1 row) count ------- 49 (1 row) count ------- 52 (1 row) count ------- 48 (1 row) count ------- 49 (1 row) count ------- 53 (1 row) count ------- 34 (1 row) count ------- 43 (1 row) count ------- 49 (1 row) count ------- 44 (1 row) count ------- 56 (1 row) count ------- 42 (1 row) count ------- 56 (1 row) count ------- 48 (1 row) count ------- 52 (1 row) count ------- 47 (1 row) count ------- 50 (1 row) count ------- 51 (1 row) count ------- 54 (1 row) count ------- 31 (1 row) count ------- 51 (1 row) count ------- 52 (1 row) count ------- 54 (1 row) count ------- 47 (1 row) count ------- 40 (1 row) count ------- 57 (1 row) count ------- 49 (1 row) count ------- 43 (1 row) count ------- 45 (1 row) count ------- 39 (1 row) count ------- 45 (1 row) count ------- 47 (1 row) count ------- 47 (1 row) count ------- 52 (1 row) count ------- 50 (1 row) count ------- 45 (1 row) count ------- 59 (1 row) count ------- 56 (1 row) count ------- 57 (1 row) count ------- 65 (1 row) count ------- 50 (1 row) count ------- 39 (1 row) count ------- 48 (1 row) count ------- 51 (1 row) count ------- 51 (1 row) count ------- 38 (1 row) count ------- 43 (1 row) count ------- 52 (1 row) count ------- 59 (1 row) count ------- 44 (1 row) count ------- 34 (1 row) count ------- 53 (1 row) count ------- 49 (1 row) count ------- 40 (1 row) count ------- 61 (1 row) count ------- 45 (1 row) count ------- 50 (1 row) count ------- 57 (1 row) count ------- 204 (1 row) count ------- 178 (1 row) count ------- 179 (1 row) count ------- 197 (1 row) count ------- 193 (1 row) count ------- 206 (1 row) count ------- 188 (1 row) count ------- 190 (1 row) count ------- 177 (1 row) count ------- 187 (1 row) count ------- 175 (1 row) count ------- 215 (1 row) count ------- 167 (1 row) count ------- 183 (1 row) count ------- 196 (1 row) count ------- 193 (1 row) count ------- 199 (1 row) count ------- 185 (1 row) count ------- 225 (1 row) count ------- 206 (1 row) count ------- 211 (1 row) count ------- 184 (1 row) count ------- 179 (1 row) count ------- 176 (1 row) count ------- 209 (1 row) count ------- 212 (1 row) count ------- 197 (1 row) count ------- 161 (1 row) count ------- 184 (1 row) count ------- 200 (1 row) count ------- 192 (1 row) count ------- 191 (1 row) count ------- 185 (1 row) count ------- 187 (1 row) count ------- 213 (1 row) count ------- 178 (1 row) count ------- 178 (1 row) count ------- 202 (1 row) count ------- 190 (1 row) count ------- 203 (1 row) count ------- 202 (1 row) count ------- 175 (1 row) count ------- 219 (1 row) count ------- 195 (1 row) count ------- 187 (1 row) count ------- 210 (1 row) count ------- 184 (1 row) count ------- 200 (1 row) count ------- 195 (1 row) count ------- 168 (1 row) count ------- 221 (1 row) count ------- 194 (1 row) count ------- 209 (1 row) count ------- 205 (1 row) count ------- 199 (1 row) count ------- 186 (1 row) count ------- 187 (1 row) count ------- 195 (1 row) count ------- 223 (1 row) count ------- 214 (1 row) count ------- 212 (1 row) count ------- 196 (1 row) count ------- 220 (1 row) count ------- 195 (1 row) count ------- 172 (1 row) count ------- 203 (1 row) count ------- 191 (1 row) count ------- 208 (1 row) count ------- 197 (1 row) count ------- 196 (1 row) count ------- 174 (1 row) count ------- 208 (1 row) count ------- 204 (1 row) count ------- 184 (1 row) count ------- 204 (1 row) count ------- 213 (1 row) count ------- 184 (1 row) count ------- 197 (1 row) count ------- 205 (1 row) count ------- 198 (1 row) count ------- 225 (1 row) count ------- 190 (1 row) count ------- 216 (1 row) count ------- 192 (1 row) count ------- 179 (1 row) count ------- 199 (1 row) count ------- 210 (1 row) count ------- 198 (1 row) count ------- 195 (1 row) count ------- 189 (1 row) count ------- 216 (1 row) count ------- 197 (1 row) count ------- 183 (1 row) count ------- 176 (1 row) count ------- 197 (1 row) count ------- 171 (1 row) count ------- 173 (1 row) count ------- 194 (1 row) count ------- 188 (1 row) count ------- 180 (1 row) count ------- 759 (1 row) count ------- 718 (1 row) count ------- 761 (1 row) count ------- 798 (1 row) count ------- 786 (1 row) count ------- 782 (1 row) count ------- 764 (1 row) count ------- 823 (1 row) count ------- 776 (1 row) count ------- 812 (1 row) count ------- 778 (1 row) count ------- 745 (1 row) count ------- 778 (1 row) count ------- 740 (1 row) count ------- 772 (1 row) count ------- 758 (1 row) count ------- 748 (1 row) count ------- 783 (1 row) count ------- 767 (1 row) count ------- 748 (1 row) count ------- 795 (1 row) count ------- 746 (1 row) count ------- 801 (1 row) count ------- 803 (1 row) count ------- 820 (1 row) count ------- 785 (1 row) count ------- 826 (1 row) count ------- 809 (1 row) count ------- 792 (1 row) count ------- 781 (1 row) count ------- 779 (1 row) count ------- 779 (1 row) count ------- 755 (1 row) count ------- 764 (1 row) count ------- 770 (1 row) count ------- 815 (1 row) count ------- 802 (1 row) count ------- 838 (1 row) count ------- 756 (1 row) count ------- 725 (1 row) count ------- 811 (1 row) count ------- 735 (1 row) count ------- 804 (1 row) count ------- 824 (1 row) count ------- 816 (1 row) count ------- 807 (1 row) count ------- 754 (1 row) count ------- 834 (1 row) count ------- 764 (1 row) count ------- 807 (1 row) count ------- 815 (1 row) count ------- 838 (1 row) count ------- 824 (1 row) count ------- 764 (1 row) count ------- 821 (1 row) count ------- 755 (1 row) count ------- 725 (1 row) count ------- 778 (1 row) count ------- 769 (1 row) count ------- 817 (1 row) count ------- 762 (1 row) count ------- 743 (1 row) count ------- 747 (1 row) count ------- 778 (1 row) count ------- 716 (1 row) count ------- 812 (1 row) count ------- 822 (1 row) count ------- 805 (1 row) count ------- 760 (1 row) count ------- 829 (1 row) count ------- 756 (1 row) count ------- 785 (1 row) count ------- 777 (1 row) count ------- 789 (1 row) count ------- 785 (1 row) count ------- 808 (1 row) count ------- 741 (1 row) count ------- 752 (1 row) count ------- 788 (1 row) count ------- 725 (1 row) count ------- 779 (1 row) count ------- 816 (1 row) count ------- 801 (1 row) count ------- 796 (1 row) count ------- 740 (1 row) count ------- 753 (1 row) count ------- 740 (1 row) count ------- 801 (1 row) count ------- 746 (1 row) count ------- 781 (1 row) count ------- 797 (1 row) count ------- 802 (1 row) count ------- 761 (1 row) count ------- 751 (1 row) count ------- 782 (1 row) count ------- 772 (1 row) count ------- 781 (1 row) count ------- 790 (1 row) count ------- 811 (1 row) count ------- 789 (1 row) count ------- 3072 (1 row) count ------- 3110 (1 row) count ------- 3036 (1 row) count ------- 3088 (1 row) count ------- 3250 (1 row) count ------- 3177 (1 row) count ------- 3097 (1 row) count ------- 3111 (1 row) count ------- 3160 (1 row) count ------- 3073 (1 row) count ------- 3124 (1 row) count ------- 3140 (1 row) count ------- 3055 (1 row) count ------- 3144 (1 row) count ------- 3075 (1 row) count ------- 3049 (1 row) count ------- 3021 (1 row) count ------- 3106 (1 row) count ------- 3161 (1 row) count ------- 2992 (1 row) count ------- 3171 (1 row) count ------- 3190 (1 row) count ------- 2983 (1 row) count ------- 3110 (1 row) count ------- 3197 (1 row) count ------- 3184 (1 row) count ------- 3197 (1 row) count ------- 3128 (1 row) count ------- 3146 (1 row) count ------- 3209 (1 row) count ------- 3121 (1 row) count ------- 3169 (1 row) count ------- 2988 (1 row) count ------- 3013 (1 row) count ------- 3164 (1 row) count ------- 3127 (1 row) count ------- 3148 (1 row) count ------- 3163 (1 row) count ------- 3203 (1 row) count ------- 3103 (1 row) count ------- 3140 (1 row) count ------- 3067 (1 row) count ------- 3137 (1 row) count ------- 3112 (1 row) count ------- 3163 (1 row) count ------- 2986 (1 row) count ------- 3112 (1 row) count ------- 3177 (1 row) count ------- 3019 (1 row) count ------- 3084 (1 row) count ------- 3045 (1 row) count ------- 3135 (1 row) count ------- 3193 (1 row) count ------- 3166 (1 row) count ------- 3074 (1 row) count ------- 3135 (1 row) count ------- 3086 (1 row) count ------- 3257 (1 row) count ------- 3113 (1 row) count ------- 3026 (1 row) count ------- 3146 (1 row) count ------- 3183 (1 row) count ------- 3099 (1 row) count ------- 3013 (1 row) count ------- 3250 (1 row) count ------- 3204 (1 row) count ------- 3178 (1 row) count ------- 3169 (1 row) count ------- 3151 (1 row) count ------- 3135 (1 row) count ------- 3095 (1 row) count ------- 3136 (1 row) count ------- 3130 (1 row) count ------- 3261 (1 row) count ------- 3124 (1 row) count ------- 3277 (1 row) count ------- 3114 (1 row) count ------- 3195 (1 row) count ------- 3059 (1 row) count ------- 3128 (1 row) count ------- 3104 (1 row) count ------- 3029 (1 row) count ------- 3261 (1 row) count ------- 3050 (1 row) count ------- 3129 (1 row) count ------- 3208 (1 row) count ------- 3106 (1 row) count ------- 3148 (1 row) count ------- 3232 (1 row) count ------- 3154 (1 row) count ------- 3097 (1 row) count ------- 3104 (1 row) count ------- 3205 (1 row) count ------- 3079 (1 row) count ------- 3080 (1 row) count ------- 3089 (1 row) count ------- 3053 (1 row) count ------- 3165 (1 row) count ------- 3200 (1 row) count ------- 3127 (1 row) count ------- 2715 (1 row) count ------- 2625 (1 row) count ------- 2699 (1 row) count ------- 2602 (1 row) count ------- 2810 (1 row) count ------- 2777 (1 row) count ------- 2798 (1 row) count ------- 2822 (1 row) count ------- 2650 (1 row) count ------- 2684 (1 row) count ------- 2565 (1 row) count ------- 2720 (1 row) count ------- 2659 (1 row) count ------- 2726 (1 row) count ------- 2633 (1 row) count ------- 2734 (1 row) count ------- 2810 (1 row) count ------- 2734 (1 row) count ------- 2767 (1 row) count ------- 2763 (1 row) count ------- 2646 (1 row) count ------- 2600 (1 row) count ------- 2625 (1 row) count ------- 2599 (1 row) count ------- 2745 (1 row) count ------- 2741 (1 row) count ------- 2732 (1 row) count ------- 2728 (1 row) count ------- 2715 (1 row) count ------- 2712 (1 row) count ------- 2730 (1 row) count ------- 2732 (1 row) count ------- 88 (1 row) q3c-2.0.0/expected/join.expected000066400000000000000000000002431363277220100164640ustar00rootroot00000000000000 count ------- 1343 (1 row) count ------- 1462 (1 row) count ------- 7768 (1 row) count ------- 28035 (1 row) count -------- 137000 (1 row) q3c-2.0.0/expected/join_pm1.expected000066400000000000000000000005061363277220100172430ustar00rootroot00000000000000 count ------- 1460 (1 row) count ------- 1561 (1 row) count ------- 7882 (1 row) count ------- 28308 (1 row) count -------- 137223 (1 row) count ------- 1460 (1 row) count ------- 1561 (1 row) count ------- 7882 (1 row) count ------- 28308 (1 row) count -------- 137223 (1 row) q3c-2.0.0/expected/join_pm2.expected000066400000000000000000000012141363277220100172410ustar00rootroot00000000000000 count ------- 286 (1 row) count ------- 1209 (1 row) count ------- 6792 (1 row) count ------- 29671 (1 row) count -------- 133637 (1 row) count ------- 286 (1 row) count ------- 1209 (1 row) count ------- 6792 (1 row) count ------- 29671 (1 row) count -------- 133637 (1 row) count ------- 307 (1 row) count ------- 1210 (1 row) count ------- 6849 (1 row) count ------- 29704 (1 row) count -------- 133672 (1 row) count ------- 307 (1 row) count ------- 1210 (1 row) count ------- 6849 (1 row) count ------- 29704 (1 row) count -------- 133672 (1 row) q3c-2.0.0/expected/poly.expected000066400000000000000000011610001363277220100165100ustar00rootroot00000000000000 count ------- 86 (1 row) count ------- 32 (1 row) count ------- 122 (1 row) count ------- 99 (1 row) count ------- 113 (1 row) count ------- 180 (1 row) count ------- 81 (1 row) count ------- 122 (1 row) count ------- 64 (1 row) count ------- 229 (1 row) count ------- 185 (1 row) count ------- 76 (1 row) count ------- 127 (1 row) count ------- 167 (1 row) count ------- 115 (1 row) count ------- 136 (1 row) count ------- 136 (1 row) count ------- 91 (1 row) count ------- 29 (1 row) count ------- 41 (1 row) count ------- 297 (1 row) count ------- 91 (1 row) count ------- 125 (1 row) count ------- 66 (1 row) count ------- 43 (1 row) count ------- 113 (1 row) count ------- 192 (1 row) count ------- 34 (1 row) count ------- 183 (1 row) count ------- 193 (1 row) count ------- 11 (1 row) count ------- 264 (1 row) count ------- 131 (1 row) count ------- 210 (1 row) count ------- 134 (1 row) count ------- 84 (1 row) count ------- 8 (1 row) count ------- 12 (1 row) count ------- 139 (1 row) count ------- 95 (1 row) count ------- 49 (1 row) count ------- 107 (1 row) count ------- 69 (1 row) count ------- 142 (1 row) count ------- 117 (1 row) count ------- 158 (1 row) count ------- 267 (1 row) count ------- 60 (1 row) count ------- 173 (1 row) count ------- 180 (1 row) count ------- 53 (1 row) count ------- 143 (1 row) count ------- 163 (1 row) count ------- 182 (1 row) count ------- 7 (1 row) count ------- 152 (1 row) count ------- 94 (1 row) count ------- 24 (1 row) count ------- 24 (1 row) count ------- 186 (1 row) count ------- 100 (1 row) count ------- 112 (1 row) count ------- 199 (1 row) count ------- 92 (1 row) count ------- 34 (1 row) count ------- 101 (1 row) count ------- 66 (1 row) count ------- 67 (1 row) count ------- 193 (1 row) count ------- 119 (1 row) count ------- 204 (1 row) count ------- 133 (1 row) count ------- 70 (1 row) count ------- 120 (1 row) count ------- 66 (1 row) count ------- 138 (1 row) count ------- 111 (1 row) count ------- 102 (1 row) count ------- 188 (1 row) count ------- 158 (1 row) count ------- 90 (1 row) count ------- 20 (1 row) count ------- 229 (1 row) count ------- 130 (1 row) count ------- 237 (1 row) count ------- 14 (1 row) count ------- 44 (1 row) count ------- 152 (1 row) count ------- 188 (1 row) count ------- 81 (1 row) count ------- 64 (1 row) count ------- 142 (1 row) count ------- 169 (1 row) count ------- 209 (1 row) count ------- 117 (1 row) count ------- 139 (1 row) count ------- 183 (1 row) count ------- 123 (1 row) count ------- 109 (1 row) count ------- 236 (1 row) count ------- 256 (1 row) count ------- 41 (1 row) count ------- 183 (1 row) count ------- 124 (1 row) count ------- 237 (1 row) count ------- 107 (1 row) count ------- 99 (1 row) count ------- 182 (1 row) count ------- 140 (1 row) count ------- 243 (1 row) count ------- 64 (1 row) count ------- 158 (1 row) count ------- 201 (1 row) count ------- 83 (1 row) count ------- 59 (1 row) count ------- 41 (1 row) count ------- 103 (1 row) count ------- 193 (1 row) count ------- 118 (1 row) count ------- 11 (1 row) count ------- 36 (1 row) count ------- 30 (1 row) count ------- 164 (1 row) count ------- 81 (1 row) count ------- 307 (1 row) count ------- 92 (1 row) count ------- 47 (1 row) count ------- 249 (1 row) count ------- 87 (1 row) count ------- 208 (1 row) count ------- 182 (1 row) count ------- 147 (1 row) count ------- 127 (1 row) count ------- 134 (1 row) count ------- 179 (1 row) count ------- 190 (1 row) count ------- 111 (1 row) count ------- 25 (1 row) count ------- 93 (1 row) count ------- 76 (1 row) count ------- 129 (1 row) count ------- 169 (1 row) count ------- 157 (1 row) count ------- 93 (1 row) count ------- 79 (1 row) count ------- 161 (1 row) count ------- 233 (1 row) count ------- 30 (1 row) count ------- 46 (1 row) count ------- 118 (1 row) count ------- 104 (1 row) count ------- 132 (1 row) count ------- 198 (1 row) count ------- 132 (1 row) count ------- 150 (1 row) count ------- 169 (1 row) count ------- 120 (1 row) count ------- 175 (1 row) count ------- 105 (1 row) count ------- 25 (1 row) count ------- 67 (1 row) count ------- 86 (1 row) count ------- 104 (1 row) count ------- 208 (1 row) count ------- 242 (1 row) count ------- 199 (1 row) count ------- 113 (1 row) count ------- 227 (1 row) count ------- 193 (1 row) count ------- 86 (1 row) count ------- 175 (1 row) count ------- 172 (1 row) count ------- 35 (1 row) count ------- 310 (1 row) count ------- 66 (1 row) count ------- 5 (1 row) count ------- 51 (1 row) count ------- 158 (1 row) count ------- 122 (1 row) count ------- 81 (1 row) count ------- 103 (1 row) count ------- 83 (1 row) count ------- 133 (1 row) count ------- 112 (1 row) count ------- 131 (1 row) count ------- 63 (1 row) count ------- 104 (1 row) count ------- 185 (1 row) count ------- 200 (1 row) count ------- 30 (1 row) count ------- 168 (1 row) count ------- 148 (1 row) count ------- 282 (1 row) count ------- 192 (1 row) count ------- 153 (1 row) count ------- 110 (1 row) count ------- 231 (1 row) count ------- 113 (1 row) count ------- 45 (1 row) count ------- 102 (1 row) count ------- 95 (1 row) count ------- 139 (1 row) count ------- 89 (1 row) count ------- 31 (1 row) count ------- 84 (1 row) count ------- 147 (1 row) count ------- 112 (1 row) count ------- 170 (1 row) count ------- 59 (1 row) count ------- 114 (1 row) count ------- 43 (1 row) count ------- 71 (1 row) count ------- 39 (1 row) count ------- 147 (1 row) count ------- 93 (1 row) count ------- 96 (1 row) count ------- 7 (1 row) count ------- 159 (1 row) count ------- 232 (1 row) count ------- 211 (1 row) count ------- 289 (1 row) count ------- 157 (1 row) count ------- 180 (1 row) count ------- 120 (1 row) count ------- 141 (1 row) count ------- 65 (1 row) count ------- 27 (1 row) count ------- 192 (1 row) count ------- 113 (1 row) count ------- 186 (1 row) count ------- 12 (1 row) count ------- 19 (1 row) count ------- 19 (1 row) count ------- 116 (1 row) count ------- 37 (1 row) count ------- 38 (1 row) count ------- 12 (1 row) count ------- 75 (1 row) count ------- 62 (1 row) count ------- 98 (1 row) count ------- 209 (1 row) count ------- 103 (1 row) count ------- 146 (1 row) count ------- 116 (1 row) count ------- 154 (1 row) count ------- 37 (1 row) count ------- 111 (1 row) count ------- 174 (1 row) count ------- 126 (1 row) count ------- 283 (1 row) count ------- 80 (1 row) count ------- 126 (1 row) count ------- 55 (1 row) count ------- 67 (1 row) count ------- 57 (1 row) count ------- 154 (1 row) count ------- 159 (1 row) count ------- 161 (1 row) count ------- 95 (1 row) count ------- 85 (1 row) count ------- 23 (1 row) count ------- 50 (1 row) count ------- 86 (1 row) count ------- 96 (1 row) count ------- 85 (1 row) count ------- 118 (1 row) count ------- 162 (1 row) count ------- 41 (1 row) count ------- 63 (1 row) count ------- 58 (1 row) count ------- 233 (1 row) count ------- 246 (1 row) count ------- 142 (1 row) count ------- 310 (1 row) count ------- 325 (1 row) count ------- 106 (1 row) count ------- 45 (1 row) count ------- 181 (1 row) count ------- 253 (1 row) count ------- 135 (1 row) count ------- 74 (1 row) count ------- 159 (1 row) count ------- 200 (1 row) count ------- 182 (1 row) count ------- 86 (1 row) count ------- 90 (1 row) count ------- 119 (1 row) count ------- 268 (1 row) count ------- 77 (1 row) count ------- 255 (1 row) count ------- 45 (1 row) count ------- 209 (1 row) count ------- 58 (1 row) count ------- 33 (1 row) count ------- 84 (1 row) count ------- 122 (1 row) count ------- 163 (1 row) count ------- 40 (1 row) count ------- 175 (1 row) count ------- 227 (1 row) count ------- 60 (1 row) count ------- 115 (1 row) count ------- 112 (1 row) count ------- 83 (1 row) count ------- 165 (1 row) count ------- 154 (1 row) count ------- 264 (1 row) count ------- 51 (1 row) count ------- 7 (1 row) count ------- 53 (1 row) count ------- 236 (1 row) count ------- 127 (1 row) count ------- 63 (1 row) count ------- 128 (1 row) count ------- 252 (1 row) count ------- 85 (1 row) count ------- 110 (1 row) count ------- 125 (1 row) count ------- 229 (1 row) count ------- 103 (1 row) count ------- 305 (1 row) count ------- 217 (1 row) count ------- 50 (1 row) count ------- 60 (1 row) count ------- 214 (1 row) count ------- 91 (1 row) count ------- 61 (1 row) count ------- 129 (1 row) count ------- 287 (1 row) count ------- 123 (1 row) count ------- 153 (1 row) count ------- 236 (1 row) count ------- 158 (1 row) count ------- 205 (1 row) count ------- 93 (1 row) count ------- 195 (1 row) count ------- 35 (1 row) count ------- 110 (1 row) count ------- 194 (1 row) count ------- 189 (1 row) count ------- 238 (1 row) count ------- 215 (1 row) count ------- 206 (1 row) count ------- 77 (1 row) count ------- 48 (1 row) count ------- 236 (1 row) count ------- 266 (1 row) count ------- 88 (1 row) count ------- 174 (1 row) count ------- 349 (1 row) count ------- 40 (1 row) count ------- 111 (1 row) count ------- 65 (1 row) count ------- 277 (1 row) count ------- 11 (1 row) count ------- 83 (1 row) count ------- 125 (1 row) count ------- 102 (1 row) count ------- 38 (1 row) count ------- 45 (1 row) count ------- 170 (1 row) count ------- 64 (1 row) count ------- 63 (1 row) count ------- 40 (1 row) count ------- 169 (1 row) count ------- 51 (1 row) count ------- 171 (1 row) count ------- 114 (1 row) count ------- 237 (1 row) count ------- 186 (1 row) count ------- 39 (1 row) count ------- 68 (1 row) count ------- 5 (1 row) count ------- 24 (1 row) count ------- 156 (1 row) count ------- 96 (1 row) count ------- 94 (1 row) count ------- 57 (1 row) count ------- 12 (1 row) count ------- 185 (1 row) count ------- 118 (1 row) count ------- 97 (1 row) count ------- 151 (1 row) count ------- 10 (1 row) count ------- 61 (1 row) count ------- 85 (1 row) count ------- 70 (1 row) count ------- 201 (1 row) count ------- 75 (1 row) count ------- 168 (1 row) count ------- 276 (1 row) count ------- 70 (1 row) count ------- 78 (1 row) count ------- 78 (1 row) count ------- 57 (1 row) count ------- 224 (1 row) count ------- 143 (1 row) count ------- 68 (1 row) count ------- 113 (1 row) count ------- 96 (1 row) count ------- 136 (1 row) count ------- 32 (1 row) count ------- 132 (1 row) count ------- 163 (1 row) count ------- 46 (1 row) count ------- 124 (1 row) count ------- 10 (1 row) count ------- 42 (1 row) count ------- 108 (1 row) count ------- 30 (1 row) count ------- 83 (1 row) count ------- 227 (1 row) count ------- 203 (1 row) count ------- 322 (1 row) count ------- 330 (1 row) count ------- 117 (1 row) count ------- 13 (1 row) count ------- 105 (1 row) count ------- 3 (1 row) count ------- 23 (1 row) count ------- 22 (1 row) count ------- 168 (1 row) count ------- 58 (1 row) count ------- 197 (1 row) count ------- 127 (1 row) count ------- 251 (1 row) count ------- 123 (1 row) count ------- 211 (1 row) count ------- 57 (1 row) count ------- 136 (1 row) count ------- 107 (1 row) count ------- 186 (1 row) count ------- 314 (1 row) count ------- 61 (1 row) count ------- 159 (1 row) count ------- 133 (1 row) count ------- 61 (1 row) count ------- 75 (1 row) count ------- 148 (1 row) count ------- 16 (1 row) count ------- 0 (1 row) count ------- 35 (1 row) count ------- 258 (1 row) count ------- 2 (1 row) count ------- 57 (1 row) count ------- 81 (1 row) count ------- 86 (1 row) count ------- 69 (1 row) count ------- 112 (1 row) count ------- 92 (1 row) count ------- 181 (1 row) count ------- 17 (1 row) count ------- 66 (1 row) count ------- 206 (1 row) count ------- 208 (1 row) count ------- 39 (1 row) count ------- 130 (1 row) count ------- 137 (1 row) count ------- 49 (1 row) count ------- 25 (1 row) count ------- 173 (1 row) count ------- 59 (1 row) count ------- 68 (1 row) count ------- 76 (1 row) count ------- 108 (1 row) count ------- 201 (1 row) count ------- 274 (1 row) count ------- 89 (1 row) count ------- 51 (1 row) count ------- 95 (1 row) count ------- 3 (1 row) count ------- 145 (1 row) count ------- 104 (1 row) count ------- 52 (1 row) count ------- 111 (1 row) count ------- 84 (1 row) count ------- 20 (1 row) count ------- 8 (1 row) count ------- 56 (1 row) count ------- 203 (1 row) count ------- 148 (1 row) count ------- 141 (1 row) count ------- 84 (1 row) count ------- 123 (1 row) count ------- 42 (1 row) count ------- 193 (1 row) count ------- 145 (1 row) count ------- 74 (1 row) count ------- 154 (1 row) count ------- 55 (1 row) count ------- 194 (1 row) count ------- 190 (1 row) count ------- 82 (1 row) count ------- 53 (1 row) count ------- 61 (1 row) count ------- 151 (1 row) count ------- 223 (1 row) count ------- 141 (1 row) count ------- 24 (1 row) count ------- 97 (1 row) count ------- 252 (1 row) count ------- 162 (1 row) count ------- 1 (1 row) count ------- 34 (1 row) count ------- 79 (1 row) count ------- 92 (1 row) count ------- 189 (1 row) count ------- 56 (1 row) count ------- 263 (1 row) count ------- 65 (1 row) count ------- 133 (1 row) count ------- 70 (1 row) count ------- 164 (1 row) count ------- 75 (1 row) count ------- 208 (1 row) count ------- 152 (1 row) count ------- 0 (1 row) count ------- 106 (1 row) count ------- 166 (1 row) count ------- 89 (1 row) count ------- 204 (1 row) count ------- 151 (1 row) count ------- 55 (1 row) count ------- 178 (1 row) count ------- 50 (1 row) count ------- 264 (1 row) count ------- 23 (1 row) count ------- 63 (1 row) count ------- 166 (1 row) count ------- 333 (1 row) count ------- 95 (1 row) count ------- 129 (1 row) count ------- 283 (1 row) count ------- 155 (1 row) count ------- 33 (1 row) count ------- 100 (1 row) count ------- 137 (1 row) count ------- 61 (1 row) count ------- 56 (1 row) count ------- 114 (1 row) count ------- 107 (1 row) count ------- 65 (1 row) count ------- 152 (1 row) count ------- 279 (1 row) count ------- 54 (1 row) count ------- 254 (1 row) count ------- 101 (1 row) count ------- 154 (1 row) count ------- 60 (1 row) count ------- 190 (1 row) count ------- 151 (1 row) count ------- 210 (1 row) count ------- 117 (1 row) count ------- 100 (1 row) count ------- 132 (1 row) count ------- 27 (1 row) count ------- 95 (1 row) count ------- 89 (1 row) count ------- 191 (1 row) count ------- 133 (1 row) count ------- 35 (1 row) count ------- 135 (1 row) count ------- 162 (1 row) count ------- 175 (1 row) count ------- 103 (1 row) count ------- 129 (1 row) count ------- 95 (1 row) count ------- 104 (1 row) count ------- 157 (1 row) count ------- 172 (1 row) count ------- 344 (1 row) count ------- 17 (1 row) count ------- 80 (1 row) count ------- 193 (1 row) count ------- 239 (1 row) count ------- 234 (1 row) count ------- 138 (1 row) count ------- 21 (1 row) count ------- 20 (1 row) count ------- 78 (1 row) count ------- 168 (1 row) count ------- 211 (1 row) count ------- 89 (1 row) count ------- 43 (1 row) count ------- 57 (1 row) count ------- 189 (1 row) count ------- 92 (1 row) count ------- 50 (1 row) count ------- 130 (1 row) count ------- 188 (1 row) count ------- 140 (1 row) count ------- 153 (1 row) count ------- 85 (1 row) count ------- 201 (1 row) count ------- 3 (1 row) count ------- 79 (1 row) count ------- 36 (1 row) count ------- 83 (1 row) count ------- 25 (1 row) count ------- 236 (1 row) count ------- 139 (1 row) count ------- 245 (1 row) count ------- 4 (1 row) count ------- 109 (1 row) count ------- 126 (1 row) count ------- 109 (1 row) count ------- 31 (1 row) count ------- 102 (1 row) count ------- 157 (1 row) count ------- 42 (1 row) count ------- 59 (1 row) count ------- 156 (1 row) count ------- 130 (1 row) count ------- 38 (1 row) count ------- 139 (1 row) count ------- 185 (1 row) count ------- 114 (1 row) count ------- 281 (1 row) count ------- 87 (1 row) count ------- 41 (1 row) count ------- 153 (1 row) count ------- 48 (1 row) count ------- 23 (1 row) count ------- 178 (1 row) count ------- 70 (1 row) count ------- 180 (1 row) count ------- 130 (1 row) count ------- 171 (1 row) count ------- 30 (1 row) count ------- 71 (1 row) count ------- 120 (1 row) count ------- 19 (1 row) count ------- 145 (1 row) count ------- 105 (1 row) count ------- 131 (1 row) count ------- 241 (1 row) count ------- 99 (1 row) count ------- 209 (1 row) count ------- 147 (1 row) count ------- 178 (1 row) count ------- 235 (1 row) count ------- 114 (1 row) count ------- 42 (1 row) count ------- 92 (1 row) count ------- 53 (1 row) count ------- 166 (1 row) count ------- 180 (1 row) count ------- 31 (1 row) count ------- 155 (1 row) count ------- 89 (1 row) count ------- 56 (1 row) count ------- 99 (1 row) count ------- 38 (1 row) count ------- 56 (1 row) count ------- 213 (1 row) count ------- 94 (1 row) count ------- 217 (1 row) count ------- 186 (1 row) count ------- 9 (1 row) count ------- 74 (1 row) count ------- 139 (1 row) count ------- 84 (1 row) count ------- 152 (1 row) count ------- 31 (1 row) count ------- 82 (1 row) count ------- 159 (1 row) count ------- 34 (1 row) count ------- 136 (1 row) count ------- 223 (1 row) count ------- 39 (1 row) count ------- 68 (1 row) count ------- 179 (1 row) count ------- 304 (1 row) count ------- 193 (1 row) count ------- 236 (1 row) count ------- 66 (1 row) count ------- 214 (1 row) count ------- 77 (1 row) count ------- 46 (1 row) count ------- 101 (1 row) count ------- 97 (1 row) count ------- 40 (1 row) count ------- 121 (1 row) count ------- 75 (1 row) count ------- 101 (1 row) count ------- 199 (1 row) count ------- 122 (1 row) count ------- 164 (1 row) count ------- 173 (1 row) count ------- 141 (1 row) count ------- 129 (1 row) count ------- 195 (1 row) count ------- 113 (1 row) count ------- 71 (1 row) count ------- 69 (1 row) count ------- 291 (1 row) count ------- 141 (1 row) count ------- 179 (1 row) count ------- 310 (1 row) count ------- 113 (1 row) count ------- 84 (1 row) count ------- 28 (1 row) count ------- 151 (1 row) count ------- 122 (1 row) count ------- 257 (1 row) count ------- 141 (1 row) count ------- 51 (1 row) count ------- 79 (1 row) count ------- 220 (1 row) count ------- 168 (1 row) count ------- 41 (1 row) count ------- 108 (1 row) count ------- 229 (1 row) count ------- 165 (1 row) count ------- 83 (1 row) count ------- 231 (1 row) count ------- 108 (1 row) count ------- 381 (1 row) count ------- 78 (1 row) count ------- 70 (1 row) count ------- 33 (1 row) count ------- 111 (1 row) count ------- 37 (1 row) count ------- 78 (1 row) count ------- 47 (1 row) count ------- 49 (1 row) count ------- 139 (1 row) count ------- 104 (1 row) count ------- 93 (1 row) count ------- 170 (1 row) count ------- 37 (1 row) count ------- 114 (1 row) count ------- 131 (1 row) count ------- 100 (1 row) count ------- 47 (1 row) count ------- 99 (1 row) count ------- 74 (1 row) count ------- 57 (1 row) count ------- 140 (1 row) count ------- 98 (1 row) count ------- 17 (1 row) count ------- 178 (1 row) count ------- 220 (1 row) count ------- 95 (1 row) count ------- 104 (1 row) count ------- 127 (1 row) count ------- 64 (1 row) count ------- 49 (1 row) count ------- 117 (1 row) count ------- 176 (1 row) count ------- 182 (1 row) count ------- 148 (1 row) count ------- 262 (1 row) count ------- 116 (1 row) count ------- 230 (1 row) count ------- 169 (1 row) count ------- 44 (1 row) count ------- 147 (1 row) count ------- 224 (1 row) count ------- 116 (1 row) count ------- 68 (1 row) count ------- 98 (1 row) count ------- 166 (1 row) count ------- 93 (1 row) count ------- 118 (1 row) count ------- 176 (1 row) count ------- 133 (1 row) count ------- 162 (1 row) count ------- 215 (1 row) count ------- 148 (1 row) count ------- 124 (1 row) count ------- 256 (1 row) count ------- 73 (1 row) count ------- 91 (1 row) count ------- 35 (1 row) count ------- 32 (1 row) count ------- 27 (1 row) count ------- 150 (1 row) count ------- 227 (1 row) count ------- 172 (1 row) count ------- 135 (1 row) count ------- 27 (1 row) count ------- 125 (1 row) count ------- 239 (1 row) count ------- 132 (1 row) count ------- 38 (1 row) count ------- 83 (1 row) count ------- 8 (1 row) count ------- 342 (1 row) count ------- 80 (1 row) count ------- 78 (1 row) count ------- 228 (1 row) count ------- 221 (1 row) count ------- 224 (1 row) count ------- 85 (1 row) count ------- 76 (1 row) count ------- 104 (1 row) count ------- 149 (1 row) count ------- 216 (1 row) count ------- 168 (1 row) count ------- 131 (1 row) count ------- 143 (1 row) count ------- 148 (1 row) count ------- 166 (1 row) count ------- 75 (1 row) count ------- 42 (1 row) count ------- 58 (1 row) count ------- 49 (1 row) count ------- 159 (1 row) count ------- 251 (1 row) count ------- 254 (1 row) count ------- 240 (1 row) count ------- 227 (1 row) count ------- 133 (1 row) count ------- 139 (1 row) count ------- 184 (1 row) count ------- 56 (1 row) count ------- 39 (1 row) count ------- 33 (1 row) count ------- 77 (1 row) count ------- 200 (1 row) count ------- 247 (1 row) count ------- 167 (1 row) count ------- 131 (1 row) count ------- 110 (1 row) count ------- 75 (1 row) count ------- 102 (1 row) count ------- 158 (1 row) count ------- 55 (1 row) count ------- 20 (1 row) count ------- 74 (1 row) count ------- 152 (1 row) count ------- 61 (1 row) count ------- 72 (1 row) count ------- 23 (1 row) count ------- 278 (1 row) count ------- 37 (1 row) count ------- 37 (1 row) count ------- 203 (1 row) count ------- 150 (1 row) count ------- 27 (1 row) count ------- 145 (1 row) count ------- 282 (1 row) count ------- 196 (1 row) count ------- 71 (1 row) count ------- 119 (1 row) count ------- 262 (1 row) count ------- 112 (1 row) count ------- 323 (1 row) count ------- 112 (1 row) count ------- 231 (1 row) count ------- 56 (1 row) count ------- 186 (1 row) count ------- 144 (1 row) count ------- 192 (1 row) count ------- 54 (1 row) count ------- 22 (1 row) count ------- 28 (1 row) count ------- 8 (1 row) count ------- 6 (1 row) count ------- 98 (1 row) count ------- 97 (1 row) count ------- 85 (1 row) count ------- 63 (1 row) count ------- 127 (1 row) count ------- 195 (1 row) count ------- 62 (1 row) count ------- 92 (1 row) count ------- 75 (1 row) count ------- 12 (1 row) count ------- 165 (1 row) count ------- 20 (1 row) count ------- 72 (1 row) count ------- 173 (1 row) count ------- 128 (1 row) count ------- 31 (1 row) count ------- 75 (1 row) count ------- 150 (1 row) count ------- 147 (1 row) count ------- 267 (1 row) count ------- 230 (1 row) count ------- 33 (1 row) count ------- 142 (1 row) count ------- 311 (1 row) count ------- 7 (1 row) count ------- 71 (1 row) count ------- 267 (1 row) count ------- 74 (1 row) count ------- 120 (1 row) count ------- 239 (1 row) count ------- 151 (1 row) count ------- 201 (1 row) count ------- 154 (1 row) count ------- 122 (1 row) count ------- 61 (1 row) count ------- 237 (1 row) count ------- 115 (1 row) count ------- 101 (1 row) count ------- 94 (1 row) count ------- 259 (1 row) count ------- 152 (1 row) count ------- 145 (1 row) count ------- 84 (1 row) count ------- 178 (1 row) count ------- 125 (1 row) count ------- 132 (1 row) count ------- 30 (1 row) count ------- 126 (1 row) count ------- 167 (1 row) count ------- 185 (1 row) count ------- 190 (1 row) count ------- 150 (1 row) count ------- 107 (1 row) count ------- 39 (1 row) count ------- 53 (1 row) count ------- 35 (1 row) count ------- 8 (1 row) count ------- 298 (1 row) count ------- 10 (1 row) count ------- 163 (1 row) count ------- 77 (1 row) count ------- 137 (1 row) count ------- 215 (1 row) count ------- 98 (1 row) count ------- 168 (1 row) count ------- 150 (1 row) count ------- 122 (1 row) count ------- 47 (1 row) count ------- 65 (1 row) count ------- 61 (1 row) count ------- 159 (1 row) count ------- 140 (1 row) count ------- 134 (1 row) count ------- 101 (1 row) count ------- 113 (1 row) count ------- 182 (1 row) count ------- 82 (1 row) count ------- 253 (1 row) count ------- 35 (1 row) count ------- 63 (1 row) count ------- 10 (1 row) count ------- 116 (1 row) count ------- 107 (1 row) count ------- 75 (1 row) count ------- 190 (1 row) count ------- 100 (1 row) count ------- 94 (1 row) count ------- 13 (1 row) count ------- 109 (1 row) count ------- 150 (1 row) count ------- 207 (1 row) count ------- 24 (1 row) count ------- 220 (1 row) count ------- 160 (1 row) count ------- 115 (1 row) count ------- 261 (1 row) count ------- 172 (1 row) count ------- 222 (1 row) count ------- 109 (1 row) count ------- 108 (1 row) count ------- 57 (1 row) count ------- 81 (1 row) count ------- 82 (1 row) count ------- 31 (1 row) count ------- 70 (1 row) count ------- 56 (1 row) count ------- 82 (1 row) count ------- 66 (1 row) count ------- 46 (1 row) count ------- 32 (1 row) count ------- 192 (1 row) count ------- 73 (1 row) count ------- 250 (1 row) count ------- 196 (1 row) count ------- 133 (1 row) count ------- 314 (1 row) count ------- 37 (1 row) count ------- 96 (1 row) count ------- 189 (1 row) count ------- 174 (1 row) count ------- 151 (1 row) count ------- 242 (1 row) count ------- 122 (1 row) count ------- 102 (1 row) count ------- 81 (1 row) count ------- 155 (1 row) count ------- 102 (1 row) count ------- 152 (1 row) count ------- 101 (1 row) count ------- 53 (1 row) count ------- 82 (1 row) count ------- 80 (1 row) count ------- 199 (1 row) count ------- 50 (1 row) count ------- 19 (1 row) count ------- 194 (1 row) count ------- 131 (1 row) count ------- 10 (1 row) count ------- 203 (1 row) count ------- 159 (1 row) count ------- 110 (1 row) count ------- 95 (1 row) count ------- 371 (1 row) count ------- 30 (1 row) count ------- 60 (1 row) count ------- 153 (1 row) count ------- 40 (1 row) count ------- 6 (1 row) count ------- 126 (1 row) count ------- 115 (1 row) count ------- 76 (1 row) count ------- 99 (1 row) count ------- 288 (1 row) count ------- 83 (1 row) count ------- 120 (1 row) count ------- 23 (1 row) count ------- 84 (1 row) count ------- 137 (1 row) count ------- 138 (1 row) count ------- 79 (1 row) count ------- 84 (1 row) count ------- 270 (1 row) count ------- 182 (1 row) count ------- 56 (1 row) count ------- 35 (1 row) count ------- 109 (1 row) count ------- 69 (1 row) count ------- 105 (1 row) count ------- 121 (1 row) count ------- 89 (1 row) count ------- 7 (1 row) count ------- 95 (1 row) count ------- 12 (1 row) count ------- 87 (1 row) count ------- 82 (1 row) count ------- 130 (1 row) count ------- 202 (1 row) count ------- 75 (1 row) count ------- 129 (1 row) count ------- 169 (1 row) count ------- 117 (1 row) count ------- 79 (1 row) count ------- 57 (1 row) count ------- 181 (1 row) count ------- 54 (1 row) count ------- 313 (1 row) count ------- 236 (1 row) count ------- 42 (1 row) count ------- 189 (1 row) count ------- 292 (1 row) count ------- 162 (1 row) count ------- 55 (1 row) count ------- 142 (1 row) count ------- 17 (1 row) count ------- 246 (1 row) count ------- 236 (1 row) count ------- 65 (1 row) count ------- 245 (1 row) count ------- 102 (1 row) count ------- 180 (1 row) count ------- 156 (1 row) count ------- 133 (1 row) count ------- 81 (1 row) count ------- 223 (1 row) count ------- 142 (1 row) count ------- 93 (1 row) count ------- 179 (1 row) count ------- 124 (1 row) count ------- 108 (1 row) count ------- 88 (1 row) count ------- 112 (1 row) count ------- 231 (1 row) count ------- 178 (1 row) count ------- 13 (1 row) count ------- 153 (1 row) count ------- 96 (1 row) count ------- 282 (1 row) count ------- 165 (1 row) count ------- 114 (1 row) count ------- 22 (1 row) count ------- 134 (1 row) count ------- 21 (1 row) count ------- 157 (1 row) count ------- 2 (1 row) count ------- 74 (1 row) count ------- 5 (1 row) count ------- 162 (1 row) count ------- 144 (1 row) count ------- 382 (1 row) count ------- 112 (1 row) count ------- 217 (1 row) count ------- 3 (1 row) count ------- 147 (1 row) count ------- 70 (1 row) count ------- 165 (1 row) count ------- 133 (1 row) count ------- 244 (1 row) count ------- 59 (1 row) count ------- 140 (1 row) count ------- 165 (1 row) count ------- 144 (1 row) count ------- 98 (1 row) count ------- 117 (1 row) count ------- 112 (1 row) count ------- 264 (1 row) count ------- 85 (1 row) count ------- 135 (1 row) count ------- 147 (1 row) count ------- 140 (1 row) count ------- 79 (1 row) count ------- 92 (1 row) count ------- 35 (1 row) count ------- 127 (1 row) count ------- 32 (1 row) count ------- 171 (1 row) count ------- 176 (1 row) count ------- 141 (1 row) count ------- 140 (1 row) count ------- 163 (1 row) count ------- 133 (1 row) count ------- 37 (1 row) count ------- 6 (1 row) count ------- 173 (1 row) count ------- 271 (1 row) count ------- 330 (1 row) count ------- 77 (1 row) count ------- 168 (1 row) count ------- 150 (1 row) count ------- 167 (1 row) count ------- 1 (1 row) count ------- 142 (1 row) count ------- 153 (1 row) count ------- 175 (1 row) count ------- 35 (1 row) count ------- 69 (1 row) count ------- 132 (1 row) count ------- 74 (1 row) count ------- 63 (1 row) count ------- 154 (1 row) count ------- 210 (1 row) count ------- 102 (1 row) count ------- 313 (1 row) count ------- 21 (1 row) count ------- 30 (1 row) count ------- 221 (1 row) count ------- 107 (1 row) count ------- 117 (1 row) count ------- 117 (1 row) count ------- 151 (1 row) count ------- 91 (1 row) count ------- 250 (1 row) count ------- 156 (1 row) count ------- 78 (1 row) count ------- 76 (1 row) count ------- 262 (1 row) count ------- 106 (1 row) count ------- 80 (1 row) count ------- 172 (1 row) count ------- 130 (1 row) count ------- 46 (1 row) count ------- 154 (1 row) count ------- 196 (1 row) count ------- 63 (1 row) count ------- 257 (1 row) count ------- 194 (1 row) count ------- 194 (1 row) count ------- 106 (1 row) count ------- 31 (1 row) count ------- 76 (1 row) count ------- 45 (1 row) count ------- 255 (1 row) count ------- 182 (1 row) count ------- 13 (1 row) count ------- 253 (1 row) count ------- 97 (1 row) count ------- 12 (1 row) count ------- 12 (1 row) count ------- 181 (1 row) count ------- 137 (1 row) count ------- 147 (1 row) count ------- 63 (1 row) count ------- 172 (1 row) count ------- 42 (1 row) count ------- 48 (1 row) count ------- 143 (1 row) count ------- 50 (1 row) count ------- 80 (1 row) count ------- 143 (1 row) count ------- 164 (1 row) count ------- 59 (1 row) count ------- 168 (1 row) count ------- 232 (1 row) count ------- 88 (1 row) count ------- 124 (1 row) count ------- 174 (1 row) count ------- 107 (1 row) count ------- 119 (1 row) count ------- 55 (1 row) count ------- 26 (1 row) count ------- 135 (1 row) count ------- 86 (1 row) count ------- 198 (1 row) count ------- 126 (1 row) count ------- 22 (1 row) count ------- 22 (1 row) count ------- 31 (1 row) count ------- 43 (1 row) count ------- 267 (1 row) count ------- 55 (1 row) count ------- 109 (1 row) count ------- 119 (1 row) count ------- 70 (1 row) count ------- 57 (1 row) count ------- 130 (1 row) count ------- 88 (1 row) count ------- 213 (1 row) count ------- 172 (1 row) count ------- 196 (1 row) count ------- 116 (1 row) count ------- 192 (1 row) count ------- 117 (1 row) count ------- 121 (1 row) count ------- 64 (1 row) count ------- 157 (1 row) count ------- 8 (1 row) count ------- 9 (1 row) count ------- 133 (1 row) count ------- 113 (1 row) count ------- 135 (1 row) count ------- 53 (1 row) count ------- 221 (1 row) count ------- 166 (1 row) count ------- 34 (1 row) count ------- 81 (1 row) count ------- 142 (1 row) count ------- 117 (1 row) count ------- 182 (1 row) count ------- 205 (1 row) count ------- 127 (1 row) count ------- 285 (1 row) count ------- 238 (1 row) count ------- 274 (1 row) count ------- 155 (1 row) count ------- 84 (1 row) count ------- 204 (1 row) count ------- 240 (1 row) count ------- 22 (1 row) count ------- 60 (1 row) count ------- 121 (1 row) count ------- 134 (1 row) count ------- 121 (1 row) count ------- 131 (1 row) count ------- 32 (1 row) count ------- 97 (1 row) count ------- 174 (1 row) count ------- 27 (1 row) count ------- 124 (1 row) count ------- 27 (1 row) count ------- 49 (1 row) count ------- 98 (1 row) count ------- 101 (1 row) count ------- 3 (1 row) count ------- 159 (1 row) count ------- 87 (1 row) count ------- 151 (1 row) count ------- 15 (1 row) count ------- 187 (1 row) count ------- 117 (1 row) count ------- 147 (1 row) count ------- 59 (1 row) count ------- 292 (1 row) count ------- 202 (1 row) count ------- 60 (1 row) count ------- 146 (1 row) count ------- 75 (1 row) count ------- 184 (1 row) count ------- 209 (1 row) count ------- 169 (1 row) count ------- 70 (1 row) count ------- 131 (1 row) count ------- 72 (1 row) count ------- 133 (1 row) count ------- 97 (1 row) count ------- 107 (1 row) count ------- 199 (1 row) count ------- 334 (1 row) count ------- 64 (1 row) count ------- 34 (1 row) count ------- 156 (1 row) count ------- 22 (1 row) count ------- 215 (1 row) count ------- 7 (1 row) count ------- 103 (1 row) count ------- 162 (1 row) count ------- 102 (1 row) count ------- 182 (1 row) count ------- 71 (1 row) count ------- 105 (1 row) count ------- 133 (1 row) count ------- 141 (1 row) count ------- 311 (1 row) count ------- 83 (1 row) count ------- 84 (1 row) count ------- 170 (1 row) count ------- 21 (1 row) count ------- 71 (1 row) count ------- 72 (1 row) count ------- 50 (1 row) count ------- 84 (1 row) count ------- 107 (1 row) count ------- 159 (1 row) count ------- 162 (1 row) count ------- 105 (1 row) count ------- 277 (1 row) count ------- 160 (1 row) count ------- 46 (1 row) count ------- 20 (1 row) count ------- 176 (1 row) count ------- 31 (1 row) count ------- 58 (1 row) count ------- 181 (1 row) count ------- 150 (1 row) count ------- 64 (1 row) count ------- 134 (1 row) count ------- 106 (1 row) count ------- 186 (1 row) count ------- 47 (1 row) count ------- 108 (1 row) count ------- 100 (1 row) count ------- 98 (1 row) count ------- 78 (1 row) count ------- 145 (1 row) count ------- 162 (1 row) count ------- 265 (1 row) count ------- 12 (1 row) count ------- 54 (1 row) count ------- 280 (1 row) count ------- 147 (1 row) count ------- 160 (1 row) count ------- 98 (1 row) count ------- 63 (1 row) count ------- 119 (1 row) count ------- 151 (1 row) count ------- 50 (1 row) count ------- 150 (1 row) count ------- 115 (1 row) count ------- 105 (1 row) count ------- 99 (1 row) count ------- 42 (1 row) count ------- 108 (1 row) count ------- 185 (1 row) count ------- 106 (1 row) count ------- 157 (1 row) count ------- 24 (1 row) count ------- 176 (1 row) count ------- 196 (1 row) count ------- 9 (1 row) count ------- 212 (1 row) count ------- 209 (1 row) count ------- 86 (1 row) count ------- 236 (1 row) count ------- 67 (1 row) count ------- 51 (1 row) count ------- 29 (1 row) count ------- 123 (1 row) count ------- 102 (1 row) count ------- 164 (1 row) count ------- 142 (1 row) count ------- 138 (1 row) count ------- 136 (1 row) count ------- 283 (1 row) count ------- 119 (1 row) count ------- 174 (1 row) count ------- 140 (1 row) count ------- 126 (1 row) count ------- 54 (1 row) count ------- 160 (1 row) count ------- 100 (1 row) count ------- 79 (1 row) count ------- 51 (1 row) count ------- 26 (1 row) count ------- 196 (1 row) count ------- 118 (1 row) count ------- 45 (1 row) count ------- 78 (1 row) count ------- 53 (1 row) count ------- 99 (1 row) count ------- 53 (1 row) count ------- 63 (1 row) count ------- 79 (1 row) count ------- 125 (1 row) count ------- 194 (1 row) count ------- 243 (1 row) count ------- 79 (1 row) count ------- 192 (1 row) count ------- 120 (1 row) count ------- 288 (1 row) count ------- 134 (1 row) count ------- 261 (1 row) count ------- 105 (1 row) count ------- 230 (1 row) count ------- 182 (1 row) count ------- 70 (1 row) count ------- 145 (1 row) count ------- 14 (1 row) count ------- 164 (1 row) count ------- 49 (1 row) count ------- 24 (1 row) count ------- 129 (1 row) count ------- 117 (1 row) count ------- 280 (1 row) count ------- 190 (1 row) count ------- 108 (1 row) count ------- 112 (1 row) count ------- 45 (1 row) count ------- 10 (1 row) count ------- 2 (1 row) count ------- 83 (1 row) count ------- 125 (1 row) count ------- 107 (1 row) count ------- 168 (1 row) count ------- 64 (1 row) count ------- 67 (1 row) count ------- 50 (1 row) count ------- 315 (1 row) count ------- 124 (1 row) count ------- 203 (1 row) count ------- 94 (1 row) count ------- 139 (1 row) count ------- 229 (1 row) count ------- 128 (1 row) count ------- 85 (1 row) count ------- 71 (1 row) count ------- 125 (1 row) count ------- 219 (1 row) count ------- 39 (1 row) count ------- 266 (1 row) count ------- 71 (1 row) count ------- 183 (1 row) count ------- 81 (1 row) count ------- 48 (1 row) count ------- 134 (1 row) count ------- 200 (1 row) count ------- 142 (1 row) count ------- 147 (1 row) count ------- 132 (1 row) count ------- 28 (1 row) count ------- 178 (1 row) count ------- 122 (1 row) count ------- 140 (1 row) count ------- 192 (1 row) count ------- 70 (1 row) count ------- 82 (1 row) count ------- 8 (1 row) count ------- 12 (1 row) count ------- 138 (1 row) count ------- 85 (1 row) count ------- 66 (1 row) count ------- 53 (1 row) count ------- 46 (1 row) count ------- 223 (1 row) count ------- 8 (1 row) count ------- 202 (1 row) count ------- 76 (1 row) count ------- 54 (1 row) count ------- 183 (1 row) count ------- 129 (1 row) count ------- 122 (1 row) count ------- 86 (1 row) count ------- 50 (1 row) count ------- 31 (1 row) count ------- 129 (1 row) count ------- 27 (1 row) count ------- 29 (1 row) count ------- 122 (1 row) count ------- 110 (1 row) count ------- 146 (1 row) count ------- 174 (1 row) count ------- 106 (1 row) count ------- 146 (1 row) count ------- 165 (1 row) count ------- 126 (1 row) count ------- 177 (1 row) count ------- 122 (1 row) count ------- 7 (1 row) count ------- 124 (1 row) count ------- 102 (1 row) count ------- 35 (1 row) count ------- 285 (1 row) count ------- 49 (1 row) count ------- 50 (1 row) count ------- 221 (1 row) count ------- 208 (1 row) count ------- 81 (1 row) count ------- 195 (1 row) count ------- 239 (1 row) count ------- 199 (1 row) count ------- 96 (1 row) count ------- 58 (1 row) count ------- 94 (1 row) count ------- 194 (1 row) count ------- 97 (1 row) count ------- 90 (1 row) count ------- 138 (1 row) count ------- 129 (1 row) count ------- 82 (1 row) count ------- 191 (1 row) count ------- 47 (1 row) count ------- 101 (1 row) count ------- 88 (1 row) count ------- 225 (1 row) count ------- 11 (1 row) count ------- 63 (1 row) count ------- 124 (1 row) count ------- 244 (1 row) count ------- 61 (1 row) count ------- 118 (1 row) count ------- 103 (1 row) count ------- 85 (1 row) count ------- 116 (1 row) count ------- 31 (1 row) count ------- 145 (1 row) count ------- 64 (1 row) count ------- 73 (1 row) count ------- 152 (1 row) count ------- 100 (1 row) count ------- 157 (1 row) count ------- 119 (1 row) count ------- 125 (1 row) count ------- 57 (1 row) count ------- 128 (1 row) count ------- 107 (1 row) count ------- 231 (1 row) count ------- 147 (1 row) count ------- 171 (1 row) count ------- 54 (1 row) count ------- 13 (1 row) count ------- 28 (1 row) count ------- 220 (1 row) count ------- 63 (1 row) count ------- 213 (1 row) count ------- 80 (1 row) count ------- 82 (1 row) count ------- 70 (1 row) count ------- 63 (1 row) count ------- 34 (1 row) count ------- 158 (1 row) count ------- 80 (1 row) count ------- 177 (1 row) count ------- 253 (1 row) count ------- 66 (1 row) count ------- 100 (1 row) count ------- 65 (1 row) count ------- 64 (1 row) count ------- 181 (1 row) count ------- 31 (1 row) count ------- 63 (1 row) count ------- 151 (1 row) count ------- 126 (1 row) count ------- 216 (1 row) count ------- 47 (1 row) count ------- 91 (1 row) count ------- 131 (1 row) count ------- 160 (1 row) count ------- 17 (1 row) count ------- 93 (1 row) count ------- 31 (1 row) count ------- 171 (1 row) count ------- 144 (1 row) count ------- 52 (1 row) count ------- 136 (1 row) count ------- 193 (1 row) count ------- 75 (1 row) count ------- 114 (1 row) count ------- 113 (1 row) count ------- 157 (1 row) count ------- 91 (1 row) count ------- 50 (1 row) count ------- 155 (1 row) count ------- 29 (1 row) count ------- 178 (1 row) count ------- 77 (1 row) count ------- 18 (1 row) count ------- 112 (1 row) count ------- 118 (1 row) count ------- 81 (1 row) count ------- 201 (1 row) count ------- 204 (1 row) count ------- 93 (1 row) count ------- 145 (1 row) count ------- 50 (1 row) count ------- 71 (1 row) count ------- 45 (1 row) count ------- 161 (1 row) count ------- 70 (1 row) count ------- 36 (1 row) count ------- 112 (1 row) count ------- 131 (1 row) count ------- 159 (1 row) count ------- 168 (1 row) count ------- 69 (1 row) count ------- 51 (1 row) count ------- 39 (1 row) count ------- 63 (1 row) count ------- 105 (1 row) count ------- 107 (1 row) count ------- 62 (1 row) count ------- 250 (1 row) count ------- 183 (1 row) count ------- 143 (1 row) count ------- 145 (1 row) count ------- 55 (1 row) count ------- 124 (1 row) count ------- 244 (1 row) count ------- 4 (1 row) count ------- 10 (1 row) count ------- 201 (1 row) count ------- 11 (1 row) count ------- 77 (1 row) count ------- 81 (1 row) count ------- 295 (1 row) count ------- 170 (1 row) count ------- 69 (1 row) count ------- 102 (1 row) count ------- 227 (1 row) count ------- 101 (1 row) count ------- 49 (1 row) count ------- 130 (1 row) count ------- 26 (1 row) count ------- 114 (1 row) count ------- 383 (1 row) count ------- 205 (1 row) count ------- 66 (1 row) count ------- 89 (1 row) count ------- 135 (1 row) count ------- 178 (1 row) count ------- 150 (1 row) count ------- 199 (1 row) count ------- 44 (1 row) count ------- 25 (1 row) count ------- 130 (1 row) count ------- 65 (1 row) count ------- 12 (1 row) count ------- 248 (1 row) count ------- 172 (1 row) count ------- 48 (1 row) count ------- 150 (1 row) count ------- 21 (1 row) count ------- 109 (1 row) count ------- 49 (1 row) count ------- 117 (1 row) count ------- 128 (1 row) count ------- 130 (1 row) count ------- 60 (1 row) count ------- 181 (1 row) count ------- 157 (1 row) count ------- 193 (1 row) count ------- 73 (1 row) count ------- 120 (1 row) count ------- 170 (1 row) count ------- 54 (1 row) count ------- 112 (1 row) count ------- 68 (1 row) count ------- 335 (1 row) count ------- 132 (1 row) count ------- 53 (1 row) count ------- 139 (1 row) count ------- 109 (1 row) count ------- 47 (1 row) count ------- 87 (1 row) count ------- 188 (1 row) count ------- 130 (1 row) count ------- 189 (1 row) count ------- 76 (1 row) count ------- 28 (1 row) count ------- 48 (1 row) count ------- 204 (1 row) count ------- 35 (1 row) count ------- 160 (1 row) count ------- 112 (1 row) count ------- 202 (1 row) count ------- 83 (1 row) count ------- 24 (1 row) count ------- 6 (1 row) count ------- 13 (1 row) count ------- 188 (1 row) count ------- 124 (1 row) count ------- 117 (1 row) count ------- 112 (1 row) count ------- 164 (1 row) count ------- 80 (1 row) count ------- 96 (1 row) count ------- 48 (1 row) count ------- 94 (1 row) count ------- 168 (1 row) count ------- 38 (1 row) count ------- 65 (1 row) count ------- 77 (1 row) count ------- 14 (1 row) count ------- 77 (1 row) count ------- 221 (1 row) count ------- 203 (1 row) count ------- 111 (1 row) count ------- 127 (1 row) count ------- 128 (1 row) count ------- 150 (1 row) count ------- 95 (1 row) count ------- 44 (1 row) count ------- 92 (1 row) count ------- 155 (1 row) count ------- 167 (1 row) count ------- 138 (1 row) count ------- 148 (1 row) count ------- 64 (1 row) count ------- 158 (1 row) count ------- 43 (1 row) count ------- 149 (1 row) count ------- 21 (1 row) count ------- 21 (1 row) count ------- 115 (1 row) count ------- 85 (1 row) count ------- 22 (1 row) count ------- 191 (1 row) count ------- 52 (1 row) count ------- 32 (1 row) count ------- 66 (1 row) count ------- 126 (1 row) count ------- 53 (1 row) count ------- 104 (1 row) count ------- 22 (1 row) count ------- 38 (1 row) count ------- 82 (1 row) count ------- 125 (1 row) count ------- 162 (1 row) count ------- 253 (1 row) count ------- 104 (1 row) count ------- 187 (1 row) count ------- 50 (1 row) count ------- 194 (1 row) count ------- 70 (1 row) count ------- 134 (1 row) count ------- 147 (1 row) count ------- 248 (1 row) count ------- 83 (1 row) count ------- 94 (1 row) count ------- 31 (1 row) count ------- 24 (1 row) count ------- 160 (1 row) count ------- 227 (1 row) count ------- 247 (1 row) count ------- 75 (1 row) count ------- 146 (1 row) count ------- 5 (1 row) count ------- 67 (1 row) count ------- 70 (1 row) count ------- 67 (1 row) count ------- 76 (1 row) count ------- 150 (1 row) count ------- 23 (1 row) count ------- 233 (1 row) count ------- 74 (1 row) count ------- 116 (1 row) count ------- 276 (1 row) count ------- 209 (1 row) count ------- 62 (1 row) count ------- 57 (1 row) count ------- 71 (1 row) count ------- 109 (1 row) count ------- 238 (1 row) count ------- 78 (1 row) count ------- 91 (1 row) count ------- 49 (1 row) count ------- 87 (1 row) count ------- 59 (1 row) count ------- 338 (1 row) count ------- 79 (1 row) count ------- 191 (1 row) count ------- 69 (1 row) count ------- 121 (1 row) count ------- 363 (1 row) count ------- 97 (1 row) count ------- 194 (1 row) count ------- 136 (1 row) count ------- 169 (1 row) count ------- 244 (1 row) count ------- 200 (1 row) count ------- 92 (1 row) count ------- 58 (1 row) count ------- 168 (1 row) count ------- 165 (1 row) count ------- 89 (1 row) count ------- 108 (1 row) count ------- 56 (1 row) count ------- 144 (1 row) count ------- 13 (1 row) count ------- 31 (1 row) count ------- 34 (1 row) count ------- 51 (1 row) count ------- 121 (1 row) count ------- 70 (1 row) count ------- 116 (1 row) count ------- 171 (1 row) count ------- 136 (1 row) count ------- 176 (1 row) count ------- 254 (1 row) count ------- 126 (1 row) count ------- 130 (1 row) count ------- 175 (1 row) count ------- 3 (1 row) count ------- 96 (1 row) count ------- 249 (1 row) count ------- 178 (1 row) count ------- 216 (1 row) count ------- 61 (1 row) count ------- 49 (1 row) count ------- 108 (1 row) count ------- 66 (1 row) count ------- 238 (1 row) count ------- 42 (1 row) count ------- 81 (1 row) count ------- 25 (1 row) count ------- 44 (1 row) count ------- 67 (1 row) count ------- 104 (1 row) count ------- 68 (1 row) count ------- 79 (1 row) count ------- 72 (1 row) count ------- 182 (1 row) count ------- 123 (1 row) count ------- 108 (1 row) count ------- 64 (1 row) count ------- 38 (1 row) count ------- 145 (1 row) count ------- 69 (1 row) count ------- 37 (1 row) count ------- 81 (1 row) count ------- 122 (1 row) count ------- 45 (1 row) count ------- 126 (1 row) count ------- 187 (1 row) count ------- 237 (1 row) count ------- 122 (1 row) count ------- 55 (1 row) count ------- 8 (1 row) count ------- 78 (1 row) count ------- 107 (1 row) count ------- 177 (1 row) count ------- 3 (1 row) count ------- 172 (1 row) count ------- 166 (1 row) count ------- 218 (1 row) count ------- 115 (1 row) count ------- 94 (1 row) count ------- 4 (1 row) count ------- 91 (1 row) count ------- 96 (1 row) count ------- 70 (1 row) count ------- 109 (1 row) count ------- 283 (1 row) count ------- 261 (1 row) count ------- 62 (1 row) count ------- 99 (1 row) count ------- 134 (1 row) count ------- 175 (1 row) count ------- 296 (1 row) count ------- 109 (1 row) count ------- 76 (1 row) count ------- 219 (1 row) count ------- 145 (1 row) count ------- 274 (1 row) count ------- 97 (1 row) count ------- 25 (1 row) count ------- 122 (1 row) count ------- 88 (1 row) count ------- 114 (1 row) count ------- 178 (1 row) count ------- 334 (1 row) count ------- 13 (1 row) count ------- 38 (1 row) count ------- 143 (1 row) count ------- 84 (1 row) count ------- 282 (1 row) count ------- 91 (1 row) count ------- 158 (1 row) count ------- 144 (1 row) count ------- 83 (1 row) count ------- 151 (1 row) count ------- 219 (1 row) count ------- 139 (1 row) count ------- 176 (1 row) count ------- 200 (1 row) count ------- 59 (1 row) count ------- 101 (1 row) count ------- 60 (1 row) count ------- 166 (1 row) count ------- 185 (1 row) count ------- 87 (1 row) count ------- 84 (1 row) count ------- 84 (1 row) count ------- 164 (1 row) count ------- 151 (1 row) count ------- 160 (1 row) count ------- 62 (1 row) count ------- 102 (1 row) count ------- 63 (1 row) count ------- 88 (1 row) count ------- 102 (1 row) count ------- 110 (1 row) count ------- 144 (1 row) count ------- 166 (1 row) count ------- 204 (1 row) count ------- 13 (1 row) count ------- 142 (1 row) count ------- 81 (1 row) count ------- 31 (1 row) count ------- 2 (1 row) count ------- 271 (1 row) count ------- 154 (1 row) count ------- 115 (1 row) count ------- 160 (1 row) count ------- 20 (1 row) count ------- 120 (1 row) count ------- 116 (1 row) count ------- 235 (1 row) count ------- 134 (1 row) count ------- 113 (1 row) count ------- 115 (1 row) count ------- 151 (1 row) count ------- 142 (1 row) count ------- 92 (1 row) count ------- 33 (1 row) count ------- 117 (1 row) count ------- 153 (1 row) count ------- 128 (1 row) count ------- 10 (1 row) count ------- 49 (1 row) count ------- 225 (1 row) count ------- 14 (1 row) count ------- 27 (1 row) count ------- 19 (1 row) count ------- 114 (1 row) count ------- 113 (1 row) count ------- 48 (1 row) count ------- 10 (1 row) count ------- 67 (1 row) count ------- 172 (1 row) count ------- 214 (1 row) count ------- 151 (1 row) count ------- 128 (1 row) count ------- 119 (1 row) count ------- 119 (1 row) count ------- 100 (1 row) count ------- 100 (1 row) count ------- 26 (1 row) count ------- 32 (1 row) count ------- 122 (1 row) count ------- 97 (1 row) count ------- 257 (1 row) count ------- 136 (1 row) count ------- 108 (1 row) count ------- 206 (1 row) count ------- 220 (1 row) count ------- 114 (1 row) count ------- 36 (1 row) count ------- 83 (1 row) count ------- 72 (1 row) count ------- 83 (1 row) count ------- 124 (1 row) count ------- 319 (1 row) count ------- 74 (1 row) count ------- 30 (1 row) count ------- 61 (1 row) count ------- 290 (1 row) count ------- 82 (1 row) count ------- 109 (1 row) count ------- 185 (1 row) count ------- 34 (1 row) count ------- 157 (1 row) count ------- 131 (1 row) count ------- 81 (1 row) count ------- 1 (1 row) count ------- 9 (1 row) count ------- 133 (1 row) count ------- 56 (1 row) count ------- 49 (1 row) count ------- 92 (1 row) count ------- 227 (1 row) count ------- 112 (1 row) count ------- 266 (1 row) count ------- 146 (1 row) count ------- 75 (1 row) count ------- 76 (1 row) count ------- 200 (1 row) count ------- 239 (1 row) count ------- 233 (1 row) count ------- 125 (1 row) count ------- 57 (1 row) count ------- 101 (1 row) count ------- 188 (1 row) count ------- 55 (1 row) count ------- 5 (1 row) count ------- 76 (1 row) count ------- 161 (1 row) count ------- 41 (1 row) count ------- 24 (1 row) count ------- 107 (1 row) count ------- 244 (1 row) count ------- 5 (1 row) count ------- 40 (1 row) count ------- 69 (1 row) count ------- 126 (1 row) count ------- 97 (1 row) count ------- 42 (1 row) count ------- 76 (1 row) count ------- 92 (1 row) count ------- 96 (1 row) count ------- 143 (1 row) count ------- 77 (1 row) count ------- 158 (1 row) count ------- 183 (1 row) count ------- 252 (1 row) count ------- 113 (1 row) count ------- 174 (1 row) count ------- 92 (1 row) count ------- 91 (1 row) count ------- 37 (1 row) count ------- 131 (1 row) count ------- 30 (1 row) count ------- 165 (1 row) count ------- 92 (1 row) count ------- 201 (1 row) count ------- 9 (1 row) count ------- 83 (1 row) count ------- 141 (1 row) count ------- 192 (1 row) count ------- 86 (1 row) count ------- 115 (1 row) count ------- 62 (1 row) count ------- 108 (1 row) count ------- 54 (1 row) count ------- 243 (1 row) count ------- 238 (1 row) count ------- 33 (1 row) count ------- 202 (1 row) count ------- 68 (1 row) count ------- 170 (1 row) count ------- 71 (1 row) count ------- 81 (1 row) count ------- 39 (1 row) count ------- 128 (1 row) count ------- 110 (1 row) count ------- 101 (1 row) count ------- 225 (1 row) count ------- 190 (1 row) count ------- 25 (1 row) count ------- 103 (1 row) count ------- 204 (1 row) count ------- 82 (1 row) count ------- 86 (1 row) count ------- 209 (1 row) count ------- 24 (1 row) count ------- 11 (1 row) count ------- 69 (1 row) count ------- 12 (1 row) count ------- 221 (1 row) count ------- 206 (1 row) count ------- 180 (1 row) count ------- 68 (1 row) count ------- 10 (1 row) count ------- 38 (1 row) count ------- 65 (1 row) count ------- 141 (1 row) count ------- 136 (1 row) count ------- 2 (1 row) count ------- 91 (1 row) count ------- 227 (1 row) count ------- 158 (1 row) count ------- 127 (1 row) count ------- 192 (1 row) count ------- 14 (1 row) count ------- 199 (1 row) count ------- 225 (1 row) count ------- 144 (1 row) count ------- 226 (1 row) count ------- 83 (1 row) count ------- 31 (1 row) count ------- 9 (1 row) count ------- 101 (1 row) count ------- 67 (1 row) count ------- 59 (1 row) count ------- 132 (1 row) count ------- 45 (1 row) count ------- 20 (1 row) count ------- 191 (1 row) count ------- 44 (1 row) count ------- 277 (1 row) count ------- 202 (1 row) count ------- 143 (1 row) count ------- 162 (1 row) count ------- 148 (1 row) count ------- 212 (1 row) count ------- 228 (1 row) count ------- 100 (1 row) count ------- 168 (1 row) count ------- 143 (1 row) count ------- 90 (1 row) count ------- 147 (1 row) count ------- 31 (1 row) count ------- 83 (1 row) count ------- 287 (1 row) count ------- 213 (1 row) count ------- 81 (1 row) count ------- 176 (1 row) count ------- 86 (1 row) count ------- 147 (1 row) count ------- 109 (1 row) count ------- 77 (1 row) count ------- 229 (1 row) count ------- 152 (1 row) count ------- 68 (1 row) count ------- 210 (1 row) count ------- 148 (1 row) count ------- 76 (1 row) count ------- 157 (1 row) count ------- 52 (1 row) count ------- 148 (1 row) count ------- 121 (1 row) count ------- 182 (1 row) count ------- 146 (1 row) count ------- 119 (1 row) count ------- 253 (1 row) count ------- 164 (1 row) count ------- 133 (1 row) count ------- 31 (1 row) count ------- 80 (1 row) count ------- 247 (1 row) count ------- 197 (1 row) count ------- 28 (1 row) count ------- 255 (1 row) count ------- 40 (1 row) count ------- 149 (1 row) count ------- 152 (1 row) count ------- 100 (1 row) count ------- 66 (1 row) count ------- 285 (1 row) count ------- 122 (1 row) count ------- 108 (1 row) count ------- 198 (1 row) count ------- 257 (1 row) count ------- 49 (1 row) count ------- 179 (1 row) count ------- 3 (1 row) count ------- 112 (1 row) count ------- 165 (1 row) count ------- 219 (1 row) count ------- 120 (1 row) count ------- 69 (1 row) count ------- 168 (1 row) count ------- 103 (1 row) count ------- 112 (1 row) count ------- 173 (1 row) count ------- 139 (1 row) count ------- 56 (1 row) count ------- 100 (1 row) count ------- 54 (1 row) count ------- 10 (1 row) count ------- 123 (1 row) count ------- 30 (1 row) count ------- 183 (1 row) count ------- 190 (1 row) count ------- 19 (1 row) count ------- 113 (1 row) count ------- 70 (1 row) count ------- 164 (1 row) count ------- 51 (1 row) count ------- 31 (1 row) count ------- 116 (1 row) count ------- 281 (1 row) count ------- 52 (1 row) count ------- 152 (1 row) count ------- 68 (1 row) count ------- 190 (1 row) count ------- 112 (1 row) count ------- 108 (1 row) count ------- 140 (1 row) count ------- 108 (1 row) count ------- 308 (1 row) count ------- 256 (1 row) count ------- 5 (1 row) count ------- 133 (1 row) count ------- 90 (1 row) count ------- 101 (1 row) count ------- 117 (1 row) count ------- 36 (1 row) count ------- 81 (1 row) count ------- 158 (1 row) count ------- 35 (1 row) count ------- 235 (1 row) count ------- 154 (1 row) count ------- 164 (1 row) count ------- 200 (1 row) count ------- 152 (1 row) count ------- 199 (1 row) count ------- 73 (1 row) count ------- 98 (1 row) count ------- 55 (1 row) count ------- 52 (1 row) count ------- 156 (1 row) count ------- 49 (1 row) count ------- 132 (1 row) count ------- 90 (1 row) count ------- 68 (1 row) count ------- 77 (1 row) count ------- 81 (1 row) count ------- 136 (1 row) count ------- 93 (1 row) count ------- 47 (1 row) count ------- 27 (1 row) count ------- 190 (1 row) count ------- 128 (1 row) count ------- 155 (1 row) count ------- 66 (1 row) count ------- 54 (1 row) count ------- 104 (1 row) count ------- 50 (1 row) count ------- 168 (1 row) count ------- 148 (1 row) count ------- 133 (1 row) count ------- 107 (1 row) count ------- 39 (1 row) count ------- 135 (1 row) count ------- 68 (1 row) count ------- 178 (1 row) count ------- 206 (1 row) count ------- 128 (1 row) count ------- 82 (1 row) count ------- 269 (1 row) count ------- 150 (1 row) count ------- 172 (1 row) count ------- 73 (1 row) count ------- 62 (1 row) count ------- 172 (1 row) count ------- 23 (1 row) count ------- 106 (1 row) count ------- 150 (1 row) count ------- 72 (1 row) count ------- 192 (1 row) count ------- 98 (1 row) count ------- 96 (1 row) count ------- 117 (1 row) count ------- 70 (1 row) count ------- 145 (1 row) count ------- 132 (1 row) count ------- 79 (1 row) count ------- 197 (1 row) count ------- 106 (1 row) count ------- 170 (1 row) count ------- 70 (1 row) count ------- 24 (1 row) count ------- 157 (1 row) count ------- 105 (1 row) count ------- 62 (1 row) count ------- 248 (1 row) count ------- 83 (1 row) count ------- 118 (1 row) count ------- 182 (1 row) count ------- 213 (1 row) count ------- 106 (1 row) count ------- 235 (1 row) count ------- 229 (1 row) count ------- 73 (1 row) count ------- 208 (1 row) count ------- 4 (1 row) count ------- 35 (1 row) count ------- 95 (1 row) count ------- 66 (1 row) count ------- 98 (1 row) count ------- 48 (1 row) count ------- 21 (1 row) count ------- 54 (1 row) count ------- 250 (1 row) count ------- 16 (1 row) count ------- 53 (1 row) count ------- 9 (1 row) count ------- 25 (1 row) count ------- 72 (1 row) count ------- 115 (1 row) count ------- 129 (1 row) count ------- 107 (1 row) count ------- 25 (1 row) count ------- 91 (1 row) count ------- 248 (1 row) count ------- 34 (1 row) count ------- 114 (1 row) count ------- 105 (1 row) count ------- 155 (1 row) count ------- 162 (1 row) count ------- 85 (1 row) count ------- 127 (1 row) count ------- 134 (1 row) count ------- 152 (1 row) count ------- 154 (1 row) count ------- 129 (1 row) count ------- 180 (1 row) count ------- 102 (1 row) count ------- 131 (1 row) count ------- 44 (1 row) count ------- 185 (1 row) count ------- 129 (1 row) count ------- 87 (1 row) count ------- 117 (1 row) count ------- 84 (1 row) count ------- 142 (1 row) count ------- 221 (1 row) count ------- 151 (1 row) count ------- 58 (1 row) count ------- 75 (1 row) count ------- 220 (1 row) count ------- 44 (1 row) count ------- 154 (1 row) count ------- 22 (1 row) count ------- 225 (1 row) count ------- 50 (1 row) count ------- 60 (1 row) count ------- 220 (1 row) count ------- 296 (1 row) count ------- 219 (1 row) count ------- 194 (1 row) count ------- 264 (1 row) count ------- 156 (1 row) count ------- 102 (1 row) count ------- 137 (1 row) count ------- 202 (1 row) count ------- 236 (1 row) count ------- 201 (1 row) count ------- 83 (1 row) count ------- 46 (1 row) count ------- 137 (1 row) count ------- 63 (1 row) count ------- 87 (1 row) count ------- 156 (1 row) count ------- 52 (1 row) count ------- 171 (1 row) count ------- 148 (1 row) count ------- 196 (1 row) count ------- 198 (1 row) count ------- 194 (1 row) count ------- 4 (1 row) count ------- 57 (1 row) count ------- 49 (1 row) count ------- 123 (1 row) count ------- 137 (1 row) count ------- 173 (1 row) count ------- 55 (1 row) count ------- 74 (1 row) count ------- 179 (1 row) count ------- 76 (1 row) count ------- 93 (1 row) count ------- 290 (1 row) count ------- 36 (1 row) count ------- 224 (1 row) count ------- 138 (1 row) count ------- 43 (1 row) count ------- 276 (1 row) count ------- 190 (1 row) count ------- 84 (1 row) count ------- 184 (1 row) count ------- 194 (1 row) count ------- 104 (1 row) count ------- 15 (1 row) count ------- 141 (1 row) count ------- 66 (1 row) count ------- 31 (1 row) count ------- 165 (1 row) count ------- 58 (1 row) count ------- 10 (1 row) count ------- 104 (1 row) count ------- 129 (1 row) count ------- 86 (1 row) count ------- 45 (1 row) count ------- 47 (1 row) count ------- 53 (1 row) count ------- 125 (1 row) count ------- 83 (1 row) count ------- 190 (1 row) count ------- 283 (1 row) count ------- 121 (1 row) count ------- 47 (1 row) count ------- 58 (1 row) count ------- 65 (1 row) count ------- 135 (1 row) count ------- 222 (1 row) count ------- 120 (1 row) count ------- 91 (1 row) count ------- 92 (1 row) count ------- 146 (1 row) count ------- 91 (1 row) count ------- 159 (1 row) count ------- 178 (1 row) count ------- 160 (1 row) count ------- 24 (1 row) count ------- 112 (1 row) count ------- 111 (1 row) count ------- 253 (1 row) count ------- 119 (1 row) count ------- 42 (1 row) count ------- 137 (1 row) count ------- 306 (1 row) count ------- 103 (1 row) count ------- 112 (1 row) count ------- 221 (1 row) count ------- 101 (1 row) count ------- 264 (1 row) count ------- 35 (1 row) count ------- 162 (1 row) count ------- 58 (1 row) count ------- 39 (1 row) count ------- 261 (1 row) count ------- 215 (1 row) count ------- 132 (1 row) count ------- 171 (1 row) count ------- 41 (1 row) count ------- 178 (1 row) count ------- 90 (1 row) count ------- 156 (1 row) count ------- 125 (1 row) count ------- 204 (1 row) count ------- 179 (1 row) count ------- 68 (1 row) count ------- 138 (1 row) count ------- 140 (1 row) count ------- 52 (1 row) count ------- 182 (1 row) count ------- 119 (1 row) count ------- 154 (1 row) count ------- 53 (1 row) count ------- 158 (1 row) count ------- 64 (1 row) count ------- 145 (1 row) count ------- 27 (1 row) count ------- 64 (1 row) count ------- 149 (1 row) count ------- 65 (1 row) count ------- 31 (1 row) count ------- 178 (1 row) count ------- 166 (1 row) count ------- 51 (1 row) count ------- 136 (1 row) count ------- 81 (1 row) count ------- 130 (1 row) count ------- 8 (1 row) count ------- 134 (1 row) count ------- 112 (1 row) count ------- 106 (1 row) count ------- 167 (1 row) count ------- 68 (1 row) count ------- 180 (1 row) count ------- 99 (1 row) count ------- 32 (1 row) count ------- 38 (1 row) count ------- 81 (1 row) count ------- 109 (1 row) count ------- 202 (1 row) count ------- 126 (1 row) count ------- 92 (1 row) count ------- 71 (1 row) count ------- 23 (1 row) count ------- 154 (1 row) count ------- 218 (1 row) count ------- 125 (1 row) count ------- 71 (1 row) count ------- 265 (1 row) count ------- 211 (1 row) count ------- 238 (1 row) count ------- 10 (1 row) count ------- 88 (1 row) count ------- 155 (1 row) count ------- 191 (1 row) count ------- 24 (1 row) count ------- 74 (1 row) count ------- 134 (1 row) count ------- 80 (1 row) count ------- 317 (1 row) count ------- 188 (1 row) count ------- 30 (1 row) count ------- 237 (1 row) count ------- 110 (1 row) count ------- 109 (1 row) count ------- 13 (1 row) count ------- 3 (1 row) count ------- 71 (1 row) count ------- 96 (1 row) count ------- 97 (1 row) count ------- 60 (1 row) count ------- 169 (1 row) count ------- 291 (1 row) count ------- 250 (1 row) count ------- 70 (1 row) count ------- 80 (1 row) count ------- 142 (1 row) count ------- 38 (1 row) count ------- 93 (1 row) count ------- 52 (1 row) count ------- 83 (1 row) count ------- 114 (1 row) count ------- 192 (1 row) count ------- 114 (1 row) count ------- 175 (1 row) count ------- 37 (1 row) count ------- 32 (1 row) count ------- 182 (1 row) count ------- 70 (1 row) count ------- 137 (1 row) count ------- 105 (1 row) count ------- 207 (1 row) count ------- 95 (1 row) count ------- 79 (1 row) count ------- 26 (1 row) count ------- 222 (1 row) count ------- 211 (1 row) count ------- 64 (1 row) count ------- 131 (1 row) count ------- 333 (1 row) count ------- 181 (1 row) count ------- 155 (1 row) count ------- 164 (1 row) count ------- 108 (1 row) count ------- 82 (1 row) count ------- 114 (1 row) count ------- 53 (1 row) count ------- 80 (1 row) count ------- 72 (1 row) count ------- 110 (1 row) count ------- 112 (1 row) count ------- 123 (1 row) count ------- 66 (1 row) count ------- 140 (1 row) count ------- 102 (1 row) count ------- 102 (1 row) count ------- 78 (1 row) count ------- 63 (1 row) count ------- 228 (1 row) count ------- 143 (1 row) count ------- 111 (1 row) count ------- 110 (1 row) count ------- 39 (1 row) count ------- 115 (1 row) count ------- 173 (1 row) count ------- 51 (1 row) count ------- 46 (1 row) count ------- 149 (1 row) count ------- 173 (1 row) count ------- 143 (1 row) count ------- 148 (1 row) count ------- 122 (1 row) count ------- 108 (1 row) count ------- 84 (1 row) count ------- 121 (1 row) count ------- 291 (1 row) count ------- 130 (1 row) count ------- 5 (1 row) count ------- 262 (1 row) count ------- 45 (1 row) count ------- 177 (1 row) count ------- 65 (1 row) count ------- 93 (1 row) count ------- 31 (1 row) count ------- 32 (1 row) count ------- 21 (1 row) count ------- 175 (1 row) count ------- 79 (1 row) count ------- 123 (1 row) count ------- 66 (1 row) count ------- 51 (1 row) count ------- 256 (1 row) count ------- 75 (1 row) count ------- 172 (1 row) count ------- 192 (1 row) count ------- 120 (1 row) count ------- 165 (1 row) count ------- 156 (1 row) count ------- 98 (1 row) count ------- 212 (1 row) count ------- 156 (1 row) count ------- 74 (1 row) count ------- 146 (1 row) count ------- 125 (1 row) count ------- 132 (1 row) count ------- 241 (1 row) count ------- 49 (1 row) count ------- 204 (1 row) count ------- 66 (1 row) count ------- 202 (1 row) count ------- 190 (1 row) count ------- 95 (1 row) count ------- 89 (1 row) count ------- 142 (1 row) count ------- 114 (1 row) count ------- 207 (1 row) count ------- 21 (1 row) count ------- 67 (1 row) count ------- 249 (1 row) count ------- 55 (1 row) count ------- 140 (1 row) count ------- 218 (1 row) count ------- 131 (1 row) count ------- 386 (1 row) count ------- 155 (1 row) count ------- 90 (1 row) count ------- 315 (1 row) count ------- 124 (1 row) count ------- 167 (1 row) count ------- 220 (1 row) count ------- 6 (1 row) count ------- 32 (1 row) count ------- 158 (1 row) count ------- 104 (1 row) count ------- 65 (1 row) count ------- 269 (1 row) count ------- 21 (1 row) count ------- 115 (1 row) count ------- 118 (1 row) count ------- 69 (1 row) count ------- 99 (1 row) count ------- 30 (1 row) count ------- 102 (1 row) count ------- 113 (1 row) count ------- 262 (1 row) count ------- 169 (1 row) count ------- 55 (1 row) count ------- 125 (1 row) count ------- 310 (1 row) count ------- 87 (1 row) count ------- 99 (1 row) count ------- 61 (1 row) count ------- 71 (1 row) count ------- 213 (1 row) count ------- 316 (1 row) count ------- 177 (1 row) count ------- 10 (1 row) count ------- 237 (1 row) count ------- 193 (1 row) count ------- 140 (1 row) count ------- 135 (1 row) count ------- 120 (1 row) count ------- 16 (1 row) count ------- 60 (1 row) count ------- 77 (1 row) count ------- 23 (1 row) count ------- 4 (1 row) count ------- 165 (1 row) count ------- 139 (1 row) count ------- 128 (1 row) count ------- 128 (1 row) count ------- 148 (1 row) count ------- 304 (1 row) count ------- 113 (1 row) count ------- 194 (1 row) count ------- 11 (1 row) count ------- 221 (1 row) count ------- 126 (1 row) count ------- 22 (1 row) count ------- 78 (1 row) count ------- 53 (1 row) count ------- 110 (1 row) count ------- 95 (1 row) count ------- 30 (1 row) count ------- 66 (1 row) count ------- 230 (1 row) count ------- 62 (1 row) count ------- 158 (1 row) count ------- 180 (1 row) count ------- 38 (1 row) count ------- 136 (1 row) count ------- 144 (1 row) count ------- 20 (1 row) count ------- 156 (1 row) count ------- 176 (1 row) count ------- 159 (1 row) count ------- 129 (1 row) count ------- 108 (1 row) count ------- 22 (1 row) count ------- 112 (1 row) count ------- 162 (1 row) count ------- 20 (1 row) count ------- 131 (1 row) count ------- 127 (1 row) count ------- 102 (1 row) count ------- 116 (1 row) count ------- 45 (1 row) count ------- 38 (1 row) count ------- 2 (1 row) count ------- 91 (1 row) count ------- 168 (1 row) count ------- 81 (1 row) count ------- 184 (1 row) count ------- 126 (1 row) count ------- 103 (1 row) count ------- 51 (1 row) count ------- 107 (1 row) count ------- 112 (1 row) count ------- 207 (1 row) count ------- 40 (1 row) count ------- 121 (1 row) count ------- 123 (1 row) count ------- 147 (1 row) count ------- 225 (1 row) count ------- 133 (1 row) count ------- 83 (1 row) count ------- 127 (1 row) count ------- 61 (1 row) count ------- 161 (1 row) count ------- 95 (1 row) count ------- 81 (1 row) count ------- 137 (1 row) count ------- 307 (1 row) count ------- 236 (1 row) count ------- 178 (1 row) count ------- 168 (1 row) count ------- 212 (1 row) count ------- 304 (1 row) count ------- 18 (1 row) count ------- 69 (1 row) count ------- 162 (1 row) count ------- 116 (1 row) count ------- 147 (1 row) count ------- 226 (1 row) count ------- 154 (1 row) count ------- 45 (1 row) count ------- 154 (1 row) count ------- 268 (1 row) count ------- 102 (1 row) count ------- 67 (1 row) count ------- 111 (1 row) count ------- 84 (1 row) count ------- 16 (1 row) count ------- 65 (1 row) count ------- 136 (1 row) count ------- 79 (1 row) count ------- 166 (1 row) count ------- 192 (1 row) count ------- 295 (1 row) count ------- 72 (1 row) count ------- 145 (1 row) count ------- 92 (1 row) count ------- 179 (1 row) count ------- 151 (1 row) count ------- 271 (1 row) count ------- 54 (1 row) count ------- 263 (1 row) count ------- 187 (1 row) count ------- 246 (1 row) count ------- 71 (1 row) count ------- 85 (1 row) count ------- 75 (1 row) count ------- 92 (1 row) count ------- 121 (1 row) count ------- 207 (1 row) count ------- 90 (1 row) count ------- 108 (1 row) count ------- 189 (1 row) count ------- 181 (1 row) count ------- 132 (1 row) count ------- 241 (1 row) count ------- 248 (1 row) count ------- 208 (1 row) count ------- 142 (1 row) count ------- 69 (1 row) count ------- 228 (1 row) count ------- 68 (1 row) count ------- 251 (1 row) count ------- 193 (1 row) count ------- 157 (1 row) count ------- 132 (1 row) count ------- 250 (1 row) count ------- 225 (1 row) count ------- 24 (1 row) count ------- 193 (1 row) count ------- 244 (1 row) count ------- 74 (1 row) count ------- 150 (1 row) count ------- 273 (1 row) count ------- 203 (1 row) count ------- 48 (1 row) count ------- 66 (1 row) count ------- 192 (1 row) count ------- 134 (1 row) count ------- 184 (1 row) count ------- 119 (1 row) count ------- 60 (1 row) count ------- 79 (1 row) count ------- 93 (1 row) count ------- 38 (1 row) count ------- 119 (1 row) count ------- 142 (1 row) count ------- 179 (1 row) count ------- 96 (1 row) count ------- 154 (1 row) count ------- 229 (1 row) count ------- 79 (1 row) count ------- 178 (1 row) count ------- 33 (1 row) count ------- 86 (1 row) count ------- 118 (1 row) count ------- 36 (1 row) count ------- 84 (1 row) count ------- 99 (1 row) count ------- 175 (1 row) count ------- 15 (1 row) count ------- 53 (1 row) count ------- 96 (1 row) count ------- 138 (1 row) count ------- 197 (1 row) count ------- 85 (1 row) count ------- 83 (1 row) count ------- 43 (1 row) count ------- 89 (1 row) count ------- 10 (1 row) count ------- 113 (1 row) count ------- 103 (1 row) count ------- 15 (1 row) count ------- 103 (1 row) count ------- 86 (1 row) count ------- 26 (1 row) count ------- 83 (1 row) count ------- 94 (1 row) count ------- 86 (1 row) count ------- 175 (1 row) count ------- 88 (1 row) count ------- 311 (1 row) count ------- 144 (1 row) count ------- 55 (1 row) count ------- 176 (1 row) count ------- 292 (1 row) count ------- 75 (1 row) count ------- 93 (1 row) count ------- 94 (1 row) count ------- 57 (1 row) count ------- 68 (1 row) count ------- 254 (1 row) count ------- 116 (1 row) count ------- 69 (1 row) count ------- 165 (1 row) count ------- 70 (1 row) count ------- 71 (1 row) count ------- 70 (1 row) count ------- 113 (1 row) count ------- 121 (1 row) count ------- 27 (1 row) count ------- 170 (1 row) count ------- 207 (1 row) count ------- 139 (1 row) count ------- 203 (1 row) count ------- 93 (1 row) count ------- 30 (1 row) count ------- 39 (1 row) count ------- 78 (1 row) count ------- 50 (1 row) count ------- 64 (1 row) count ------- 119 (1 row) count ------- 115 (1 row) count ------- 180 (1 row) count ------- 171 (1 row) count ------- 49 (1 row) count ------- 183 (1 row) count ------- 159 (1 row) count ------- 115 (1 row) count ------- 152 (1 row) count ------- 104 (1 row) count ------- 167 (1 row) count ------- 43 (1 row) count ------- 233 (1 row) count ------- 147 (1 row) count ------- 80 (1 row) count ------- 62 (1 row) count ------- 129 (1 row) count ------- 126 (1 row) count ------- 87 (1 row) count ------- 216 (1 row) count ------- 102 (1 row) count ------- 137 (1 row) count ------- 120 (1 row) count ------- 118 (1 row) count ------- 276 (1 row) count ------- 189 (1 row) count ------- 312 (1 row) count ------- 21 (1 row) count ------- 44 (1 row) count ------- 230 (1 row) count ------- 75 (1 row) count ------- 108 (1 row) count ------- 1 (1 row) count ------- 58 (1 row) count ------- 214 (1 row) count ------- 93 (1 row) count ------- 190 (1 row) count ------- 115 (1 row) count ------- 149 (1 row) count ------- 203 (1 row) count ------- 47 (1 row) count ------- 262 (1 row) count ------- 67 (1 row) count ------- 151 (1 row) count ------- 213 (1 row) count ------- 107 (1 row) count ------- 111 (1 row) count ------- 120 (1 row) count ------- 23 (1 row) count ------- 26 (1 row) count ------- 4 (1 row) count ------- 239 (1 row) count ------- 110 (1 row) count ------- 91 (1 row) count ------- 257 (1 row) count ------- 65 (1 row) count ------- 34 (1 row) count ------- 16 (1 row) count ------- 7 (1 row) count ------- 175 (1 row) count ------- 86 (1 row) count ------- 88 (1 row) count ------- 238 (1 row) count ------- 144 (1 row) count ------- 126 (1 row) count ------- 153 (1 row) count ------- 30 (1 row) count ------- 105 (1 row) count ------- 104 (1 row) count ------- 80 (1 row) count ------- 81 (1 row) count ------- 105 (1 row) count ------- 121 (1 row) count ------- 110 (1 row) count ------- 87 (1 row) count ------- 110 (1 row) count ------- 74 (1 row) count ------- 165 (1 row) count ------- 65 (1 row) count ------- 228 (1 row) count ------- 112 (1 row) count ------- 162 (1 row) count ------- 134 (1 row) count ------- 82 (1 row) count ------- 57 (1 row) count ------- 101 (1 row) count ------- 137 (1 row) count ------- 187 (1 row) count ------- 146 (1 row) count ------- 110 (1 row) count ------- 168 (1 row) count ------- 143 (1 row) count ------- 110 (1 row) count ------- 281 (1 row) count ------- 78 (1 row) count ------- 172 (1 row) count ------- 39 (1 row) count ------- 98 (1 row) count ------- 122 (1 row) count ------- 42 (1 row) count ------- 88 (1 row) count ------- 180 (1 row) count ------- 11 (1 row) count ------- 157 (1 row) count ------- 181 (1 row) count ------- 220 (1 row) count ------- 90 (1 row) count ------- 317 (1 row) count ------- 208 (1 row) count ------- 10 (1 row) count ------- 200 (1 row) count ------- 122 (1 row) count ------- 105 (1 row) count ------- 244 (1 row) count ------- 68 (1 row) count ------- 98 (1 row) count ------- 114 (1 row) count ------- 98 (1 row) count ------- 242 (1 row) count ------- 149 (1 row) count ------- 146 (1 row) count ------- 118 (1 row) count ------- 166 (1 row) count ------- 51 (1 row) count ------- 270 (1 row) count ------- 148 (1 row) count ------- 33 (1 row) count ------- 154 (1 row) count ------- 129 (1 row) count ------- 108 (1 row) count ------- 40 (1 row) count ------- 136 (1 row) count ------- 120 (1 row) count ------- 182 (1 row) count ------- 43 (1 row) count ------- 191 (1 row) count ------- 73 (1 row) count ------- 154 (1 row) count ------- 53 (1 row) count ------- 179 (1 row) count ------- 111 (1 row) count ------- 73 (1 row) count ------- 35 (1 row) count ------- 73 (1 row) count ------- 111 (1 row) count ------- 314 (1 row) count ------- 140 (1 row) count ------- 40 (1 row) count ------- 177 (1 row) count ------- 115 (1 row) count ------- 311 (1 row) count ------- 99 (1 row) count ------- 162 (1 row) count ------- 112 (1 row) count ------- 254 (1 row) count ------- 111 (1 row) count ------- 94 (1 row) count ------- 83 (1 row) count ------- 66 (1 row) count ------- 98 (1 row) count ------- 115 (1 row) count ------- 109 (1 row) count ------- 123 (1 row) count ------- 175 (1 row) count ------- 93 (1 row) count ------- 11 (1 row) count ------- 12 (1 row) count ------- 191 (1 row) count ------- 177 (1 row) count ------- 13 (1 row) count ------- 51 (1 row) count ------- 160 (1 row) count ------- 8 (1 row) count ------- 68 (1 row) count ------- 119 (1 row) count ------- 173 (1 row) count ------- 69 (1 row) count ------- 29 (1 row) count ------- 167 (1 row) count ------- 289 (1 row) count ------- 96 (1 row) count ------- 313 (1 row) count ------- 72 (1 row) count ------- 86 (1 row) count ------- 143 (1 row) count ------- 74 (1 row) count ------- 276 (1 row) count ------- 91 (1 row) count ------- 161 (1 row) count ------- 149 (1 row) count ------- 20 (1 row) count ------- 14 (1 row) count ------- 197 (1 row) count ------- 36 (1 row) count ------- 97 (1 row) count ------- 167 (1 row) count ------- 217 (1 row) count ------- 144 (1 row) count ------- 55 (1 row) count ------- 145 (1 row) count ------- 59 (1 row) count ------- 151 (1 row) count ------- 200 (1 row) count ------- 160 (1 row) count ------- 104 (1 row) count ------- 30 (1 row) count ------- 141 (1 row) count ------- 44 (1 row) count ------- 205 (1 row) count ------- 63 (1 row) count ------- 63 (1 row) count ------- 113 (1 row) count ------- 74 (1 row) count ------- 61 (1 row) count ------- 2 (1 row) count ------- 194 (1 row) count ------- 150 (1 row) count ------- 54 (1 row) count ------- 101 (1 row) count ------- 171 (1 row) count ------- 36 (1 row) count ------- 164 (1 row) count ------- 120 (1 row) count ------- 72 (1 row) count ------- 196 (1 row) count ------- 80 (1 row) count ------- 144 (1 row) count ------- 146 (1 row) count ------- 55 (1 row) count ------- 216 (1 row) count ------- 87 (1 row) count ------- 244 (1 row) count ------- 53 (1 row) count ------- 181 (1 row) count ------- 148 (1 row) count ------- 147 (1 row) count ------- 148 (1 row) count ------- 115 (1 row) count ------- 116 (1 row) count ------- 27 (1 row) count ------- 38 (1 row) count ------- 150 (1 row) count ------- 34 (1 row) count ------- 179 (1 row) count ------- 196 (1 row) count ------- 97 (1 row) count ------- 132 (1 row) count ------- 35 (1 row) count ------- 160 (1 row) count ------- 138 (1 row) count ------- 74 (1 row) count ------- 77 (1 row) count ------- 62 (1 row) count ------- 125 (1 row) count ------- 179 (1 row) count ------- 55 (1 row) count ------- 124 (1 row) count ------- 23 (1 row) count ------- 202 (1 row) count ------- 92 (1 row) count ------- 7 (1 row) count ------- 100 (1 row) count ------- 100 (1 row) count ------- 142 (1 row) count ------- 138 (1 row) count ------- 128 (1 row) count ------- 355 (1 row) count ------- 120 (1 row) count ------- 125 (1 row) count ------- 58 (1 row) count ------- 153 (1 row) count ------- 166 (1 row) count ------- 41 (1 row) count ------- 193 (1 row) count ------- 185 (1 row) count ------- 7 (1 row) count ------- 61 (1 row) count ------- 140 (1 row) count ------- 54 (1 row) count ------- 168 (1 row) count ------- 68 (1 row) count ------- 62 (1 row) count ------- 45 (1 row) count ------- 115 (1 row) count ------- 234 (1 row) count ------- 360 (1 row) count ------- 67 (1 row) count ------- 117 (1 row) count ------- 193 (1 row) count ------- 172 (1 row) count ------- 14 (1 row) count ------- 167 (1 row) count ------- 107 (1 row) count ------- 2 (1 row) count ------- 39 (1 row) count ------- 96 (1 row) count ------- 182 (1 row) count ------- 175 (1 row) count ------- 67 (1 row) count ------- 134 (1 row) count ------- 205 (1 row) count ------- 56 (1 row) count ------- 42 (1 row) count ------- 158 (1 row) count ------- 139 (1 row) count ------- 83 (1 row) count ------- 340 (1 row) count ------- 176 (1 row) count ------- 58 (1 row) count ------- 140 (1 row) count ------- 109 (1 row) count ------- 188 (1 row) count ------- 122 (1 row) count ------- 69 (1 row) count ------- 105 (1 row) count ------- 41 (1 row) count ------- 147 (1 row) count ------- 104 (1 row) count ------- 123 (1 row) count ------- 232 (1 row) count ------- 175 (1 row) count ------- 84 (1 row) count ------- 209 (1 row) count ------- 181 (1 row) count ------- 190 (1 row) count ------- 28 (1 row) count ------- 202 (1 row) count ------- 228 (1 row) count ------- 74 (1 row) count ------- 191 (1 row) count ------- 58 (1 row) count ------- 14 (1 row) count ------- 35 (1 row) count ------- 162 (1 row) count ------- 50 (1 row) count ------- 67 (1 row) count ------- 174 (1 row) count ------- 189 (1 row) count ------- 234 (1 row) count ------- 127 (1 row) count ------- 162 (1 row) count ------- 145 (1 row) count ------- 74 (1 row) count ------- 155 (1 row) count ------- 88 (1 row) count ------- 139 (1 row) count ------- 110 (1 row) count ------- 50 (1 row) count ------- 102 (1 row) count ------- 26 (1 row) count ------- 24 (1 row) count ------- 115 (1 row) count ------- 90 (1 row) count ------- 172 (1 row) count ------- 102 (1 row) count ------- 78 (1 row) count ------- 172 (1 row) count ------- 61 (1 row) count ------- 46 (1 row) count ------- 5 (1 row) count ------- 76 (1 row) count ------- 83 (1 row) count ------- 152 (1 row) count ------- 148 (1 row) count ------- 60 (1 row) count ------- 179 (1 row) count ------- 169 (1 row) count ------- 289 (1 row) count ------- 158 (1 row) count ------- 56 (1 row) count ------- 240 (1 row) count ------- 47 (1 row) count ------- 238 (1 row) count ------- 92 (1 row) count ------- 84 (1 row) count ------- 92 (1 row) count ------- 6 (1 row) count ------- 211 (1 row) count ------- 84 (1 row) count ------- 166 (1 row) count ------- 144 (1 row) count ------- 196 (1 row) count ------- 44 (1 row) count ------- 81 (1 row) count ------- 107 (1 row) count ------- 107 (1 row) count ------- 72 (1 row) count ------- 133 (1 row) count ------- 183 (1 row) count ------- 66 (1 row) count ------- 255 (1 row) count ------- 67 (1 row) count ------- 118 (1 row) count ------- 262 (1 row) count ------- 183 (1 row) count ------- 250 (1 row) count ------- 201 (1 row) count ------- 130 (1 row) count ------- 152 (1 row) count ------- 223 (1 row) count ------- 32 (1 row) count ------- 117 (1 row) count ------- 67 (1 row) count ------- 94 (1 row) count ------- 216 (1 row) count ------- 229 (1 row) count ------- 172 (1 row) count ------- 225 (1 row) count ------- 181 (1 row) count ------- 1 (1 row) count ------- 155 (1 row) count ------- 188 (1 row) count ------- 191 (1 row) count ------- 109 (1 row) count ------- 112 (1 row) count ------- 88 (1 row) count ------- 108 (1 row) count ------- 154 (1 row) count ------- 173 (1 row) count ------- 144 (1 row) count ------- 106 (1 row) count ------- 2 (1 row) count ------- 57 (1 row) count ------- 50 (1 row) count ------- 31 (1 row) count ------- 41 (1 row) count ------- 153 (1 row) count ------- 66 (1 row) count ------- 66 (1 row) count ------- 110 (1 row) count ------- 75 (1 row) count ------- 123 (1 row) count ------- 131 (1 row) count ------- 50 (1 row) count ------- 127 (1 row) count ------- 163 (1 row) count ------- 44 (1 row) count ------- 76 (1 row) count ------- 161 (1 row) count ------- 125 (1 row) count ------- 155 (1 row) count ------- 85 (1 row) count ------- 49 (1 row) count ------- 109 (1 row) count ------- 110 (1 row) count ------- 200 (1 row) count ------- 55 (1 row) count ------- 181 (1 row) count ------- 110 (1 row) count ------- 187 (1 row) count ------- 87 (1 row) count ------- 85 (1 row) count ------- 10 (1 row) count ------- 236 (1 row) count ------- 26 (1 row) count ------- 240 (1 row) count ------- 136 (1 row) count ------- 106 (1 row) count ------- 77 (1 row) count ------- 131 (1 row) count ------- 167 (1 row) count ------- 216 (1 row) count ------- 170 (1 row) count ------- 172 (1 row) count ------- 133 (1 row) count ------- 132 (1 row) count ------- 241 (1 row) count ------- 94 (1 row) count ------- 155 (1 row) count ------- 130 (1 row) count ------- 70 (1 row) count ------- 140 (1 row) count ------- 88 (1 row) count ------- 95 (1 row) count ------- 201 (1 row) count ------- 115 (1 row) count ------- 160 (1 row) count ------- 39 (1 row) count ------- 13 (1 row) count ------- 269 (1 row) count ------- 42 (1 row) count ------- 239 (1 row) count ------- 122 (1 row) count ------- 238 (1 row) count ------- 120 (1 row) count ------- 45 (1 row) count ------- 172 (1 row) count ------- 57 (1 row) count ------- 161 (1 row) count ------- 194 (1 row) count ------- 124 (1 row) count ------- 168 (1 row) count ------- 126 (1 row) count ------- 153 (1 row) count ------- 49 (1 row) count ------- 178 (1 row) count ------- 167 (1 row) count ------- 101 (1 row) count ------- 19 (1 row) count ------- 143 (1 row) count ------- 172 (1 row) count ------- 159 (1 row) count ------- 225 (1 row) count ------- 18 (1 row) count ------- 73 (1 row) count ------- 49 (1 row) count ------- 167 (1 row) count ------- 93 (1 row) count ------- 3 (1 row) count ------- 203 (1 row) count ------- 93 (1 row) count ------- 91 (1 row) count ------- 122 (1 row) count ------- 186 (1 row) count ------- 145 (1 row) count ------- 18 (1 row) count ------- 340 (1 row) count ------- 172 (1 row) count ------- 180 (1 row) count ------- 209 (1 row) count ------- 90 (1 row) count ------- 107 (1 row) count ------- 73 (1 row) count ------- 71 (1 row) count ------- 32 (1 row) count ------- 107 (1 row) count ------- 13 (1 row) count ------- 102 (1 row) count ------- 37 (1 row) count ------- 47 (1 row) count ------- 139 (1 row) count ------- 20 (1 row) count ------- 111 (1 row) count ------- 81 (1 row) count ------- 153 (1 row) count ------- 228 (1 row) count ------- 108 (1 row) count ------- 134 (1 row) count ------- 28 (1 row) count ------- 26 (1 row) count ------- 91 (1 row) count ------- 94 (1 row) count ------- 20 (1 row) count ------- 84 (1 row) count ------- 209 (1 row) count ------- 84 (1 row) count ------- 92 (1 row) count ------- 223 (1 row) count ------- 70 (1 row) count ------- 257 (1 row) count ------- 28 (1 row) count ------- 43 (1 row) count ------- 185 (1 row) count ------- 18 (1 row) count ------- 94 (1 row) count ------- 30 (1 row) count ------- 42 (1 row) count ------- 21 (1 row) count ------- 342 (1 row) count ------- 9 (1 row) count ------- 135 (1 row) count ------- 238 (1 row) count ------- 63 (1 row) count ------- 206 (1 row) count ------- 80 (1 row) count ------- 176 (1 row) count ------- 110 (1 row) count ------- 49 (1 row) count ------- 179 (1 row) count ------- 230 (1 row) count ------- 148 (1 row) count ------- 28 (1 row) count ------- 59 (1 row) count ------- 139 (1 row) count ------- 155 (1 row) count ------- 70 (1 row) count ------- 151 (1 row) count ------- 131 (1 row) count ------- 43 (1 row) count ------- 106 (1 row) count ------- 135 (1 row) count ------- 214 (1 row) count ------- 90 (1 row) count ------- 28 (1 row) count ------- 10 (1 row) count ------- 43 (1 row) count ------- 125 (1 row) count ------- 184 (1 row) count ------- 140 (1 row) count ------- 90 (1 row) count ------- 137 (1 row) count ------- 121 (1 row) count ------- 150 (1 row) count ------- 55 (1 row) count ------- 24 (1 row) count ------- 177 (1 row) count ------- 6 (1 row) count ------- 227 (1 row) count ------- 43 (1 row) count ------- 95 (1 row) count ------- 96 (1 row) count ------- 229 (1 row) count ------- 113 (1 row) count ------- 153 (1 row) count ------- 118 (1 row) count ------- 76 (1 row) count ------- 245 (1 row) count ------- 202 (1 row) count ------- 131 (1 row) count ------- 73 (1 row) count ------- 120 (1 row) count ------- 62 (1 row) count ------- 172 (1 row) count ------- 155 (1 row) count ------- 238 (1 row) count ------- 28 (1 row) count ------- 183 (1 row) count ------- 184 (1 row) count ------- 192 (1 row) count ------- 115 (1 row) count ------- 62 (1 row) count ------- 93 (1 row) count ------- 132 (1 row) count ------- 200 (1 row) count ------- 205 (1 row) count ------- 225 (1 row) count ------- 178 (1 row) count ------- 73 (1 row) count ------- 71 (1 row) count ------- 53 (1 row) count ------- 59 (1 row) count ------- 200 (1 row) count ------- 116 (1 row) count ------- 146 (1 row) count ------- 159 (1 row) count ------- 186 (1 row) count ------- 89 (1 row) count ------- 97 (1 row) count ------- 99 (1 row) count ------- 94 (1 row) count ------- 131 (1 row) count ------- 14 (1 row) count ------- 184 (1 row) count ------- 75 (1 row) count ------- 124 (1 row) count ------- 95 (1 row) count ------- 136 (1 row) count ------- 123 (1 row) count ------- 60 (1 row) count ------- 104 (1 row) count ------- 23 (1 row) count ------- 15 (1 row) count ------- 134 (1 row) count ------- 163 (1 row) count ------- 183 (1 row) count ------- 32 (1 row) count ------- 144 (1 row) count ------- 19 (1 row) count ------- 118 (1 row) count ------- 101 (1 row) count ------- 231 (1 row) count ------- 5 (1 row) count ------- 109 (1 row) count ------- 193 (1 row) count ------- 113 (1 row) count ------- 129 (1 row) count ------- 76 (1 row) count ------- 257 (1 row) count ------- 53 (1 row) count ------- 25 (1 row) count ------- 25 (1 row) count ------- 106 (1 row) count ------- 72 (1 row) count ------- 111 (1 row) count ------- 108 (1 row) count ------- 90 (1 row) count ------- 39 (1 row) count ------- 141 (1 row) count ------- 35 (1 row) count ------- 109 (1 row) count ------- 83 (1 row) count ------- 57 (1 row) count ------- 45 (1 row) count ------- 83 (1 row) count ------- 161 (1 row) count ------- 11 (1 row) count ------- 121 (1 row) count ------- 270 (1 row) count ------- 4 (1 row) count ------- 6 (1 row) count ------- 244 (1 row) count ------- 68 (1 row) count ------- 18 (1 row) count ------- 138 (1 row) count ------- 54 (1 row) count ------- 112 (1 row) count ------- 26 (1 row) count ------- 246 (1 row) count ------- 101 (1 row) count ------- 64 (1 row) count ------- 120 (1 row) count ------- 67 (1 row) count ------- 49 (1 row) count ------- 164 (1 row) count ------- 29 (1 row) count ------- 113 (1 row) count ------- 83 (1 row) count ------- 174 (1 row) count ------- 91 (1 row) count ------- 105 (1 row) count ------- 231 (1 row) count ------- 220 (1 row) count ------- 108 (1 row) count ------- 124 (1 row) count ------- 100 (1 row) count ------- 101 (1 row) count ------- 14 (1 row) count ------- 131 (1 row) count ------- 114 (1 row) count ------- 118 (1 row) count ------- 158 (1 row) count ------- 120 (1 row) count ------- 203 (1 row) count ------- 98 (1 row) count ------- 193 (1 row) count ------- 95 (1 row) count ------- 188 (1 row) count ------- 130 (1 row) count ------- 142 (1 row) count ------- 117 (1 row) count ------- 203 (1 row) count ------- 35 (1 row) count ------- 35 (1 row) count ------- 167 (1 row) count ------- 59 (1 row) count ------- 212 (1 row) count ------- 128 (1 row) count ------- 54 (1 row) count ------- 139 (1 row) count ------- 97 (1 row) count ------- 29 (1 row) count ------- 154 (1 row) count ------- 81 (1 row) count ------- 143 (1 row) count ------- 56 (1 row) count ------- 191 (1 row) count ------- 16 (1 row) count ------- 39 (1 row) count ------- 202 (1 row) count ------- 74 (1 row) count ------- 163 (1 row) count ------- 277 (1 row) count ------- 79 (1 row) count ------- 30 (1 row) count ------- 86 (1 row) count ------- 111 (1 row) count ------- 99 (1 row) count ------- 122 (1 row) count ------- 155 (1 row) count ------- 269 (1 row) count ------- 168 (1 row) count ------- 231 (1 row) count ------- 116 (1 row) count ------- 213 (1 row) count ------- 162 (1 row) count ------- 85 (1 row) count ------- 106 (1 row) count ------- 69 (1 row) count ------- 79 (1 row) count ------- 113 (1 row) count ------- 108 (1 row) count ------- 148 (1 row) count ------- 8 (1 row) count ------- 82 (1 row) count ------- 38 (1 row) count ------- 143 (1 row) count ------- 21 (1 row) count ------- 63 (1 row) count ------- 51 (1 row) count ------- 92 (1 row) count ------- 126 (1 row) count ------- 55 (1 row) count ------- 248 (1 row) count ------- 52 (1 row) count ------- 159 (1 row) count ------- 104 (1 row) count ------- 255 (1 row) count ------- 67 (1 row) count ------- 124 (1 row) count ------- 81 (1 row) count ------- 92 (1 row) count ------- 53 (1 row) count ------- 121 (1 row) count ------- 208 (1 row) count ------- 103 (1 row) count ------- 231 (1 row) count ------- 94 (1 row) count ------- 239 (1 row) count ------- 68 (1 row) count ------- 108 (1 row) count ------- 160 (1 row) count ------- 1 (1 row) count ------- 190 (1 row) count ------- 262 (1 row) count ------- 63 (1 row) count ------- 36 (1 row) count ------- 51 (1 row) count ------- 55 (1 row) count ------- 55 (1 row) count ------- 83 (1 row) count ------- 68 (1 row) count ------- 85 (1 row) count ------- 41 (1 row) count ------- 62 (1 row) count ------- 55 (1 row) count ------- 73 (1 row) count ------- 100 (1 row) count ------- 157 (1 row) count ------- 134 (1 row) count ------- 139 (1 row) count ------- 34 (1 row) count ------- 117 (1 row) count ------- 114 (1 row) count ------- 88 (1 row) count ------- 103 (1 row) count ------- 184 (1 row) count ------- 173 (1 row) count ------- 11 (1 row) count ------- 161 (1 row) count ------- 86 (1 row) count ------- 125 (1 row) count ------- 220 (1 row) count ------- 78 (1 row) count ------- 190 (1 row) count ------- 115 (1 row) count ------- 82 (1 row) count ------- 357 (1 row) count ------- 19 (1 row) count ------- 116 (1 row) count ------- 39 (1 row) count ------- 73 (1 row) count ------- 96 (1 row) count ------- 11 (1 row) count ------- 290 (1 row) count ------- 115 (1 row) count ------- 124 (1 row) count ------- 110 (1 row) count ------- 191 (1 row) count ------- 12 (1 row) count ------- 214 (1 row) count ------- 209 (1 row) count ------- 75 (1 row) count ------- 169 (1 row) count ------- 164 (1 row) count ------- 215 (1 row) count ------- 115 (1 row) count ------- 223 (1 row) count ------- 179 (1 row) count ------- 61 (1 row) count ------- 57 (1 row) count ------- 39 (1 row) count ------- 165 (1 row) count ------- 42 (1 row) count ------- 95 (1 row) count ------- 360 (1 row) count ------- 169 (1 row) count ------- 129 (1 row) count ------- 175 (1 row) count ------- 55 (1 row) count ------- 115 (1 row) count ------- 220 (1 row) count ------- 138 (1 row) count ------- 133 (1 row) count ------- 120 (1 row) count ------- 238 (1 row) count ------- 173 (1 row) count ------- 120 (1 row) count ------- 129 (1 row) count ------- 165 (1 row) count ------- 81 (1 row) count ------- 100 (1 row) count ------- 240 (1 row) count ------- 174 (1 row) count ------- 177 (1 row) count ------- 178 (1 row) count ------- 131 (1 row) count ------- 101 (1 row) count ------- 184 (1 row) count ------- 226 (1 row) count ------- 32 (1 row) count ------- 158 (1 row) count ------- 237 (1 row) count ------- 93 (1 row) count ------- 191 (1 row) count ------- 170 (1 row) count ------- 158 (1 row) count ------- 57 (1 row) count ------- 73 (1 row) count ------- 179 (1 row) count ------- 84 (1 row) count ------- 98 (1 row) count ------- 189 (1 row) count ------- 178 (1 row) count ------- 75 (1 row) count ------- 35 (1 row) count ------- 78 (1 row) count ------- 76 (1 row) count ------- 183 (1 row) count ------- 63 (1 row) count ------- 119 (1 row) count ------- 164 (1 row) count ------- 91 (1 row) count ------- 127 (1 row) count ------- 162 (1 row) count ------- 224 (1 row) count ------- 367 (1 row) count ------- 188 (1 row) count ------- 245 (1 row) count ------- 147 (1 row) count ------- 125 (1 row) count ------- 120 (1 row) count ------- 111 (1 row) count ------- 153 (1 row) count ------- 109 (1 row) count ------- 126 (1 row) count ------- 132 (1 row) count ------- 95 (1 row) count ------- 126 (1 row) count ------- 249 (1 row) count ------- 122 (1 row) count ------- 195 (1 row) count ------- 130 (1 row) count ------- 327 (1 row) count ------- 41 (1 row) count ------- 38 (1 row) count ------- 122 (1 row) count ------- 66 (1 row) count ------- 215 (1 row) count ------- 224 (1 row) count ------- 146 (1 row) count ------- 145 (1 row) count ------- 45 (1 row) count ------- 75 (1 row) count ------- 186 (1 row) count ------- 193 (1 row) count ------- 73 (1 row) count ------- 140 (1 row) count ------- 21 (1 row) count ------- 84 (1 row) count ------- 107 (1 row) count ------- 34 (1 row) count ------- 167 (1 row) count ------- 130 (1 row) count ------- 97 (1 row) count ------- 13 (1 row) count ------- 89 (1 row) count ------- 45 (1 row) count ------- 147 (1 row) count ------- 127 (1 row) count ------- 115 (1 row) count ------- 256 (1 row) count ------- 57 (1 row) count ------- 160 (1 row) count ------- 140 (1 row) count ------- 55 (1 row) count ------- 193 (1 row) count ------- 174 (1 row) count ------- 85 (1 row) count ------- 72 (1 row) count ------- 36 (1 row) count ------- 160 (1 row) count ------- 36 (1 row) count ------- 157 (1 row) count ------- 258 (1 row) count ------- 213 (1 row) count ------- 112 (1 row) count ------- 193 (1 row) count ------- 78 (1 row) count ------- 95 (1 row) count ------- 96 (1 row) count ------- 97 (1 row) count ------- 265 (1 row) count ------- 223 (1 row) count ------- 160 (1 row) count ------- 168 (1 row) count ------- 94 (1 row) count ------- 13 (1 row) count ------- 149 (1 row) count ------- 101 (1 row) count ------- 201 (1 row) count ------- 88 (1 row) count ------- 119 (1 row) count ------- 129 (1 row) count ------- 47 (1 row) count ------- 78 (1 row) count ------- 235 (1 row) count ------- 90 (1 row) count ------- 141 (1 row) count ------- 75 (1 row) count ------- 177 (1 row) count ------- 305 (1 row) count ------- 93 (1 row) count ------- 115 (1 row) count ------- 109 (1 row) count ------- 287 (1 row) count ------- 157 (1 row) count ------- 175 (1 row) count ------- 139 (1 row) count ------- 156 (1 row) count ------- 147 (1 row) count ------- 26 (1 row) count ------- 65 (1 row) count ------- 62 (1 row) count ------- 64 (1 row) count ------- 130 (1 row) count ------- 177 (1 row) count ------- 162 (1 row) count ------- 187 (1 row) count ------- 48 (1 row) count ------- 40 (1 row) count ------- 225 (1 row) count ------- 189 (1 row) count ------- 49 (1 row) count ------- 257 (1 row) count ------- 46 (1 row) count ------- 112 (1 row) count ------- 85 (1 row) count ------- 65 (1 row) count ------- 166 (1 row) count ------- 151 (1 row) count ------- 172 (1 row) count ------- 95 (1 row) count ------- 188 (1 row) count ------- 169 (1 row) count ------- 86 (1 row) count ------- 179 (1 row) count ------- 69 (1 row) count ------- 157 (1 row) count ------- 149 (1 row) count ------- 60 (1 row) count ------- 156 (1 row) count ------- 43 (1 row) count ------- 39 (1 row) count ------- 93 (1 row) count ------- 118 (1 row) count ------- 67 (1 row) count ------- 102 (1 row) count ------- 110 (1 row) count ------- 113 (1 row) count ------- 20 (1 row) count ------- 227 (1 row) count ------- 143 (1 row) count ------- 165 (1 row) count ------- 214 (1 row) count ------- 154 (1 row) count ------- 84 (1 row) count ------- 85 (1 row) count ------- 38 (1 row) count ------- 127 (1 row) count ------- 236 (1 row) count ------- 103 (1 row) count ------- 191 (1 row) count ------- 95 (1 row) count ------- 195 (1 row) count ------- 60 (1 row) count ------- 103 (1 row) count ------- 19 (1 row) count ------- 23 (1 row) count ------- 103 (1 row) count ------- 98 (1 row) count ------- 20 (1 row) count ------- 104 (1 row) count ------- 57 (1 row) count ------- 136 (1 row) count ------- 93 (1 row) count ------- 62 (1 row) count ------- 30 (1 row) count ------- 67 (1 row) count ------- 16 (1 row) count ------- 128 (1 row) count ------- 64 (1 row) count ------- 103 (1 row) count ------- 78 (1 row) count ------- 87 (1 row) count ------- 68 (1 row) count ------- 71 (1 row) count ------- 216 (1 row) count ------- 60 (1 row) count ------- 38 (1 row) count ------- 247 (1 row) count ------- 53 (1 row) count ------- 167 (1 row) count ------- 195 (1 row) count ------- 95 (1 row) count ------- 119 (1 row) count ------- 338 (1 row) count ------- 142 (1 row) count ------- 93 (1 row) count ------- 51 (1 row) count ------- 189 (1 row) count ------- 84 (1 row) count ------- 123 (1 row) count ------- 61 (1 row) count ------- 50 (1 row) count ------- 75 (1 row) count ------- 202 (1 row) count ------- 225 (1 row) count ------- 138 (1 row) count ------- 81 (1 row) count ------- 137 (1 row) count ------- 102 (1 row) count ------- 6 (1 row) count ------- 74 (1 row) count ------- 122 (1 row) count ------- 151 (1 row) count ------- 68 (1 row) count ------- 205 (1 row) count ------- 86 (1 row) count ------- 271 (1 row) count ------- 201 (1 row) count ------- 185 (1 row) count ------- 9 (1 row) count ------- 159 (1 row) count ------- 7 (1 row) count ------- 159 (1 row) count ------- 75 (1 row) count ------- 332 (1 row) count ------- 73 (1 row) count ------- 54 (1 row) count ------- 133 (1 row) count ------- 179 (1 row) count ------- 26 (1 row) count ------- 110 (1 row) count ------- 191 (1 row) count ------- 97 (1 row) count ------- 303 (1 row) count ------- 119 (1 row) count ------- 222 (1 row) count ------- 133 (1 row) count ------- 122 (1 row) count ------- 111 (1 row) count ------- 122 (1 row) count ------- 183 (1 row) count ------- 134 (1 row) count ------- 155 (1 row) count ------- 91 (1 row) count ------- 175 (1 row) count ------- 88 (1 row) count ------- 155 (1 row) count ------- 61 (1 row) count ------- 83 (1 row) count ------- 229 (1 row) count ------- 14 (1 row) count ------- 154 (1 row) count ------- 226 (1 row) count ------- 107 (1 row) count ------- 232 (1 row) count ------- 117 (1 row) count ------- 98 (1 row) count ------- 169 (1 row) count ------- 229 (1 row) count ------- 56 (1 row) count ------- 186 (1 row) count ------- 44 (1 row) count ------- 207 (1 row) count ------- 68 (1 row) count ------- 161 (1 row) count ------- 307 (1 row) count ------- 215 (1 row) count ------- 300 (1 row) count ------- 306 (1 row) count ------- 135 (1 row) count ------- 173 (1 row) count ------- 42 (1 row) count ------- 42 (1 row) count ------- 186 (1 row) count ------- 77 (1 row) count ------- 110 (1 row) count ------- 131 (1 row) count ------- 90 (1 row) count ------- 75 (1 row) count ------- 169 (1 row) count ------- 77 (1 row) count ------- 133 (1 row) count ------- 117 (1 row) count ------- 68 (1 row) count ------- 31 (1 row) count ------- 226 (1 row) count ------- 110 (1 row) count ------- 66 (1 row) count ------- 111 (1 row) count ------- 128 (1 row) count ------- 87 (1 row) count ------- 95 (1 row) count ------- 21 (1 row) count ------- 48 (1 row) count ------- 88 (1 row) count ------- 104 (1 row) count ------- 180 (1 row) count ------- 31 (1 row) count ------- 106 (1 row) count ------- 66 (1 row) count ------- 88 (1 row) count ------- 162 (1 row) count ------- 51 (1 row) count ------- 234 (1 row) count ------- 90 (1 row) count ------- 31 (1 row) count ------- 7 (1 row) count ------- 75 (1 row) count ------- 126 (1 row) count ------- 90 (1 row) count ------- 133 (1 row) count ------- 70 (1 row) count ------- 80 (1 row) count ------- 191 (1 row) count ------- 45 (1 row) count ------- 64 (1 row) count ------- 92 (1 row) count ------- 229 (1 row) count ------- 118 (1 row) count ------- 201 (1 row) count ------- 117 (1 row) count ------- 144 (1 row) count ------- 137 (1 row) count ------- 17 (1 row) count ------- 161 (1 row) count ------- 113 (1 row) count ------- 42 (1 row) count ------- 232 (1 row) count ------- 102 (1 row) count ------- 116 (1 row) count ------- 7 (1 row) count ------- 140 (1 row) count ------- 54 (1 row) count ------- 142 (1 row) count ------- 121 (1 row) count ------- 94 (1 row) count ------- 57 (1 row) count ------- 235 (1 row) count ------- 296 (1 row) count ------- 122 (1 row) count ------- 131 (1 row) count ------- 32 (1 row) count ------- 39 (1 row) count ------- 191 (1 row) count ------- 51 (1 row) count ------- 95 (1 row) count ------- 180 (1 row) count ------- 186 (1 row) count ------- 228 (1 row) count ------- 54 (1 row) count ------- 121 (1 row) count ------- 30 (1 row) count ------- 45 (1 row) count ------- 97 (1 row) count ------- 183 (1 row) count ------- 254 (1 row) count ------- 165 (1 row) count ------- 73 (1 row) count ------- 20 (1 row) count ------- 166 (1 row) count ------- 40 (1 row) count ------- 111 (1 row) count ------- 269 (1 row) count ------- 149 (1 row) count ------- 122 (1 row) count ------- 259 (1 row) count ------- 97 (1 row) count ------- 181 (1 row) count ------- 140 (1 row) count ------- 63 (1 row) count ------- 1 (1 row) count ------- 231 (1 row) count ------- 207 (1 row) count ------- 131 (1 row) count ------- 53 (1 row) count ------- 91 (1 row) count ------- 297 (1 row) count ------- 214 (1 row) count ------- 86 (1 row) count ------- 95 (1 row) count ------- 181 (1 row) count ------- 76 (1 row) count ------- 222 (1 row) count ------- 81 (1 row) count ------- 122 (1 row) count ------- 131 (1 row) count ------- 114 (1 row) count ------- 99 (1 row) count ------- 207 (1 row) count ------- 15 (1 row) count ------- 61 (1 row) count ------- 69 (1 row) count ------- 158 (1 row) count ------- 202 (1 row) count ------- 75 (1 row) count ------- 155 (1 row) count ------- 104 (1 row) count ------- 30 (1 row) count ------- 126 (1 row) count ------- 76 (1 row) count ------- 34 (1 row) count ------- 181 (1 row) count ------- 62 (1 row) count ------- 48 (1 row) count ------- 103 (1 row) count ------- 17 (1 row) count ------- 102 (1 row) count ------- 84 (1 row) count ------- 47 (1 row) count ------- 226 (1 row) count ------- 140 (1 row) count ------- 108 (1 row) count ------- 168 (1 row) count ------- 39 (1 row) count ------- 229 (1 row) count ------- 312 (1 row) count ------- 82 (1 row) count ------- 79 (1 row) count ------- 122 (1 row) count ------- 172 (1 row) count ------- 57 (1 row) count ------- 198 (1 row) count ------- 134 (1 row) count ------- 194 (1 row) count ------- 87 (1 row) count ------- 43 (1 row) count ------- 87 (1 row) count ------- 68 (1 row) count ------- 78 (1 row) count ------- 189 (1 row) count ------- 216 (1 row) count ------- 95 (1 row) count ------- 202 (1 row) count ------- 101 (1 row) count ------- 25 (1 row) count ------- 110 (1 row) count ------- 45 (1 row) count ------- 79 (1 row) count ------- 138 (1 row) count ------- 116 (1 row) count ------- 161 (1 row) count ------- 59 (1 row) count ------- 182 (1 row) count ------- 99 (1 row) count ------- 79 (1 row) count ------- 197 (1 row) count ------- 58 (1 row) count ------- 49 (1 row) count ------- 163 (1 row) count ------- 109 (1 row) count ------- 126 (1 row) count ------- 154 (1 row) count ------- 77 (1 row) count ------- 105 (1 row) count ------- 37 (1 row) count ------- 42 (1 row) count ------- 63 (1 row) count ------- 238 (1 row) count ------- 103 (1 row) count ------- 109 (1 row) count ------- 40 (1 row) count ------- 42 (1 row) count ------- 177 (1 row) count ------- 41 (1 row) count ------- 36 (1 row) count ------- 120 (1 row) count ------- 196 (1 row) count ------- 115 (1 row) count ------- 118 (1 row) count ------- 29 (1 row) count ------- 60 (1 row) count ------- 194 (1 row) count ------- 50 (1 row) count ------- 0 (1 row) count ------- 150 (1 row) count ------- 282 (1 row) count ------- 124 (1 row) count ------- 49 (1 row) count ------- 212 (1 row) count ------- 38 (1 row) count ------- 69 (1 row) count ------- 130 (1 row) count ------- 92 (1 row) count ------- 115 (1 row) count ------- 227 (1 row) count ------- 108 (1 row) count ------- 103 (1 row) count ------- 54 (1 row) count ------- 196 (1 row) count ------- 96 (1 row) count ------- 111 (1 row) count ------- 15 (1 row) count ------- 105 (1 row) count ------- 75 (1 row) count ------- 139 (1 row) count ------- 164 (1 row) count ------- 68 (1 row) count ------- 105 (1 row) count ------- 23 (1 row) count ------- 162 (1 row) count ------- 65 (1 row) count ------- 113 (1 row) count ------- 181 (1 row) count ------- 126 (1 row) count ------- 86 (1 row) count ------- 106 (1 row) count ------- 95 (1 row) count ------- 70 (1 row) count ------- 72 (1 row) count ------- 77 (1 row) count ------- 63 (1 row) count ------- 48 (1 row) count ------- 119 (1 row) count ------- 193 (1 row) count ------- 152 (1 row) count ------- 104 (1 row) count ------- 65 (1 row) count ------- 83 (1 row) count ------- 167 (1 row) count ------- 294 (1 row) count ------- 95 (1 row) count ------- 221 (1 row) count ------- 217 (1 row) count ------- 41 (1 row) count ------- 103 (1 row) count ------- 101 (1 row) count ------- 0 (1 row) count ------- 126 (1 row) count ------- 110 (1 row) count ------- 114 (1 row) count ------- 50 (1 row) count ------- 270 (1 row) count ------- 104 (1 row) count ------- 36 (1 row) count ------- 188 (1 row) count ------- 116 (1 row) count ------- 212 (1 row) count ------- 134 (1 row) count ------- 108 (1 row) count ------- 117 (1 row) count ------- 159 (1 row) count ------- 170 (1 row) count ------- 205 (1 row) count ------- 96 (1 row) count ------- 5 (1 row) count ------- 126 (1 row) count ------- 293 (1 row) count ------- 62 (1 row) count ------- 166 (1 row) count ------- 99 (1 row) count ------- 113 (1 row) count ------- 225 (1 row) count ------- 217 (1 row) count ------- 197 (1 row) count ------- 115 (1 row) count ------- 179 (1 row) count ------- 220 (1 row) count ------- 267 (1 row) count ------- 122 (1 row) count ------- 168 (1 row) count ------- 117 (1 row) count ------- 100 (1 row) count ------- 177 (1 row) count ------- 124 (1 row) count ------- 133 (1 row) count ------- 49 (1 row) count ------- 226 (1 row) count ------- 200 (1 row) count ------- 97 (1 row) count ------- 99 (1 row) count ------- 155 (1 row) count ------- 27 (1 row) count ------- 159 (1 row) count ------- 5 (1 row) count ------- 62 (1 row) count ------- 94 (1 row) count ------- 36 (1 row) count ------- 199 (1 row) count ------- 204 (1 row) count ------- 114 (1 row) count ------- 77 (1 row) count ------- 6 (1 row) count ------- 110 (1 row) count ------- 117 (1 row) count ------- 80 (1 row) count ------- 92 (1 row) count ------- 0 (1 row) count ------- 109 (1 row) count ------- 189 (1 row) count ------- 145 (1 row) count ------- 160 (1 row) count ------- 43 (1 row) count ------- 30 (1 row) count ------- 47 (1 row) count ------- 168 (1 row) count ------- 139 (1 row) count ------- 196 (1 row) count ------- 24 (1 row) count ------- 169 (1 row) count ------- 57 (1 row) count ------- 162 (1 row) count ------- 90 (1 row) count ------- 118 (1 row) count ------- 188 (1 row) count ------- 181 (1 row) count ------- 105 (1 row) count ------- 45 (1 row) count ------- 193 (1 row) count ------- 171 (1 row) count ------- 152 (1 row) count ------- 53 (1 row) count ------- 117 (1 row) count ------- 59 (1 row) count ------- 23 (1 row) count ------- 22 (1 row) count ------- 79 (1 row) count ------- 127 (1 row) count ------- 221 (1 row) count ------- 150 (1 row) count ------- 271 (1 row) count ------- 154 (1 row) count ------- 22 (1 row) count ------- 117 (1 row) count ------- 113 (1 row) count ------- 31 (1 row) count ------- 59 (1 row) count ------- 66 (1 row) count ------- 35 (1 row) count ------- 95 (1 row) count ------- 61 (1 row) count ------- 158 (1 row) count ------- 18 (1 row) count ------- 125 (1 row) count ------- 69 (1 row) count ------- 112 (1 row) count ------- 127 (1 row) count ------- 223 (1 row) count ------- 199 (1 row) count ------- 121 (1 row) count ------- 127 (1 row) count ------- 241 (1 row) count ------- 121 (1 row) count ------- 3 (1 row) count ------- 103 (1 row) count ------- 73 (1 row) count ------- 0 (1 row) count ------- 74 (1 row) count ------- 110 (1 row) count ------- 89 (1 row) count ------- 105 (1 row) count ------- 189 (1 row) count ------- 75 (1 row) count ------- 121 (1 row) count ------- 145 (1 row) count ------- 188 (1 row) count ------- 40 (1 row) count ------- 47 (1 row) count ------- 27 (1 row) count ------- 239 (1 row) count ------- 67 (1 row) count ------- 13 (1 row) count ------- 79 (1 row) count ------- 176 (1 row) count ------- 64 (1 row) count ------- 97 (1 row) count ------- 134 (1 row) count ------- 111 (1 row) count ------- 145 (1 row) count ------- 53 (1 row) count ------- 43 (1 row) count ------- 55 (1 row) count ------- 219 (1 row) count ------- 55 (1 row) count ------- 203 (1 row) count ------- 148 (1 row) count ------- 79 (1 row) count ------- 28 (1 row) count ------- 88 (1 row) count ------- 120 (1 row) count ------- 108 (1 row) count ------- 90 (1 row) count ------- 120 (1 row) count ------- 92 (1 row) count ------- 156 (1 row) count ------- 189 (1 row) count ------- 137 (1 row) count ------- 35 (1 row) count ------- 233 (1 row) count ------- 216 (1 row) count ------- 71 (1 row) count ------- 17 (1 row) count ------- 112 (1 row) count ------- 5 (1 row) count ------- 73 (1 row) count ------- 92 (1 row) count ------- 97 (1 row) count ------- 99 (1 row) count ------- 156 (1 row) count ------- 131 (1 row) count ------- 8 (1 row) count ------- 162 (1 row) count ------- 165 (1 row) count ------- 11 (1 row) count ------- 52 (1 row) count ------- 220 (1 row) count ------- 100 (1 row) count ------- 117 (1 row) count ------- 46 (1 row) count ------- 110 (1 row) count ------- 22 (1 row) count ------- 23 (1 row) count ------- 236 (1 row) count ------- 232 (1 row) count ------- 21 (1 row) count ------- 318 (1 row) count ------- 52 (1 row) count ------- 72 (1 row) count ------- 89 (1 row) count ------- 22 (1 row) count ------- 104 (1 row) count ------- 171 (1 row) count ------- 238 (1 row) count ------- 82 (1 row) count ------- 53 (1 row) count ------- 117 (1 row) count ------- 229 (1 row) count ------- 74 (1 row) count ------- 52 (1 row) count ------- 23 (1 row) count ------- 129 (1 row) count ------- 9 (1 row) count ------- 69 (1 row) count ------- 15 (1 row) count ------- 162 (1 row) count ------- 120 (1 row) count ------- 60 (1 row) count ------- 29 (1 row) count ------- 198 (1 row) count ------- 193 (1 row) count ------- 68 (1 row) count ------- 65 (1 row) count ------- 16 (1 row) count ------- 122 (1 row) count ------- 80 (1 row) count ------- 131 (1 row) count ------- 118 (1 row) count ------- 245 (1 row) count ------- 113 (1 row) count ------- 24 (1 row) count ------- 189 (1 row) count ------- 118 (1 row) count ------- 58 (1 row) count ------- 161 (1 row) count ------- 22 (1 row) count ------- 141 (1 row) count ------- 186 (1 row) count ------- 166 (1 row) count ------- 71 (1 row) count ------- 80 (1 row) count ------- 133 (1 row) count ------- 165 (1 row) count ------- 104 (1 row) count ------- 296 (1 row) count ------- 106 (1 row) count ------- 51 (1 row) count ------- 125 (1 row) count ------- 136 (1 row) count ------- 125 (1 row) count ------- 79 (1 row) count ------- 100 (1 row) count ------- 137 (1 row) count ------- 89 (1 row) count ------- 241 (1 row) count ------- 49 (1 row) count ------- 79 (1 row) count ------- 92 (1 row) count ------- 22 (1 row) count ------- 173 (1 row) count ------- 66 (1 row) count ------- 206 (1 row) count ------- 104 (1 row) count ------- 117 (1 row) count ------- 97 (1 row) count ------- 34 (1 row) count ------- 89 (1 row) count ------- 38 (1 row) count ------- 51 (1 row) count ------- 148 (1 row) count ------- 150 (1 row) count ------- 56 (1 row) count ------- 142 (1 row) count ------- 55 (1 row) count ------- 183 (1 row) count ------- 129 (1 row) count ------- 114 (1 row) count ------- 133 (1 row) count ------- 103 (1 row) count ------- 82 (1 row) count ------- 165 (1 row) count ------- 195 (1 row) count ------- 60 (1 row) count ------- 57 (1 row) count ------- 48 (1 row) count ------- 218 (1 row) count ------- 70 (1 row) count ------- 102 (1 row) count ------- 146 (1 row) count ------- 25 (1 row) count ------- 146 (1 row) count ------- 181 (1 row) count ------- 120 (1 row) count ------- 63 (1 row) count ------- 361 (1 row) count ------- 133 (1 row) count ------- 240 (1 row) count ------- 194 (1 row) count ------- 90 (1 row) count ------- 83 (1 row) count ------- 234 (1 row) count ------- 56 (1 row) count ------- 87 (1 row) count ------- 72 (1 row) count ------- 146 (1 row) count ------- 53 (1 row) count ------- 128 (1 row) count ------- 49 (1 row) count ------- 136 (1 row) count ------- 133 (1 row) count ------- 198 (1 row) count ------- 236 (1 row) count ------- 82 (1 row) count ------- 178 (1 row) count ------- 89 (1 row) count ------- 170 (1 row) count ------- 29 (1 row) count ------- 118 (1 row) count ------- 69 (1 row) count ------- 148 (1 row) count ------- 234 (1 row) count ------- 39 (1 row) count ------- 26 (1 row) count ------- 80 (1 row) count ------- 98 (1 row) count ------- 88 (1 row) count ------- 8 (1 row) count ------- 109 (1 row) count ------- 2 (1 row) count ------- 96 (1 row) count ------- 164 (1 row) count ------- 31 (1 row) count ------- 173 (1 row) count ------- 169 (1 row) count ------- 152 (1 row) count ------- 165 (1 row) count ------- 227 (1 row) count ------- 32 (1 row) count ------- 196 (1 row) count ------- 35 (1 row) count ------- 91 (1 row) count ------- 134 (1 row) count ------- 221 (1 row) count ------- 95 (1 row) count ------- 18 (1 row) count ------- 42 (1 row) count ------- 160 (1 row) count ------- 105 (1 row) count ------- 165 (1 row) count ------- 78 (1 row) count ------- 194 (1 row) count ------- 111 (1 row) count ------- 152 (1 row) count ------- 89 (1 row) count ------- 46 (1 row) count ------- 108 (1 row) count ------- 13 (1 row) count ------- 72 (1 row) count ------- 65 (1 row) count ------- 66 (1 row) count ------- 82 (1 row) count ------- 8 (1 row) count ------- 187 (1 row) count ------- 100 (1 row) count ------- 97 (1 row) count ------- 185 (1 row) count ------- 33 (1 row) count ------- 197 (1 row) count ------- 183 (1 row) count ------- 26 (1 row) count ------- 189 (1 row) count ------- 77 (1 row) count ------- 16 (1 row) count ------- 22 (1 row) count ------- 165 (1 row) count ------- 4 (1 row) count ------- 144 (1 row) count ------- 226 (1 row) count ------- 39 (1 row) count ------- 263 (1 row) count ------- 108 (1 row) count ------- 148 (1 row) count ------- 78 (1 row) count ------- 137 (1 row) count ------- 27 (1 row) count ------- 132 (1 row) count ------- 96 (1 row) count ------- 176 (1 row) count ------- 52 (1 row) count ------- 211 (1 row) count ------- 171 (1 row) count ------- 80 (1 row) count ------- 104 (1 row) count ------- 103 (1 row) count ------- 327 (1 row) count ------- 91 (1 row) count ------- 20 (1 row) count ------- 84 (1 row) count ------- 40 (1 row) count ------- 198 (1 row) count ------- 184 (1 row) count ------- 81 (1 row) count ------- 178 (1 row) count ------- 72 (1 row) count ------- 45 (1 row) count ------- 221 (1 row) count ------- 193 (1 row) count ------- 101 (1 row) count ------- 283 (1 row) count ------- 104 (1 row) count ------- 78 (1 row) count ------- 36 (1 row) count ------- 197 (1 row) count ------- 52 (1 row) count ------- 131 (1 row) count ------- 138 (1 row) count ------- 2 (1 row) count ------- 233 (1 row) count ------- 93 (1 row) count ------- 86 (1 row) count ------- 60 (1 row) count ------- 130 (1 row) count ------- 229 (1 row) count ------- 167 (1 row) count ------- 184 (1 row) count ------- 59 (1 row) count ------- 77 (1 row) count ------- 23 (1 row) count ------- 134 (1 row) count ------- 270 (1 row) count ------- 156 (1 row) count ------- 54 (1 row) count ------- 11 (1 row) count ------- 64 (1 row) count ------- 71 (1 row) count ------- 82 (1 row) count ------- 19 (1 row) count ------- 115 (1 row) count ------- 26 (1 row) count ------- 71 (1 row) count ------- 311 (1 row) count ------- 65 (1 row) count ------- 148 (1 row) count ------- 76 (1 row) count ------- 48 (1 row) count ------- 50 (1 row) count ------- 83 (1 row) count ------- 84 (1 row) count ------- 114 (1 row) count ------- 32 (1 row) count ------- 143 (1 row) count ------- 277 (1 row) count ------- 32 (1 row) count ------- 121 (1 row) count ------- 122 (1 row) count ------- 28 (1 row) count ------- 123 (1 row) count ------- 86 (1 row) count ------- 11 (1 row) count ------- 12 (1 row) count ------- 90 (1 row) count ------- 40 (1 row) count ------- 248 (1 row) count ------- 201 (1 row) count ------- 114 (1 row) count ------- 54 (1 row) count ------- 192 (1 row) count ------- 167 (1 row) count ------- 195 (1 row) count ------- 77 (1 row) count ------- 203 (1 row) count ------- 122 (1 row) count ------- 165 (1 row) count ------- 29 (1 row) count ------- 158 (1 row) count ------- 120 (1 row) count ------- 160 (1 row) count ------- 64 (1 row) count ------- 48 (1 row) count ------- 270 (1 row) count ------- 71 (1 row) count ------- 207 (1 row) count ------- 38 (1 row) count ------- 125 (1 row) count ------- 105 (1 row) count ------- 158 (1 row) count ------- 75 (1 row) count ------- 34 (1 row) count ------- 106 (1 row) count ------- 82 (1 row) count ------- 53 (1 row) count ------- 31 (1 row) count ------- 142 (1 row) count ------- 122 (1 row) count ------- 19 (1 row) count ------- 161 (1 row) count ------- 127 (1 row) count ------- 236 (1 row) count ------- 66 (1 row) count ------- 25 (1 row) count ------- 16 (1 row) count ------- 47 (1 row) count ------- 6 (1 row) count ------- 73 (1 row) count ------- 95 (1 row) count ------- 298 (1 row) count ------- 19 (1 row) count ------- 75 (1 row) count ------- 154 (1 row) count ------- 115 (1 row) count ------- 8 (1 row) count ------- 158 (1 row) count ------- 105 (1 row) count ------- 43 (1 row) count ------- 180 (1 row) count ------- 116 (1 row) count ------- 60 (1 row) count ------- 79 (1 row) count ------- 54 (1 row) count ------- 69 (1 row) count ------- 21 (1 row) count ------- 248 (1 row) count ------- 61 (1 row) count ------- 37 (1 row) count ------- 140 (1 row) count ------- 102 (1 row) count ------- 148 (1 row) count ------- 123 (1 row) count ------- 217 (1 row) count ------- 75 (1 row) count ------- 91 (1 row) count ------- 68 (1 row) count ------- 85 (1 row) count ------- 228 (1 row) count ------- 115 (1 row) count ------- 90 (1 row) count ------- 50 (1 row) count ------- 129 (1 row) count ------- 8 (1 row) count ------- 76 (1 row) count ------- 89 (1 row) count ------- 230 (1 row) count ------- 134 (1 row) count ------- 219 (1 row) count ------- 36 (1 row) count ------- 16 (1 row) count ------- 90 (1 row) count ------- 86 (1 row) count ------- 149 (1 row) count ------- 126 (1 row) count ------- 101 (1 row) count ------- 12 (1 row) count ------- 257 (1 row) count ------- 35 (1 row) count ------- 138 (1 row) count ------- 186 (1 row) count ------- 85 (1 row) count ------- 43 (1 row) count ------- 94 (1 row) count ------- 316 (1 row) count ------- 226 (1 row) count ------- 106 (1 row) count ------- 223 (1 row) count ------- 179 (1 row) count ------- 180 (1 row) count ------- 24 (1 row) count ------- 189 (1 row) count ------- 46 (1 row) count ------- 54 (1 row) count ------- 79 (1 row) count ------- 69 (1 row) count ------- 41 (1 row) count ------- 123 (1 row) count ------- 155 (1 row) count ------- 114 (1 row) count ------- 132 (1 row) count ------- 54 (1 row) count ------- 150 (1 row) count ------- 248 (1 row) count ------- 46 (1 row) count ------- 105 (1 row) count ------- 48 (1 row) count ------- 60 (1 row) count ------- 74 (1 row) count ------- 228 (1 row) count ------- 257 (1 row) count ------- 124 (1 row) count ------- 45 (1 row) count ------- 43 (1 row) count ------- 224 (1 row) count ------- 84 (1 row) count ------- 177 (1 row) count ------- 177 (1 row) count ------- 69 (1 row) count ------- 70 (1 row) count ------- 93 (1 row) count ------- 104 (1 row) count ------- 83 (1 row) count ------- 46 (1 row) count ------- 75 (1 row) count ------- 105 (1 row) count ------- 100 (1 row) count ------- 38 (1 row) count ------- 184 (1 row) count ------- 60 (1 row) count ------- 79 (1 row) count ------- 18 (1 row) count ------- 120 (1 row) count ------- 207 (1 row) count ------- 77 (1 row) count ------- 54 (1 row) count ------- 58 (1 row) count ------- 185 (1 row) count ------- 197 (1 row) count ------- 127 (1 row) count ------- 178 (1 row) count ------- 34 (1 row) count ------- 52 (1 row) count ------- 115 (1 row) count ------- 130 (1 row) count ------- 8 (1 row) count ------- 78 (1 row) count ------- 171 (1 row) count ------- 221 (1 row) count ------- 172 (1 row) count ------- 52 (1 row) count ------- 69 (1 row) count ------- 82 (1 row) count ------- 85 (1 row) count ------- 50 (1 row) count ------- 49 (1 row) count ------- 53 (1 row) count ------- 204 (1 row) count ------- 90 (1 row) count ------- 106 (1 row) count ------- 135 (1 row) count ------- 86 (1 row) count ------- 118 (1 row) count ------- 69 (1 row) count ------- 81 (1 row) count ------- 142 (1 row) count ------- 113 (1 row) count ------- 215 (1 row) count ------- 192 (1 row) count ------- 68 (1 row) count ------- 188 (1 row) count ------- 71 (1 row) count ------- 146 (1 row) count ------- 110 (1 row) count ------- 31 (1 row) count ------- 53 (1 row) count ------- 169 (1 row) count ------- 165 (1 row) count ------- 156 (1 row) count ------- 191 (1 row) count ------- 73 (1 row) count ------- 119 (1 row) count ------- 103 (1 row) count ------- 15 (1 row) count ------- 178 (1 row) count ------- 380 (1 row) count ------- 96 (1 row) count ------- 207 (1 row) count ------- 20 (1 row) count ------- 140 (1 row) count ------- 214 (1 row) count ------- 260 (1 row) count ------- 35 (1 row) count ------- 41 (1 row) count ------- 185 (1 row) count ------- 15 (1 row) count ------- 124 (1 row) count ------- 67 (1 row) count ------- 128 (1 row) count ------- 330 (1 row) count ------- 208 (1 row) count ------- 126 (1 row) count ------- 103 (1 row) count ------- 82 (1 row) count ------- 63 (1 row) count ------- 154 (1 row) count ------- 42 (1 row) count ------- 47 (1 row) count ------- 201 (1 row) count ------- 122 (1 row) count ------- 38 (1 row) count ------- 51 (1 row) count ------- 64 (1 row) count ------- 96 (1 row) count ------- 102 (1 row) count ------- 36 (1 row) count ------- 129 (1 row) count ------- 337 (1 row) count ------- 78 (1 row) count ------- 153 (1 row) count ------- 36 (1 row) count ------- 174 (1 row) count ------- 106 (1 row) count ------- 30 (1 row) count ------- 113 (1 row) count ------- 55 (1 row) count ------- 62 (1 row) count ------- 3 (1 row) count ------- 72 (1 row) count ------- 3 (1 row) count ------- 43 (1 row) count ------- 7 (1 row) count ------- 218 (1 row) count ------- 95 (1 row) count ------- 51 (1 row) count ------- 92 (1 row) count ------- 110 (1 row) count ------- 57 (1 row) count ------- 16 (1 row) count ------- 109 (1 row) count ------- 15 (1 row) count ------- 58 (1 row) count ------- 67 (1 row) count ------- 187 (1 row) count ------- 183 (1 row) count ------- 49 (1 row) count ------- 70 (1 row) count ------- 196 (1 row) count ------- 123 (1 row) count ------- 279 (1 row) count ------- 203 (1 row) count ------- 195 (1 row) count ------- 168 (1 row) count ------- 172 (1 row) count ------- 76 (1 row) count ------- 221 (1 row) count ------- 216 (1 row) count ------- 220 (1 row) count ------- 172 (1 row) count ------- 56 (1 row) count ------- 116 (1 row) count ------- 246 (1 row) count ------- 113 (1 row) count ------- 148 (1 row) count ------- 191 (1 row) count ------- 85 (1 row) count ------- 18 (1 row) count ------- 243 (1 row) count ------- 72 (1 row) count ------- 171 (1 row) count ------- 23 (1 row) count ------- 137 (1 row) count ------- 126 (1 row) count ------- 68 (1 row) count ------- 119 (1 row) count ------- 98 (1 row) count ------- 114 (1 row) count ------- 59 (1 row) count ------- 153 (1 row) count ------- 98 (1 row) count ------- 106 (1 row) count ------- 110 (1 row) count ------- 131 (1 row) count ------- 124 (1 row) count ------- 8 (1 row) count ------- 103 (1 row) count ------- 157 (1 row) count ------- 150 (1 row) count ------- 105 (1 row) count ------- 147 (1 row) count ------- 104 (1 row) count ------- 55 (1 row) count ------- 142 (1 row) count ------- 88 (1 row) count ------- 92 (1 row) count ------- 128 (1 row) count ------- 269 (1 row) count ------- 307 (1 row) count ------- 49 (1 row) count ------- 65 (1 row) count ------- 46 (1 row) count ------- 69 (1 row) count ------- 128 (1 row) count ------- 107 (1 row) count ------- 35 (1 row) count ------- 141 (1 row) count ------- 61 (1 row) count ------- 131 (1 row) count ------- 288 (1 row) count ------- 106 (1 row) count ------- 181 (1 row) count ------- 207 (1 row) count ------- 54 (1 row) count ------- 71 (1 row) count ------- 219 (1 row) count ------- 77 (1 row) count ------- 115 (1 row) count ------- 138 (1 row) count ------- 115 (1 row) count ------- 226 (1 row) count ------- 139 (1 row) count ------- 282 (1 row) count ------- 69 (1 row) count ------- 39 (1 row) count ------- 299 (1 row) count ------- 184 (1 row) count ------- 156 (1 row) count ------- 33 (1 row) count ------- 82 (1 row) count ------- 26 (1 row) count ------- 140 (1 row) count ------- 159 (1 row) count ------- 190 (1 row) count ------- 147 (1 row) count ------- 52 (1 row) count ------- 52 (1 row) count ------- 107 (1 row) count ------- 101 (1 row) count ------- 70 (1 row) count ------- 60 (1 row) count ------- 154 (1 row) count ------- 207 (1 row) count ------- 73 (1 row) count ------- 64 (1 row) count ------- 179 (1 row) count ------- 123 (1 row) count ------- 95 (1 row) count ------- 73 (1 row) count ------- 12 (1 row) count ------- 11 (1 row) count ------- 128 (1 row) count ------- 116 (1 row) count ------- 130 (1 row) count ------- 31 (1 row) count ------- 84 (1 row) count ------- 61 (1 row) count ------- 150 (1 row) count ------- 49 (1 row) count ------- 40 (1 row) count ------- 44 (1 row) count ------- 52 (1 row) count ------- 156 (1 row) count ------- 207 (1 row) count ------- 153 (1 row) count ------- 157 (1 row) count ------- 179 (1 row) count ------- 58 (1 row) count ------- 80 (1 row) count ------- 155 (1 row) count ------- 45 (1 row) count ------- 47 (1 row) count ------- 81 (1 row) count ------- 141 (1 row) count ------- 99 (1 row) count ------- 160 (1 row) count ------- 67 (1 row) count ------- 79 (1 row) count ------- 140 (1 row) count ------- 117 (1 row) count ------- 204 (1 row) count ------- 21 (1 row) count ------- 132 (1 row) count ------- 96 (1 row) count ------- 94 (1 row) count ------- 16 (1 row) count ------- 17 (1 row) count ------- 295 (1 row) count ------- 107 (1 row) count ------- 120 (1 row) count ------- 124 (1 row) count ------- 45 (1 row) count ------- 105 (1 row) count ------- 187 (1 row) count ------- 145 (1 row) count ------- 215 (1 row) count ------- 3 (1 row) count ------- 215 (1 row) count ------- 163 (1 row) count ------- 77 (1 row) count ------- 187 (1 row) count ------- 139 (1 row) count ------- 61 (1 row) count ------- 131 (1 row) count ------- 118 (1 row) count ------- 124 (1 row) count ------- 97 (1 row) count ------- 49 (1 row) count ------- 16 (1 row) count ------- 87 (1 row) count ------- 107 (1 row) count ------- 179 (1 row) count ------- 49 (1 row) count ------- 106 (1 row) count ------- 170 (1 row) count ------- 60 (1 row) count ------- 145 (1 row) count ------- 76 (1 row) count ------- 160 (1 row) count ------- 175 (1 row) count ------- 159 (1 row) count ------- 199 (1 row) count ------- 78 (1 row) count ------- 239 (1 row) count ------- 27 (1 row) count ------- 114 (1 row) count ------- 1 (1 row) count ------- 139 (1 row) count ------- 109 (1 row) count ------- 148 (1 row) count ------- 160 (1 row) count ------- 153 (1 row) count ------- 101 (1 row) count ------- 97 (1 row) count ------- 157 (1 row) count ------- 98 (1 row) count ------- 146 (1 row) count ------- 107 (1 row) count ------- 63 (1 row) count ------- 52 (1 row) count ------- 112 (1 row) count ------- 274 (1 row) count ------- 173 (1 row) count ------- 235 (1 row) count ------- 50 (1 row) count ------- 154 (1 row) count ------- 119 (1 row) count ------- 144 (1 row) count ------- 212 (1 row) count ------- 129 (1 row) count ------- 145 (1 row) count ------- 87 (1 row) count ------- 65 (1 row) count ------- 167 (1 row) count ------- 64 (1 row) count ------- 59 (1 row) count ------- 147 (1 row) count ------- 145 (1 row) count ------- 83 (1 row) count ------- 85 (1 row) count ------- 151 (1 row) count ------- 148 (1 row) count ------- 142 (1 row) count ------- 298 (1 row) count ------- 165 (1 row) count ------- 93 (1 row) count ------- 289 (1 row) count ------- 64 (1 row) count ------- 162 (1 row) count ------- 420 (1 row) count ------- 22 (1 row) count ------- 134 (1 row) count ------- 162 (1 row) count ------- 20 (1 row) count ------- 108 (1 row) count ------- 82 (1 row) count ------- 98 (1 row) count ------- 69 (1 row) count ------- 37 (1 row) count ------- 153 (1 row) count ------- 102 (1 row) count ------- 204 (1 row) count ------- 223 (1 row) count ------- 185 (1 row) count ------- 49 (1 row) count ------- 146 (1 row) count ------- 177 (1 row) count ------- 124 (1 row) count ------- 118 (1 row) count ------- 89 (1 row) count ------- 3 (1 row) count ------- 13 (1 row) count ------- 195 (1 row) count ------- 231 (1 row) count ------- 125 (1 row) count ------- 11 (1 row) count ------- 23 (1 row) count ------- 97 (1 row) count ------- 158 (1 row) count ------- 99 (1 row) count ------- 65 (1 row) count ------- 122 (1 row) count ------- 120 (1 row) count ------- 111 (1 row) count ------- 118 (1 row) count ------- 142 (1 row) count ------- 62 (1 row) count ------- 51 (1 row) count ------- 171 (1 row) count ------- 198 (1 row) count ------- 173 (1 row) count ------- 347 (1 row) count ------- 155 (1 row) count ------- 314 (1 row) count ------- 199 (1 row) count ------- 157 (1 row) count ------- 264 (1 row) count ------- 84 (1 row) count ------- 95 (1 row) count ------- 97 (1 row) count ------- 104 (1 row) count ------- 116 (1 row) count ------- 88 (1 row) count ------- 342 (1 row) count ------- 44 (1 row) count ------- 84 (1 row) count ------- 51 (1 row) count ------- 37 (1 row) count ------- 194 (1 row) count ------- 32 (1 row) count ------- 186 (1 row) count ------- 60 (1 row) count ------- 219 (1 row) count ------- 179 (1 row) count ------- 135 (1 row) count ------- 57 (1 row) count ------- 131 (1 row) count ------- 89 (1 row) count ------- 144 (1 row) count ------- 98 (1 row) count ------- 259 (1 row) count ------- 251 (1 row) count ------- 72 (1 row) count ------- 8 (1 row) count ------- 121 (1 row) count ------- 93 (1 row) count ------- 173 (1 row) count ------- 178 (1 row) count ------- 204 (1 row) count ------- 207 (1 row) count ------- 10 (1 row) count ------- 267 (1 row) count ------- 173 (1 row) count ------- 126 (1 row) count ------- 77 (1 row) count ------- 46 (1 row) count ------- 148 (1 row) count ------- 27 (1 row) count ------- 55 (1 row) count ------- 30 (1 row) count ------- 12 (1 row) count ------- 92 (1 row) count ------- 102 (1 row) count ------- 94 (1 row) count ------- 116 (1 row) count ------- 66 (1 row) count ------- 111 (1 row) count ------- 237 (1 row) count ------- 61 (1 row) count ------- 209 (1 row) count ------- 61 (1 row) count ------- 185 (1 row) count ------- 84 (1 row) count ------- 89 (1 row) count ------- 40 (1 row) count ------- 68 (1 row) count ------- 151 (1 row) count ------- 54 (1 row) count ------- 204 (1 row) count ------- 229 (1 row) count ------- 183 (1 row) count ------- 117 (1 row) count ------- 93 (1 row) count ------- 46 (1 row) count ------- 123 (1 row) count ------- 92 (1 row) count ------- 59 (1 row) count ------- 70 (1 row) count ------- 120 (1 row) count ------- 245 (1 row) count ------- 192 (1 row) count ------- 24 (1 row) count ------- 35 (1 row) count ------- 166 (1 row) count ------- 184 (1 row) count ------- 80 (1 row) count ------- 21 (1 row) count ------- 11 (1 row) count ------- 249 (1 row) count ------- 27 (1 row) count ------- 116 (1 row) count ------- 166 (1 row) count ------- 63 (1 row) count ------- 239 (1 row) count ------- 17 (1 row) count ------- 98 (1 row) count ------- 54 (1 row) count ------- 144 (1 row) count ------- 197 (1 row) count ------- 208 (1 row) count ------- 136 (1 row) count ------- 20 (1 row) count ------- 76 (1 row) count ------- 171 (1 row) count ------- 140 (1 row) count ------- 100 (1 row) count ------- 33 (1 row) count ------- 47 (1 row) count ------- 69 (1 row) count ------- 89 (1 row) count ------- 65 (1 row) count ------- 127 (1 row) count ------- 217 (1 row) count ------- 210 (1 row) count ------- 144 (1 row) count ------- 112 (1 row) count ------- 172 (1 row) count ------- 124 (1 row) count ------- 68 (1 row) count ------- 144 (1 row) count ------- 85 (1 row) count ------- 172 (1 row) count ------- 138 (1 row) count ------- 93 (1 row) count ------- 206 (1 row) count ------- 63 (1 row) count ------- 173 (1 row) count ------- 11 (1 row) count ------- 17 (1 row) count ------- 124 (1 row) count ------- 44 (1 row) count ------- 113 (1 row) count ------- 42 (1 row) count ------- 87 (1 row) count ------- 109 (1 row) count ------- 94 (1 row) count ------- 107 (1 row) count ------- 139 (1 row) count ------- 103 (1 row) count ------- 193 (1 row) count ------- 205 (1 row) count ------- 156 (1 row) count ------- 63 (1 row) count ------- 84 (1 row) count ------- 233 (1 row) count ------- 377 (1 row) count ------- 254 (1 row) count ------- 195 (1 row) count ------- 80 (1 row) count ------- 132 (1 row) count ------- 86 (1 row) count ------- 327 (1 row) count ------- 62 (1 row) count ------- 95 (1 row) count ------- 47 (1 row) count ------- 96 (1 row) count ------- 110 (1 row) count ------- 279 (1 row) count ------- 129 (1 row) count ------- 237 (1 row) count ------- 179 (1 row) count ------- 41 (1 row) count ------- 225 (1 row) count ------- 162 (1 row) count ------- 118 (1 row) count ------- 80 (1 row) count ------- 102 (1 row) count ------- 219 (1 row) count ------- 180 (1 row) count ------- 222 (1 row) count ------- 224 (1 row) count ------- 26 (1 row) count ------- 117 (1 row) count ------- 123 (1 row) count ------- 83 (1 row) count ------- 185 (1 row) count ------- 141 (1 row) count ------- 165 (1 row) count ------- 44 (1 row) count ------- 41 (1 row) count ------- 20 (1 row) count ------- 78 (1 row) count ------- 91 (1 row) count ------- 80 (1 row) count ------- 123 (1 row) count ------- 5 (1 row) count ------- 77 (1 row) count ------- 63 (1 row) count ------- 70 (1 row) count ------- 74 (1 row) count ------- 159 (1 row) count ------- 92 (1 row) count ------- 180 (1 row) count ------- 7 (1 row) count ------- 150 (1 row) count ------- 393 (1 row) count ------- 146 (1 row) count ------- 200 (1 row) count ------- 62 (1 row) count ------- 61 (1 row) count ------- 27 (1 row) count ------- 224 (1 row) count ------- 207 (1 row) count ------- 35 (1 row) count ------- 147 (1 row) count ------- 147 (1 row) count ------- 26 (1 row) count ------- 98 (1 row) count ------- 13 (1 row) count ------- 251 (1 row) count ------- 8 (1 row) count ------- 88 (1 row) count ------- 85 (1 row) count ------- 102 (1 row) count ------- 203 (1 row) count ------- 282 (1 row) count ------- 107 (1 row) count ------- 122 (1 row) count ------- 63 (1 row) count ------- 170 (1 row) count ------- 249 (1 row) count ------- 134 (1 row) count ------- 38 (1 row) count ------- 203 (1 row) count ------- 91 (1 row) count ------- 137 (1 row) count ------- 91 (1 row) count ------- 66 (1 row) count ------- 243 (1 row) count ------- 9 (1 row) count ------- 115 (1 row) count ------- 117 (1 row) count ------- 78 (1 row) count ------- 129 (1 row) count ------- 6 (1 row) count ------- 70 (1 row) count ------- 83 (1 row) count ------- 9 (1 row) count ------- 152 (1 row) count ------- 223 (1 row) count ------- 147 (1 row) count ------- 17 (1 row) count ------- 198 (1 row) count ------- 204 (1 row) count ------- 186 (1 row) count ------- 82 (1 row) count ------- 328 (1 row) count ------- 94 (1 row) count ------- 180 (1 row) count ------- 26 (1 row) count ------- 51 (1 row) count ------- 38 (1 row) count ------- 79 (1 row) count ------- 347 (1 row) count ------- 184 (1 row) count ------- 17 (1 row) count ------- 217 (1 row) count ------- 57 (1 row) count ------- 60 (1 row) count ------- 212 (1 row) count ------- 50 (1 row) count ------- 39 (1 row) count ------- 66 (1 row) count ------- 98 (1 row) count ------- 76 (1 row) count ------- 166 (1 row) count ------- 60 (1 row) count ------- 116 (1 row) count ------- 9 (1 row) count ------- 126 (1 row) count ------- 191 (1 row) count ------- 76 (1 row) count ------- 156 (1 row) count ------- 94 (1 row) count ------- 26 (1 row) count ------- 89 (1 row) count ------- 67 (1 row) count ------- 113 (1 row) count ------- 109 (1 row) count ------- 133 (1 row) count ------- 81 (1 row) count ------- 276 (1 row) count ------- 90 (1 row) count ------- 277 (1 row) count ------- 113 (1 row) count ------- 23 (1 row) count ------- 48 (1 row) count ------- 300 (1 row) count ------- 77 (1 row) count ------- 175 (1 row) count ------- 125 (1 row) count ------- 249 (1 row) count ------- 61 (1 row) count ------- 85 (1 row) count ------- 121 (1 row) count ------- 205 (1 row) count ------- 131 (1 row) count ------- 162 (1 row) count ------- 64 (1 row) count ------- 70 (1 row) count ------- 140 (1 row) count ------- 119 (1 row) count ------- 155 (1 row) count ------- 66 (1 row) count ------- 103 (1 row) count ------- 39 (1 row) count ------- 119 (1 row) count ------- 177 (1 row) count ------- 131 (1 row) count ------- 29 (1 row) count ------- 96 (1 row) count ------- 56 (1 row) count ------- 154 (1 row) count ------- 291 (1 row) count ------- 54 (1 row) count ------- 123 (1 row) count ------- 146 (1 row) count ------- 150 (1 row) count ------- 212 (1 row) count ------- 105 (1 row) count ------- 83 (1 row) count ------- 95 (1 row) count ------- 57 (1 row) count ------- 15 (1 row) count ------- 279 (1 row) count ------- 240 (1 row) count ------- 55 (1 row) count ------- 81 (1 row) count ------- 173 (1 row) count ------- 189 (1 row) count ------- 111 (1 row) count ------- 128 (1 row) count ------- 209 (1 row) count ------- 106 (1 row) count ------- 172 (1 row) count ------- 161 (1 row) count ------- 117 (1 row) count ------- 146 (1 row) count ------- 237 (1 row) count ------- 65 (1 row) count ------- 32 (1 row) count ------- 238 (1 row) count ------- 50 (1 row) count ------- 181 (1 row) count ------- 13 (1 row) count ------- 107 (1 row) count ------- 251 (1 row) count ------- 178 (1 row) count ------- 104 (1 row) count ------- 36 (1 row) count ------- 200 (1 row) count ------- 150 (1 row) count ------- 154 (1 row) count ------- 144 (1 row) count ------- 114 (1 row) count ------- 43 (1 row) count ------- 260 (1 row) count ------- 125 (1 row) count ------- 18 (1 row) count ------- 55 (1 row) count ------- 81 (1 row) count ------- 58 (1 row) count ------- 145 (1 row) count ------- 261 (1 row) count ------- 79 (1 row) count ------- 163 (1 row) count ------- 79 (1 row) count ------- 169 (1 row) count ------- 147 (1 row) count ------- 135 (1 row) count ------- 261 (1 row) count ------- 103 (1 row) count ------- 186 (1 row) count ------- 27 (1 row) count ------- 136 (1 row) count ------- 2 (1 row) count ------- 34 (1 row) count ------- 39 (1 row) count ------- 139 (1 row) count ------- 92 (1 row) count ------- 178 (1 row) count ------- 222 (1 row) count ------- 76 (1 row) count ------- 55 (1 row) count ------- 153 (1 row) count ------- 103 (1 row) count ------- 77 (1 row) count ------- 207 (1 row) count ------- 70 (1 row) count ------- 3 (1 row) count ------- 169 (1 row) count ------- 132 (1 row) count ------- 8 (1 row) count ------- 144 (1 row) count ------- 213 (1 row) count ------- 134 (1 row) count ------- 156 (1 row) count ------- 14 (1 row) count ------- 89 (1 row) count ------- 131 (1 row) count ------- 294 (1 row) count ------- 8 (1 row) count ------- 75 (1 row) count ------- 162 (1 row) count ------- 65 (1 row) count ------- 108 (1 row) count ------- 128 (1 row) count ------- 176 (1 row) count ------- 134 (1 row) count ------- 133 (1 row) count ------- 343 (1 row) count ------- 157 (1 row) count ------- 166 (1 row) count ------- 210 (1 row) count ------- 112 (1 row) count ------- 136 (1 row) count ------- 170 (1 row) count ------- 56 (1 row) count ------- 268 (1 row) count ------- 67 (1 row) count ------- 88 (1 row) count ------- 24 (1 row) count ------- 195 (1 row) count ------- 107 (1 row) count ------- 203 (1 row) count ------- 94 (1 row) count ------- 62 (1 row) count ------- 41 (1 row) count ------- 39 (1 row) count ------- 285 (1 row) count ------- 190 (1 row) count ------- 53 (1 row) count ------- 76 (1 row) count ------- 227 (1 row) count ------- 59 (1 row) count ------- 171 (1 row) count ------- 223 (1 row) count ------- 154 (1 row) count ------- 155 (1 row) count ------- 139 (1 row) count ------- 125 (1 row) count ------- 19 (1 row) count ------- 109 (1 row) count ------- 150 (1 row) count ------- 117 (1 row) count ------- 144 (1 row) count ------- 95 (1 row) count ------- 126 (1 row) count ------- 0 (1 row) count ------- 1 (1 row) count ------- 150 (1 row) count ------- 176 (1 row) count ------- 53 (1 row) count ------- 331 (1 row) count ------- 159 (1 row) count ------- 89 (1 row) count ------- 219 (1 row) count ------- 169 (1 row) count ------- 118 (1 row) count ------- 253 (1 row) count ------- 70 (1 row) count ------- 182 (1 row) count ------- 89 (1 row) count ------- 256 (1 row) count ------- 83 (1 row) count ------- 139 (1 row) count ------- 72 (1 row) count ------- 296 (1 row) count ------- 87 (1 row) count ------- 64 (1 row) count ------- 243 (1 row) count ------- 113 (1 row) count ------- 42 (1 row) count ------- 147 (1 row) count ------- 152 (1 row) count ------- 10 (1 row) count ------- 100 (1 row) count ------- 161 (1 row) count ------- 215 (1 row) count ------- 118 (1 row) count ------- 118 (1 row) count ------- 219 (1 row) count ------- 142 (1 row) count ------- 155 (1 row) count ------- 197 (1 row) count ------- 91 (1 row) count ------- 46 (1 row) count ------- 138 (1 row) count ------- 56 (1 row) count ------- 13 (1 row) count ------- 99 (1 row) count ------- 101 (1 row) count ------- 20 (1 row) count ------- 125 (1 row) count ------- 194 (1 row) count ------- 38 (1 row) count ------- 7 (1 row) count ------- 122 (1 row) count ------- 106 (1 row) count ------- 249 (1 row) count ------- 5 (1 row) count ------- 221 (1 row) count ------- 222 (1 row) count ------- 65 (1 row) count ------- 38 (1 row) count ------- 8 (1 row) count ------- 155 (1 row) count ------- 204 (1 row) count ------- 130 (1 row) count ------- 163 (1 row) count ------- 118 (1 row) count ------- 106 (1 row) count ------- 161 (1 row) count ------- 229 (1 row) count ------- 114 (1 row) count ------- 56 (1 row) count ------- 44 (1 row) count ------- 122 (1 row) count ------- 121 (1 row) count ------- 18 (1 row) count ------- 60 (1 row) count ------- 45 (1 row) count ------- 173 (1 row) count ------- 83 (1 row) count ------- 213 (1 row) count ------- 57 (1 row) count ------- 289 (1 row) count ------- 142 (1 row) count ------- 107 (1 row) count ------- 107 (1 row) count ------- 32 (1 row) count ------- 22 (1 row) count ------- 148 (1 row) count ------- 15 (1 row) count ------- 52 (1 row) count ------- 73 (1 row) count ------- 216 (1 row) count ------- 161 (1 row) count ------- 94 (1 row) count ------- 22 (1 row) count ------- 98 (1 row) count ------- 167 (1 row) count ------- 202 (1 row) count ------- 168 (1 row) count ------- 337 (1 row) count ------- 69 (1 row) count ------- 18 (1 row) count ------- 168 (1 row) count ------- 20 (1 row) count ------- 216 (1 row) count ------- 5 (1 row) count ------- 39 (1 row) count ------- 178 (1 row) count ------- 103 (1 row) count ------- 193 (1 row) count ------- 106 (1 row) count ------- 212 (1 row) count ------- 181 (1 row) count ------- 0 (1 row) count ------- 121 (1 row) count ------- 54 (1 row) count ------- 83 (1 row) count ------- 186 (1 row) count ------- 86 (1 row) count ------- 165 (1 row) count ------- 157 (1 row) count ------- 33 (1 row) count ------- 108 (1 row) count ------- 170 (1 row) count ------- 66 (1 row) count ------- 196 (1 row) count ------- 31 (1 row) count ------- 80 (1 row) count ------- 54 (1 row) count ------- 85 (1 row) count ------- 173 (1 row) count ------- 38 (1 row) count ------- 163 (1 row) count ------- 202 (1 row) count ------- 139 (1 row) count ------- 121 (1 row) count ------- 43 (1 row) count ------- 47 (1 row) count ------- 251 (1 row) count ------- 218 (1 row) count ------- 142 (1 row) count ------- 69 (1 row) count ------- 41 (1 row) count ------- 161 (1 row) count ------- 43 (1 row) count ------- 130 (1 row) count ------- 171 (1 row) count ------- 173 (1 row) count ------- 79 (1 row) count ------- 22 (1 row) count ------- 58 (1 row) count ------- 79 (1 row) count ------- 173 (1 row) count ------- 140 (1 row) count ------- 147 (1 row) count ------- 76 (1 row) count ------- 136 (1 row) count ------- 117 (1 row) count ------- 56 (1 row) count ------- 52 (1 row) count ------- 163 (1 row) count ------- 371 (1 row) count ------- 127 (1 row) count ------- 124 (1 row) count ------- 30 (1 row) count ------- 68 (1 row) count ------- 128 (1 row) count ------- 62 (1 row) count ------- 196 (1 row) count ------- 249 (1 row) count ------- 98 (1 row) count ------- 115 (1 row) count ------- 163 (1 row) count ------- 34 (1 row) count ------- 277 (1 row) count ------- 68 (1 row) count ------- 76 (1 row) count ------- 160 (1 row) count ------- 206 (1 row) count ------- 106 (1 row) count ------- 100 (1 row) count ------- 144 (1 row) count ------- 186 (1 row) count ------- 132 (1 row) count ------- 33 (1 row) count ------- 116 (1 row) count ------- 33 (1 row) count ------- 136 (1 row) count ------- 173 (1 row) count ------- 160 (1 row) count ------- 174 (1 row) count ------- 65 (1 row) count ------- 130 (1 row) count ------- 45 (1 row) count ------- 19 (1 row) count ------- 205 (1 row) count ------- 126 (1 row) count ------- 11 (1 row) count ------- 74 (1 row) count ------- 132 (1 row) count ------- 115 (1 row) count ------- 35 (1 row) count ------- 134 (1 row) count ------- 74 (1 row) count ------- 64 (1 row) count ------- 251 (1 row) count ------- 33 (1 row) count ------- 24 (1 row) count ------- 3 (1 row) count ------- 126 (1 row) count ------- 77 (1 row) count ------- 77 (1 row) count ------- 152 (1 row) count ------- 53 (1 row) count ------- 176 (1 row) count ------- 158 (1 row) count ------- 52 (1 row) count ------- 93 (1 row) count ------- 18 (1 row) count ------- 170 (1 row) count ------- 198 (1 row) count ------- 65 (1 row) count ------- 181 (1 row) count ------- 201 (1 row) count ------- 176 (1 row) count ------- 209 (1 row) count ------- 91 (1 row) count ------- 206 (1 row) count ------- 24 (1 row) count ------- 157 (1 row) count ------- 155 (1 row) count ------- 115 (1 row) count ------- 26 (1 row) count ------- 105 (1 row) count ------- 117 (1 row) count ------- 39 (1 row) count ------- 195 (1 row) count ------- 163 (1 row) count ------- 84 (1 row) count ------- 42 (1 row) count ------- 98 (1 row) count ------- 85 (1 row) count ------- 120 (1 row) count ------- 192 (1 row) count ------- 152 (1 row) count ------- 40 (1 row) count ------- 51 (1 row) count ------- 66 (1 row) count ------- 132 (1 row) count ------- 181 (1 row) count ------- 80 (1 row) count ------- 210 (1 row) count ------- 64 (1 row) count ------- 122 (1 row) count ------- 45 (1 row) count ------- 75 (1 row) count ------- 40 (1 row) count ------- 96 (1 row) count ------- 116 (1 row) count ------- 98 (1 row) count ------- 38 (1 row) count ------- 132 (1 row) count ------- 184 (1 row) count ------- 168 (1 row) count ------- 97 (1 row) count ------- 84 (1 row) count ------- 153 (1 row) count ------- 160 (1 row) count ------- 173 (1 row) count ------- 166 (1 row) count ------- 53 (1 row) count ------- 210 (1 row) count ------- 163 (1 row) count ------- 92 (1 row) count ------- 136 (1 row) count ------- 51 (1 row) count ------- 75 (1 row) count ------- 136 (1 row) count ------- 81 (1 row) count ------- 117 (1 row) count ------- 74 (1 row) count ------- 11 (1 row) count ------- 23 (1 row) count ------- 106 (1 row) count ------- 137 (1 row) count ------- 72 (1 row) count ------- 103 (1 row) count ------- 34 (1 row) count ------- 38 (1 row) count ------- 108 (1 row) count ------- 219 (1 row) count ------- 184 (1 row) count ------- 50 (1 row) count ------- 79 (1 row) count ------- 78 (1 row) count ------- 109 (1 row) count ------- 120 (1 row) count ------- 137 (1 row) count ------- 82 (1 row) count ------- 43 (1 row) count ------- 190 (1 row) count ------- 256 (1 row) count ------- 283 (1 row) count ------- 67 (1 row) count ------- 187 (1 row) count ------- 204 (1 row) count ------- 126 (1 row) count ------- 25 (1 row) count ------- 114 (1 row) count ------- 141 (1 row) count ------- 21 (1 row) count ------- 28 (1 row) count ------- 100 (1 row) count ------- 64 (1 row) count ------- 42 (1 row) count ------- 28 (1 row) count ------- 123 (1 row) count ------- 9 (1 row) count ------- 62 (1 row) count ------- 84 (1 row) count ------- 199 (1 row) count ------- 148 (1 row) count ------- 112 (1 row) count ------- 202 (1 row) count ------- 170 (1 row) count ------- 100 (1 row) count ------- 159 (1 row) count ------- 58 (1 row) count ------- 170 (1 row) count ------- 197 (1 row) count ------- 79 (1 row) count ------- 74 (1 row) count ------- 26 (1 row) count ------- 245 (1 row) count ------- 114 (1 row) count ------- 128 (1 row) count ------- 139 (1 row) count ------- 169 (1 row) count ------- 69 (1 row) count ------- 218 (1 row) count ------- 131 (1 row) count ------- 114 (1 row) count ------- 21 (1 row) count ------- 107 (1 row) count ------- 78 (1 row) count ------- 66 (1 row) count ------- 162 (1 row) count ------- 305 (1 row) count ------- 90 (1 row) count ------- 69 (1 row) count ------- 99 (1 row) count ------- 112 (1 row) count ------- 127 (1 row) count ------- 85 (1 row) count ------- 91 (1 row) count ------- 84 (1 row) count ------- 120 (1 row) count ------- 114 (1 row) count ------- 197 (1 row) count ------- 108 (1 row) count ------- 86 (1 row) count ------- 146 (1 row) count ------- 31 (1 row) count ------- 182 (1 row) count ------- 56 (1 row) count ------- 85 (1 row) count ------- 183 (1 row) count ------- 139 (1 row) count ------- 90 (1 row) count ------- 44 (1 row) count ------- 201 (1 row) count ------- 48 (1 row) count ------- 101 (1 row) count ------- 213 (1 row) count ------- 76 (1 row) count ------- 82 (1 row) count ------- 186 (1 row) count ------- 67 (1 row) count ------- 107 (1 row) count ------- 53 (1 row) count ------- 284 (1 row) count ------- 46 (1 row) count ------- 133 (1 row) count ------- 212 (1 row) count ------- 96 (1 row) count ------- 45 (1 row) count ------- 191 (1 row) count ------- 206 (1 row) count ------- 63 (1 row) count ------- 105 (1 row) count ------- 248 (1 row) count ------- 227 (1 row) count ------- 252 (1 row) count ------- 102 (1 row) count ------- 125 (1 row) count ------- 26 (1 row) count ------- 174 (1 row) count ------- 92 (1 row) count ------- 80 (1 row) count ------- 28 (1 row) count ------- 85 (1 row) count ------- 238 (1 row) count ------- 142 (1 row) count ------- 101 (1 row) count ------- 67 (1 row) count ------- 174 (1 row) count ------- 113 (1 row) count ------- 107 (1 row) count ------- 342 (1 row) count ------- 181 (1 row) count ------- 91 (1 row) count ------- 123 (1 row) count ------- 128 (1 row) count ------- 244 (1 row) count ------- 172 (1 row) count ------- 83 (1 row) count ------- 48 (1 row) count ------- 129 (1 row) count ------- 132 (1 row) count ------- 127 (1 row) count ------- 223 (1 row) count ------- 118 (1 row) count ------- 68 (1 row) count ------- 221 (1 row) count ------- 6 (1 row) count ------- 44 (1 row) count ------- 1 (1 row) count ------- 67 (1 row) count ------- 27 (1 row) count ------- 107 (1 row) count ------- 187 (1 row) count ------- 31 (1 row) count ------- 170 (1 row) count ------- 27 (1 row) count ------- 116 (1 row) count ------- 81 (1 row) count ------- 175 (1 row) count ------- 269 (1 row) count ------- 87 (1 row) count ------- 119 (1 row) count ------- 6 (1 row) count ------- 163 (1 row) count ------- 179 (1 row) count ------- 200 (1 row) count ------- 95 (1 row) count ------- 34 (1 row) count ------- 78 (1 row) count ------- 189 (1 row) count ------- 0 (1 row) count ------- 214 (1 row) count ------- 23 (1 row) count ------- 68 (1 row) count ------- 196 (1 row) count ------- 162 (1 row) count ------- 181 (1 row) count ------- 141 (1 row) count ------- 155 (1 row) count ------- 101 (1 row) count ------- 49 (1 row) count ------- 64 (1 row) count ------- 10 (1 row) count ------- 111 (1 row) count ------- 81 (1 row) count ------- 61 (1 row) count ------- 305 (1 row) count ------- 162 (1 row) count ------- 226 (1 row) count ------- 35 (1 row) count ------- 156 (1 row) count ------- 17 (1 row) count ------- 128 (1 row) count ------- 126 (1 row) count ------- 152 (1 row) count ------- 81 (1 row) count ------- 8 (1 row) count ------- 76 (1 row) count ------- 185 (1 row) count ------- 26 (1 row) count ------- 265 (1 row) count ------- 25 (1 row) count ------- 212 (1 row) count ------- 107 (1 row) count ------- 124 (1 row) count ------- 127 (1 row) count ------- 131 (1 row) count ------- 93 (1 row) count ------- 87 (1 row) count ------- 24 (1 row) count ------- 58 (1 row) count ------- 128 (1 row) count ------- 197 (1 row) count ------- 39 (1 row) count ------- 89 (1 row) count ------- 182 (1 row) count ------- 234 (1 row) count ------- 59 (1 row) count ------- 132 (1 row) count ------- 25 (1 row) count ------- 207 (1 row) count ------- 67 (1 row) count ------- 131 (1 row) count ------- 124 (1 row) count ------- 210 (1 row) count ------- 108 (1 row) count ------- 271 (1 row) count ------- 170 (1 row) count ------- 171 (1 row) count ------- 81 (1 row) count ------- 24 (1 row) count ------- 183 (1 row) count ------- 4 (1 row) count ------- 195 (1 row) count ------- 109 (1 row) count ------- 16 (1 row) count ------- 26 (1 row) count ------- 106 (1 row) count ------- 159 (1 row) count ------- 125 (1 row) count ------- 289 (1 row) count ------- 84 (1 row) count ------- 273 (1 row) count ------- 26 (1 row) count ------- 153 (1 row) count ------- 17 (1 row) count ------- 71 (1 row) count ------- 177 (1 row) count ------- 87 (1 row) count ------- 180 (1 row) count ------- 165 (1 row) count ------- 42 (1 row) count ------- 156 (1 row) count ------- 95 (1 row) count ------- 161 (1 row) count ------- 108 (1 row) count ------- 124 (1 row) count ------- 3 (1 row) count ------- 126 (1 row) count ------- 6 (1 row) count ------- 71 (1 row) count ------- 204 (1 row) count ------- 71 (1 row) count ------- 50 (1 row) count ------- 223 (1 row) count ------- 51 (1 row) count ------- 81 (1 row) count ------- 36 (1 row) count ------- 124 (1 row) count ------- 54 (1 row) count ------- 195 (1 row) count ------- 63 (1 row) count ------- 121 (1 row) count ------- 183 (1 row) count ------- 181 (1 row) count ------- 36 (1 row) count ------- 24 (1 row) count ------- 154 (1 row) count ------- 111 (1 row) count ------- 144 (1 row) count ------- 22 (1 row) count ------- 80 (1 row) count ------- 186 (1 row) count ------- 20 (1 row) count ------- 39 (1 row) count ------- 45 (1 row) count ------- 195 (1 row) count ------- 76 (1 row) count ------- 85 (1 row) count ------- 45 (1 row) count ------- 105 (1 row) count ------- 50 (1 row) count ------- 120 (1 row) count ------- 35 (1 row) count ------- 343 (1 row) count ------- 105 (1 row) count ------- 78 (1 row) count ------- 233 (1 row) count ------- 48 (1 row) count ------- 39 (1 row) count ------- 35 (1 row) count ------- 141 (1 row) count ------- 54 (1 row) count ------- 55 (1 row) count ------- 239 (1 row) count ------- 65 (1 row) count ------- 171 (1 row) count ------- 120 (1 row) count ------- 75 (1 row) count ------- 92 (1 row) count ------- 47 (1 row) count ------- 110 (1 row) count ------- 201 (1 row) count ------- 52 (1 row) count ------- 74 (1 row) count ------- 66 (1 row) count ------- 147 (1 row) count ------- 134 (1 row) count ------- 161 (1 row) count ------- 273 (1 row) count ------- 115 (1 row) count ------- 131 (1 row) count ------- 152 (1 row) count ------- 38 (1 row) count ------- 117 (1 row) count ------- 156 (1 row) count ------- 102 (1 row) count ------- 110 (1 row) count ------- 28 (1 row) count ------- 99 (1 row) count ------- 201 (1 row) count ------- 119 (1 row) count ------- 219 (1 row) count ------- 9 (1 row) count ------- 182 (1 row) count ------- 151 (1 row) count ------- 349 (1 row) count ------- 288 (1 row) count ------- 233 (1 row) count ------- 195 (1 row) count ------- 159 (1 row) count ------- 81 (1 row) count ------- 102 (1 row) count ------- 183 (1 row) count ------- 277 (1 row) count ------- 98 (1 row) count ------- 93 (1 row) count ------- 207 (1 row) count ------- 154 (1 row) count ------- 166 (1 row) count ------- 100 (1 row) count ------- 28 (1 row) count ------- 161 (1 row) count ------- 101 (1 row) count ------- 86 (1 row) count ------- 80 (1 row) count ------- 102 (1 row) count ------- 132 (1 row) count ------- 91 (1 row) count ------- 132 (1 row) count ------- 21 (1 row) count ------- 61 (1 row) count ------- 146 (1 row) count ------- 38 (1 row) count ------- 121 (1 row) count ------- 145 (1 row) count ------- 90 (1 row) count ------- 75 (1 row) count ------- 169 (1 row) count ------- 142 (1 row) count ------- 252 (1 row) count ------- 53 (1 row) count ------- 125 (1 row) count ------- 81 (1 row) count ------- 151 (1 row) count ------- 174 (1 row) count ------- 220 (1 row) count ------- 148 (1 row) count ------- 71 (1 row) count ------- 62 (1 row) count ------- 187 (1 row) count ------- 179 (1 row) count ------- 53 (1 row) count ------- 87 (1 row) count ------- 153 (1 row) count ------- 41 (1 row) count ------- 59 (1 row) count ------- 11 (1 row) count ------- 113 (1 row) count ------- 113 (1 row) count ------- 137 (1 row) count ------- 70 (1 row) count ------- 154 (1 row) count ------- 245 (1 row) count ------- 3 (1 row) count ------- 86 (1 row) count ------- 21 (1 row) count ------- 36 (1 row) count ------- 40 (1 row) count ------- 142 (1 row) count ------- 117 (1 row) count ------- 115 (1 row) count ------- 230 (1 row) count ------- 38 (1 row) count ------- 12 (1 row) count ------- 262 (1 row) count ------- 170 (1 row) count ------- 63 (1 row) count ------- 186 (1 row) count ------- 13 (1 row) count ------- 81 (1 row) count ------- 35 (1 row) count ------- 89 (1 row) count ------- 2 (1 row) count ------- 134 (1 row) count ------- 195 (1 row) count ------- 198 (1 row) count ------- 39 (1 row) count ------- 190 (1 row) count ------- 26 (1 row) count ------- 55 (1 row) count ------- 219 (1 row) count ------- 433 (1 row) count ------- 208 (1 row) count ------- 78 (1 row) count ------- 109 (1 row) count ------- 63 (1 row) count ------- 72 (1 row) count ------- 72 (1 row) count ------- 213 (1 row) count ------- 81 (1 row) count ------- 78 (1 row) count ------- 226 (1 row) count ------- 181 (1 row) count ------- 52 (1 row) count ------- 356 (1 row) count ------- 77 (1 row) count ------- 42 (1 row) count ------- 157 (1 row) count ------- 146 (1 row) count ------- 110 (1 row) count ------- 214 (1 row) count ------- 264 (1 row) count ------- 126 (1 row) count ------- 140 (1 row) count ------- 24 (1 row) count ------- 20 (1 row) count ------- 93 (1 row) count ------- 79 (1 row) count ------- 192 (1 row) count ------- 49 (1 row) count ------- 145 (1 row) count ------- 151 (1 row) count ------- 7 (1 row) count ------- 127 (1 row) count ------- 106 (1 row) count ------- 90 (1 row) count ------- 137 (1 row) count ------- 213 (1 row) count ------- 109 (1 row) count ------- 88 (1 row) count ------- 99 (1 row) count ------- 106 (1 row) count ------- 71 (1 row) count ------- 39 (1 row) count ------- 31 (1 row) count ------- 24 (1 row) count ------- 131 (1 row) count ------- 57 (1 row) count ------- 146 (1 row) count ------- 138 (1 row) count ------- 121 (1 row) count ------- 165 (1 row) count ------- 49 (1 row) count ------- 113 (1 row) count ------- 151 (1 row) count ------- 44 (1 row) count ------- 103 (1 row) count ------- 167 (1 row) count ------- 29 (1 row) count ------- 24 (1 row) count ------- 36 (1 row) count ------- 39 (1 row) count ------- 62 (1 row) count ------- 37 (1 row) count ------- 212 (1 row) count ------- 155 (1 row) count ------- 33 (1 row) count ------- 37 (1 row) count ------- 95 (1 row) count ------- 203 (1 row) count ------- 140 (1 row) count ------- 160 (1 row) count ------- 176 (1 row) count ------- 27 (1 row) count ------- 106 (1 row) count ------- 63 (1 row) count ------- 176 (1 row) count ------- 45 (1 row) count ------- 56 (1 row) count ------- 37 (1 row) count ------- 64 (1 row) count ------- 87 (1 row) count ------- 235 (1 row) count ------- 84 (1 row) count ------- 54 (1 row) count ------- 5 (1 row) count ------- 208 (1 row) count ------- 81 (1 row) count ------- 272 (1 row) count ------- 138 (1 row) count ------- 18 (1 row) count ------- 209 (1 row) count ------- 72 (1 row) count ------- 235 (1 row) count ------- 241 (1 row) count ------- 167 (1 row) count ------- 21 (1 row) count ------- 91 (1 row) count ------- 118 (1 row) count ------- 190 (1 row) count ------- 138 (1 row) count ------- 107 (1 row) count ------- 208 (1 row) count ------- 137 (1 row) count ------- 82 (1 row) count ------- 43 (1 row) count ------- 85 (1 row) count ------- 182 (1 row) count ------- 145 (1 row) count ------- 93 (1 row) count ------- 41 (1 row) count ------- 88 (1 row) count ------- 43 (1 row) count ------- 25 (1 row) count ------- 143 (1 row) count ------- 134 (1 row) count ------- 146 (1 row) count ------- 94 (1 row) count ------- 90 (1 row) count ------- 95 (1 row) count ------- 72 (1 row) count ------- 151 (1 row) count ------- 165 (1 row) count ------- 150 (1 row) count ------- 145 (1 row) count ------- 74 (1 row) count ------- 34 (1 row) count ------- 174 (1 row) count ------- 151 (1 row) count ------- 169 (1 row) count ------- 76 (1 row) count ------- 132 (1 row) count ------- 133 (1 row) count ------- 225 (1 row) count ------- 107 (1 row) count ------- 53 (1 row) count ------- 314 (1 row) count ------- 53 (1 row) count ------- 265 (1 row) count ------- 187 (1 row) count ------- 125 (1 row) count ------- 6 (1 row) count ------- 221 (1 row) count ------- 97 (1 row) count ------- 195 (1 row) count ------- 33 (1 row) count ------- 68 (1 row) count ------- 343 (1 row) count ------- 81 (1 row) count ------- 93 (1 row) count ------- 131 (1 row) count ------- 128 (1 row) count ------- 183 (1 row) count ------- 304 (1 row) count ------- 134 (1 row) count ------- 147 (1 row) count ------- 30 (1 row) count ------- 207 (1 row) count ------- 118 (1 row) count ------- 80 (1 row) count ------- 162 (1 row) count ------- 148 (1 row) count ------- 120 (1 row) count ------- 13 (1 row) count ------- 184 (1 row) count ------- 56 (1 row) count ------- 17 (1 row) count ------- 13 (1 row) count ------- 135 (1 row) count ------- 20 (1 row) count ------- 67 (1 row) count ------- 192 (1 row) count ------- 59 (1 row) count ------- 169 (1 row) count ------- 126 (1 row) count ------- 197 (1 row) count ------- 180 (1 row) count ------- 32 (1 row) count ------- 68 (1 row) count ------- 170 (1 row) count ------- 106 (1 row) count ------- 109 (1 row) count ------- 252 (1 row) count ------- 60 (1 row) count ------- 131 (1 row) count ------- 49 (1 row) count ------- 113 (1 row) count ------- 223 (1 row) count ------- 173 (1 row) count ------- 18 (1 row) count ------- 30 (1 row) count ------- 40 (1 row) count ------- 200 (1 row) count ------- 53 (1 row) count ------- 86 (1 row) count ------- 43 (1 row) count ------- 123 (1 row) count ------- 74 (1 row) count ------- 132 (1 row) count ------- 19 (1 row) count ------- 70 (1 row) count ------- 94 (1 row) count ------- 161 (1 row) count ------- 150 (1 row) count ------- 50 (1 row) count ------- 99 (1 row) count ------- 83 (1 row) count ------- 76 (1 row) count ------- 153 (1 row) count ------- 176 (1 row) count ------- 148 (1 row) count ------- 30 (1 row) count ------- 22 (1 row) count ------- 154 (1 row) count ------- 115 (1 row) count ------- 78 (1 row) count ------- 90 (1 row) count ------- 116 (1 row) count ------- 205 (1 row) count ------- 190 (1 row) count ------- 84 (1 row) count ------- 6 (1 row) count ------- 146 (1 row) count ------- 40 (1 row) count ------- 151 (1 row) count ------- 270 (1 row) count ------- 210 (1 row) count ------- 52 (1 row) count ------- 14 (1 row) count ------- 50 (1 row) count ------- 279 (1 row) count ------- 129 (1 row) count ------- 204 (1 row) count ------- 50 (1 row) count ------- 88 (1 row) count ------- 157 (1 row) count ------- 75 (1 row) count ------- 102 (1 row) count ------- 182 (1 row) count ------- 126 (1 row) count ------- 69 (1 row) count ------- 132 (1 row) count ------- 205 (1 row) count ------- 167 (1 row) count ------- 126 (1 row) count ------- 186 (1 row) count ------- 55 (1 row) count ------- 200 (1 row) count ------- 130 (1 row) count ------- 162 (1 row) count ------- 89 (1 row) count ------- 220 (1 row) count ------- 135 (1 row) count ------- 87 (1 row) count ------- 137 (1 row) count ------- 188 (1 row) count ------- 52 (1 row) count ------- 168 (1 row) count ------- 143 (1 row) count ------- 172 (1 row) count ------- 34 (1 row) count ------- 337 (1 row) count ------- 197 (1 row) count ------- 100 (1 row) count ------- 135 (1 row) count ------- 63 (1 row) count ------- 184 (1 row) count ------- 128 (1 row) count ------- 112 (1 row) count ------- 193 (1 row) count ------- 24 (1 row) count ------- 69 (1 row) count ------- 34 (1 row) count ------- 86 (1 row) count ------- 191 (1 row) count ------- 144 (1 row) count ------- 202 (1 row) count ------- 88 (1 row) count ------- 18 (1 row) count ------- 74 (1 row) count ------- 152 (1 row) count ------- 196 (1 row) count ------- 85 (1 row) count ------- 99 (1 row) count ------- 328 (1 row) count ------- 157 (1 row) count ------- 123 (1 row) count ------- 49 (1 row) count ------- 205 (1 row) count ------- 225 (1 row) count ------- 84 (1 row) count ------- 189 (1 row) count ------- 102 (1 row) count ------- 126 (1 row) count ------- 93 (1 row) count ------- 305 (1 row) count ------- 88 (1 row) count ------- 7 (1 row) count ------- 73 (1 row) count ------- 73 (1 row) count ------- 11 (1 row) count ------- 76 (1 row) count ------- 108 (1 row) count ------- 129 (1 row) count ------- 98 (1 row) count ------- 203 (1 row) count ------- 38 (1 row) count ------- 83 (1 row) count ------- 246 (1 row) count ------- 39 (1 row) count ------- 32 (1 row) count ------- 132 (1 row) count ------- 55 (1 row) count ------- 260 (1 row) count ------- 184 (1 row) count ------- 0 (1 row) count ------- 205 (1 row) count ------- 102 (1 row) count ------- 102 (1 row) count ------- 104 (1 row) count ------- 40 (1 row) count ------- 150 (1 row) count ------- 224 (1 row) count ------- 45 (1 row) count ------- 169 (1 row) count ------- 257 (1 row) count ------- 102 (1 row) count ------- 135 (1 row) count ------- 177 (1 row) count ------- 102 (1 row) count ------- 92 (1 row) count ------- 212 (1 row) count ------- 276 (1 row) count ------- 15 (1 row) count ------- 60 (1 row) count ------- 165 (1 row) count ------- 104 (1 row) count ------- 66 (1 row) count ------- 218 (1 row) count ------- 8 (1 row) count ------- 184 (1 row) count ------- 155 (1 row) count ------- 147 (1 row) count ------- 268 (1 row) count ------- 179 (1 row) count ------- 114 (1 row) count ------- 173 (1 row) count ------- 92 (1 row) count ------- 67 (1 row) count ------- 91 (1 row) count ------- 139 (1 row) count ------- 191 (1 row) count ------- 132 (1 row) count ------- 202 (1 row) count ------- 148 (1 row) count ------- 13 (1 row) count ------- 65 (1 row) count ------- 16 (1 row) count ------- 54 (1 row) count ------- 124 (1 row) count ------- 58 (1 row) count ------- 189 (1 row) count ------- 109 (1 row) count ------- 88 (1 row) count ------- 172 (1 row) count ------- 248 (1 row) count ------- 26 (1 row) count ------- 52 (1 row) count ------- 28 (1 row) count ------- 151 (1 row) count ------- 108 (1 row) count ------- 229 (1 row) count ------- 172 (1 row) count ------- 120 (1 row) count ------- 154 (1 row) count ------- 63 (1 row) count ------- 98 (1 row) count ------- 118 (1 row) count ------- 44 (1 row) count ------- 59 (1 row) count ------- 215 (1 row) count ------- 88 (1 row) count ------- 208 (1 row) count ------- 99 (1 row) count ------- 91 (1 row) count ------- 109 (1 row) count ------- 162 (1 row) count ------- 87 (1 row) count ------- 282 (1 row) count ------- 24 (1 row) count ------- 151 (1 row) count ------- 246 (1 row) count ------- 40 (1 row) count ------- 148 (1 row) count ------- 109 (1 row) count ------- 151 (1 row) count ------- 124 (1 row) count ------- 95 (1 row) count ------- 100 (1 row) count ------- 18 (1 row) count ------- 239 (1 row) count ------- 43 (1 row) count ------- 62 (1 row) count ------- 116 (1 row) count ------- 140 (1 row) count ------- 318 (1 row) count ------- 0 (1 row) count ------- 85 (1 row) count ------- 52 (1 row) count ------- 245 (1 row) count ------- 80 (1 row) count ------- 179 (1 row) count ------- 142 (1 row) count ------- 46 (1 row) count ------- 171 (1 row) count ------- 197 (1 row) count ------- 39 (1 row) count ------- 40 (1 row) count ------- 200 (1 row) count ------- 38 (1 row) count ------- 190 (1 row) count ------- 197 (1 row) count ------- 135 (1 row) count ------- 126 (1 row) count ------- 156 (1 row) count ------- 153 (1 row) count ------- 209 (1 row) count ------- 107 (1 row) count ------- 84 (1 row) count ------- 172 (1 row) count ------- 24 (1 row) count ------- 88 (1 row) count ------- 181 (1 row) count ------- 37 (1 row) count ------- 167 (1 row) count ------- 177 (1 row) count ------- 112 (1 row) count ------- 96 (1 row) count ------- 175 (1 row) count ------- 96 (1 row) count ------- 168 (1 row) count ------- 101 (1 row) count ------- 160 (1 row) count ------- 273 (1 row) count ------- 85 (1 row) count ------- 98 (1 row) count ------- 73 (1 row) count ------- 51 (1 row) count ------- 58 (1 row) count ------- 193 (1 row) count ------- 16 (1 row) count ------- 274 (1 row) count ------- 141 (1 row) count ------- 109 (1 row) count ------- 77 (1 row) count ------- 189 (1 row) count ------- 218 (1 row) count ------- 143 (1 row) count ------- 118 (1 row) count ------- 75 (1 row) count ------- 179 (1 row) count ------- 74 (1 row) count ------- 35 (1 row) count ------- 59 (1 row) count ------- 45 (1 row) count ------- 157 (1 row) count ------- 161 (1 row) count ------- 39 (1 row) count ------- 108 (1 row) count ------- 86 (1 row) count ------- 215 (1 row) count ------- 11 (1 row) count ------- 57 (1 row) count ------- 57 (1 row) count ------- 243 (1 row) count ------- 82 (1 row) count ------- 159 (1 row) count ------- 96 (1 row) count ------- 31 (1 row) count ------- 53 (1 row) count ------- 21 (1 row) count ------- 142 (1 row) count ------- 61 (1 row) count ------- 141 (1 row) count ------- 89 (1 row) count ------- 37 (1 row) count ------- 125 (1 row) count ------- 85 (1 row) count ------- 77 (1 row) count ------- 158 (1 row) count ------- 212 (1 row) count ------- 146 (1 row) count ------- 57 (1 row) count ------- 122 (1 row) count ------- 134 (1 row) count ------- 159 (1 row) count ------- 240 (1 row) count ------- 97 (1 row) count ------- 126 (1 row) count ------- 93 (1 row) count ------- 82 (1 row) count ------- 147 (1 row) count ------- 165 (1 row) count ------- 145 (1 row) count ------- 49 (1 row) count ------- 212 (1 row) count ------- 47 (1 row) count ------- 167 (1 row) count ------- 136 (1 row) count ------- 39 (1 row) count ------- 170 (1 row) count ------- 166 (1 row) count ------- 110 (1 row) count ------- 179 (1 row) count ------- 294 (1 row) count ------- 102 (1 row) count ------- 62 (1 row) count ------- 40 (1 row) count ------- 150 (1 row) count ------- 208 (1 row) count ------- 92 (1 row) count ------- 18 (1 row) count ------- 126 (1 row) count ------- 128 (1 row) count ------- 25 (1 row) count ------- 151 (1 row) count ------- 156 (1 row) count ------- 130 (1 row) count ------- 76 (1 row) count ------- 132 (1 row) count ------- 82 (1 row) count ------- 203 (1 row) count ------- 97 (1 row) count ------- 237 (1 row) count ------- 121 (1 row) count ------- 242 (1 row) count ------- 142 (1 row) count ------- 259 (1 row) count ------- 189 (1 row) count ------- 179 (1 row) count ------- 131 (1 row) count ------- 141 (1 row) count ------- 122 (1 row) count ------- 70 (1 row) count ------- 171 (1 row) count ------- 105 (1 row) count ------- 125 (1 row) count ------- 74 (1 row) count ------- 16 (1 row) count ------- 242 (1 row) count ------- 103 (1 row) count ------- 167 (1 row) count ------- 122 (1 row) count ------- 144 (1 row) count ------- 225 (1 row) count ------- 105 (1 row) count ------- 38 (1 row) count ------- 175 (1 row) count ------- 60 (1 row) count ------- 168 (1 row) count ------- 60 (1 row) count ------- 219 (1 row) count ------- 133 (1 row) count ------- 152 (1 row) count ------- 167 (1 row) count ------- 234 (1 row) count ------- 168 (1 row) count ------- 79 (1 row) count ------- 142 (1 row) count ------- 216 (1 row) count ------- 140 (1 row) count ------- 86 (1 row) count ------- 192 (1 row) count ------- 7 (1 row) count ------- 188 (1 row) count ------- 54 (1 row) count ------- 124 (1 row) count ------- 84 (1 row) count ------- 119 (1 row) count ------- 220 (1 row) count ------- 77 (1 row) count ------- 36 (1 row) count ------- 98 (1 row) count ------- 231 (1 row) count ------- 140 (1 row) count ------- 178 (1 row) count ------- 185 (1 row) count ------- 42 (1 row) count ------- 191 (1 row) count ------- 147 (1 row) count ------- 148 (1 row) count ------- 112 (1 row) count ------- 186 (1 row) count ------- 30 (1 row) count ------- 130 (1 row) count ------- 134 (1 row) count ------- 30 (1 row) count ------- 190 (1 row) count ------- 90 (1 row) count ------- 211 (1 row) count ------- 24 (1 row) count ------- 112 (1 row) count ------- 96 (1 row) count ------- 139 (1 row) count ------- 147 (1 row) count ------- 108 (1 row) count ------- 195 (1 row) count ------- 52 (1 row) count ------- 259 (1 row) count ------- 154 (1 row) count ------- 99 (1 row) count ------- 64 (1 row) count ------- 108 (1 row) count ------- 10 (1 row) count ------- 77 (1 row) count ------- 128 (1 row) count ------- 65 (1 row) count ------- 144 (1 row) count ------- 145 (1 row) count ------- 168 (1 row) count ------- 37 (1 row) count ------- 74 (1 row) count ------- 52 (1 row) count ------- 65 (1 row) count ------- 308 (1 row) count ------- 28 (1 row) count ------- 124 (1 row) count ------- 241 (1 row) count ------- 143 (1 row) count ------- 2 (1 row) count ------- 145 (1 row) count ------- 16 (1 row) count ------- 136 (1 row) count ------- 103 (1 row) count ------- 53 (1 row) count ------- 103 (1 row) count ------- 20 (1 row) count ------- 113 (1 row) count ------- 91 (1 row) count ------- 43 (1 row) count ------- 262 (1 row) count ------- 136 (1 row) count ------- 207 (1 row) count ------- 223 (1 row) count ------- 176 (1 row) count ------- 85 (1 row) count ------- 70 (1 row) count ------- 122 (1 row) count ------- 239 (1 row) count ------- 140 (1 row) count ------- 129 (1 row) count ------- 132 (1 row) count ------- 110 (1 row) count ------- 191 (1 row) count ------- 59 (1 row) count ------- 92 (1 row) count ------- 281 (1 row) count ------- 0 (1 row) count ------- 36 (1 row) count ------- 97 (1 row) count ------- 115 (1 row) count ------- 70 (1 row) count ------- 229 (1 row) count ------- 51 (1 row) count ------- 198 (1 row) count ------- 76 (1 row) count ------- 264 (1 row) count ------- 84 (1 row) count ------- 60 (1 row) count ------- 95 (1 row) count ------- 90 (1 row) count ------- 42 (1 row) count ------- 161 (1 row) count ------- 378 (1 row) count ------- 30 (1 row) count ------- 190 (1 row) count ------- 25 (1 row) count ------- 34 (1 row) count ------- 144 (1 row) count ------- 137 (1 row) count ------- 95 (1 row) count ------- 111 (1 row) count ------- 31 (1 row) count ------- 6 (1 row) count ------- 184 (1 row) count ------- 219 (1 row) count ------- 35 (1 row) count ------- 144 (1 row) count ------- 98 (1 row) count ------- 156 (1 row) count ------- 17 (1 row) count ------- 99 (1 row) count ------- 194 (1 row) count ------- 144 (1 row) count ------- 89 (1 row) count ------- 149 (1 row) count ------- 21 (1 row) count ------- 29 (1 row) count ------- 60 (1 row) count ------- 190 (1 row) count ------- 253 (1 row) count ------- 68 (1 row) count ------- 124 (1 row) count ------- 233 (1 row) count ------- 114 (1 row) count ------- 2 (1 row) count ------- 179 (1 row) count ------- 128 (1 row) count ------- 75 (1 row) count ------- 93 (1 row) count ------- 79 (1 row) count ------- 61 (1 row) count ------- 170 (1 row) count ------- 133 (1 row) count ------- 316 (1 row) count ------- 123 (1 row) count ------- 132 (1 row) count ------- 123 (1 row) count ------- 123 (1 row) count ------- 48 (1 row) count ------- 197 (1 row) count ------- 46 (1 row) count ------- 110 (1 row) count ------- 122 (1 row) count ------- 54 (1 row) count ------- 33 (1 row) count ------- 273 (1 row) count ------- 162 (1 row) count ------- 171 (1 row) count ------- 216 (1 row) count ------- 114 (1 row) count ------- 177 (1 row) count ------- 109 (1 row) count ------- 128 (1 row) count ------- 112 (1 row) count ------- 159 (1 row) count ------- 72 (1 row) count ------- 198 (1 row) count ------- 165 (1 row) count ------- 136 (1 row) count ------- 127 (1 row) count ------- 106 (1 row) count ------- 58 (1 row) count ------- 194 (1 row) count ------- 76 (1 row) count ------- 84 (1 row) count ------- 173 (1 row) count ------- 32 (1 row) count ------- 58 (1 row) count ------- 216 (1 row) count ------- 170 (1 row) count ------- 6 (1 row) count ------- 96 (1 row) count ------- 106 (1 row) count ------- 127 (1 row) count ------- 87 (1 row) count ------- 103 (1 row) count ------- 179 (1 row) count ------- 210 (1 row) count ------- 51 (1 row) count ------- 78 (1 row) count ------- 121 (1 row) count ------- 86 (1 row) count ------- 149 (1 row) count ------- 116 (1 row) count ------- 108 (1 row) count ------- 288 (1 row) count ------- 100 (1 row) count ------- 66 (1 row) count ------- 192 (1 row) count ------- 153 (1 row) count ------- 123 (1 row) count ------- 87 (1 row) count ------- 77 (1 row) count ------- 124 (1 row) count ------- 121 (1 row) count ------- 203 (1 row) count ------- 79 (1 row) count ------- 92 (1 row) count ------- 72 (1 row) count ------- 99 (1 row) count ------- 292 (1 row) count ------- 103 (1 row) count ------- 13 (1 row) count ------- 134 (1 row) count ------- 29 (1 row) count ------- 87 (1 row) count ------- 127 (1 row) count ------- 163 (1 row) count ------- 158 (1 row) count ------- 153 (1 row) count ------- 69 (1 row) count ------- 22 (1 row) count ------- 110 (1 row) count ------- 44 (1 row) count ------- 162 (1 row) count ------- 66 (1 row) count ------- 135 (1 row) count ------- 116 (1 row) count ------- 147 (1 row) count ------- 258 (1 row) count ------- 27 (1 row) count ------- 125 (1 row) count ------- 65 (1 row) count ------- 29 (1 row) count ------- 10 (1 row) count ------- 144 (1 row) count ------- 91 (1 row) count ------- 253 (1 row) count ------- 145 (1 row) count ------- 68 (1 row) count ------- 9 (1 row) count ------- 197 (1 row) count ------- 79 (1 row) count ------- 147 (1 row) count ------- 103 (1 row) count ------- 107 (1 row) count ------- 129 (1 row) count ------- 27 (1 row) count ------- 51 (1 row) count ------- 84 (1 row) count ------- 137 (1 row) count ------- 84 (1 row) count ------- 129 (1 row) count ------- 135 (1 row) count ------- 39 (1 row) count ------- 70 (1 row) count ------- 137 (1 row) count ------- 155 (1 row) count ------- 9 (1 row) count ------- 330 (1 row) count ------- 61 (1 row) count ------- 90 (1 row) count ------- 122 (1 row) count ------- 38 (1 row) count ------- 148 (1 row) count ------- 99 (1 row) count ------- 67 (1 row) count ------- 105 (1 row) count ------- 222 (1 row) count ------- 61 (1 row) count ------- 89 (1 row) count ------- 36 (1 row) count ------- 115 (1 row) count ------- 185 (1 row) count ------- 155 (1 row) count ------- 99 (1 row) count ------- 43 (1 row) count ------- 81 (1 row) count ------- 203 (1 row) count ------- 73 (1 row) count ------- 123 (1 row) count ------- 146 (1 row) count ------- 81 (1 row) count ------- 110 (1 row) count ------- 223 (1 row) count ------- 215 (1 row) count ------- 89 (1 row) count ------- 14 (1 row) count ------- 145 (1 row) count ------- 279 (1 row) count ------- 140 (1 row) count ------- 389 (1 row) count ------- 103 (1 row) count ------- 72 (1 row) count ------- 159 (1 row) count ------- 22 (1 row) count ------- 48 (1 row) count ------- 247 (1 row) count ------- 152 (1 row) count ------- 214 (1 row) count ------- 96 (1 row) count ------- 254 (1 row) count ------- 203 (1 row) count ------- 104 (1 row) count ------- 7 (1 row) count ------- 168 (1 row) count ------- 167 (1 row) count ------- 251 (1 row) count ------- 130 (1 row) count ------- 105 (1 row) count ------- 11 (1 row) count ------- 74 (1 row) count ------- 17 (1 row) count ------- 150 (1 row) count ------- 57 (1 row) count ------- 165 (1 row) count ------- 195 (1 row) count ------- 98 (1 row) count ------- 189 (1 row) count ------- 221 (1 row) count ------- 148 (1 row) count ------- 191 (1 row) count ------- 131 (1 row) count ------- 43 (1 row) count ------- 4 (1 row) count ------- 164 (1 row) count ------- 138 (1 row) count ------- 49 (1 row) count ------- 51 (1 row) count ------- 105 (1 row) count ------- 187 (1 row) count ------- 338 (1 row) count ------- 91 (1 row) count ------- 184 (1 row) count ------- 91 (1 row) count ------- 34 (1 row) count ------- 117 (1 row) count ------- 31 (1 row) count ------- 175 (1 row) count ------- 176 (1 row) count ------- 87 (1 row) count ------- 236 (1 row) count ------- 265 (1 row) count ------- 272 (1 row) count ------- 96 (1 row) count ------- 180 (1 row) count ------- 155 (1 row) count ------- 219 (1 row) count ------- 91 (1 row) count ------- 54 (1 row) count ------- 56 (1 row) count ------- 84 (1 row) count ------- 12 (1 row) count ------- 20 (1 row) count ------- 105 (1 row) count ------- 264 (1 row) count ------- 205 (1 row) count ------- 19 (1 row) count ------- 212 (1 row) count ------- 246 (1 row) count ------- 10 (1 row) count ------- 57 (1 row) count ------- 55 (1 row) count ------- 159 (1 row) count ------- 36 (1 row) count ------- 330 (1 row) count ------- 169 (1 row) count ------- 121 (1 row) count ------- 274 (1 row) count ------- 167 (1 row) count ------- 42 (1 row) count ------- 87 (1 row) count ------- 258 (1 row) count ------- 252 (1 row) count ------- 42 (1 row) count ------- 80 (1 row) count ------- 190 (1 row) count ------- 98 (1 row) count ------- 150 (1 row) count ------- 170 (1 row) count ------- 215 (1 row) count ------- 214 (1 row) count ------- 153 (1 row) count ------- 119 (1 row) count ------- 235 (1 row) count ------- 117 (1 row) count ------- 62 (1 row) count ------- 100 (1 row) count ------- 25 (1 row) count ------- 208 (1 row) count ------- 101 (1 row) count ------- 238 (1 row) count ------- 263 (1 row) count ------- 34 (1 row) count ------- 115 (1 row) count ------- 6 (1 row) count ------- 86 (1 row) count ------- 109 (1 row) count ------- 192 (1 row) count ------- 221 (1 row) count ------- 110 (1 row) count ------- 115 (1 row) count ------- 133 (1 row) count ------- 283 (1 row) count ------- 81 (1 row) count ------- 31 (1 row) count ------- 18 (1 row) count ------- 248 (1 row) count ------- 195 (1 row) count ------- 218 (1 row) count ------- 140 (1 row) count ------- 74 (1 row) count ------- 202 (1 row) count ------- 140 (1 row) count ------- 19 (1 row) count ------- 76 (1 row) count ------- 36 (1 row) count ------- 99 (1 row) count ------- 261 (1 row) count ------- 115 (1 row) count ------- 218 (1 row) count ------- 84 (1 row) count ------- 130 (1 row) count ------- 225 (1 row) count ------- 278 (1 row) count ------- 48 (1 row) count ------- 57 (1 row) count ------- 50 (1 row) count ------- 61 (1 row) count ------- 137 (1 row) count ------- 215 (1 row) count ------- 53 (1 row) count ------- 168 (1 row) count ------- 47 (1 row) count ------- 154 (1 row) count ------- 118 (1 row) count ------- 124 (1 row) count ------- 118 (1 row) count ------- 73 (1 row) count ------- 126 (1 row) count ------- 53 (1 row) count ------- 134 (1 row) count ------- 53 (1 row) count ------- 96 (1 row) count ------- 223 (1 row) count ------- 81 (1 row) count ------- 342 (1 row) count ------- 184 (1 row) count ------- 51 (1 row) count ------- 137 (1 row) count ------- 79 (1 row) count ------- 118 (1 row) count ------- 74 (1 row) count ------- 138 (1 row) count ------- 143 (1 row) count ------- 71 (1 row) count ------- 57 (1 row) count ------- 131 (1 row) count ------- 245 (1 row) count ------- 254 (1 row) count ------- 101 (1 row) count ------- 92 (1 row) count ------- 231 (1 row) count ------- 256 (1 row) count ------- 161 (1 row) count ------- 124 (1 row) count ------- 112 (1 row) count ------- 193 (1 row) count ------- 28 (1 row) count ------- 141 (1 row) count ------- 213 (1 row) count ------- 59 (1 row) count ------- 199 (1 row) count ------- 50 (1 row) count ------- 131 (1 row) count ------- 63 (1 row) count ------- 90 (1 row) count ------- 307 (1 row) count ------- 102 (1 row) count ------- 118 (1 row) count ------- 22 (1 row) count ------- 205 (1 row) count ------- 195 (1 row) count ------- 142 (1 row) count ------- 393 (1 row) count ------- 96 (1 row) count ------- 190 (1 row) count ------- 194 (1 row) count ------- 113 (1 row) count ------- 172 (1 row) count ------- 202 (1 row) count ------- 108 (1 row) count ------- 27 (1 row) count ------- 113 (1 row) count ------- 132 (1 row) count ------- 125 (1 row) count ------- 222 (1 row) count ------- 71 (1 row) count ------- 32 (1 row) count ------- 160 (1 row) count ------- 20 (1 row) count ------- 260 (1 row) count ------- 278 (1 row) count ------- 61 (1 row) count ------- 79 (1 row) count ------- 109 (1 row) count ------- 223 (1 row) count ------- 59 (1 row) count ------- 16 (1 row) count ------- 91 (1 row) count ------- 13 (1 row) count ------- 64 (1 row) count ------- 207 (1 row) count ------- 86 (1 row) count ------- 40 (1 row) count ------- 179 (1 row) count ------- 139 (1 row) count ------- 206 (1 row) count ------- 84 (1 row) count ------- 45 (1 row) count ------- 76 (1 row) count ------- 141 (1 row) count ------- 210 (1 row) count ------- 30 (1 row) count ------- 192 (1 row) count ------- 126 (1 row) count ------- 101 (1 row) count ------- 184 (1 row) count ------- 255 (1 row) count ------- 109 (1 row) count ------- 107 (1 row) count ------- 58 (1 row) count ------- 20 (1 row) count ------- 86 (1 row) count ------- 109 (1 row) count ------- 61 (1 row) count ------- 169 (1 row) count ------- 363 (1 row) count ------- 245 (1 row) count ------- 230 (1 row) count ------- 324 (1 row) count ------- 191 (1 row) count ------- 195 (1 row) count ------- 39 (1 row) count ------- 76 (1 row) count ------- 122 (1 row) count ------- 264 (1 row) count ------- 136 (1 row) count ------- 26 (1 row) count ------- 82 (1 row) count ------- 26 (1 row) count ------- 69 (1 row) count ------- 81 (1 row) count ------- 65 (1 row) count ------- 12 (1 row) count ------- 264 (1 row) count ------- 150 (1 row) count ------- 101 (1 row) count ------- 195 (1 row) count ------- 85 (1 row) count ------- 134 (1 row) count ------- 90 (1 row) count ------- 49 (1 row) count ------- 105 (1 row) count ------- 93 (1 row) count ------- 237 (1 row) count ------- 205 (1 row) count ------- 54 (1 row) count ------- 135 (1 row) count ------- 217 (1 row) count ------- 149 (1 row) count ------- 151 (1 row) count ------- 113 (1 row) count ------- 20 (1 row) count ------- 132 (1 row) count ------- 251 (1 row) count ------- 126 (1 row) count ------- 149 (1 row) count ------- 313 (1 row) count ------- 154 (1 row) count ------- 153 (1 row) count ------- 63 (1 row) count ------- 131 (1 row) count ------- 99 (1 row) count ------- 39 (1 row) count ------- 71 (1 row) count ------- 228 (1 row) count ------- 131 (1 row) count ------- 102 (1 row) count ------- 179 (1 row) count ------- 220 (1 row) count ------- 136 (1 row) count ------- 97 (1 row) count ------- 101 (1 row) count ------- 126 (1 row) count ------- 63 (1 row) count ------- 9 (1 row) count ------- 224 (1 row) count ------- 176 (1 row) count ------- 71 (1 row) count ------- 147 (1 row) count ------- 78 (1 row) count ------- 68 (1 row) count ------- 199 (1 row) count ------- 150 (1 row) count ------- 86 (1 row) count ------- 48 (1 row) count ------- 107 (1 row) count ------- 48 (1 row) count ------- 68 (1 row) count ------- 197 (1 row) count ------- 210 (1 row) count ------- 139 (1 row) count ------- 4 (1 row) count ------- 189 (1 row) count ------- 130 (1 row) count ------- 147 (1 row) count ------- 108 (1 row) count ------- 97 (1 row) count ------- 154 (1 row) count ------- 222 (1 row) count ------- 233 (1 row) count ------- 143 (1 row) count ------- 101 (1 row) count ------- 100 (1 row) count ------- 91 (1 row) count ------- 149 (1 row) count ------- 77 (1 row) count ------- 19 (1 row) count ------- 115 (1 row) count ------- 67 (1 row) count ------- 101 (1 row) count ------- 151 (1 row) count ------- 215 (1 row) count ------- 69 (1 row) count ------- 101 (1 row) count ------- 151 (1 row) count ------- 62 (1 row) count ------- 53 (1 row) count ------- 76 (1 row) count ------- 49 (1 row) count ------- 23 (1 row) count ------- 68 (1 row) count ------- 129 (1 row) count ------- 284 (1 row) count ------- 277 (1 row) count ------- 135 (1 row) count ------- 99 (1 row) count ------- 91 (1 row) count ------- 165 (1 row) count ------- 161 (1 row) count ------- 168 (1 row) count ------- 139 (1 row) count ------- 152 (1 row) count ------- 130 (1 row) count ------- 124 (1 row) count ------- 171 (1 row) count ------- 103 (1 row) count ------- 27 (1 row) count ------- 60 (1 row) count ------- 93 (1 row) count ------- 105 (1 row) count ------- 102 (1 row) count ------- 114 (1 row) count ------- 134 (1 row) count ------- 8 (1 row) count ------- 203 (1 row) count ------- 135 (1 row) count ------- 191 (1 row) count ------- 12 (1 row) count ------- 33 (1 row) count ------- 36 (1 row) count ------- 74 (1 row) count ------- 258 (1 row) count ------- 79 (1 row) count ------- 131 (1 row) count ------- 60 (1 row) count ------- 27 (1 row) count ------- 16 (1 row) count ------- 286 (1 row) count ------- 219 (1 row) count ------- 33 (1 row) count ------- 4 (1 row) count ------- 38 (1 row) count ------- 106 (1 row) count ------- 18 (1 row) count ------- 33 (1 row) count ------- 160 (1 row) count ------- 149 (1 row) count ------- 18 (1 row) count ------- 43 (1 row) count ------- 146 (1 row) count ------- 9 (1 row) count ------- 140 (1 row) count ------- 263 (1 row) count ------- 30 (1 row) count ------- 119 (1 row) count ------- 39 (1 row) count ------- 202 (1 row) count ------- 52 (1 row) count ------- 12 (1 row) count ------- 22 (1 row) count ------- 252 (1 row) count ------- 146 (1 row) count ------- 5 (1 row) count ------- 108 (1 row) count ------- 189 (1 row) count ------- 32 (1 row) count ------- 204 (1 row) count ------- 94 (1 row) count ------- 131 (1 row) count ------- 139 (1 row) count ------- 17 (1 row) count ------- 52 (1 row) count ------- 123 (1 row) count ------- 164 (1 row) count ------- 178 (1 row) count ------- 165 (1 row) count ------- 84 (1 row) count ------- 9 (1 row) count ------- 248 (1 row) count ------- 112 (1 row) count ------- 82 (1 row) count ------- 136 (1 row) count ------- 59 (1 row) count ------- 72 (1 row) count ------- 64 (1 row) count ------- 98 (1 row) count ------- 144 (1 row) count ------- 202 (1 row) count ------- 68 (1 row) count ------- 182 (1 row) count ------- 86 (1 row) count ------- 137 (1 row) count ------- 43 (1 row) count ------- 41 (1 row) count ------- 52 (1 row) count ------- 50 (1 row) count ------- 246 (1 row) count ------- 224 (1 row) count ------- 107 (1 row) count ------- 144 (1 row) count ------- 280 (1 row) count ------- 133 (1 row) count ------- 132 (1 row) count ------- 46 (1 row) count ------- 160 (1 row) count ------- 80 (1 row) count ------- 152 (1 row) count ------- 65 (1 row) count ------- 36 (1 row) count ------- 175 (1 row) count ------- 100 (1 row) count ------- 25 (1 row) count ------- 163 (1 row) count ------- 91 (1 row) count ------- 293 (1 row) count ------- 25 (1 row) count ------- 163 (1 row) count ------- 126 (1 row) count ------- 53 (1 row) count ------- 221 (1 row) count ------- 96 (1 row) count ------- 191 (1 row) count ------- 275 (1 row) count ------- 148 (1 row) count ------- 174 (1 row) count ------- 103 (1 row) count ------- 191 (1 row) count ------- 92 (1 row) count ------- 63 (1 row) count ------- 67 (1 row) count ------- 150 (1 row) count ------- 73 (1 row) count ------- 134 (1 row) count ------- 93 (1 row) count ------- 106 (1 row) count ------- 234 (1 row) count ------- 240 (1 row) count ------- 171 (1 row) count ------- 124 (1 row) count ------- 39 (1 row) count ------- 86 (1 row) count ------- 68 (1 row) count ------- 6 (1 row) count ------- 136 (1 row) count ------- 75 (1 row) count ------- 217 (1 row) count ------- 217 (1 row) count ------- 78 (1 row) count ------- 141 (1 row) count ------- 22 (1 row) count ------- 23 (1 row) count ------- 98 (1 row) count ------- 47 (1 row) count ------- 66 (1 row) count ------- 238 (1 row) count ------- 48 (1 row) count ------- 228 (1 row) count ------- 134 (1 row) count ------- 126 (1 row) count ------- 218 (1 row) count ------- 129 (1 row) count ------- 112 (1 row) count ------- 155 (1 row) count ------- 36 (1 row) count ------- 19 (1 row) count ------- 30 (1 row) count ------- 84 (1 row) count ------- 154 (1 row) count ------- 166 (1 row) count ------- 11 (1 row) count ------- 94 (1 row) count ------- 177 (1 row) count ------- 86 (1 row) count ------- 175 (1 row) count ------- 113 (1 row) count ------- 45 (1 row) count ------- 64 (1 row) count ------- 42 (1 row) count ------- 234 (1 row) count ------- 129 (1 row) count ------- 107 (1 row) count ------- 113 (1 row) count ------- 163 (1 row) count ------- 70 (1 row) count ------- 55 (1 row) count ------- 10 (1 row) count ------- 88 (1 row) count ------- 47 (1 row) count ------- 36 (1 row) count ------- 4 (1 row) count ------- 109 (1 row) count ------- 23 (1 row) count ------- 0 (1 row) count ------- 29 (1 row) count ------- 187 (1 row) count ------- 89 (1 row) count ------- 151 (1 row) count ------- 174 (1 row) count ------- 107 (1 row) count ------- 10 (1 row) count ------- 27 (1 row) count ------- 155 (1 row) count ------- 48 (1 row) count ------- 18 (1 row) count ------- 35 (1 row) count ------- 131 (1 row) count ------- 153 (1 row) count ------- 298 (1 row) count ------- 222 (1 row) count ------- 82 (1 row) count ------- 81 (1 row) count ------- 83 (1 row) count ------- 14 (1 row) count ------- 44 (1 row) count ------- 98 (1 row) count ------- 141 (1 row) count ------- 35 (1 row) count ------- 260 (1 row) count ------- 112 (1 row) count ------- 45 (1 row) count ------- 73 (1 row) count ------- 66 (1 row) count ------- 15 (1 row) count ------- 163 (1 row) count ------- 130 (1 row) count ------- 197 (1 row) count ------- 79 (1 row) count ------- 26 (1 row) count ------- 57 (1 row) count ------- 235 (1 row) count ------- 110 (1 row) count ------- 147 (1 row) count ------- 5 (1 row) count ------- 127 (1 row) count ------- 77 (1 row) count ------- 62 (1 row) count ------- 152 (1 row) count ------- 23 (1 row) count ------- 66 (1 row) count ------- 216 (1 row) count ------- 46 (1 row) count ------- 87 (1 row) count ------- 5 (1 row) count ------- 196 (1 row) count ------- 201 (1 row) count ------- 199 (1 row) count ------- 78 (1 row) count ------- 14 (1 row) count ------- 127 (1 row) count ------- 113 (1 row) count ------- 229 (1 row) count ------- 108 (1 row) count ------- 188 (1 row) count ------- 103 (1 row) count ------- 99 (1 row) count ------- 191 (1 row) count ------- 113 (1 row) count ------- 207 (1 row) count ------- 266 (1 row) count ------- 180 (1 row) count ------- 106 (1 row) count ------- 80 (1 row) count ------- 119 (1 row) count ------- 51 (1 row) count ------- 149 (1 row) count ------- 0 (1 row) count ------- 158 (1 row) count ------- 16 (1 row) count ------- 109 (1 row) count ------- 33 (1 row) count ------- 92 (1 row) count ------- 246 (1 row) count ------- 140 (1 row) count ------- 81 (1 row) count ------- 215 (1 row) count ------- 100 (1 row) count ------- 120 (1 row) count ------- 187 (1 row) count ------- 232 (1 row) count ------- 138 (1 row) count ------- 3 (1 row) count ------- 111 (1 row) count ------- 214 (1 row) count ------- 95 (1 row) count ------- 101 (1 row) count ------- 65 (1 row) count ------- 182 (1 row) count ------- 113 (1 row) count ------- 88 (1 row) count ------- 168 (1 row) count ------- 8 (1 row) count ------- 236 (1 row) count ------- 136 (1 row) count ------- 62 (1 row) count ------- 19 (1 row) count ------- 41 (1 row) count ------- 308 (1 row) count ------- 96 (1 row) count ------- 315 (1 row) count ------- 140 (1 row) count ------- 127 (1 row) count ------- 211 (1 row) count ------- 35 (1 row) count ------- 86 (1 row) count ------- 87 (1 row) count ------- 116 (1 row) count ------- 57 (1 row) count ------- 77 (1 row) count ------- 33 (1 row) count ------- 22 (1 row) count ------- 116 (1 row) count ------- 120 (1 row) count ------- 63 (1 row) count ------- 272 (1 row) count ------- 164 (1 row) count ------- 123 (1 row) count ------- 136 (1 row) count ------- 172 (1 row) count ------- 43 (1 row) count ------- 81 (1 row) count ------- 102 (1 row) count ------- 35 (1 row) count ------- 175 (1 row) count ------- 113 (1 row) count ------- 232 (1 row) count ------- 40 (1 row) count ------- 120 (1 row) count ------- 84 (1 row) count ------- 21 (1 row) count ------- 39 (1 row) count ------- 157 (1 row) count ------- 4 (1 row) count ------- 51 (1 row) count ------- 54 (1 row) count ------- 176 (1 row) count ------- 56 (1 row) count ------- 131 (1 row) count ------- 44 (1 row) count ------- 36 (1 row) count ------- 86 (1 row) count ------- 227 (1 row) count ------- 128 (1 row) count ------- 238 (1 row) count ------- 69 (1 row) count ------- 53 (1 row) count ------- 34 (1 row) count ------- 8 (1 row) count ------- 161 (1 row) count ------- 104 (1 row) count ------- 159 (1 row) count ------- 142 (1 row) count ------- 230 (1 row) count ------- 132 (1 row) count ------- 81 (1 row) count ------- 130 (1 row) count ------- 185 (1 row) count ------- 138 (1 row) count ------- 136 (1 row) count ------- 301 (1 row) count ------- 223 (1 row) count ------- 98 (1 row) count ------- 180 (1 row) count ------- 78 (1 row) count ------- 241 (1 row) count ------- 209 (1 row) count ------- 114 (1 row) count ------- 60 (1 row) count ------- 43 (1 row) count ------- 37 (1 row) count ------- 101 (1 row) count ------- 138 (1 row) count ------- 60 (1 row) count ------- 134 (1 row) count ------- 27 (1 row) count ------- 168 (1 row) count ------- 21 (1 row) count ------- 249 (1 row) count ------- 18 (1 row) count ------- 177 (1 row) count ------- 46 (1 row) count ------- 77 (1 row) count ------- 51 (1 row) count ------- 63 (1 row) count ------- 117 (1 row) count ------- 27 (1 row) count ------- 64 (1 row) count ------- 52 (1 row) count ------- 178 (1 row) count ------- 126 (1 row) count ------- 149 (1 row) count ------- 85 (1 row) count ------- 219 (1 row) count ------- 130 (1 row) count ------- 4 (1 row) count ------- 16 (1 row) count ------- 162 (1 row) count ------- 223 (1 row) count ------- 60 (1 row) count ------- 0 (1 row) count ------- 138 (1 row) count ------- 126 (1 row) count ------- 127 (1 row) count ------- 88 (1 row) count ------- 50 (1 row) count ------- 26 (1 row) count ------- 199 (1 row) count ------- 41 (1 row) count ------- 16 (1 row) count ------- 77 (1 row) count ------- 121 (1 row) count ------- 135 (1 row) count ------- 21 (1 row) count ------- 88 (1 row) count ------- 106 (1 row) count ------- 230 (1 row) count ------- 119 (1 row) count ------- 109 (1 row) count ------- 98 (1 row) count ------- 173 (1 row) count ------- 245 (1 row) count ------- 167 (1 row) count ------- 79 (1 row) count ------- 23 (1 row) count ------- 67 (1 row) count ------- 50 (1 row) count ------- 88 (1 row) count ------- 116 (1 row) count ------- 16 (1 row) count ------- 85 (1 row) count ------- 110 (1 row) count ------- 53 (1 row) count ------- 154 (1 row) count ------- 134 (1 row) count ------- 82 (1 row) count ------- 96 (1 row) count ------- 218 (1 row) count ------- 8 (1 row) count ------- 177 (1 row) count ------- 132 (1 row) count ------- 34 (1 row) count ------- 122 (1 row) count ------- 170 (1 row) count ------- 85 (1 row) count ------- 98 (1 row) count ------- 32 (1 row) count ------- 137 (1 row) count ------- 221 (1 row) count ------- 43 (1 row) count ------- 94 (1 row) count ------- 97 (1 row) count ------- 276 (1 row) count ------- 138 (1 row) count ------- 89 (1 row) count ------- 86 (1 row) count ------- 94 (1 row) count ------- 95 (1 row) count ------- 20 (1 row) count ------- 137 (1 row) count ------- 183 (1 row) count ------- 34 (1 row) count ------- 103 (1 row) count ------- 41 (1 row) count ------- 359 (1 row) count ------- 146 (1 row) count ------- 196 (1 row) count ------- 106 (1 row) count ------- 78 (1 row) count ------- 216 (1 row) count ------- 209 (1 row) count ------- 118 (1 row) count ------- 92 (1 row) count ------- 86 (1 row) count ------- 37 (1 row) count ------- 132 (1 row) count ------- 353 (1 row) count ------- 17 (1 row) count ------- 78 (1 row) count ------- 187 (1 row) count ------- 123 (1 row) count ------- 55 (1 row) count ------- 39 (1 row) count ------- 17 (1 row) count ------- 122 (1 row) count ------- 82 (1 row) count ------- 58 (1 row) count ------- 63 (1 row) count ------- 132 (1 row) count ------- 43 (1 row) count ------- 105 (1 row) count ------- 208 (1 row) count ------- 86 (1 row) count ------- 149 (1 row) count ------- 219 (1 row) count ------- 78 (1 row) count ------- 61 (1 row) count ------- 122 (1 row) count ------- 95 (1 row) count ------- 30 (1 row) count ------- 53 (1 row) count ------- 78 (1 row) count ------- 102 (1 row) count ------- 178 (1 row) count ------- 88 (1 row) count ------- 166 (1 row) count ------- 143 (1 row) count ------- 3 (1 row) count ------- 139 (1 row) count ------- 107 (1 row) count ------- 60 (1 row) count ------- 195 (1 row) count ------- 25 (1 row) count ------- 237 (1 row) count ------- 41 (1 row) count ------- 41 (1 row) count ------- 56 (1 row) count ------- 100 (1 row) count ------- 31 (1 row) count ------- 268 (1 row) count ------- 81 (1 row) count ------- 144 (1 row) count ------- 78 (1 row) count ------- 103 (1 row) count ------- 104 (1 row) count ------- 74 (1 row) count ------- 79 (1 row) count ------- 241 (1 row) count ------- 226 (1 row) count ------- 92 (1 row) count ------- 229 (1 row) count ------- 103 (1 row) count ------- 106 (1 row) count ------- 71 (1 row) count ------- 64 (1 row) count ------- 32 (1 row) count ------- 78 (1 row) count ------- 247 (1 row) count ------- 85 (1 row) count ------- 222 (1 row) count ------- 267 (1 row) count ------- 104 (1 row) count ------- 85 (1 row) count ------- 103 (1 row) count ------- 216 (1 row) count ------- 189 (1 row) count ------- 212 (1 row) count ------- 87 (1 row) count ------- 162 (1 row) count ------- 140 (1 row) count ------- 150 (1 row) count ------- 117 (1 row) count ------- 106 (1 row) count ------- 80 (1 row) count ------- 71 (1 row) count ------- 40 (1 row) count ------- 205 (1 row) count ------- 245 (1 row) count ------- 124 (1 row) count ------- 181 (1 row) count ------- 36 (1 row) count ------- 31 (1 row) count ------- 294 (1 row) count ------- 102 (1 row) count ------- 119 (1 row) count ------- 244 (1 row) count ------- 162 (1 row) count ------- 24 (1 row) count ------- 103 (1 row) count ------- 74 (1 row) count ------- 69 (1 row) count ------- 24 (1 row) count ------- 151 (1 row) count ------- 90 (1 row) count ------- 95 (1 row) count ------- 42 (1 row) count ------- 135 (1 row) count ------- 213 (1 row) count ------- 113 (1 row) count ------- 78 (1 row) count ------- 80 (1 row) count ------- 34 (1 row) count ------- 68 (1 row) count ------- 78 (1 row) count ------- 215 (1 row) count ------- 158 (1 row) count ------- 137 (1 row) count ------- 64 (1 row) count ------- 176 (1 row) count ------- 13 (1 row) count ------- 143 (1 row) count ------- 122 (1 row) count ------- 115 (1 row) count ------- 185 (1 row) count ------- 140 (1 row) count ------- 44 (1 row) count ------- 170 (1 row) count ------- 218 (1 row) count ------- 33 (1 row) count ------- 129 (1 row) count ------- 206 (1 row) count ------- 119 (1 row) count ------- 84 (1 row) count ------- 89 (1 row) count ------- 110 (1 row) count ------- 39 (1 row) count ------- 241 (1 row) count ------- 134 (1 row) count ------- 98 (1 row) count ------- 34 (1 row) count ------- 94 (1 row) count ------- 106 (1 row) count ------- 179 (1 row) count ------- 197 (1 row) count ------- 31 (1 row) count ------- 115 (1 row) count ------- 87 (1 row) count ------- 111 (1 row) count ------- 158 (1 row) count ------- 135 (1 row) count ------- 95 (1 row) count ------- 105 (1 row) count ------- 102 (1 row) count ------- 48 (1 row) count ------- 175 (1 row) count ------- 66 (1 row) count ------- 256 (1 row) count ------- 235 (1 row) count ------- 161 (1 row) count ------- 199 (1 row) count ------- 145 (1 row) count ------- 95 (1 row) count ------- 0 (1 row) count ------- 113 (1 row) count ------- 176 (1 row) count ------- 253 (1 row) count ------- 91 (1 row) count ------- 10 (1 row) count ------- 148 (1 row) count ------- 176 (1 row) count ------- 205 (1 row) count ------- 84 (1 row) count ------- 74 (1 row) count ------- 201 (1 row) count ------- 220 (1 row) count ------- 152 (1 row) count ------- 162 (1 row) count ------- 183 (1 row) count ------- 162 (1 row) count ------- 53 (1 row) count ------- 174 (1 row) count ------- 18 (1 row) count ------- 115 (1 row) count ------- 164 (1 row) count ------- 85 (1 row) count ------- 47 (1 row) count ------- 24 (1 row) count ------- 192 (1 row) count ------- 132 (1 row) count ------- 139 (1 row) count ------- 67 (1 row) count ------- 131 (1 row) count ------- 175 (1 row) count ------- 80 (1 row) count ------- 123 (1 row) count ------- 89 (1 row) count ------- 174 (1 row) count ------- 11 (1 row) count ------- 59 (1 row) count ------- 119 (1 row) count ------- 21 (1 row) count ------- 88 (1 row) count ------- 20 (1 row) count ------- 76 (1 row) count ------- 137 (1 row) count ------- 114 (1 row) count ------- 67 (1 row) count ------- 36 (1 row) count ------- 283 (1 row) count ------- 21 (1 row) count ------- 90 (1 row) count ------- 91 (1 row) count ------- 121 (1 row) count ------- 155 (1 row) count ------- 116 (1 row) count ------- 27 (1 row) count ------- 68 (1 row) count ------- 1 (1 row) count ------- 225 (1 row) count ------- 133 (1 row) count ------- 237 (1 row) count ------- 139 (1 row) count ------- 130 (1 row) count ------- 115 (1 row) count ------- 154 (1 row) count ------- 107 (1 row) count ------- 89 (1 row) count ------- 90 (1 row) count ------- 125 (1 row) count ------- 63 (1 row) count ------- 54 (1 row) count ------- 49 (1 row) count ------- 135 (1 row) count ------- 215 (1 row) count ------- 6 (1 row) count ------- 153 (1 row) count ------- 125 (1 row) count ------- 101 (1 row) count ------- 111 (1 row) count ------- 213 (1 row) count ------- 75 (1 row) count ------- 64 (1 row) count ------- 105 (1 row) count ------- 162 (1 row) count ------- 267 (1 row) count ------- 136 (1 row) count ------- 133 (1 row) count ------- 171 (1 row) count ------- 136 (1 row) count ------- 124 (1 row) count ------- 153 (1 row) count ------- 40 (1 row) count ------- 132 (1 row) count ------- 99 (1 row) count ------- 220 (1 row) count ------- 63 (1 row) count ------- 67 (1 row) count ------- 164 (1 row) count ------- 150 (1 row) count ------- 70 (1 row) count ------- 99 (1 row) count ------- 238 (1 row) count ------- 112 (1 row) count ------- 87 (1 row) count ------- 127 (1 row) count ------- 184 (1 row) count ------- 138 (1 row) count ------- 77 (1 row) count ------- 130 (1 row) count ------- 74 (1 row) count ------- 129 (1 row) count ------- 69 (1 row) count ------- 192 (1 row) count ------- 126 (1 row) count ------- 42 (1 row) count ------- 44 (1 row) count ------- 196 (1 row) count ------- 143 (1 row) count ------- 254 (1 row) count ------- 136 (1 row) count ------- 4 (1 row) count ------- 213 (1 row) count ------- 75 (1 row) count ------- 84 (1 row) count ------- 122 (1 row) count ------- 230 (1 row) count ------- 85 (1 row) count ------- 96 (1 row) count ------- 126 (1 row) count ------- 32 (1 row) count ------- 89 (1 row) count ------- 70 (1 row) count ------- 232 (1 row) count ------- 199 (1 row) count ------- 163 (1 row) count ------- 187 (1 row) count ------- 56 (1 row) count ------- 58 (1 row) count ------- 147 (1 row) count ------- 103 (1 row) count ------- 38 (1 row) count ------- 11 (1 row) count ------- 160 (1 row) count ------- 195 (1 row) count ------- 146 (1 row) count ------- 75 (1 row) count ------- 196 (1 row) count ------- 33 (1 row) count ------- 269 (1 row) count ------- 193 (1 row) count ------- 112 (1 row) count ------- 113 (1 row) count ------- 89 (1 row) count ------- 167 (1 row) count ------- 117 (1 row) count ------- 198 (1 row) count ------- 163 (1 row) count ------- 141 (1 row) count ------- 126 (1 row) count ------- 162 (1 row) count ------- 114 (1 row) count ------- 98 (1 row) count ------- 142 (1 row) count ------- 88 (1 row) count ------- 101 (1 row) count ------- 157 (1 row) count ------- 17 (1 row) count ------- 113 (1 row) count ------- 163 (1 row) count ------- 56 (1 row) count ------- 24 (1 row) count ------- 177 (1 row) count ------- 75 (1 row) count ------- 112 (1 row) count ------- 120 (1 row) count ------- 91 (1 row) count ------- 214 (1 row) count ------- 64 (1 row) count ------- 92 (1 row) count ------- 161 (1 row) count ------- 169 (1 row) count ------- 158 (1 row) count ------- 24 (1 row) count ------- 119 (1 row) count ------- 241 (1 row) count ------- 56 (1 row) count ------- 104 (1 row) count ------- 118 (1 row) count ------- 14 (1 row) count ------- 36 (1 row) count ------- 7 (1 row) count ------- 48 (1 row) count ------- 205 (1 row) count ------- 171 (1 row) count ------- 88 (1 row) count ------- 223 (1 row) count ------- 265 (1 row) count ------- 6 (1 row) count ------- 279 (1 row) count ------- 52 (1 row) count ------- 127 (1 row) count ------- 155 (1 row) count ------- 129 (1 row) count ------- 101 (1 row) count ------- 109 (1 row) count ------- 151 (1 row) count ------- 215 (1 row) count ------- 81 (1 row) count ------- 209 (1 row) count ------- 122 (1 row) count ------- 94 (1 row) count ------- 31 (1 row) count ------- 100 (1 row) count ------- 144 (1 row) count ------- 148 (1 row) count ------- 78 (1 row) count ------- 26 (1 row) count ------- 73 (1 row) count ------- 118 (1 row) count ------- 112 (1 row) count ------- 89 (1 row) count ------- 42 (1 row) count ------- 101 (1 row) count ------- 202 (1 row) count ------- 140 (1 row) count ------- 56 (1 row) count ------- 37 (1 row) count ------- 103 (1 row) count ------- 25 (1 row) count ------- 25 (1 row) count ------- 116 (1 row) count ------- 163 (1 row) count ------- 73 (1 row) count ------- 147 (1 row) count ------- 129 (1 row) count ------- 15 (1 row) count ------- 27 (1 row) count ------- 1 (1 row) count ------- 11 (1 row) count ------- 141 (1 row) count ------- 109 (1 row) count ------- 119 (1 row) count ------- 167 (1 row) count ------- 144 (1 row) count ------- 103 (1 row) count ------- 57 (1 row) count ------- 79 (1 row) count ------- 269 (1 row) count ------- 113 (1 row) count ------- 22 (1 row) count ------- 175 (1 row) count ------- 20 (1 row) count ------- 77 (1 row) count ------- 177 (1 row) count ------- 38 (1 row) count ------- 204 (1 row) count ------- 195 (1 row) count ------- 238 (1 row) count ------- 286 (1 row) count ------- 271 (1 row) count ------- 33 (1 row) count ------- 160 (1 row) count ------- 3 (1 row) count ------- 125 (1 row) count ------- 222 (1 row) count ------- 140 (1 row) count ------- 41 (1 row) count ------- 52 (1 row) count ------- 20 (1 row) count ------- 165 (1 row) count ------- 54 (1 row) count ------- 103 (1 row) count ------- 64 (1 row) count ------- 109 (1 row) count ------- 83 (1 row) count ------- 65 (1 row) count ------- 99 (1 row) count ------- 135 (1 row) count ------- 154 (1 row) count ------- 107 (1 row) count ------- 128 (1 row) count ------- 142 (1 row) count ------- 29 (1 row) count ------- 279 (1 row) count ------- 116 (1 row) count ------- 86 (1 row) count ------- 136 (1 row) count ------- 121 (1 row) count ------- 46 (1 row) count ------- 252 (1 row) count ------- 153 (1 row) count ------- 14 (1 row) count ------- 145 (1 row) count ------- 123 (1 row) count ------- 263 (1 row) count ------- 50 (1 row) count ------- 182 (1 row) count ------- 157 (1 row) count ------- 72 (1 row) count ------- 165 (1 row) count ------- 57 (1 row) count ------- 13 (1 row) count ------- 129 (1 row) count ------- 18 (1 row) count ------- 153 (1 row) count ------- 142 (1 row) count ------- 87 (1 row) count ------- 145 (1 row) count ------- 103 (1 row) count ------- 91 (1 row) count ------- 14 (1 row) count ------- 221 (1 row) count ------- 18 (1 row) count ------- 254 (1 row) count ------- 70 (1 row) count ------- 13 (1 row) count ------- 175 (1 row) count ------- 27 (1 row) count ------- 143 (1 row) count ------- 266 (1 row) count ------- 252 (1 row) count ------- 187 (1 row) count ------- 223 (1 row) count ------- 25 (1 row) count ------- 206 (1 row) count ------- 7 (1 row) count ------- 128 (1 row) count ------- 125 (1 row) count ------- 84 (1 row) count ------- 125 (1 row) count ------- 162 (1 row) count ------- 161 (1 row) count ------- 199 (1 row) count ------- 63 (1 row) count ------- 162 (1 row) count ------- 15 (1 row) count ------- 28 (1 row) count ------- 59 (1 row) count ------- 178 (1 row) count ------- 127 (1 row) count ------- 130 (1 row) count ------- 203 (1 row) count ------- 31 (1 row) count ------- 113 (1 row) count ------- 30 (1 row) count ------- 108 (1 row) count ------- 168 (1 row) count ------- 202 (1 row) count ------- 70 (1 row) count ------- 171 (1 row) count ------- 235 (1 row) count ------- 55 (1 row) count ------- 269 (1 row) count ------- 217 (1 row) count ------- 172 (1 row) count ------- 104 (1 row) count ------- 139 (1 row) count ------- 163 (1 row) count ------- 50 (1 row) count ------- 176 (1 row) count ------- 255 (1 row) count ------- 23 (1 row) count ------- 137 (1 row) count ------- 138 (1 row) count ------- 240 (1 row) count ------- 45 (1 row) count ------- 195 (1 row) count ------- 196 (1 row) count ------- 17 (1 row) count ------- 208 (1 row) count ------- 99 (1 row) count ------- 9 (1 row) count ------- 177 (1 row) count ------- 95 (1 row) count ------- 333 (1 row) count ------- 84 (1 row) count ------- 122 (1 row) count ------- 43 (1 row) count ------- 109 (1 row) count ------- 149 (1 row) count ------- 106 (1 row) count ------- 175 (1 row) count ------- 84 (1 row) count ------- 113 (1 row) count ------- 154 (1 row) count ------- 116 (1 row) count ------- 180 (1 row) count ------- 143 (1 row) count ------- 267 (1 row) count ------- 252 (1 row) count ------- 184 (1 row) count ------- 71 (1 row) count ------- 129 (1 row) count ------- 111 (1 row) count ------- 295 (1 row) count ------- 111 (1 row) count ------- 155 (1 row) count ------- 133 (1 row) count ------- 152 (1 row) count ------- 28 (1 row) count ------- 152 (1 row) count ------- 277 (1 row) count ------- 17 (1 row) count ------- 69 (1 row) count ------- 6 (1 row) count ------- 66 (1 row) count ------- 132 (1 row) count ------- 144 (1 row) count ------- 85 (1 row) count ------- 111 (1 row) count ------- 68 (1 row) count ------- 132 (1 row) count ------- 55 (1 row) count ------- 309 (1 row) count ------- 149 (1 row) count ------- 169 (1 row) count ------- 149 (1 row) count ------- 68 (1 row) count ------- 97 (1 row) count ------- 172 (1 row) count ------- 112 (1 row) count ------- 48 (1 row) count ------- 94 (1 row) count ------- 87 (1 row) count ------- 132 (1 row) count ------- 34 (1 row) count ------- 95 (1 row) count ------- 18 (1 row) count ------- 233 (1 row) count ------- 97 (1 row) count ------- 141 (1 row) count ------- 235 (1 row) count ------- 146 (1 row) count ------- 44 (1 row) count ------- 157 (1 row) count ------- 238 (1 row) count ------- 137 (1 row) count ------- 103 (1 row) count ------- 187 (1 row) count ------- 227 (1 row) count ------- 70 (1 row) count ------- 131 (1 row) count ------- 114 (1 row) count ------- 115 (1 row) count ------- 207 (1 row) count ------- 259 (1 row) count ------- 73 (1 row) count ------- 113 (1 row) count ------- 226 (1 row) count ------- 184 (1 row) count ------- 303 (1 row) count ------- 105 (1 row) count ------- 146 (1 row) count ------- 163 (1 row) count ------- 55 (1 row) count ------- 191 (1 row) count ------- 149 (1 row) count ------- 156 (1 row) count ------- 81 (1 row) count ------- 56 (1 row) count ------- 211 (1 row) count ------- 82 (1 row) count ------- 243 (1 row) count ------- 50 (1 row) count ------- 118 (1 row) count ------- 65 (1 row) count ------- 255 (1 row) count ------- 119 (1 row) count ------- 104 (1 row) count ------- 249 (1 row) count ------- 215 (1 row) count ------- 88 (1 row) count ------- 19 (1 row) count ------- 189 (1 row) count ------- 103 (1 row) count ------- 63 (1 row) count ------- 126 (1 row) count ------- 19 (1 row) count ------- 63 (1 row) count ------- 31 (1 row) count ------- 140 (1 row) count ------- 105 (1 row) count ------- 103 (1 row) count ------- 185 (1 row) count ------- 104 (1 row) count ------- 83 (1 row) count ------- 148 (1 row) count ------- 139 (1 row) count ------- 157 (1 row) count ------- 31 (1 row) count ------- 18 (1 row) count ------- 30 (1 row) count ------- 140 (1 row) count ------- 51 (1 row) count ------- 146 (1 row) count ------- 191 (1 row) count ------- 7 (1 row) count ------- 134 (1 row) count ------- 290 (1 row) count ------- 128 (1 row) count ------- 154 (1 row) count ------- 99 (1 row) count ------- 269 (1 row) count ------- 107 (1 row) count ------- 141 (1 row) count ------- 140 (1 row) count ------- 213 (1 row) count ------- 194 (1 row) count ------- 68 (1 row) count ------- 16 (1 row) count ------- 84 (1 row) count ------- 58 (1 row) count ------- 70 (1 row) count ------- 131 (1 row) count ------- 69 (1 row) count ------- 184 (1 row) count ------- 47 (1 row) count ------- 12 (1 row) count ------- 160 (1 row) count ------- 174 (1 row) count ------- 108 (1 row) count ------- 201 (1 row) count ------- 74 (1 row) count ------- 12 (1 row) count ------- 192 (1 row) count ------- 190 (1 row) count ------- 114 (1 row) count ------- 239 (1 row) count ------- 141 (1 row) count ------- 131 (1 row) count ------- 32 (1 row) count ------- 65 (1 row) count ------- 100 (1 row) count ------- 138 (1 row) count ------- 124 (1 row) count ------- 212 (1 row) count ------- 143 (1 row) count ------- 74 (1 row) count ------- 199 (1 row) count ------- 129 (1 row) count ------- 0 (1 row) count ------- 45 (1 row) count ------- 16 (1 row) count ------- 60 (1 row) count ------- 153 (1 row) count ------- 252 (1 row) count ------- 83 (1 row) count ------- 299 (1 row) count ------- 134 (1 row) count ------- 81 (1 row) count ------- 25 (1 row) count ------- 77 (1 row) count ------- 163 (1 row) count ------- 9 (1 row) count ------- 127 (1 row) count ------- 277 (1 row) count ------- 48 (1 row) count ------- 106 (1 row) count ------- 61 (1 row) count ------- 183 (1 row) count ------- 89 (1 row) count ------- 125 (1 row) count ------- 192 (1 row) count ------- 168 (1 row) count ------- 136 (1 row) count ------- 162 (1 row) count ------- 79 (1 row) count ------- 119 (1 row) count ------- 104 (1 row) count ------- 16 (1 row) count ------- 202 (1 row) count ------- 44 (1 row) count ------- 108 (1 row) count ------- 86 (1 row) count ------- 243 (1 row) count ------- 68 (1 row) count ------- 23 (1 row) count ------- 168 (1 row) count ------- 127 (1 row) count ------- 136 (1 row) count ------- 40 (1 row) count ------- 103 (1 row) count ------- 210 (1 row) count ------- 43 (1 row) count ------- 34 (1 row) count ------- 16 (1 row) count ------- 89 (1 row) count ------- 47 (1 row) count ------- 188 (1 row) count ------- 127 (1 row) count ------- 1 (1 row) count ------- 97 (1 row) count ------- 336 (1 row) count ------- 170 (1 row) count ------- 193 (1 row) count ------- 123 (1 row) count ------- 110 (1 row) count ------- 165 (1 row) count ------- 111 (1 row) count ------- 229 (1 row) count ------- 68 (1 row) count ------- 188 (1 row) count ------- 98 (1 row) count ------- 106 (1 row) count ------- 65 (1 row) count ------- 141 (1 row) count ------- 242 (1 row) count ------- 122 (1 row) count ------- 109 (1 row) count ------- 103 (1 row) count ------- 66 (1 row) count ------- 259 (1 row) count ------- 41 (1 row) count ------- 27 (1 row) count ------- 153 (1 row) count ------- 76 (1 row) count ------- 11 (1 row) count ------- 38 (1 row) count ------- 241 (1 row) count ------- 103 (1 row) count ------- 31 (1 row) count ------- 122 (1 row) count ------- 53 (1 row) count ------- 219 (1 row) count ------- 78 (1 row) count ------- 141 (1 row) count ------- 77 (1 row) count ------- 99 (1 row) count ------- 38 (1 row) count ------- 171 (1 row) count ------- 6 (1 row) count ------- 258 (1 row) count ------- 72 (1 row) count ------- 166 (1 row) count ------- 75 (1 row) count ------- 138 (1 row) count ------- 271 (1 row) count ------- 82 (1 row) count ------- 88 (1 row) count ------- 111 (1 row) count ------- 135 (1 row) count ------- 75 (1 row) count ------- 99 (1 row) count ------- 39 (1 row) count ------- 60 (1 row) count ------- 86 (1 row) count ------- 100 (1 row) count ------- 311 (1 row) count ------- 152 (1 row) count ------- 288 (1 row) count ------- 96 (1 row) count ------- 53 (1 row) count ------- 225 (1 row) count ------- 120 (1 row) count ------- 35 (1 row) count ------- 28 (1 row) count ------- 285 (1 row) count ------- 244 (1 row) count ------- 99 (1 row) count ------- 73 (1 row) count ------- 130 (1 row) count ------- 85 (1 row) count ------- 196 (1 row) count ------- 89 (1 row) count ------- 6 (1 row) count ------- 75 (1 row) count ------- 149 (1 row) count ------- 34 (1 row) count ------- 9 (1 row) count ------- 52 (1 row) count ------- 10 (1 row) count ------- 141 (1 row) count ------- 105 (1 row) count ------- 92 (1 row) count ------- 192 (1 row) count ------- 49 (1 row) count ------- 103 (1 row) count ------- 54 (1 row) count ------- 238 (1 row) count ------- 216 (1 row) count ------- 157 (1 row) count ------- 236 (1 row) count ------- 165 (1 row) count ------- 132 (1 row) count ------- 317 (1 row) count ------- 246 (1 row) count ------- 102 (1 row) count ------- 48 (1 row) count ------- 175 (1 row) count ------- 99 (1 row) count ------- 186 (1 row) count ------- 178 (1 row) count ------- 33 (1 row) count ------- 44 (1 row) count ------- 93 (1 row) count ------- 104 (1 row) count ------- 247 (1 row) count ------- 48 (1 row) count ------- 164 (1 row) count ------- 119 (1 row) count ------- 148 (1 row) count ------- 126 (1 row) count ------- 127 (1 row) count ------- 98 (1 row) count ------- 111 (1 row) count ------- 112 (1 row) count ------- 46 (1 row) count ------- 141 (1 row) count ------- 141 (1 row) count ------- 116 (1 row) count ------- 48 (1 row) count ------- 250 (1 row) count ------- 106 (1 row) count ------- 191 (1 row) count ------- 175 (1 row) count ------- 144 (1 row) count ------- 106 (1 row) count ------- 259 (1 row) count ------- 269 (1 row) count ------- 117 (1 row) count ------- 258 (1 row) count ------- 265 (1 row) count ------- 110 (1 row) count ------- 116 (1 row) count ------- 99 (1 row) count ------- 12 (1 row) count ------- 221 (1 row) count ------- 42 (1 row) count ------- 55 (1 row) count ------- 199 (1 row) count ------- 138 (1 row) count ------- 56 (1 row) count ------- 145 (1 row) count ------- 73 (1 row) count ------- 82 (1 row) count ------- 71 (1 row) count ------- 43 (1 row) count ------- 196 (1 row) count ------- 84 (1 row) count ------- 43 (1 row) count ------- 177 (1 row) count ------- 112 (1 row) count ------- 150 (1 row) count ------- 30 (1 row) count ------- 171 (1 row) count ------- 111 (1 row) count ------- 126 (1 row) count ------- 200 (1 row) count ------- 96 (1 row) count ------- 35 (1 row) count ------- 98 (1 row) count ------- 82 (1 row) count ------- 12 (1 row) count ------- 19 (1 row) count ------- 117 (1 row) count ------- 154 (1 row) count ------- 48 (1 row) count ------- 18 (1 row) count ------- 194 (1 row) count ------- 77 (1 row) count ------- 194 (1 row) count ------- 39 (1 row) count ------- 111 (1 row) count ------- 25 (1 row) count ------- 16 (1 row) count ------- 60 (1 row) count ------- 38 (1 row) count ------- 96 (1 row) count ------- 42 (1 row) count ------- 75 (1 row) count ------- 78 (1 row) count ------- 202 (1 row) count ------- 213 (1 row) count ------- 132 (1 row) count ------- 179 (1 row) count ------- 88 (1 row) count ------- 153 (1 row) count ------- 207 (1 row) count ------- 204 (1 row) count ------- 211 (1 row) count ------- 28 (1 row) count ------- 200 (1 row) count ------- 103 (1 row) count ------- 100 (1 row) count ------- 74 (1 row) count ------- 258 (1 row) count ------- 117 (1 row) count ------- 188 (1 row) count ------- 201 (1 row) count ------- 130 (1 row) count ------- 362 (1 row) count ------- 81 (1 row) count ------- 56 (1 row) count ------- 279 (1 row) count ------- 282 (1 row) count ------- 171 (1 row) count ------- 174 (1 row) count ------- 138 (1 row) count ------- 138 (1 row) count ------- 118 (1 row) count ------- 94 (1 row) count ------- 64 (1 row) count ------- 201 (1 row) count ------- 74 (1 row) count ------- 142 (1 row) count ------- 180 (1 row) count ------- 111 (1 row) count ------- 128 (1 row) count ------- 52 (1 row) count ------- 65 (1 row) count ------- 46 (1 row) count ------- 155 (1 row) count ------- 84 (1 row) count ------- 151 (1 row) count ------- 47 (1 row) count ------- 38 (1 row) count ------- 278 (1 row) count ------- 104 (1 row) count ------- 60 (1 row) count ------- 76 (1 row) count ------- 186 (1 row) count ------- 189 (1 row) count ------- 98 (1 row) count ------- 106 (1 row) count ------- 144 (1 row) count ------- 68 (1 row) count ------- 105 (1 row) count ------- 235 (1 row) count ------- 126 (1 row) count ------- 57 (1 row) count ------- 193 (1 row) count ------- 181 (1 row) count ------- 116 (1 row) count ------- 275 (1 row) count ------- 277 (1 row) count ------- 174 (1 row) count ------- 10 (1 row) count ------- 8 (1 row) count ------- 112 (1 row) count ------- 79 (1 row) count ------- 121 (1 row) count ------- 221 (1 row) count ------- 94 (1 row) count ------- 145 (1 row) count ------- 146 (1 row) count ------- 150 (1 row) count ------- 323 (1 row) count ------- 149 (1 row) count ------- 120 (1 row) count ------- 69 (1 row) count ------- 88 (1 row) count ------- 154 (1 row) count ------- 32 (1 row) count ------- 154 (1 row) count ------- 120 (1 row) count ------- 74 (1 row) count ------- 61 (1 row) count ------- 54 (1 row) count ------- 127 (1 row) count ------- 8 (1 row) count ------- 301 (1 row) count ------- 132 (1 row) count ------- 214 (1 row) count ------- 136 (1 row) count ------- 254 (1 row) count ------- 77 (1 row) count ------- 260 (1 row) count ------- 138 (1 row) count ------- 164 (1 row) count ------- 136 (1 row) count ------- 169 (1 row) count ------- 82 (1 row) count ------- 178 (1 row) count ------- 142 (1 row) count ------- 186 (1 row) count ------- 0 (1 row) count ------- 200 (1 row) count ------- 108 (1 row) count ------- 91 (1 row) count ------- 37 (1 row) count ------- 206 (1 row) count ------- 167 (1 row) count ------- 52 (1 row) count ------- 191 (1 row) count ------- 283 (1 row) count ------- 164 (1 row) count ------- 254 (1 row) count ------- 197 (1 row) count ------- 135 (1 row) count ------- 73 (1 row) count ------- 41 (1 row) count ------- 51 (1 row) count ------- 72 (1 row) count ------- 138 (1 row) count ------- 79 (1 row) count ------- 54 (1 row) count ------- 69 (1 row) count ------- 213 (1 row) count ------- 164 (1 row) count ------- 92 (1 row) count ------- 14 (1 row) count ------- 13 (1 row) count ------- 236 (1 row) count ------- 137 (1 row) count ------- 127 (1 row) count ------- 154 (1 row) count ------- 210 (1 row) count ------- 47 (1 row) count ------- 197 (1 row) count ------- 249 (1 row) count ------- 72 (1 row) count ------- 101 (1 row) count ------- 178 (1 row) count ------- 55 (1 row) count ------- 18 (1 row) count ------- 61 (1 row) count ------- 378 (1 row) count ------- 102 (1 row) count ------- 66 (1 row) count ------- 93 (1 row) count ------- 127 (1 row) count ------- 225 (1 row) count ------- 105 (1 row) count ------- 46 (1 row) count ------- 177 (1 row) count ------- 147 (1 row) count ------- 7 (1 row) count ------- 205 (1 row) count ------- 89 (1 row) count ------- 157 (1 row) count ------- 102 (1 row) count ------- 117 (1 row) count ------- 134 (1 row) count ------- 131 (1 row) count ------- 75 (1 row) count ------- 73 (1 row) count ------- 69 (1 row) count ------- 121 (1 row) count ------- 163 (1 row) count ------- 10 (1 row) count ------- 26 (1 row) count ------- 94 (1 row) count ------- 5 (1 row) count ------- 116 (1 row) count ------- 120 (1 row) count ------- 157 (1 row) count ------- 31 (1 row) count ------- 96 (1 row) count ------- 98 (1 row) count ------- 71 (1 row) count ------- 47 (1 row) count ------- 125 (1 row) count ------- 1 (1 row) count ------- 142 (1 row) count ------- 145 (1 row) count ------- 154 (1 row) count ------- 95 (1 row) count ------- 64 (1 row) count ------- 127 (1 row) count ------- 212 (1 row) count ------- 135 (1 row) count ------- 267 (1 row) count ------- 164 (1 row) count ------- 130 (1 row) count ------- 94 (1 row) count ------- 46 (1 row) count ------- 173 (1 row) count ------- 88 (1 row) count ------- 131 (1 row) count ------- 214 (1 row) count ------- 219 (1 row) count ------- 9 (1 row) count ------- 134 (1 row) count ------- 125 (1 row) count ------- 16 (1 row) count ------- 110 (1 row) count ------- 31 (1 row) count ------- 231 (1 row) count ------- 123 (1 row) count ------- 47 (1 row) count ------- 170 (1 row) count ------- 10 (1 row) count ------- 166 (1 row) count ------- 190 (1 row) count ------- 100 (1 row) count ------- 126 (1 row) count ------- 94 (1 row) count ------- 79 (1 row) count ------- 94 (1 row) count ------- 185 (1 row) count ------- 219 (1 row) count ------- 52 (1 row) count ------- 209 (1 row) count ------- 141 (1 row) count ------- 258 (1 row) count ------- 113 (1 row) count ------- 102 (1 row) count ------- 16 (1 row) count ------- 116 (1 row) count ------- 292 (1 row) count ------- 98 (1 row) count ------- 49 (1 row) count ------- 93 (1 row) count ------- 89 (1 row) count ------- 169 (1 row) count ------- 190 (1 row) count ------- 49 (1 row) count ------- 203 (1 row) count ------- 165 (1 row) count ------- 16 (1 row) count ------- 149 (1 row) count ------- 359 (1 row) count ------- 186 (1 row) count ------- 105 (1 row) count ------- 31 (1 row) count ------- 206 (1 row) count ------- 256 (1 row) count ------- 256 (1 row) count ------- 166 (1 row) count ------- 103 (1 row) count ------- 85 (1 row) count ------- 139 (1 row) count ------- 93 (1 row) count ------- 199 (1 row) count ------- 70 (1 row) count ------- 218 (1 row) count ------- 36 (1 row) count ------- 66 (1 row) count ------- 175 (1 row) count ------- 153 (1 row) count ------- 204 (1 row) count ------- 257 (1 row) count ------- 3 (1 row) count ------- 161 (1 row) count ------- 232 (1 row) count ------- 48 (1 row) count ------- 200 (1 row) count ------- 94 (1 row) count ------- 303 (1 row) count ------- 209 (1 row) count ------- 133 (1 row) count ------- 151 (1 row) count ------- 150 (1 row) count ------- 210 (1 row) count ------- 165 (1 row) count ------- 89 (1 row) count ------- 38 (1 row) count ------- 19 (1 row) count ------- 94 (1 row) count ------- 47 (1 row) count ------- 139 (1 row) count ------- 301 (1 row) count ------- 77 (1 row) count ------- 23 (1 row) count ------- 57 (1 row) count ------- 11 (1 row) count ------- 156 (1 row) count ------- 195 (1 row) count ------- 177 (1 row) count ------- 147 (1 row) count ------- 151 (1 row) count ------- 112 (1 row) count ------- 139 (1 row) count ------- 112 (1 row) count ------- 179 (1 row) count ------- 156 (1 row) count ------- 75 (1 row) count ------- 53 (1 row) count ------- 115 (1 row) count ------- 91 (1 row) count ------- 187 (1 row) count ------- 16 (1 row) count ------- 90 (1 row) count ------- 100 (1 row) count ------- 110 (1 row) count ------- 50 (1 row) count ------- 160 (1 row) count ------- 182 (1 row) count ------- 152 (1 row) count ------- 257 (1 row) count ------- 63 (1 row) count ------- 80 (1 row) count ------- 120 (1 row) count ------- 153 (1 row) count ------- 61 (1 row) count ------- 210 (1 row) count ------- 188 (1 row) count ------- 36 (1 row) count ------- 129 (1 row) count ------- 180 (1 row) count ------- 35 (1 row) count ------- 164 (1 row) count ------- 16 (1 row) count ------- 230 (1 row) count ------- 211 (1 row) count ------- 114 (1 row) count ------- 115 (1 row) count ------- 54 (1 row) count ------- 184 (1 row) count ------- 181 (1 row) count ------- 72 (1 row) count ------- 120 (1 row) count ------- 114 (1 row) count ------- 26 (1 row) count ------- 317 (1 row) count ------- 26 (1 row) count ------- 254 (1 row) count ------- 134 (1 row) count ------- 152 (1 row) count ------- 27 (1 row) count ------- 124 (1 row) count ------- 131 (1 row) count ------- 99 (1 row) count ------- 55 (1 row) count ------- 148 (1 row) count ------- 168 (1 row) count ------- 0 (1 row) count ------- 198 (1 row) count ------- 27 (1 row) count ------- 139 (1 row) count ------- 63 (1 row) count ------- 154 (1 row) count ------- 12 (1 row) count ------- 74 (1 row) count ------- 62 (1 row) count ------- 36 (1 row) count ------- 50 (1 row) count ------- 161 (1 row) count ------- 122 (1 row) count ------- 58 (1 row) count ------- 111 (1 row) count ------- 44 (1 row) count ------- 238 (1 row) count ------- 190 (1 row) count ------- 19 (1 row) count ------- 185 (1 row) count ------- 145 (1 row) count ------- 36 (1 row) count ------- 75 (1 row) count ------- 98 (1 row) count ------- 71 (1 row) count ------- 175 (1 row) count ------- 21 (1 row) count ------- 64 (1 row) count ------- 214 (1 row) count ------- 231 (1 row) count ------- 53 (1 row) count ------- 303 (1 row) count ------- 178 (1 row) count ------- 51 (1 row) count ------- 247 (1 row) count ------- 83 (1 row) count ------- 68 (1 row) count ------- 107 (1 row) count ------- 160 (1 row) count ------- 171 (1 row) count ------- 80 (1 row) count ------- 105 (1 row) count ------- 78 (1 row) count ------- 31 (1 row) count ------- 18 (1 row) count ------- 137 (1 row) count ------- 155 (1 row) count ------- 101 (1 row) count ------- 29 (1 row) count ------- 68 (1 row) count ------- 148 (1 row) count ------- 244 (1 row) count ------- 205 (1 row) count ------- 129 (1 row) count ------- 175 (1 row) count ------- 201 (1 row) count ------- 119 (1 row) count ------- 9 (1 row) count ------- 123 (1 row) count ------- 35 (1 row) count ------- 45 (1 row) count ------- 155 (1 row) count ------- 63 (1 row) count ------- 44 (1 row) count ------- 212 (1 row) count ------- 12 (1 row) count ------- 172 (1 row) count ------- 76 (1 row) count ------- 106 (1 row) count ------- 0 (1 row) count ------- 39 (1 row) count ------- 44 (1 row) count ------- 95 (1 row) count ------- 89 (1 row) count ------- 156 (1 row) count ------- 5 (1 row) count ------- 263 (1 row) count ------- 141 (1 row) count ------- 37 (1 row) count ------- 61 (1 row) count ------- 77 (1 row) count ------- 176 (1 row) count ------- 111 (1 row) count ------- 59 (1 row) count ------- 93 (1 row) count ------- 114 (1 row) count ------- 141 (1 row) count ------- 24 (1 row) count ------- 226 (1 row) count ------- 116 (1 row) count ------- 135 (1 row) count ------- 173 (1 row) count ------- 103 (1 row) count ------- 116 (1 row) count ------- 182 (1 row) count ------- 107 (1 row) count ------- 163 (1 row) count ------- 64 (1 row) count ------- 129 (1 row) count ------- 32 (1 row) count ------- 241 (1 row) count ------- 169 (1 row) count ------- 44 (1 row) count ------- 278 (1 row) count ------- 289 (1 row) count ------- 82 (1 row) count ------- 96 (1 row) count ------- 118 (1 row) count ------- 0 (1 row) count ------- 115 (1 row) count ------- 163 (1 row) count ------- 62 (1 row) count ------- 206 (1 row) count ------- 61 (1 row) count ------- 17 (1 row) count ------- 17 (1 row) count ------- 201 (1 row) count ------- 46 (1 row) count ------- 42 (1 row) count ------- 84 (1 row) count ------- 72 (1 row) count ------- 120 (1 row) count ------- 130 (1 row) count ------- 36 (1 row) count ------- 217 (1 row) count ------- 176 (1 row) count ------- 109 (1 row) count ------- 119 (1 row) count ------- 156 (1 row) count ------- 245 (1 row) count ------- 134 (1 row) count ------- 15 (1 row) count ------- 18 (1 row) count ------- 194 (1 row) count ------- 65 (1 row) count ------- 195 (1 row) count ------- 178 (1 row) count ------- 131 (1 row) count ------- 66 (1 row) count ------- 101 (1 row) count ------- 174 (1 row) count ------- 72 (1 row) count ------- 16 (1 row) count ------- 205 (1 row) count ------- 18 (1 row) count ------- 198 (1 row) count ------- 17 (1 row) count ------- 6 (1 row) count ------- 71 (1 row) count ------- 174 (1 row) count ------- 0 (1 row) count ------- 223 (1 row) count ------- 44 (1 row) count ------- 126 (1 row) count ------- 166 (1 row) count ------- 63 (1 row) count ------- 201 (1 row) count ------- 171 (1 row) count ------- 21 (1 row) count ------- 299 (1 row) count ------- 70 (1 row) count ------- 219 (1 row) count ------- 85 (1 row) count ------- 104 (1 row) count ------- 87 (1 row) count ------- 55 (1 row) count ------- 24 (1 row) count ------- 95 (1 row) count ------- 171 (1 row) count ------- 141 (1 row) count ------- 214 (1 row) count ------- 22 (1 row) count ------- 207 (1 row) count ------- 79 (1 row) count ------- 24 (1 row) count ------- 137 (1 row) count ------- 90 (1 row) count ------- 131 (1 row) count ------- 326 (1 row) count ------- 213 (1 row) count ------- 184 (1 row) count ------- 66 (1 row) count ------- 112 (1 row) count ------- 146 (1 row) count ------- 66 (1 row) count ------- 91 (1 row) count ------- 193 (1 row) count ------- 95 (1 row) count ------- 136 (1 row) count ------- 15 (1 row) count ------- 164 (1 row) count ------- 42 (1 row) count ------- 138 (1 row) count ------- 90 (1 row) count ------- 85 (1 row) count ------- 40 (1 row) count ------- 67 (1 row) count ------- 49 (1 row) count ------- 319 (1 row) count ------- 169 (1 row) count ------- 122 (1 row) count ------- 136 (1 row) count ------- 92 (1 row) count ------- 134 (1 row) count ------- 262 (1 row) count ------- 80 (1 row) count ------- 173 (1 row) count ------- 58 (1 row) count ------- 114 (1 row) count ------- 252 (1 row) count ------- 178 (1 row) count ------- 187 (1 row) count ------- 161 (1 row) count ------- 149 (1 row) count ------- 59 (1 row) count ------- 121 (1 row) count ------- 20 (1 row) count ------- 4 (1 row) count ------- 92 (1 row) count ------- 119 (1 row) count ------- 119 (1 row) count ------- 191 (1 row) count ------- 101 (1 row) count ------- 168 (1 row) count ------- 110 (1 row) count ------- 78 (1 row) count ------- 20 (1 row) count ------- 13 (1 row) count ------- 112 (1 row) count ------- 228 (1 row) count ------- 103 (1 row) count ------- 194 (1 row) count ------- 276 (1 row) count ------- 126 (1 row) count ------- 11 (1 row) count ------- 156 (1 row) count ------- 32 (1 row) count ------- 70 (1 row) count ------- 164 (1 row) count ------- 199 (1 row) count ------- 98 (1 row) count ------- 105 (1 row) count ------- 250 (1 row) count ------- 47 (1 row) count ------- 73 (1 row) count ------- 178 (1 row) count ------- 12 (1 row) count ------- 51 (1 row) count ------- 0 (1 row) count ------- 117 (1 row) count ------- 136 (1 row) count ------- 142 (1 row) count ------- 60 (1 row) count ------- 51 (1 row) count ------- 47 (1 row) count ------- 192 (1 row) count ------- 84 (1 row) count ------- 180 (1 row) count ------- 217 (1 row) count ------- 167 (1 row) count ------- 111 (1 row) count ------- 102 (1 row) count ------- 126 (1 row) count ------- 68 (1 row) count ------- 44 (1 row) count ------- 160 (1 row) count ------- 102 (1 row) count ------- 98 (1 row) count ------- 92 (1 row) count ------- 87 (1 row) count ------- 107 (1 row) count ------- 195 (1 row) count ------- 86 (1 row) count ------- 190 (1 row) count ------- 137 (1 row) count ------- 113 (1 row) count ------- 115 (1 row) count ------- 69 (1 row) count ------- 4 (1 row) count ------- 76 (1 row) count ------- 12 (1 row) count ------- 112 (1 row) count ------- 65 (1 row) count ------- 174 (1 row) count ------- 269 (1 row) count ------- 0 (1 row) count ------- 241 (1 row) count ------- 172 (1 row) count ------- 58 (1 row) count ------- 140 (1 row) count ------- 23 (1 row) count ------- 108 (1 row) count ------- 321 (1 row) count ------- 39 (1 row) count ------- 61 (1 row) count ------- 143 (1 row) count ------- 135 (1 row) count ------- 75 (1 row) count ------- 181 (1 row) count ------- 116 (1 row) count ------- 212 (1 row) count ------- 76 (1 row) count ------- 24 (1 row) count ------- 47 (1 row) count ------- 229 (1 row) count ------- 161 (1 row) count ------- 43 (1 row) count ------- 73 (1 row) count ------- 48 (1 row) count ------- 88 (1 row) count ------- 123 (1 row) count ------- 122 (1 row) count ------- 124 (1 row) count ------- 267 (1 row) count ------- 33 (1 row) count ------- 233 (1 row) count ------- 189 (1 row) count ------- 217 (1 row) count ------- 24 (1 row) count ------- 103 (1 row) count ------- 77 (1 row) count ------- 16 (1 row) count ------- 260 (1 row) count ------- 176 (1 row) count ------- 200 (1 row) count ------- 3 (1 row) count ------- 92 (1 row) count ------- 73 (1 row) count ------- 155 (1 row) count ------- 144 (1 row) count ------- 309 (1 row) count ------- 156 (1 row) count ------- 132 (1 row) count ------- 204 (1 row) count ------- 68 (1 row) count ------- 111 (1 row) count ------- 197 (1 row) count ------- 150 (1 row) count ------- 132 (1 row) count ------- 210 (1 row) count ------- 170 (1 row) count ------- 122 (1 row) count ------- 154 (1 row) count ------- 29 (1 row) count ------- 148 (1 row) count ------- 99 (1 row) count ------- 174 (1 row) count ------- 252 (1 row) count ------- 68 (1 row) count ------- 179 (1 row) count ------- 127 (1 row) count ------- 71 (1 row) count ------- 154 (1 row) count ------- 78 (1 row) count ------- 35 (1 row) count ------- 58 (1 row) count ------- 181 (1 row) count ------- 167 (1 row) count ------- 197 (1 row) count ------- 116 (1 row) count ------- 110 (1 row) count ------- 151 (1 row) count ------- 129 (1 row) count ------- 106 (1 row) count ------- 68 (1 row) count ------- 160 (1 row) count ------- 182 (1 row) count ------- 134 (1 row) count ------- 51 (1 row) count ------- 105 (1 row) count ------- 33 (1 row) count ------- 73 (1 row) count ------- 230 (1 row) count ------- 52 (1 row) count ------- 142 (1 row) count ------- 245 (1 row) count ------- 70 (1 row) count ------- 15 (1 row) count ------- 131 (1 row) count ------- 119 (1 row) count ------- 105 (1 row) count ------- 129 (1 row) count ------- 34 (1 row) count ------- 86 (1 row) count ------- 202 (1 row) count ------- 69 (1 row) count ------- 87 (1 row) count ------- 244 (1 row) count ------- 46 (1 row) count ------- 108 (1 row) count ------- 71 (1 row) count ------- 197 (1 row) count ------- 64 (1 row) count ------- 67 (1 row) count ------- 287 (1 row) count ------- 42 (1 row) count ------- 166 (1 row) count ------- 212 (1 row) count ------- 110 (1 row) count ------- 19 (1 row) count ------- 223 (1 row) count ------- 45 (1 row) count ------- 190 (1 row) count ------- 87 (1 row) count ------- 92 (1 row) count ------- 169 (1 row) count ------- 153 (1 row) count ------- 31 (1 row) count ------- 188 (1 row) count ------- 89 (1 row) count ------- 94 (1 row) count ------- 107 (1 row) count ------- 64 (1 row) count ------- 118 (1 row) count ------- 412 (1 row) count ------- 113 (1 row) count ------- 86 (1 row) count ------- 177 (1 row) count ------- 115 (1 row) count ------- 82 (1 row) count ------- 142 (1 row) count ------- 188 (1 row) count ------- 83 (1 row) count ------- 198 (1 row) count ------- 73 (1 row) count ------- 120 (1 row) count ------- 148 (1 row) count ------- 282 (1 row) count ------- 84 (1 row) count ------- 319 (1 row) count ------- 250 (1 row) count ------- 279 (1 row) count ------- 263 (1 row) count ------- 126 (1 row) count ------- 26 (1 row) count ------- 205 (1 row) count ------- 367 (1 row) count ------- 2 (1 row) count ------- 97 (1 row) count ------- 282 (1 row) count ------- 186 (1 row) count ------- 218 (1 row) count ------- 43 (1 row) count ------- 145 (1 row) count ------- 38 (1 row) count ------- 8 (1 row) count ------- 129 (1 row) count ------- 150 (1 row) count ------- 174 (1 row) count ------- 90 (1 row) count ------- 282 (1 row) count ------- 95 (1 row) count ------- 65 (1 row) count ------- 173 (1 row) count ------- 93 (1 row) count ------- 206 (1 row) count ------- 174 (1 row) count ------- 26 (1 row) count ------- 254 (1 row) count ------- 161 (1 row) count ------- 112 (1 row) count ------- 19 (1 row) count ------- 120 (1 row) count ------- 38 (1 row) count ------- 160 (1 row) count ------- 177 (1 row) count ------- 95 (1 row) count ------- 139 (1 row) count ------- 110 (1 row) count ------- 337 (1 row) count ------- 16 (1 row) count ------- 198 (1 row) count ------- 55 (1 row) count ------- 104 (1 row) count ------- 138 (1 row) count ------- 11 (1 row) count ------- 77 (1 row) count ------- 42 (1 row) count ------- 140 (1 row) count ------- 29 (1 row) count ------- 45 (1 row) count ------- 139 (1 row) count ------- 45 (1 row) count ------- 133 (1 row) count ------- 227 (1 row) count ------- 109 (1 row) count ------- 106 (1 row) count ------- 15 (1 row) count ------- 110 (1 row) count ------- 68 (1 row) count ------- 127 (1 row) count ------- 227 (1 row) count ------- 118 (1 row) count ------- 23 (1 row) count ------- 149 (1 row) count ------- 136 (1 row) count ------- 68 (1 row) count ------- 46 (1 row) count ------- 103 (1 row) count ------- 35 (1 row) count ------- 85 (1 row) count ------- 157 (1 row) count ------- 48 (1 row) count ------- 204 (1 row) count ------- 208 (1 row) count ------- 112 (1 row) count ------- 13 (1 row) count ------- 70 (1 row) count ------- 131 (1 row) count ------- 130 (1 row) count ------- 60 (1 row) count ------- 85 (1 row) count ------- 68 (1 row) count ------- 96 (1 row) count ------- 190 (1 row) count ------- 83 (1 row) count ------- 17 (1 row) count ------- 8 (1 row) count ------- 138 (1 row) count ------- 138 (1 row) count ------- 167 (1 row) count ------- 63 (1 row) count ------- 237 (1 row) count ------- 39 (1 row) count ------- 43 (1 row) count ------- 119 (1 row) count ------- 76 (1 row) count ------- 89 (1 row) count ------- 106 (1 row) count ------- 196 (1 row) count ------- 192 (1 row) count ------- 139 (1 row) count ------- 35 (1 row) count ------- 163 (1 row) count ------- 209 (1 row) count ------- 306 (1 row) count ------- 158 (1 row) count ------- 129 (1 row) count ------- 67 (1 row) count ------- 227 (1 row) count ------- 92 (1 row) count ------- 27 (1 row) count ------- 66 (1 row) count ------- 4 (1 row) count ------- 88 (1 row) count ------- 185 (1 row) count ------- 81 (1 row) count ------- 120 (1 row) count ------- 98 (1 row) count ------- 73 (1 row) count ------- 27 (1 row) count ------- 21 (1 row) count ------- 94 (1 row) count ------- 258 (1 row) count ------- 167 (1 row) count ------- 112 (1 row) count ------- 29 (1 row) count ------- 150 (1 row) count ------- 143 (1 row) count ------- 53 (1 row) count ------- 243 (1 row) count ------- 108 (1 row) count ------- 72 (1 row) count ------- 247 (1 row) count ------- 35 (1 row) count ------- 291 (1 row) count ------- 65 (1 row) count ------- 148 (1 row) count ------- 165 (1 row) count ------- 160 (1 row) count ------- 306 (1 row) count ------- 144 (1 row) count ------- 48 (1 row) count ------- 59 (1 row) count ------- 156 (1 row) count ------- 177 (1 row) count ------- 108 (1 row) count ------- 124 (1 row) count ------- 98 (1 row) count ------- 71 (1 row) count ------- 50 (1 row) count ------- 193 (1 row) count ------- 120 (1 row) count ------- 129 (1 row) count ------- 65 (1 row) count ------- 206 (1 row) count ------- 154 (1 row) count ------- 127 (1 row) count ------- 124 (1 row) count ------- 50 (1 row) count ------- 73 (1 row) count ------- 72 (1 row) count ------- 67 (1 row) count ------- 90 (1 row) count ------- 30 (1 row) count ------- 28 (1 row) count ------- 108 (1 row) count ------- 133 (1 row) count ------- 132 (1 row) count ------- 145 (1 row) count ------- 155 (1 row) count ------- 152 (1 row) count ------- 236 (1 row) count ------- 49 (1 row) count ------- 296 (1 row) count ------- 200 (1 row) count ------- 286 (1 row) count ------- 219 (1 row) count ------- 110 (1 row) count ------- 130 (1 row) count ------- 160 (1 row) count ------- 204 (1 row) count ------- 126 (1 row) count ------- 65 (1 row) count ------- 178 (1 row) count ------- 183 (1 row) count ------- 172 (1 row) count ------- 260 (1 row) count ------- 86 (1 row) count ------- 143 (1 row) count ------- 108 (1 row) count ------- 159 (1 row) count ------- 155 (1 row) count ------- 35 (1 row) count ------- 158 (1 row) count ------- 221 (1 row) count ------- 65 (1 row) count ------- 211 (1 row) count ------- 3 (1 row) count ------- 84 (1 row) count ------- 222 (1 row) count ------- 133 (1 row) count ------- 82 (1 row) count ------- 227 (1 row) count ------- 26 (1 row) count ------- 131 (1 row) q3c-2.0.0/expected/relocation.expected000066400000000000000000000002041363277220100176610ustar00rootroot00000000000000SET count ------- 0 (1 row) count ------- 2 (1 row) count ------- 1 (1 row) count ------- 2 (1 row) q3c-2.0.0/expected/version.expected000066400000000000000000000000421363277220100172070ustar00rootroot00000000000000 ?column? ---------- t (1 row) q3c-2.0.0/gen_data.c000066400000000000000000000072671363277220100141240ustar00rootroot00000000000000/* Copyright (C) 2004-2015 Sergey Koposov Email: koposov@ast.cam.ac.uk This file is part of Q3C. Q3C is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Q3C is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Q3C; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include "postgres.h" static int64 rand_state = 1; static const int64 c = 12345; static const int64 m = ((int64)1)<<31; static const int64 a = 1103515245; int64 get_rand() { rand_state = ( a * rand_state + c ) % m; return rand_state; } /* Run as * $ ./gen_data 1 100 * The first argument of the program is the random seed for the pseudorandom * sequence. * The second number is the number of objects outputted * Additional flags * --withpm output pms as well * --pmscale= maximum allowed pm in mas/yr * --epoch= epoch of coordinates * --randomepoch assign random epoch * */ /* The random number sequence was based on Knuth's theorem A (from * his second book) */ int main(int argc, char *argv[]) { const int nrabins = 36000; const int ndecbins = 18000; const int ntotbins = nrabins * ndecbins; /* 2^x*3^y*5^z */ double corrections[ndecbins], total = 0, pmra, pmdec, pmscale=1; int npoints; bool random_epoch=false; double epoch, cur_epoch; int i, extraarg; char parsing_error = 1; bool withpm = false; // first argument is the seed and then number of points to generate if (argc >= 3) { rand_state = atoi(argv[1]); get_rand(); // advance one step npoints = atoi(argv[2]); parsing_error = 0; for (extraarg=0; extraarg<(argc-3);extraarg++) { char *curarg = argv[3+extraarg]; if (strncmp(curarg,"--randomepoch", 13)==0) {random_epoch=true;} if (strncmp(curarg,"--withpm", 9)==0) {withpm=true;} if (strncmp(curarg,"--pmscale=", 10)==0) { if (sscanf(curarg, "--pmscale=%lf", &pmscale)==0) { fprintf(stderr, "Formatting error of pmscale\n"); exit(1); } } if (strncmp(curarg,"--epoch=",8)==0) { sscanf(curarg, "--epoch=%lf", &epoch); } } } if (parsing_error) { fprintf(stderr, "Wrong arguments!\n" "MUST be ./gen_data [RANDOM SEED] [NPOINTS] [PROPERMOTIONSCALE(optional)]"); exit(1); } for (i = 0; i < ndecbins; i++) /* weights in order to have cosine distribution of declinations * corresponding to uniform distribution on the sky */ { corrections[i] = cos((-90. + (180. / ndecbins) * (i + 0.5)) * M_PI / 180.); } int npointsleft = npoints; while (npointsleft) { int64 ra = (int64)(get_rand() * 1./m * nrabins); int64 dec = (int64)(get_rand() * 1./m * ndecbins); if (withpm ) { pmra = ((get_rand() * 1./m)*2 -1) * pmscale; pmdec = ((get_rand() * 1./m)*2 -1) * pmscale; if (random_epoch) { cur_epoch = ((get_rand() * 1./m) ) * 20 + 1980; } else { cur_epoch = epoch; } } if (get_rand() < (corrections[dec]*m)) { if (withpm) { printf("%f %f %f %f %f\n", ra * (360. / nrabins), -90 + dec * (180. / ndecbins), pmra, pmdec, cur_epoch); } else { printf("%f %f\n", ra * (360. / nrabins), -90 + dec * (180. / ndecbins)); } npointsleft--; } } } q3c-2.0.0/my_bits.h000066400000000000000000000124101363277220100140170ustar00rootroot00000000000000#ifndef __MY_BITS #define __MY_BITS const unsigned long long bitmask[64] = { 0x8000000000000000LL, 0x4000000000000000LL, 0x2000000000000000LL, 0x1000000000000000LL, 0x0800000000000000LL, 0x0400000000000000LL, 0x0200000000000000LL, 0x0100000000000000LL, 0x80000000000000LL, 0x40000000000000LL, 0x20000000000000LL, 0x10000000000000LL, 0x08000000000000LL, 0x04000000000000LL, 0x02000000000000LL, 0x01000000000000LL, 0x800000000000LL, 0x400000000000LL, 0x200000000000LL, 0x100000000000LL, 0x080000000000LL, 0x040000000000LL, 0x020000000000LL, 0x010000000000LL, 0x8000000000LL, 0x4000000000LL, 0x2000000000LL, 0x1000000000LL, 0x0800000000LL, 0x0400000000LL, 0x0200000000LL, 0x0100000000LL, 0x80000000LL, 0x40000000LL, 0x20000000LL, 0x10000000LL, 0x08000000LL, 0x04000000LL, 0x02000000LL, 0x01000000LL, 0x800000LL, 0x400000LL, 0x200000LL, 0x100000LL, 0x080000LL, 0x040000LL, 0x020000LL, 0x010000LL, 0x8000LL, 0x4000LL, 0x2000LL, 0x1000LL, 0x0800LL, 0x0400LL, 0x0200LL, 0x0100LL, 0x80LL, 0x40LL, 0x20LL, 0x10LL, 0x08, 0x04, 0x02, 0x01 }; #define BIT(a, b) ((a & bitmask[b]) >> (63 - b)) #define BITS8(a) BIT(a,0),BIT(a,1),BIT(a,2),BIT(a,3),BIT(a,4),BIT(a,5),BIT(a,6),BIT(a,7),BIT(a,8),BIT(a,9),BIT(a,10),BIT(a,11),BIT(a,12),BIT(a,13),BIT(a,14),BIT(a,15),BIT(a,16),BIT(a,17),BIT(a,18),BIT(a,19),BIT(a,20),BIT(a,21),BIT(a,22),BIT(a,23),BIT(a,24),BIT(a,25),BIT(a,26),BIT(a,27),BIT(a,28),BIT(a,29),BIT(a,30),BIT(a,31),BIT(a,32),BIT(a,33),BIT(a,34),BIT(a,35),BIT(a,36),BIT(a,37),BIT(a,38),BIT(a,39),BIT(a,40),BIT(a,41),BIT(a,42),BIT(a,43),BIT(a,44),BIT(a,45),BIT(a,46),BIT(a,47),BIT(a,48),BIT(a,49),BIT(a,50),BIT(a,51),BIT(a,52),BIT(a,53),BIT(a,54),BIT(a,55),BIT(a,56),BIT(a,57),BIT(a,58),BIT(a,59),BIT(a,60),BIT(a,61),BIT(a,62),BIT(a,63) #define BITS8ix(a) 0LL,BIT(a,32),0LL,BIT(a,33),0LL,BIT(a,34),0LL,BIT(a,35),0LL,BIT(a,36),0LL,BIT(a,37),0LL,BIT(a,38),0LL,BIT(a,39),0LL,BIT(a,40),0LL,BIT(a,41),0LL,BIT(a,42),0LL,BIT(a,43),0LL,BIT(a,44),0LL,BIT(a,45),0LL,BIT(a,46),0LL,BIT(a,47),0LL,BIT(a,48),0LL,BIT(a,49),0LL,BIT(a,50),0LL,BIT(a,51),0LL,BIT(a,52),0LL,BIT(a,53),0LL,BIT(a,54),0LL,BIT(a,55),0LL,BIT(a,56),0LL,BIT(a,57),0LL,BIT(a,58),0LL,BIT(a,59),0LL,BIT(a,60),0LL,BIT(a,61),0LL,BIT(a,62),0LL,BIT(a,63) #define BITS8iy(a) BIT(a,32),0LL,BIT(a,33),0LL,BIT(a,34),0LL,BIT(a,35),0LL,BIT(a,36),0LL,BIT(a,37),0LL,BIT(a,38),0LL,BIT(a,39),0LL,BIT(a,40),0LL,BIT(a,41),0LL,BIT(a,42),0LL,BIT(a,43),0LL,BIT(a,44),0LL,BIT(a,45),0LL,BIT(a,46),0LL,BIT(a,47),0LL,BIT(a,48),0LL,BIT(a,49),0LL,BIT(a,50),0LL,BIT(a,51),0LL,BIT(a,52),0LL,BIT(a,53),0LL,BIT(a,54),0LL,BIT(a,55),0LL,BIT(a,56),0LL,BIT(a,57),0LL,BIT(a,58),0LL,BIT(a,59),0LL,BIT(a,60),0LL,BIT(a,61),0LL,BIT(a,62),0LL,BIT(a,63),0LL #define BITS4(a) BIT(a,32),BIT(a,33),BIT(a,34),BIT(a,35),BIT(a,36),BIT(a,37),BIT(a,38),BIT(a,39),BIT(a,40),BIT(a,41),BIT(a,42),BIT(a,43),BIT(a,44),BIT(a,45),BIT(a,46),BIT(a,47),BIT(a,48),BIT(a,49),BIT(a,50),BIT(a,51),BIT(a,52),BIT(a,53),BIT(a,54),BIT(a,55),BIT(a,56),BIT(a,57),BIT(a,58),BIT(a,59),BIT(a,60),BIT(a,61),BIT(a,62),BIT(a,63) /*BIT(a,0),BIT(a,1),BIT(a,2),BIT(a,3),BIT(a,4),BIT(a,5),BIT(a,6),BIT(a,7),BIT(a,8),BIT(a,9),BIT(a,10),BIT(a,11),BIT(a,12),BIT(a,13),BIT(a,14),BIT(a,15),BIT(a,16),BIT(a,17),BIT(a,18),BIT(a,19),BIT(a,20),BIT(a,21),BIT(a,22),BIT(a,23),BIT(a,24),BIT(a,25),BIT(a,26),BIT(a,27),BIT(a,28),BIT(a,29),BIT(a,30),BIT(a,31) */ #define BITS2(a) BIT(a,48),BIT(a,49),BIT(a,50),BIT(a,51),BIT(a,52),BIT(a,53),BIT(a,54),BIT(a,55),BIT(a,56),BIT(a,57),BIT(a,58),BIT(a,59),BIT(a,60),BIT(a,61),BIT(a,62),BIT(a,63) /* BIT(a,16),BIT(a,17),BIT(a,18),BIT(a,19),BIT(a,20),BIT(a,21),BIT(a,22),BIT(a,23),BIT(a,24),BIT(a,25),BIT(a,26),BIT(a,27),BIT(a,28),BIT(a,29),BIT(a,30),BIT(a,31) */ /* BIT(a,0),BIT(a,1),BIT(a,2),BIT(a,3),BIT(a,4),BIT(a,5),BIT(a,6),BIT(a,7),BIT(a,8),BIT(a,9),BIT(a,10),BIT(a,11),BIT(a,12),BIT(a,13),BIT(a,14),BIT(a,15) */ #define BIT_PRINT8(a) fprintf(stdout,"%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld\n", BITS8(a)); #define BIT_PRINT8ix(a) fprintf(stdout,"%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld\n", BITS8ix(a)); #define BIT_PRINT8iy(a) fprintf(stdout,"%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld\n", BITS8iy(a)); #define BIT_PRINT4(a) fprintf(stdout,"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", BITS4(a)); #define BIT_PRINT2(a) fprintf(stdout,"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", BITS2(a)); #endif /* __MY_BITS */ q3c-2.0.0/prepare.c000066400000000000000000000017351363277220100140120ustar00rootroot00000000000000/* Copyright (C) 2004-2015 Sergey Koposov Email: koposov@ast.cam.ac.uk This file is part of Q3C. Q3C is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Q3C is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Q3C; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include "common.h" int main() { struct q3c_prm hprm1; init_q3c1(&hprm1,1073741824); q3c_dump_prm(&hprm1,"dump.c"); return 0; } q3c-2.0.0/q3c.c000066400000000000000000001000751363277220100130370ustar00rootroot00000000000000/* Copyright (C) 2004-2015 Sergey Koposov Email: koposov@ast.cam.ac.uk This file is part of Q3C. Q3C is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Q3C is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Q3C; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include /* Postgres stuff */ #include "postgres.h" #include "executor/spi.h" #include "utils/lsyscache.h" /* I included that just to remove the gcc warning * q3c.c:128: warning: implicit declaration of function `get_typlenbyvalalign' */ #include "utils/array.h" #include "utils/geo_decls.h" #include "catalog/pg_type.h" #include "fmgr.h" #if PG_VERSION_NUM >= 90300 #include "access/tupmacs.h" #endif //#include "nodes/relation.h" #include "utils/selfuncs.h" /* For PostgreSQL versions >= 8.2 */ #ifdef PG_MODULE_MAGIC PG_MODULE_MAGIC; #endif /* End of Postgres stuff */ #include "common.h" extern Node *estimate_expression_value(PlannerInfo *root, Node *node); /* Postgres functions */ Datum pgq3c_ang2ipix(PG_FUNCTION_ARGS); Datum pgq3c_ang2ipix_real(PG_FUNCTION_ARGS); Datum pgq3c_ipix2ang(PG_FUNCTION_ARGS); Datum pgq3c_pixarea(PG_FUNCTION_ARGS); Datum pgq3c_dist(PG_FUNCTION_ARGS); Datum pgq3c_dist_pm(PG_FUNCTION_ARGS); Datum pgq3c_sindist(PG_FUNCTION_ARGS); Datum pgq3c_sindist_pm(PG_FUNCTION_ARGS); Datum q3c_strquery(PG_FUNCTION_ARGS); Datum pgq3c_nearby_it(PG_FUNCTION_ARGS); Datum pgq3c_nearby_pm_it(PG_FUNCTION_ARGS); Datum pgq3c_ellipse_nearby_it(PG_FUNCTION_ARGS); Datum pgq3c_radial_array(PG_FUNCTION_ARGS); Datum pgq3c_radial_query_it(PG_FUNCTION_ARGS); Datum pgq3c_ellipse_query_it(PG_FUNCTION_ARGS); Datum pgq3c_poly_query_it(PG_FUNCTION_ARGS); Datum pgq3c_poly_query1_it(PG_FUNCTION_ARGS); Datum pgq3c_in_ellipse(PG_FUNCTION_ARGS); Datum pgq3c_in_poly(PG_FUNCTION_ARGS); Datum pgq3c_in_poly1(PG_FUNCTION_ARGS); Datum pgq3c_get_version(PG_FUNCTION_ARGS); Datum pgq3c_sel(PG_FUNCTION_ARGS); Datum pgq3c_seljoin(PG_FUNCTION_ARGS); Datum pgq3c_seloper(PG_FUNCTION_ARGS); /* Dummy function that implements the selectivity operator */ PG_FUNCTION_INFO_V1(pgq3c_seloper); Datum pgq3c_seloper(PG_FUNCTION_ARGS) { PG_RETURN_BOOL(true); } /* The actual selectivity function, it returns the ratio of the * search circle to the whole sky area */ PG_FUNCTION_INFO_V1(pgq3c_sel); Datum pgq3c_sel(PG_FUNCTION_ARGS) { PlannerInfo *root = (PlannerInfo *) PG_GETARG_POINTER(0); List *args = (List *) PG_GETARG_POINTER(2); int varRelid = PG_GETARG_INT32(3); Node *left; Node *other; VariableStatData vardata; Datum radDatum; bool isnull; double rad; double ratio; /* this needs more protections against crazy inputs */ if (list_length(args) != 2) { elog(ERROR, "Wrong inputs to selectivity function");} left = (Node *) linitial(args); examine_variable(root, left, varRelid, &vardata); other = estimate_expression_value(root, vardata.var); radDatum = ((Const *) other)->constvalue; isnull = ((Const *) other)->constisnull; /* We shouldn't be really getting null inputs here */ if (!isnull) { rad = DatumGetFloat8(radDatum); } else { rad = 0; } ratio = 3.14 * rad * rad/41252. ; /* pi*r^2/whole_sky_area */ /* clamp at 0, 1*/ CLAMP_PROBABILITY(ratio); //elog(WARNING, "HERE0.... %e", ratio); PG_RETURN_FLOAT8(ratio); } PG_FUNCTION_INFO_V1(pgq3c_seljoin); Datum pgq3c_seljoin(PG_FUNCTION_ARGS) { PlannerInfo *root = (PlannerInfo *) PG_GETARG_POINTER(0); List *args = (List *) PG_GETARG_POINTER(2); int varRelid = 0; /* Because there is no varrelid in the join selectivity call * I just set it to zero */ Node *left; Node *other; VariableStatData vardata; Datum radDatum; bool isnull; double rad; double ratio; /* this needs more protections against crazy inputs */ if (list_length(args) != 2) { elog(ERROR, "Wrong inputs to selectivity function");} left = (Node *) linitial(args); examine_variable(root, left, varRelid, &vardata); other = estimate_expression_value(root, vardata.var); radDatum = ((Const *) other)->constvalue; isnull = ((Const *) other)->constisnull; /* We shouldn't be really getting null inputs here */ if (!isnull) { rad = DatumGetFloat8(radDatum); } else { rad = 0; } ratio = 3.14 * rad * rad/41252. ; /* pi*r^2/whole_sky_area */ /* clamp at 0, 1*/ CLAMP_PROBABILITY(ratio); PG_RETURN_FLOAT8(ratio); } static int convert_pgarray2poly(ArrayType *poly_arr, q3c_coord_t *in_ra, q3c_coord_t *in_dec, int *nvert); PG_FUNCTION_INFO_V1(pgq3c_get_version); Datum pgq3c_get_version(PG_FUNCTION_ARGS) { char VERSION_MAX_BYTES = 100; char *buf = palloc(VERSION_MAX_BYTES); q3c_get_version(buf, VERSION_MAX_BYTES); PG_RETURN_CSTRING(buf); } PG_FUNCTION_INFO_V1(pgq3c_ang2ipix); Datum pgq3c_ang2ipix(PG_FUNCTION_ARGS) { extern struct q3c_prm hprm; q3c_coord_t ra = PG_GETARG_FLOAT8(0); q3c_coord_t dec = PG_GETARG_FLOAT8(1); q3c_ipix_t ipix; static int invocation; static q3c_coord_t ra_buf, dec_buf; static q3c_ipix_t ipix_buf; if (invocation==0) { } else { if ((ra == ra_buf) && (dec == dec_buf)) { PG_RETURN_INT64(ipix_buf); } } if ((!isfinite(ra)) || (!isfinite(dec))) { PG_RETURN_NULL(); } q3c_ang2ipix(&hprm, ra, dec, &ipix); ra_buf = ra; dec_buf = dec; ipix_buf = ipix; invocation=1; PG_RETURN_INT64(ipix); } PG_FUNCTION_INFO_V1(pgq3c_ang2ipix_real); Datum pgq3c_ang2ipix_real(PG_FUNCTION_ARGS) { extern struct q3c_prm hprm; q3c_coord_t ra = PG_GETARG_FLOAT4(0); q3c_coord_t dec = PG_GETARG_FLOAT4(1); q3c_ipix_t ipix; static int invocation; static q3c_coord_t ra_buf, dec_buf; static q3c_ipix_t ipix_buf; if (invocation==0) { } else { if ((ra == ra_buf) && (dec == dec_buf)) { PG_RETURN_INT64(ipix_buf); } } if ((!isfinite(ra)) || (!isfinite(dec))) { PG_RETURN_NULL(); } q3c_ang2ipix(&hprm, ra, dec, &ipix); ra_buf = ra; dec_buf = dec; ipix_buf = ipix; invocation=1; PG_RETURN_INT64(ipix); } PG_FUNCTION_INFO_V1(pgq3c_ipix2ang); Datum pgq3c_ipix2ang(PG_FUNCTION_ARGS) { extern struct q3c_prm hprm; q3c_ipix_t ipix; q3c_coord_t ra, dec; Datum *data; int16 typlen; bool typbyval; char typalign; ArrayType *result; ipix = PG_GETARG_INT64(0); q3c_ipix2ang(&hprm, ipix, &ra, &dec); data = ( Datum *) palloc(sizeof(Datum)*2); data[0] = Float8GetDatum (ra); data[1] = Float8GetDatum (dec); /* get required info about the element type */ get_typlenbyvalalign(FLOAT8OID, &typlen, &typbyval, &typalign); /* now build the array */ result = construct_array(data, 2, FLOAT8OID, typlen, typbyval, typalign); PG_RETURN_ARRAYTYPE_P(result); } PG_FUNCTION_INFO_V1(pgq3c_pixarea); Datum pgq3c_pixarea(PG_FUNCTION_ARGS) { extern struct q3c_prm hprm; q3c_ipix_t ipix; q3c_coord_t res; int depth; ipix = PG_GETARG_INT64(0); depth = PG_GETARG_INT32(1); if (depth <= 0) { elog(ERROR, "Invalid depth. It should be greater than 0."); } if (depth > 30) { elog(ERROR, "Invalid depth. It should be less than 31."); } res = q3c_pixarea(&hprm, ipix, depth); PG_RETURN_FLOAT8(res); } PG_FUNCTION_INFO_V1(pgq3c_dist); Datum pgq3c_dist(PG_FUNCTION_ARGS) { q3c_coord_t ra1 = PG_GETARG_FLOAT8(0); q3c_coord_t dec1 = PG_GETARG_FLOAT8(1); q3c_coord_t ra2 = PG_GETARG_FLOAT8(2); q3c_coord_t dec2 = PG_GETARG_FLOAT8(3); q3c_coord_t res; res = q3c_dist(ra1, dec1, ra2, dec2); PG_RETURN_FLOAT8(res); } PG_FUNCTION_INFO_V1(pgq3c_sindist); Datum pgq3c_sindist(PG_FUNCTION_ARGS) { q3c_coord_t ra1 = PG_GETARG_FLOAT8(0); q3c_coord_t dec1 = PG_GETARG_FLOAT8(1); q3c_coord_t ra2 = PG_GETARG_FLOAT8(2); q3c_coord_t dec2 = PG_GETARG_FLOAT8(3); q3c_coord_t res; res = q3c_sindist(ra1, dec1, ra2, dec2); PG_RETURN_FLOAT8(res); } PG_FUNCTION_INFO_V1(pgq3c_sindist_pm); Datum pgq3c_sindist_pm(PG_FUNCTION_ARGS) { q3c_coord_t pmra1, pmdec1, epoch1, epoch2; q3c_coord_t ra1, dec1, ra2, dec2, ra1_shift, dec1_shift, cdec; bool pm_enabled = true, cosdec; q3c_coord_t res; const int ra_arg_pos=0, dec_arg_pos=1, pmra_arg_pos=2, pmdec_arg_pos=3, cosdec_arg_pos=4, epoch_arg_pos=5, ra2_arg_pos=6, dec2_arg_pos=7, epoch2_arg_pos=8; if (PG_ARGISNULL(ra_arg_pos) || PG_ARGISNULL(dec_arg_pos) || PG_ARGISNULL(ra2_arg_pos) || PG_ARGISNULL(dec2_arg_pos)) { elog(ERROR, "The RA, DEC columns are not allowed to be null"); } ra1 = PG_GETARG_FLOAT8(ra_arg_pos); dec1 = PG_GETARG_FLOAT8(dec_arg_pos); if (!PG_ARGISNULL(pmra_arg_pos)&&(!PG_ARGISNULL(pmdec_arg_pos))&& (!PG_ARGISNULL(epoch_arg_pos))&&(!PG_ARGISNULL(epoch2_arg_pos))) { pmra1 = PG_GETARG_FLOAT8(pmra_arg_pos); pmdec1 = PG_GETARG_FLOAT8(pmdec_arg_pos); epoch1 = PG_GETARG_FLOAT8(epoch_arg_pos); epoch2 = PG_GETARG_FLOAT8(epoch2_arg_pos); } else { pm_enabled = false; pmra1 = 0; pmdec1 = 0; epoch1 = 0; epoch2 = 0; } cosdec = PG_GETARG_INT32(cosdec_arg_pos)!=0; ra2 = PG_GETARG_FLOAT8(ra2_arg_pos); dec2 = PG_GETARG_FLOAT8(dec2_arg_pos); if (pm_enabled) { if (cosdec) { cdec = cos(dec1*Q3C_DEGRA); } else { cdec = 1; } ra1_shift = ra1 + pmra1 * (epoch2 - epoch1) / cdec / 3600000; dec1_shift = dec1 + pmdec1 * (epoch2 - epoch1) / 3600000; } else { ra1_shift = ra1; dec1_shift = dec1; } res = q3c_sindist(ra1_shift, dec1_shift, ra2, dec2); PG_RETURN_FLOAT8(res); } PG_FUNCTION_INFO_V1(pgq3c_dist_pm); Datum pgq3c_dist_pm(PG_FUNCTION_ARGS) { q3c_coord_t pmra1, pmdec1, epoch1, epoch2; q3c_coord_t ra1, dec1, ra2, dec2, ra1_shift, dec1_shift, cdec=1; bool pm_enabled = true, cosdec; q3c_coord_t res; const int ra_arg_pos=0, dec_arg_pos=1, pmra_arg_pos=2, pmdec_arg_pos=3, cosdec_arg_pos=4, epoch_arg_pos=5, ra2_arg_pos=6, dec2_arg_pos=7, epoch2_arg_pos=8; if (PG_ARGISNULL(ra_arg_pos) || PG_ARGISNULL(dec_arg_pos) || PG_ARGISNULL(ra2_arg_pos) || PG_ARGISNULL(dec2_arg_pos)) { elog(ERROR, "The RA, DEC columns are not allowed to be null"); } ra1 = PG_GETARG_FLOAT8(ra_arg_pos); dec1 = PG_GETARG_FLOAT8(dec_arg_pos); if (!PG_ARGISNULL(pmra_arg_pos)&&(!PG_ARGISNULL(pmdec_arg_pos))&& (!PG_ARGISNULL(epoch_arg_pos))&&(!PG_ARGISNULL(epoch2_arg_pos))) { pmra1 = PG_GETARG_FLOAT8(pmra_arg_pos); pmdec1 = PG_GETARG_FLOAT8(pmdec_arg_pos); epoch1 = PG_GETARG_FLOAT8(epoch_arg_pos); epoch2 = PG_GETARG_FLOAT8(epoch2_arg_pos); } else { pm_enabled = false; pmra1 = 0; pmdec1 = 0; epoch1 = 0; epoch2 = 0; } cosdec = PG_GETARG_INT32(cosdec_arg_pos)!=0; ra2 = PG_GETARG_FLOAT8(ra2_arg_pos); dec2 = PG_GETARG_FLOAT8(dec2_arg_pos); if (pm_enabled) { if (cosdec) { cdec = cos(dec1*Q3C_DEGRA); } else { cdec = 1; } ra1_shift = ra1 + pmra1 * (epoch2 - epoch1) / cdec / 3600000; dec1_shift = dec1 + pmdec1 * (epoch2 - epoch1) / 3600000; } else { ra1_shift = ra1; dec1_shift = dec1; } res = q3c_dist(ra1_shift, dec1_shift, ra2, dec2); PG_RETURN_FLOAT8(res); } PG_FUNCTION_INFO_V1(pgq3c_nearby_it); Datum pgq3c_nearby_it(PG_FUNCTION_ARGS) { q3c_ipix_t ipix_array[8]; static q3c_ipix_t ipix_array_buf[8]; static q3c_coord_t ra_cen_buf, dec_cen_buf, radius_buf; static int invocation; int i; extern struct q3c_prm hprm; q3c_circle_region circle; q3c_coord_t ra_cen = PG_GETARG_FLOAT8(0); // ra_cen q3c_coord_t dec_cen = PG_GETARG_FLOAT8(1); // dec_cen q3c_coord_t radius = PG_GETARG_FLOAT8(2); // error radius int iteration = PG_GETARG_INT32(3); // iteration if ( (!isfinite(ra_cen)) || (!isfinite(dec_cen)) ) { elog(ERROR, "The values of ra,dec are infinites or NaNs"); } if (invocation == 0) /* If this is the first invocation of the function */ { /* I should set invocation=1 ONLY!!! after setting ra_cen_buf, dec_cen_buf and * ipix_buf. Because if the program will be canceled or crashed * for some reason the invocation should be == 0 */ } else { if ((ra_cen == ra_cen_buf) && (dec_cen == dec_cen_buf) && (radius == radius_buf)) { PG_RETURN_INT64(ipix_array_buf[iteration]); } } ra_cen = UNWRAP_RA(ra_cen); if (q3c_fabs(dec_cen)>90) {dec_cen = q3c_fmod(dec_cen,90);} circle.ra = ra_cen; circle.dec = dec_cen; circle.rad = radius; q3c_get_nearby(&hprm, Q3C_CIRCLE, &circle, ipix_array); for(i = 0; i < 8; i++) { ipix_array_buf[i] = ipix_array[i]; } ra_cen_buf = ra_cen; dec_cen_buf = dec_cen; radius_buf = radius; invocation=1; PG_RETURN_INT64(ipix_array_buf[iteration]); } PG_FUNCTION_INFO_V1(pgq3c_nearby_pm_it); Datum pgq3c_nearby_pm_it(PG_FUNCTION_ARGS) { q3c_ipix_t ipix_array[8]; static q3c_ipix_t ipix_array_buf[8]; static q3c_coord_t ra_cen_buf, dec_cen_buf, radius_buf; static q3c_coord_t pmra_buf, pmdec_buf, max_epoch_delta_buf; static int invocation; int i; extern struct q3c_prm hprm; q3c_circle_region circle; q3c_coord_t new_radius; q3c_coord_t ra_cen, dec_cen, pmra, pmdec; q3c_coord_t max_epoch_delta=0, radius=0; bool pm_enabled = true, cosdec; int iteration; const int ra_arg_pos=0, dec_arg_pos=1, pmra_arg_pos=2, pmdec_arg_pos=3, cosdec_arg_pos=4, maxepochdelta_arg_pos=5, radius_arg_pos=6, iteration_arg_pos=7; if (PG_ARGISNULL(ra_arg_pos) || PG_ARGISNULL(dec_arg_pos) || PG_ARGISNULL(radius_arg_pos)) { elog(ERROR, "Right Ascensions and raddii must be not null"); } ra_cen = PG_GETARG_FLOAT8(ra_arg_pos); // ra_cen dec_cen = PG_GETARG_FLOAT8(dec_arg_pos); // dec_cen if (!PG_ARGISNULL(pmra_arg_pos)&&(!PG_ARGISNULL(pmdec_arg_pos))&& (!PG_ARGISNULL(maxepochdelta_arg_pos))) { pmra = PG_GETARG_FLOAT8(pmra_arg_pos); pmdec = PG_GETARG_FLOAT8(pmdec_arg_pos); max_epoch_delta = PG_GETARG_FLOAT8(maxepochdelta_arg_pos); } else { pm_enabled = false; pmra = 0; pmdec = 0; max_epoch_delta = 0; } cosdec = PG_GETARG_INT32(cosdec_arg_pos)!=0; radius = PG_GETARG_FLOAT8(radius_arg_pos); // error radius iteration = PG_GETARG_INT32(iteration_arg_pos); // iteration if ( (!isfinite(ra_cen)) || (!isfinite(dec_cen)) ) { elog(ERROR, "The values of ra,dec are infinites or NaNs"); } if ( (!isfinite(pmra)) || (!isfinite(pmdec)) || (!isfinite(max_epoch_delta)) ) { pmra = 0; pmdec = 0; max_epoch_delta = 0; } if (max_epoch_delta<0) { elog(ERROR, "The maximum epoch difference must be >=0 "); } if (invocation == 0) /* If this is the first invocation of the function */ { /* I should set invocation=1 ONLY!!! after setting ra_cen_buf, dec_cen_buf and * ipix_buf. Because if the program will be canceled or crashed * for some reason the invocation should be == 0 */ } else { if ((ra_cen == ra_cen_buf) && (dec_cen == dec_cen_buf) && (radius == radius_buf) && (pmra == pmra_buf) && (pmdec == pmdec_buf) && (max_epoch_delta == max_epoch_delta_buf)) { PG_RETURN_INT64(ipix_array_buf[iteration]); } } if (pm_enabled) { q3c_coord_t pmra1; if (cosdec) { pmra1 = pmra ; } else { pmra1 = pmra * cos(Q3C_DEGRA*dec_cen);} new_radius = q3c_sqrt(pmra1 * pmra1 + pmdec * pmdec)/ 3600000 * max_epoch_delta + radius; } else { new_radius = radius; } ra_cen = UNWRAP_RA(ra_cen); if (q3c_fabs(dec_cen)>90) {dec_cen = q3c_fmod(dec_cen,90);} circle.ra = ra_cen; circle.dec = dec_cen; circle.rad = new_radius; q3c_get_nearby(&hprm, Q3C_CIRCLE, &circle, ipix_array); for(i = 0; i < 8; i++) { ipix_array_buf[i] = ipix_array[i]; } ra_cen_buf = ra_cen; dec_cen_buf = dec_cen; radius_buf = radius; max_epoch_delta_buf = max_epoch_delta; pmra_buf = pmra; pmdec_buf = pmdec; invocation=1; PG_RETURN_INT64(ipix_array_buf[iteration]); } PG_FUNCTION_INFO_V1(pgq3c_ellipse_nearby_it); Datum pgq3c_ellipse_nearby_it(PG_FUNCTION_ARGS) { q3c_ipix_t ipix_array[8]; static q3c_ipix_t ipix_array_buf[8]; static q3c_coord_t ra_cen_buf, dec_cen_buf, radius_buf, axis_ratio_buf, PA_buf; static int invocation; int i; q3c_ellipse_region ellipse; extern struct q3c_prm hprm; q3c_coord_t ra_cen = PG_GETARG_FLOAT8(0); /* ra_cen */ q3c_coord_t dec_cen = PG_GETARG_FLOAT8(1); /* dec_cen */ q3c_coord_t radius = PG_GETARG_FLOAT8(2); /* error radius */ q3c_coord_t axis_ratio = PG_GETARG_FLOAT8(3); /* axis_ratio */ q3c_coord_t PA = PG_GETARG_FLOAT8(4); /* PA */ int iteration = PG_GETARG_INT32(5); /* iteration */ if ( (!isfinite(ra_cen)) || (!isfinite(dec_cen)) || (!isfinite(radius)) ) { elog(ERROR, "The values of ra,dec,radius are infinites or NaNs"); } if (invocation == 0) /* If this is the first invocation of the function */ { /* I should set invocation=1 ONLY!!! after setting ra_cen_buf, dec_cen_buf and * ipix_buf. Because if the program will be canceled or crashed * for some reason the invocation should be == 0 */ } else { if ((ra_cen == ra_cen_buf) && (dec_cen == dec_cen_buf) && (radius == radius_buf) && (PA == PA_buf) && (axis_ratio == axis_ratio_buf)) { PG_RETURN_INT64(ipix_array_buf[iteration]); } } ra_cen = UNWRAP_RA(ra_cen); if (q3c_fabs(dec_cen)>90) {dec_cen = q3c_fmod(dec_cen,90);} ellipse.ra = ra_cen; ellipse.dec = dec_cen; ellipse.rad = radius; ellipse.e = q3c_sqrt ( 1 - axis_ratio * axis_ratio ); ellipse.PA = PA; q3c_get_nearby(&hprm, Q3C_ELLIPSE, &ellipse, ipix_array); for(i = 0; i < 8; i++) { ipix_array_buf[i] = ipix_array[i]; } ra_cen_buf = ra_cen; dec_cen_buf = dec_cen; radius_buf = radius; axis_ratio_buf = axis_ratio; PA_buf = PA; invocation=1; PG_RETURN_INT64(ipix_array_buf[iteration]); } PG_FUNCTION_INFO_V1(pgq3c_radial_query_it); Datum pgq3c_radial_query_it(PG_FUNCTION_ARGS) { extern struct q3c_prm hprm; q3c_coord_t ra_cen = PG_GETARG_FLOAT8(0); q3c_coord_t dec_cen = PG_GETARG_FLOAT8(1); q3c_coord_t radius = PG_GETARG_FLOAT8(2); /* error radius */ int iteration = PG_GETARG_INT32(3); /* iteration */ int full_flag = PG_GETARG_INT32(4); /* full_flag */ /* 1 means full, 0 means partial */ static q3c_coord_t ra_cen_buf, dec_cen_buf, radius_buf; static q3c_ipix_t partials[2 * Q3C_NPARTIALS]; static q3c_ipix_t fulls[2 * Q3C_NFULLS]; /* !!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!! * Here the Q3C_NPARTIALS and Q3C_NFULLS is the number of pairs !!! of ranges * So we should have the array with the size twice bigger */ static int invocation; ra_cen = UNWRAP_RA(ra_cen); if (q3c_fabs(dec_cen)>90) { elog(ERROR, "The absolute value of declination > 90!"); } if (invocation == 0) /* If this is the first invocation of the function */ { /* I should set invocation=1 ONLY!!! after setting ra_cen_buf, dec_cen_buf and * ipix_buf. Because if the program will be canceled or crashed * for some reason the invocation should be == 0 */ } else { if ((ra_cen == ra_cen_buf) && (dec_cen == dec_cen_buf) && (radius == radius_buf)) { if (full_flag) { PG_RETURN_INT64(fulls[iteration]); } else { PG_RETURN_INT64(partials[iteration]); } } } q3c_radial_query(&hprm, ra_cen, dec_cen, radius, fulls, partials); ra_cen_buf = ra_cen; dec_cen_buf = dec_cen; radius_buf = radius; invocation = 1; if (full_flag) { PG_RETURN_INT64(fulls[iteration]); } else { PG_RETURN_INT64(partials[iteration]); } } PG_FUNCTION_INFO_V1(pgq3c_ellipse_query_it); Datum pgq3c_ellipse_query_it(PG_FUNCTION_ARGS) { extern struct q3c_prm hprm; q3c_coord_t ra_cen = PG_GETARG_FLOAT8(0); q3c_coord_t dec_cen = PG_GETARG_FLOAT8(1); q3c_coord_t radius = PG_GETARG_FLOAT8(2); /* Major axis */ q3c_coord_t axis_ratio = PG_GETARG_FLOAT8(3); /* Axis ratio */ q3c_coord_t PA = PG_GETARG_FLOAT8(4); /* PA */ int iteration = PG_GETARG_INT32(5); /* iteration */ int full_flag = PG_GETARG_INT32(6); /* full_flag */ q3c_coord_t ell = q3c_sqrt ( 1 - axis_ratio * axis_ratio ); /* 1 means full, 0 means partial */ static q3c_coord_t ra_cen_buf, dec_cen_buf, radius_buf; static q3c_ipix_t partials[2 * Q3C_NPARTIALS]; static q3c_ipix_t fulls[2 * Q3C_NFULLS]; /* !!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!! * Here the Q3C_NPARTIALS and Q3C_NFULLS is the number of pairs !!! of ranges * So we should have the array with the size twice bigger */ static int invocation; ra_cen = UNWRAP_RA(ra_cen); if (q3c_fabs(dec_cen)>90) { elog(ERROR, "The absolute value of declination > 90!"); } if (invocation == 0) /* If this is the first invocation of the function */ { /* I should set invocation=1 ONLY!!! after setting ra_cen_buf, dec_cen_buf and * ipix_buf. Because if the program will be canceled or crashed * for some reason the invocation should be == 0 */ } else { if ((ra_cen == ra_cen_buf) && (dec_cen == dec_cen_buf) && (radius == radius_buf)) { if (full_flag) { PG_RETURN_INT64(fulls[iteration]); } else { PG_RETURN_INT64(partials[iteration]); } } } q3c_ellipse_query(&hprm, ra_cen, dec_cen, radius, ell, PA, fulls, partials); ra_cen_buf = ra_cen; dec_cen_buf = dec_cen; radius_buf = radius; invocation = 1; if (full_flag) { PG_RETURN_INT64(fulls[iteration]); } else { PG_RETURN_INT64(partials[iteration]); } } static q3c_coord_t read_from_array(char **p, bits8 *bitmap, int *bitmask, bool typbyval, char typalign, int16 typlen) { q3c_coord_t val; /* Taken from /pgsql/src/backend/utils/adt/arrayfuncs.c * function deconstruct_array */ if (bitmap && (*bitmap & *bitmask) == 0) { ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("null array element not allowed in this context"))); } val = DatumGetFloat8(fetch_att(*p, typbyval, typlen)); *p = att_addlength_pointer(*p, typlen, PointerGetDatum(p)); *p = (char *) att_align_nominal(*p, typalign); if (bitmap) { *bitmask <<= 1; if (*bitmask == 0x100) { bitmap++; *bitmask = 1; } } return val; } /* Convert the PG array in two c arrays of ra,dec */ static int convert_pgarray2poly(ArrayType *poly_arr, q3c_coord_t *in_ra, q3c_coord_t *in_dec, int *nvert) { int poly_nitems = ArrayGetNItems(ARR_NDIM(poly_arr), ARR_DIMS(poly_arr)); Oid element_type=FLOAT8OID; int identical = 1; int16 typlen; bool typbyval; char typalign; int i; q3c_coord_t ra_cur, dec_cur; char *p; bits8 *bitmap; int bitmask; get_typlenbyvalalign(element_type, &typlen, &typbyval, &typalign); /* Taken from /pgsql/src/backend/utils/adt/arrayfuncs.c * function deconstruct_array */ if (poly_nitems % 2 != 0) { elog(ERROR, "Invalid array argument!\nThe array should contain even number of elements"); } else if (poly_nitems <= 4) { elog(ERROR, "Invalid polygon! The polygon must have more than two vertices"); } p = ARR_DATA_PTR(poly_arr); poly_nitems /= 2; *nvert = poly_nitems; identical = 1; bitmap = ARR_NULLBITMAP(poly_arr); bitmask=1; for (i = 0; i < poly_nitems; i++) { ra_cur = read_from_array(&p, bitmap, &bitmask, typbyval, typalign, typlen); dec_cur = read_from_array(&p, bitmap, &bitmask, typbyval, typalign, typlen); if ((in_ra[i] != ra_cur) || (in_dec[i] != dec_cur)) { identical = 0; } in_ra[i] = ra_cur; in_dec[i] = dec_cur; } return identical; } /* Convert Postgresql polygon in two c arrays */ static int convert_pgpoly2poly(POLYGON *poly, q3c_coord_t *ra, q3c_coord_t *dec, int *n) { int i, npts = poly->npts; q3c_coord_t newx, newy; int identical = 1; *n = npts; if (npts < 3) { elog(ERROR, "Invalid polygon! The polygon must have more than two vertices"); } for(i=0;ip[i].x; newy = poly->p[i].y; if ((newx != ra[i]) || (newy !=dec[i])) {identical=0;} ra[i] = newx; dec[i] = newy; } return identical; } typedef struct q3c_poly_info_type{ /* !!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!! * Here the Q3C_NPARTIALS and Q3C_NFULLS is the number of pairs !!! of ranges * So we should have the array with the size twice bigger */ int ready; q3c_ipix_t partials[2 * Q3C_NPARTIALS]; /* array of ipixes partially covered */ q3c_ipix_t fulls[2 * Q3C_NFULLS]; /* array of ipixes fully covered */ q3c_coord_t ra[Q3C_MAX_N_POLY_VERTEX], dec[Q3C_MAX_N_POLY_VERTEX], x[Q3C_MAX_N_POLY_VERTEX],y[Q3C_MAX_N_POLY_VERTEX], ax[Q3C_MAX_N_POLY_VERTEX], ay[Q3C_MAX_N_POLY_VERTEX]; q3c_coord_t xpj[3][Q3C_MAX_N_POLY_VERTEX], ypj[3][Q3C_MAX_N_POLY_VERTEX], axpj[3][Q3C_MAX_N_POLY_VERTEX], aypj[3][Q3C_MAX_N_POLY_VERTEX]; // arrays storing the ra,dec ,projected x,y char faces[6]; char multi_flag; /* IF YOU MAKE CHANGES MAKE SURE YOU CHANGE THE COPY() FUNCTION */ } q3c_poly_info_type; static void copy_q3c_poly_info_type(q3c_poly_info_type *a, q3c_poly_info_type *b) { int i,j; for (i=0; i<(2* Q3C_NPARTIALS); i++) { b->partials[i]=a->partials[i]; } for (i=0; i<(2* Q3C_NPARTIALS); i++) { b->fulls[i]=a->fulls[i]; } for (i=0;ira[i] = a->ra[i]; b->dec[i] = a->dec[i]; b->x[i] = a->x[i]; b->y[i] = a->y[i]; b->ax[i] = a->ax[i]; b->ay[i] = a->ay[i]; for (j=0;j<3;j++) { b->axpj[j][i]=a->axpj[j][i]; b->aypj[j][i]=a->aypj[j][i]; b->xpj[j][i]=a->xpj[j][i]; b->ypj[j][i]=a->ypj[j][i]; } } for (i=0;i<6;i++) { b->faces[i] = a->faces[i]; } b->multi_flag = a->multi_flag; } /* Cache logic here is the following when the function is called for the first time with iteration =0 I compute everything allocate memory and store computations in the static variable and locally allocated q3c_poly_info_table when the function is called for the first time and iteration !=0 I allocate new memory, copy stuff from static variable into locally allocated stuff I make no checks of the data If the function is called for the second time (i.e. fn_extra is not null) I blindly assume everything is EXACTLY the same and do not recompute anything as the q3c_poly_query_it() is the internal function and is ONLY supposed to be called with the constant polygon */ PG_FUNCTION_INFO_V1(pgq3c_poly_query_it); Datum pgq3c_poly_query_it(PG_FUNCTION_ARGS) { ArrayType *poly_arr = PG_GETARG_ARRAYTYPE_P(0); int iteration = PG_GETARG_INT32(1); /* iteration */ int full_flag = PG_GETARG_INT32(2); /* full_flag */ /* 1 means full, 0 means partial*/ extern struct q3c_prm hprm; char too_large = 0; q3c_poly_info_type *qpit; q3c_poly qp; static int good_cache; int first_call; int identical=0; static q3c_poly_info_type lqpit; if (fcinfo->flinfo->fn_extra==0) { // allocate memory where we are going to store converted info fcinfo->flinfo->fn_extra = MemoryContextAlloc(fcinfo->flinfo->fn_mcxt, sizeof(q3c_poly_info_type)); first_call=1; } else { first_call =0; } qpit = (q3c_poly_info_type*) (fcinfo->flinfo->fn_extra); /* if second call it is easy */ if (!first_call) { if (full_flag) { PG_RETURN_INT64(qpit->fulls[iteration]); } else { PG_RETURN_INT64(qpit->partials[iteration]); } } if (iteration > 0) { copy_q3c_poly_info_type(&lqpit, qpit); } qp.ra = qpit->ra; qp.dec = qpit->dec; qp.x = qpit->x; qp.y = qpit->y; qp.ax = qpit->ax; qp.ay = qpit->ay; identical = convert_pgarray2poly(poly_arr, qp.ra, qp.dec, &(qp.n)); /* We fill the arrays and check if it matches what we had before */ if (!identical || !good_cache) { q3c_poly_query(&hprm, &qp, qpit->fulls, qpit->partials, &too_large); if (too_large) { elog(ERROR, "The polygon is too large. Polygons having diameter >~23 degrees are unsupported"); } } if (iteration==0) { good_cache=0; copy_q3c_poly_info_type(qpit, &lqpit); good_cache=1; } if (full_flag) { PG_RETURN_INT64(qpit->fulls[iteration]); } else { PG_RETURN_INT64(qpit->partials[iteration]); } } PG_FUNCTION_INFO_V1(pgq3c_poly_query1_it); Datum pgq3c_poly_query1_it(PG_FUNCTION_ARGS) { POLYGON *poly_arr = PG_GETARG_POLYGON_P(0); int iteration = PG_GETARG_INT32(1); /* iteration */ int full_flag = PG_GETARG_INT32(2); /* full_flag */ /* 1 means full, 0 means partial*/ extern struct q3c_prm hprm; char too_large = 0; q3c_poly_info_type *qpit; q3c_poly qp; static int good_cache; int first_call; int identical=0; static q3c_poly_info_type lqpit; if (fcinfo->flinfo->fn_extra==0) { // allocate memory where we are going to store converted info fcinfo->flinfo->fn_extra = MemoryContextAlloc(fcinfo->flinfo->fn_mcxt, sizeof(q3c_poly_info_type)); first_call=1; } else { first_call =0; } qpit = (q3c_poly_info_type*) (fcinfo->flinfo->fn_extra); /* if second call it is easy */ if (!first_call) { if (full_flag) { PG_RETURN_INT64(qpit->fulls[iteration]); } else { PG_RETURN_INT64(qpit->partials[iteration]); } } if (iteration > 0) { copy_q3c_poly_info_type(&lqpit, qpit); } qp.ra = qpit->ra; qp.dec = qpit->dec; qp.x = qpit->x; qp.y = qpit->y; qp.ax = qpit->ax; qp.ay = qpit->ay; identical = convert_pgpoly2poly(poly_arr, qp.ra, qp.dec, &(qp.n)); /* We fill the arrays and check if it matches what we had before */ if (!identical || !good_cache) { q3c_poly_query(&hprm, &qp, qpit->fulls, qpit->partials, &too_large); if (too_large) { elog(ERROR, "The polygon is too large. Polygons having diameter >~23 degrees are unsupported"); } } if (iteration==0) { good_cache=0; copy_q3c_poly_info_type(qpit, &lqpit); good_cache=1; } if (full_flag) { PG_RETURN_INT64(qpit->fulls[iteration]); } else { PG_RETURN_INT64(qpit->partials[iteration]); } } PG_FUNCTION_INFO_V1(pgq3c_in_ellipse); Datum pgq3c_in_ellipse(PG_FUNCTION_ARGS) { q3c_coord_t ra = PG_GETARG_FLOAT8(0); // ra_cen q3c_coord_t dec = PG_GETARG_FLOAT8(1); // dec_cen q3c_coord_t ra_cen = PG_GETARG_FLOAT8(2); // ra_cen q3c_coord_t dec_cen = PG_GETARG_FLOAT8(3); // dec_cen q3c_coord_t radius = PG_GETARG_FLOAT8(4); // error radius q3c_coord_t axis_ratio = PG_GETARG_FLOAT8(5); // axis_ratio q3c_coord_t PA = PG_GETARG_FLOAT8(6); // PA q3c_coord_t e = q3c_sqrt(1 - axis_ratio * axis_ratio); bool result = q3c_in_ellipse(ra_cen, dec_cen, ra,dec, radius, e, PA); PG_RETURN_BOOL(result); } /* The caching assumptions for this code are For the following calls of the function, if the polygon is exactly the same in the I will not reproject */ PG_FUNCTION_INFO_V1(pgq3c_in_poly); Datum pgq3c_in_poly(PG_FUNCTION_ARGS) { q3c_coord_t ra_cen = PG_GETARG_FLOAT8(0); // ra_cen q3c_coord_t dec_cen = PG_GETARG_FLOAT8(1); // dec_cen ArrayType *poly_arr = PG_GETARG_ARRAYTYPE_P(2); // ra_cen extern struct q3c_prm hprm; char too_large = 0; int nvert; bool result; int identical; q3c_poly_info_type *qpit; if (fcinfo->flinfo->fn_extra==0) { // allocate memory where we are going to store converted info fcinfo->flinfo->fn_extra = MemoryContextAlloc(fcinfo->flinfo->fn_mcxt, sizeof(q3c_poly_info_type)); ((q3c_poly_info_type*) (fcinfo->flinfo->fn_extra))->ready = 0; } qpit = (q3c_poly_info_type*) (fcinfo->flinfo->fn_extra); identical = convert_pgarray2poly(poly_arr, qpit->ra, qpit->dec, &nvert) && qpit->ready; result = q3c_check_sphere_point_in_poly(&hprm, nvert, qpit->ra, qpit->dec, ra_cen, dec_cen, &too_large, identical, qpit->xpj, qpit->ypj, qpit->axpj, qpit->aypj, qpit->faces, &(qpit->multi_flag) ) != Q3C_DISJUNCT; if (too_large) { elog(ERROR, "The polygon is too large. Polygons having diameter >~23 degrees are unsupported"); } qpit->ready = 1; PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(pgq3c_in_poly1); Datum pgq3c_in_poly1(PG_FUNCTION_ARGS) { q3c_coord_t ra_cen = PG_GETARG_FLOAT8(0); // ra_cen q3c_coord_t dec_cen = PG_GETARG_FLOAT8(1); // dec_cen POLYGON *poly = PG_GETARG_POLYGON_P(2); // ra_cen extern struct q3c_prm hprm; char too_large = 0; int nvert; bool result; int identical; q3c_poly_info_type *qpit; if (fcinfo->flinfo->fn_extra==0) { // allocate memory where we are going to store converted info fcinfo->flinfo->fn_extra = MemoryContextAlloc(fcinfo->flinfo->fn_mcxt, sizeof(q3c_poly_info_type)); ((q3c_poly_info_type*) (fcinfo->flinfo->fn_extra))->ready = 0; } qpit = (q3c_poly_info_type*) (fcinfo->flinfo->fn_extra); identical = convert_pgpoly2poly(poly, qpit->ra, qpit->dec, &nvert) && qpit->ready; result = q3c_check_sphere_point_in_poly(&hprm, nvert, qpit->ra, qpit->dec, ra_cen, dec_cen, &too_large, identical, qpit->xpj, qpit->ypj, qpit->axpj, qpit->aypj, qpit->faces, &(qpit->multi_flag) ) != Q3C_DISJUNCT; qpit->ready = 1; if (too_large) { elog(ERROR, "The polygon is too large. Polygons having diameter >~23 degrees are unsupported"); } PG_RETURN_BOOL(result); } q3c-2.0.0/q3c.control000066400000000000000000000001601363277220100142670ustar00rootroot00000000000000comment = 'q3c sky indexing plugin' default_version = '2.0.0' module_pathname = '$libdir/q3c' relocatable = trueq3c-2.0.0/q3c_poly.c000066400000000000000000000217671363277220100141140ustar00rootroot00000000000000/* Copyright (C) 2004-2015 Sergey Koposov Email: koposov@ast.cam.ac.uk This file is part of Q3C. Q3C is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Q3C is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Q3C; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "common.h" void q3c_init_poly(q3c_poly *qp, int n) { qp->ra = malloc(n * sizeof(q3c_coord_t)); qp->dec = malloc(n * sizeof(q3c_coord_t)); qp->ax = malloc(n * sizeof(q3c_coord_t)); qp->ay = malloc(n * sizeof(q3c_coord_t)); qp->x = malloc(n * sizeof(q3c_coord_t)); qp->y = malloc(n * sizeof(q3c_coord_t)); qp->n = n; } void q3c_prepare_poly(q3c_poly *qp) { int n = qp->n - 1 ; int i; q3c_coord_t *ax = qp->ax; q3c_coord_t *ay = qp->ay; q3c_coord_t *x = qp->x; q3c_coord_t *y = qp->y; for(i = 0 ; i < n; i++) { ax[i] = x[i + 1] - x[i]; ay[i] = y[i + 1] - y[i]; } ax[i] = x[0] - x[i]; ay[i] = y[0] - y[i]; } int q3c_check_point_in_poly(q3c_poly *qp, q3c_coord_t x0, q3c_coord_t y0) /* Implementation of the crossing algorithm */ { int i, n = qp->n; q3c_coord_t *y = qp->y; q3c_coord_t *x = qp->x; q3c_coord_t *ax = qp->ax; q3c_coord_t *ay = qp->ay; int result = !Q3C_DISJUNCT; for(i=0;iy[(i+1)%n])) && ((x0-x[i])<(y0-y[i])*ax[i]/ay[i])) { result=!result; } } return !result; } void q3c_get_minmax_poly(q3c_poly *qp, q3c_coord_t *xmin, q3c_coord_t *xmax, q3c_coord_t *ymin, q3c_coord_t *ymax) { int i; const int n = qp->n; q3c_coord_t *x = qp->x, *y = qp->y, t; q3c_coord_t xmi, xma, ymi, yma; xmi = x[0]; xma = x[0]; ymi = y[0]; yma = y[0]; for(i = 1; i < n; i++) { t = x[i]; if (t > xma) { xma = t; } else if (t < xmi) { xmi = t; } t = y[i]; if (t > yma) { yma = t; } else if (t < ymi) { ymi = t; } } *xmin = xmi; *xmax = xma; *ymin = ymi; *ymax = yma; } char q3c_get_facenum_poly(q3c_poly *qp) { return q3c_get_facenum(qp->ra[0], qp->dec[0]); } void q3c_project_poly(q3c_poly *qp, char face_num, char *large_flag) { q3c_coord_t ra1, dec1, tmp0; q3c_coord_t *ra = qp->ra, *dec = qp->dec; q3c_coord_t *x = qp->x, *y = qp->y, x0, y0; q3c_coord_t tmpval ; int i, n = qp->n; if ((face_num > 0) && (face_num < 5)) { face_num--; /* Just computation trick */ for (i = 0; i < n; i++) { ra1 = Q3C_DEGRA * (ra[i] - 90 * (q3c_coord_t)face_num); dec1 = Q3C_DEGRA * dec[i]; tmpval = q3c_cos(ra1); if (tmpval < Q3C_MINDISCR) { *large_flag = 1; } x[i] = (q3c_tan(ra1)) / 2; y[i] = (q3c_tan(dec1)) / tmpval / 2; } /* Now x[i] and y[i] are coordinates on cube face [-0.5:0.5]x[-0.5:0.5] */ } else if (face_num == 0) { for (i = 0; i < n; i++) { ra1 = Q3C_DEGRA * ra[i]; dec1 = Q3C_DEGRA * dec[i]; tmpval = q3c_tan(dec1); if (tmpval < Q3C_MINDISCR) { *large_flag = 1; } tmp0 = 1 / tmpval; q3c_sincos(ra1, x0, y0); x0 *= tmp0; y0 *= (-tmp0); x[i] = x0 / 2; y[i] = y0 / 2; } } else { for (i = 0; i < n; i++) { ra1 = Q3C_DEGRA * ra[i]; dec1 = Q3C_DEGRA * dec[i]; tmpval = q3c_tan(dec1); if (tmpval > -Q3C_MINDISCR) { *large_flag = 1; } tmp0 = 1 / tmpval; q3c_sincos(ra1, x0, y0); x0 *= (-tmp0); y0 *= (-tmp0); x[i] = x0 / 2; y[i] = y0 / 2; } } } static char q3c_poly_intersection_check(q3c_poly *qp, q3c_coord_t xl, q3c_coord_t xr, q3c_coord_t yb, q3c_coord_t yt, q3c_coord_t cur_size) { int i, n = qp->n; q3c_coord_t *ax = qp->ax; q3c_coord_t *ay = qp->ay; q3c_coord_t *x = qp->x; q3c_coord_t *y = qp->y; q3c_coord_t txl, txr, tyb, tyt, axi, ayi, xi, yi, tmp, tmp1; char ret = 0; for( i = 0; i = 0) && (tmp <= 1) && (tmp1 >= 0) && (tmp1 <= cur_size)) { ret = 1; break; } tmp = tyt / ayi; tmp1 = axi * tmp - txl; if ((tmp >= 0) && (tmp <= 1) && (tmp1 >= 0) && (tmp1 <= cur_size)) { ret = 1; break; } tmp = txl / axi; tmp1 = ayi * tmp - tyb; if ((tmp >= 0) && (tmp <= 1) && (tmp1 >= 0) && (tmp1 <= cur_size)) { ret = 1; break; } tmp = txr / axi; tmp1 = ayi * tmp - tyb; if ((tmp >= 0) && (tmp <= 1) && (tmp1 >= 0) && (tmp1 <= cur_size)) { ret = 1; break; } } return ret; } int q3c_poly_cover_check(q3c_poly *qp, q3c_coord_t xc_cur, q3c_coord_t yc_cur, q3c_coord_t cur_size) { q3c_coord_t xl_cur, xr_cur, yb_cur, yt_cur; int val; /* Checking the intersection of ellipse and box * The box parameters are set by variables xc_cur, yc_cur and cur_size */ xl_cur = xc_cur - cur_size / 2; /* left */ xr_cur = xc_cur + cur_size / 2; /* right */ yb_cur = yc_cur - cur_size / 2; /* bottom */ yt_cur = yc_cur + cur_size / 2; /* top */ /* Undef labels -- the labels when the current computed values dont allow * to make the final decision about the intersection */ val = q3c_check_point_in_poly(qp, xl_cur, yb_cur); if (val != Q3C_DISJUNCT) { goto PARTUNDEF_CHECK01; } val = q3c_check_point_in_poly(qp, xr_cur, yb_cur); if (val != Q3C_DISJUNCT) { return Q3C_PARTIAL; } val = q3c_check_point_in_poly(qp, xr_cur, yt_cur); if (val != Q3C_DISJUNCT) { return Q3C_PARTIAL; } val = q3c_check_point_in_poly(qp, xl_cur, yt_cur); if (val != Q3C_DISJUNCT) { return Q3C_PARTIAL; } else { if (q3c_poly_intersection_check(qp, xl_cur, xr_cur, yb_cur, yt_cur, cur_size)|| ((qp->x[0] > xl_cur) && (qp->x[0] < xr_cur) && (qp->y[0] > yb_cur) && (qp->y[0] < yt_cur))) { return Q3C_PARTIAL; } else { return Q3C_DISJUNCT; } } PARTUNDEF_CHECK01: val = q3c_check_point_in_poly(qp, xr_cur, yb_cur); if (val == Q3C_DISJUNCT) { return Q3C_PARTIAL; } //PARTUNDEF_CHECK11: val = q3c_check_point_in_poly(qp, xr_cur, yt_cur); if (val == Q3C_DISJUNCT) { return Q3C_PARTIAL; } //PARTUNDEF_CHECK10: val = q3c_check_point_in_poly(qp, xl_cur, yt_cur); if (val == Q3C_DISJUNCT) { return Q3C_PARTIAL; } else { return Q3C_COVER; } } int q3c_check_sphere_point_in_poly(struct q3c_prm *hprm, int n, q3c_coord_t in_ra[], q3c_coord_t in_dec[], q3c_coord_t ra0, q3c_coord_t dec0, char *too_large, int invocation, q3c_coord_t (*xpj)[Q3C_MAX_N_POLY_VERTEX], q3c_coord_t (*ypj)[Q3C_MAX_N_POLY_VERTEX], q3c_coord_t (*axpj)[Q3C_MAX_N_POLY_VERTEX], q3c_coord_t (*aypj)[Q3C_MAX_N_POLY_VERTEX], char *faces, char *multi_flag) { q3c_coord_t xmin,xmax,ymin, ymax; q3c_ipix_t ipix; q3c_coord_t points[4]; char face_num, face_num0, cur_face_num, large_flag=0; q3c_coord_t x0, y0; int face_count = -1, i; q3c_poly qp; q3c_ang2ipix_xy(hprm, ra0, dec0, &cur_face_num, &ipix, &x0, &y0); qp.ra = in_ra; qp.dec = in_dec; qp.n = n; if (invocation == 0) { face_num = q3c_get_facenum_poly(&qp); faces[0] = face_num; qp.x = xpj[0]; qp.y = ypj[0]; qp.ax = axpj[0]; qp.ay = aypj[0]; q3c_project_poly(&qp, face_num, &large_flag); if (large_flag) { *too_large=1; } q3c_prepare_poly(&qp); q3c_get_minmax_poly(&qp, &xmin, &xmax, &ymin, &ymax); /* Now I determine whether the poly * intersect other faces or not, and if yes, I setup the array "points" to the * multi_face loop. */ q3c_multi_face_check(&xmin, &ymin, &xmax, &ymax, points, multi_flag); face_num0 = face_num; for(face_count = 0; face_count <= *multi_flag; face_count++) { /* This the beginning of the mega-loop over multiple faces */ if (face_count > 0) /* This "if" works when we pass through the secondary faces */ { face_num = q3c_xy2facenum(2 * points[2 * face_count - 2], 2 * points[2 * face_count - 1], face_num0); faces[face_count] = face_num; qp.x = xpj[face_count]; qp.y = ypj[face_count]; qp.ax = axpj[face_count]; qp.ay = aypj[face_count]; q3c_project_poly(&qp, faces[face_count], &large_flag); if (large_flag) { *too_large=1; } q3c_prepare_poly(&qp); } } } for (i = 0; i <= *multi_flag; i++) { if (faces[i] == cur_face_num) { face_count = i; break; } } if (i == (*multi_flag + 1)) { return 0; } qp.x = xpj[face_count]; qp.y = ypj[face_count]; qp.ax = axpj[face_count]; qp.ay = aypj[face_count]; return q3c_check_point_in_poly(&qp, x0, y0); } q3c-2.0.0/q3cube.c000066400000000000000000002432121363277220100135340ustar00rootroot00000000000000/* Copyright (C) 2004-2015 Sergey Koposov Email: koposov@ast.cam.ac.uk This file is part of Q3C. Q3C is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Q3C is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Q3C; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "common.h" #include #include #include #include "my_bits.h" static char __q3c_version[]=Q3C_VERSION; static int q3c_setup_square_stack(struct q3c_square *stack, q3c_coord_t xmin, q3c_coord_t ymin, q3c_coord_t xmax, q3c_coord_t ymax, int n0); static void q3c_stack_expand(struct q3c_square* work_stack, int *work_nstack, struct q3c_square* out_stack, int *out_nstack, int cur_depth, int res_depth); static void q3c_output_stack( struct q3c_prm *hprm, struct q3c_square *out_stack, int out_nstack, struct q3c_square *work_stack, int work_nstack, int face_num, int nside, q3c_ipix_t *out_ipix_arr_fulls, int *out_ipix_arr_fulls_pos, q3c_ipix_t *out_ipix_arr_partials, int *out_ipix_arr_partials_pos); static void q3c_fast_get_equatorial_ellipse_xy_minmax(q3c_coord_t alpha, q3c_coord_t delta, q3c_coord_t d, q3c_coord_t e, q3c_coord_t PA, q3c_coord_t *ymin, q3c_coord_t *ymax, q3c_coord_t *zmin, q3c_coord_t *zmax); static void q3c_fast_get_equatorial_ellipse_xy_minmax_and_poly_coefs(q3c_coord_t alpha, q3c_coord_t delta, q3c_coord_t d, q3c_coord_t e, q3c_coord_t PA, q3c_coord_t *ymin, q3c_coord_t *ymax, q3c_coord_t *zmin, q3c_coord_t *zmax, q3c_coord_t *ayy, q3c_coord_t *azz, q3c_coord_t *ayz, q3c_coord_t *ay, q3c_coord_t *az, q3c_coord_t *a); static void q3c_fast_get_polar_ellipse_xy_minmax_and_poly_coefs(q3c_coord_t alpha, q3c_coord_t delta, q3c_coord_t d, q3c_coord_t e, q3c_coord_t PA, q3c_coord_t *ymin, q3c_coord_t *ymax, q3c_coord_t *zmin, q3c_coord_t *zmax, q3c_coord_t *ayy, q3c_coord_t *azz, q3c_coord_t *ayz, q3c_coord_t *ay, q3c_coord_t *az, q3c_coord_t *a); static void q3c_fast_get_ellipse_xy_minmax_and_poly_coefs(char face_num, q3c_coord_t ra0, q3c_coord_t dec0, q3c_coord_t d0, q3c_coord_t e, q3c_coord_t PA0, q3c_coord_t *ymin, q3c_coord_t *ymax, q3c_coord_t *zmin, q3c_coord_t *zmax, q3c_coord_t *ayy, q3c_coord_t *azz, q3c_coord_t *ayz, q3c_coord_t *ay, q3c_coord_t *az, q3c_coord_t *a); static void q3c_fast_get_polar_ellipse_xy_minmax(q3c_coord_t alpha, q3c_coord_t delta, q3c_coord_t d, q3c_coord_t e, q3c_coord_t PA, q3c_coord_t *ymin, q3c_coord_t *ymax, q3c_coord_t *zmin, q3c_coord_t *zmax); static void q3c_fast_get_xy_minmax(char, q3c_region, void *, q3c_coord_t *, q3c_coord_t *, q3c_coord_t *, q3c_coord_t *); static void q3c_fast_get_circle_xy_minmax(char, q3c_coord_t, q3c_coord_t, q3c_coord_t, q3c_coord_t *, q3c_coord_t *, q3c_coord_t *, q3c_coord_t *); static void q3c_fast_get_ellipse_xy_minmax(char, q3c_coord_t, q3c_coord_t, q3c_coord_t,q3c_coord_t, q3c_coord_t, q3c_coord_t *, q3c_coord_t *, q3c_coord_t *, q3c_coord_t *); static void array_filler(q3c_ipix_t *fulls, int fullpos, q3c_ipix_t *parts, int partpos); void q3c_get_version(char *out, int maxchar) { strncpy(out,__q3c_version,maxchar); } /* Distance calculation routine, inputs and outputs are in degrees */ q3c_coord_t q3c_dist(q3c_coord_t ra1, q3c_coord_t dec1, q3c_coord_t ra2, q3c_coord_t dec2) { /* Fast and precise way to compute the distance on the sphere * it uses just 3 evaluations of trigonometric functions */ q3c_coord_t x, y, z; x = q3c_sin ((ra1 - ra2) / 2 * Q3C_DEGRA ); x *= x; y = q3c_sin ((dec1 - dec2) / 2 * Q3C_DEGRA); y *= y; /* Seem to be more precise :) */ z = q3c_cos ((dec1 + dec2)/2 * Q3C_DEGRA); z*=z; return 2 * q3c_asin (q3c_sqrt (x * (z - y) + y)) * Q3C_RADEG; } /* sin(Distance) calculation routine, inputs and outputs are in degrees */ q3c_coord_t q3c_sindist(q3c_coord_t ra1, q3c_coord_t dec1, q3c_coord_t ra2, q3c_coord_t dec2) { /* Fast and precise way to compute the distance on the sphere * it uses just 3 evaluations of trigonometric functions */ q3c_coord_t x, y, z; x = q3c_sin ((ra1 - ra2) / 2 * Q3C_DEGRA); x *= x; y = q3c_sin ((dec1 - dec2) / 2 * Q3C_DEGRA); y *= y; /* Seem to be more precise :) */ z = q3c_cos ((dec1 + dec2)/2 * Q3C_DEGRA); z*=z; return x * (z - y) + y; } /* convert angular coordinates (ra,dec) -> ipix * ang2ipix is also outputting x,y on the cube face * Coordinates on the cube face are x[-0.5,0.5] y[-0.5,0.5] * ipix structure is the following: * Bit 0(leftmost) : unused * Bit 1-3: Cube face id ( 0 is the top face, 5 is the bottom face, 1-4 are faces looking towards (x,y)=(1,0), (0,1) (-1,0) (0,-1) * Bit 4-63: 60-bit long location in the quadtree on the cube face, encoded by z-order (e.g. two interleaved bit strings on for x, another for y) * The mapping between x,y,z to (ra,dec) is such that (x,y,z)=(1,0,0) corresponds to (ra,dec)=(0,0) (x,y,z)=(0,0,1) corresponds to (ra,dec)=(0,90) */ void q3c_ang2ipix_xy (struct q3c_prm *hprm, q3c_coord_t ra0, q3c_coord_t dec0, char *out_face_num, q3c_ipix_t *ipix, q3c_coord_t *x_out, q3c_coord_t *y_out) /* ra in degrees, dec in degrees */ /* strictly 0<=ra<360 and -90<=dec<=90 */ { q3c_coord_t x0 = 0, y0 = 0, ra1, dec1, tmp0, td1; q3c_coord_t ra,dec; q3c_ipix_t nside = hprm->nside, *xbits = hprm->xbits, *ybits = hprm->ybits, xi, yi; char face_num; /* We check against crazy right ascensions */ ra = UNWRAP_RA(ra0); /* protection against wrong declinations */ if (dec0 > 90) { dec = 90; } else if (dec0 < -90) { dec = -90; } else { dec = dec0; } face_num = q3c_fmod ((ra + 45) / 90, 4); /* for equatorial pixels we'll have face_num from 1 to 4 */ ra1 = Q3C_DEGRA * (ra - 90 * (q3c_coord_t)face_num); dec1 = Q3C_DEGRA * dec; x0 = q3c_tan (ra1); td1 = q3c_tan(dec1); y0 = td1 / q3c_cos (ra1); face_num++; if (y0 > 1) { face_num = 0; ra1 = Q3C_DEGRA * ra; tmp0 = 1 / td1; q3c_sincos (ra1, x0, y0); x0 *= tmp0; y0 *= (-tmp0); /*x0 = q3c_sin(ra1) / q3c_tan(dec1);*/ /*y0 = -q3c_cos(ra1) / q3c_tan(dec1);*/ /* I don't know * Probably I should write (sin(ra)/sin(dec))*cos(dec) to * not loose the precision in the region where dec ~=90deg */ } else if (y0 < -1) { face_num = 5; ra1 = Q3C_DEGRA * ra; tmp0 = 1 / td1; q3c_sincos (ra1, x0, y0); x0 *= (-tmp0); y0 *= (-tmp0); /*x0 = -q3c_sin(ra1) / q3c_tan(dec1);*/ /*y0 = -q3c_cos(ra1) / q3c_tan(dec1);*/ } *x_out = x0 / 2; *y_out = y0 / 2; x0 = (x0 + 1) / 2; y0 = (y0 + 1) / 2; /* Now I produce the final pixel value by converting x and y values * to bitfields and combining them by interleaving, using the * predefined arrays xbits and ybits */ xi = (q3c_ipix_t)(x0 * nside); yi = (q3c_ipix_t)(y0 * nside); /* This two following statements are written to handle the * case of upper right corner of base square */ if (xi == nside) { xi--; } if (yi == nside) { yi--; } *ipix = q3c_xiyi2ipix(nside, xbits, ybits, face_num, xi, yi); *out_face_num = face_num; } /* convert coordinates (ra,dec) -> ipix * ra, dec in degrees * and strictly 0<=ra<360 and -90<=dec<=90 */ void q3c_ang2ipix(struct q3c_prm *hprm, q3c_coord_t ra0, q3c_coord_t dec0, q3c_ipix_t *ipix) { q3c_coord_t tmpx, tmpy; char face; q3c_ang2ipix_xy(hprm, ra0, dec0, &face, ipix, &tmpx, &tmpy); } /* get the cube face number for a given coordinates * ra, dec in degrees * and strictly 0<=ra<360 and -90<=dec<=90 */ char q3c_get_facenum(q3c_coord_t ra, q3c_coord_t dec) { q3c_coord_t y0 = 0; char face_num; if (dec >= 90) /* Poles */ { return 0; } else if (dec <= -90) { return 5; } face_num = q3c_fmod ((ra + 45) / 90, 4); /*for equatorial pixels we'll have face_num from 1 to 4 */ y0 = q3c_tan(dec * Q3C_DEGRA) / q3c_cos(Q3C_DEGRA * (ra - 90 * (q3c_coord_t)face_num)); face_num++; if (y0 > 1) { return 0; } else if (y0 < -1) { return 5; } else { return face_num; } } /* get the main cube face number for a given region * CIRCLE/ELLIPSE/POLYGON */ char q3c_get_region_facenum(q3c_region region, void *data) { switch(region) { case Q3C_CIRCLE: { q3c_circle_region circle = *(q3c_circle_region*)data; return q3c_get_facenum(circle.ra, circle.dec); } case Q3C_ELLIPSE: { q3c_ellipse_region ellipse = *(q3c_ellipse_region*) data; return q3c_get_facenum(ellipse.ra, ellipse.dec); } case Q3C_POLYGON: { q3c_poly poly = *(q3c_poly *) data; return q3c_get_facenum_poly(&poly); } default: return 1; } } /* Check that the given point (alpha, delta0) * is within the ellipse specified by * center, maj_ax, axis ratio and positional angle */ char q3c_in_ellipse(q3c_coord_t alpha, q3c_coord_t delta0, q3c_coord_t alpha1, q3c_coord_t delta01, q3c_coord_t d0, q3c_coord_t e, q3c_coord_t PA0) { q3c_coord_t d_alpha = (alpha1 - alpha) * Q3C_DEGRA; q3c_coord_t delta1 = delta01 * Q3C_DEGRA; q3c_coord_t delta = delta0 * Q3C_DEGRA; q3c_coord_t PA = PA0 * Q3C_DEGRA; q3c_coord_t d = d0 * Q3C_DEGRA; q3c_coord_t t1 = q3c_cos(d_alpha); q3c_coord_t t22 = q3c_sin(d_alpha); q3c_coord_t t3 = q3c_cos(delta1); q3c_coord_t t32 = q3c_sin(delta1); q3c_coord_t t6 = q3c_cos(delta); q3c_coord_t t26 = q3c_sin(delta); q3c_coord_t t9 = q3c_cos(d); q3c_coord_t t55 = q3c_sin(d); q3c_coord_t t2; q3c_coord_t t4; q3c_coord_t t5; q3c_coord_t t7; q3c_coord_t t8; q3c_coord_t t10; q3c_coord_t t11; q3c_coord_t t13; q3c_coord_t t14; q3c_coord_t t15; q3c_coord_t t18; q3c_coord_t t19; q3c_coord_t t24; q3c_coord_t t31; q3c_coord_t t36; q3c_coord_t t37; q3c_coord_t t38; q3c_coord_t t45; q3c_coord_t t56; q3c_coord_t t57; q3c_coord_t t60; q3c_coord_t t61; q3c_coord_t t63; if ((t3 * t6 * t1 + t32 * t26) < 0) { return 0; } t2 = t1*t1; t4 = t3*t3; t5 = t2*t4; t7 = t6*t6; t8 = t5*t7; t10 = t9*t9; t11 = t7*t10; t13 = q3c_cos(PA); t14 = t13*t13; t15 = t14*t10; t18 = t7*t14; t19 = t18*t10; t24 = q3c_sin(PA); t31 = t1*t3; t36 = 2.0*t31*t32*t26*t6; t37 = t31*t32; t38 = t26*t6; t45 = t4*t10; t56 = t55*t55; t57 = t4*t7; t60 = -t8+t5*t11+2.0*t5*t15-t5*t19-2.0*t1*t4*t22*t10*t24*t13*t26-t36+2.0*t37*t38*t10-2.0*t37*t38*t15-t45*t14-t45*t2+2.0*t22*t3*t32*t6*t24*t10*t13-t56+t7-t11+t4-t57+t57*t10+t19-t18*t45; t61 = e*e; t63 = t60*t61+t8+t57-t4-t7+t56+t36; return t63 > 0; } /* Checking whether the box (xmin,ymin,xmax,ymax) intersects other faces or * not. If yes, I setup the array "points" designed to help us work on * other faces ( points array will then have the coordinates on a main face * which should be mapped to other faces * !!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * !!!!!!! It does change the arguments (xmin,xmax, ymin, ymax) !!!!!!!! */ void q3c_multi_face_check(q3c_coord_t *xmin0, q3c_coord_t *ymin0, q3c_coord_t *xmax0, q3c_coord_t *ymax0, q3c_coord_t *points, char *multi_flag) { const q3c_coord_t xmin = *xmin0, xmax = *xmax0, ymin = *ymin0, ymax = *ymax0; if (xmin < -Q3C_HALF) { if (ymin < -Q3C_HALF) { points[0] = xmax; points[1] = ymin; points[2] = xmin; points[3] = ymax; *multi_flag = 2; *xmin0 = -Q3C_HALF; *ymin0 = -Q3C_HALF; } else { if (ymax > Q3C_HALF) { points[0] = xmax; points[1] = ymax; points[2] = xmin; points[3] = ymin; *multi_flag = 2; *xmin0 = -Q3C_HALF; *ymax0 = Q3C_HALF; } else { points[0] = xmin; points[1] = (ymin + ymax) / 2; *multi_flag = 1; *xmin0 = -Q3C_HALF; } } } else { if (xmax > Q3C_HALF) { if (ymin < -Q3C_HALF) { points[0] = xmin; points[1] = ymin; points[2] = xmax; points[3] = ymax; *multi_flag = 2; *xmax0 = Q3C_HALF; *ymin0 = -Q3C_HALF; } else { if (ymax > Q3C_HALF) { points[0] = xmin; points[1] = ymax; points[2] = xmax; points[3] = ymin; *multi_flag = 2; *xmax0 = Q3C_HALF; *ymax0 = Q3C_HALF; } else { points[0] = xmax; points[1] = (ymin + ymax) / 2; *multi_flag = 1; *xmax0 = Q3C_HALF; } } } else { if (ymin < -Q3C_HALF) { points[0] = (xmin + xmax) / 2; points[1] = ymin; *multi_flag = 1; *ymin0 = -Q3C_HALF; } else { if (ymax > Q3C_HALF) { points[0] = (xmin + xmax) / 2; points[1] = ymax; *multi_flag = 1; *ymax0 = Q3C_HALF; } else { *multi_flag = 0; } } } } } /* Get the list of 4 ipix ranges * which decsribe the neighborhood of a given point * specified by q3c_region * ra in degrees, dec in degrees, radius in degrees * strictly 0<=ra<360 and -90<=dec<=90 */ void q3c_get_nearby(struct q3c_prm *hprm, q3c_region region, void *region_data, q3c_ipix_t *ipix) { q3c_coord_t xmin, xmax, ymin, ymax, xesize, yesize, points[4]; q3c_ipix_t nside = hprm->nside, *xbits = hprm->xbits, *ybits = hprm->ybits, *ipix_cur = ipix, ipix0, xi, yi, n0, n1, ixmin, ixmax, iymin, iymax, xistack[4], yistack[4], facestack[4], nstack[4]; char face_num, face_num0, multi_flag; int i, nistack = 0; const q3c_coord_t q3c_lg2 = Q3C_LG2; if (q3c_too_big_check(region, region_data)) { /* the whole sky */ q3c_ipix_t maxval = 6*(nside*nside); *(ipix_cur++) = -1 ; *(ipix_cur++) = maxval; for(i = 1; i < 4; i++ ) { *(ipix_cur++) = 1 ; *(ipix_cur++) = -1; } return; } face_num = q3c_get_region_facenum(region, region_data); face_num0 = face_num; q3c_fast_get_xy_minmax(face_num, region, region_data, &xmin, &xmax, &ymin, &ymax); /* xmin, xmax, ymin, ymax are in the coordinate system of the cube face * where -0.5<=x<=0.5 and -0.5<=y<=0.5 */ #ifdef Q3C_DEBUG fprintf(stderr, "XMIN: %f XMAX: %f YMIN: %f YMAX: %f\n", xmin, xmax, ymin, ymax); #endif q3c_multi_face_check(&xmin, &ymin, &xmax, &ymax, points, &multi_flag); if (multi_flag == 0) { xesize = xmax - xmin; yesize = ymax - ymin; xesize = xesize > yesize ? xesize : yesize; if (xesize * nside < 1) /* If the region is too small */ { xesize = 1 / (q3c_coord_t)nside; } n0 = 1 << ((q3c_ipix_t)(-q3c_ceil(q3c_log(xesize) / q3c_lg2))); /* n0 is now the level of quadtree for which the minimal * element is >~ our ellipse */ ixmin = (Q3C_HALF + xmin) * n0; ixmax = (Q3C_HALF + xmax) * n0; iymin = (Q3C_HALF + ymin) * n0; iymax = (Q3C_HALF + ymax) * n0; ixmax = (ixmax == n0 ? n0 - 1 : ixmax); iymax = (iymax == n0 ? n0 - 1 : iymax); n1 = nside / n0; if (iymin == iymax) { if (ixmin == ixmax) { xistack[0] = (q3c_ipix_t)(ixmin * n1); yistack[0] = (q3c_ipix_t)(iymin * n1); facestack[0] = face_num; nstack[0] = n1; nistack = 1; } else { xistack[0] = (q3c_ipix_t)(ixmin * n1); yistack[0] = (q3c_ipix_t)(iymin * n1); facestack[0] = face_num; nstack[0] = n1; xistack[1] = (q3c_ipix_t)(ixmax * n1); yistack[1] = (q3c_ipix_t)(iymin * n1); facestack[1] = face_num; nstack[1] = n1; nistack = 2; } } else { if (ixmin == ixmax) { xistack[0] = (q3c_ipix_t)(ixmin * n1); yistack[0] = (q3c_ipix_t)(iymin * n1); facestack[0] = face_num; nstack[0] = n1; xistack[1] = (q3c_ipix_t)(ixmin * n1); yistack[1] = (q3c_ipix_t)(iymax * n1); facestack[1] = face_num; nstack[1] = n1; nistack = 2; } else { xistack[0] = (q3c_ipix_t)(ixmin * n1); yistack[0] = (q3c_ipix_t)(iymin * n1); facestack[0] = face_num; nstack[0] = n1; xistack[1] = (q3c_ipix_t)(ixmin * n1); yistack[1] = (q3c_ipix_t)(iymax * n1); facestack[1] = face_num; nstack[1] = n1; xistack[2] = (q3c_ipix_t)(ixmax * n1); yistack[2] = (q3c_ipix_t)(iymin * n1); facestack[2] = face_num; nstack[2] = n1; xistack[3] = (q3c_ipix_t)(ixmax * n1); yistack[3] = (q3c_ipix_t)(iymax * n1); facestack[3] = face_num; nstack[3] = n1; nistack = 4; } } } else { if (multi_flag == 1) { xesize = xmax - xmin; yesize = ymax - ymin; xesize = xesize > yesize ? xesize : yesize; if (xesize * nside < 1) /* If the region is too small */ { xesize = 1 / (q3c_coord_t)nside; } n0 = 1 << ((q3c_ipix_t)(-q3c_ceil(q3c_log(xesize) / q3c_lg2))); /* n0 is now the level of quadtree for which the minimal * element is >~ our ellipse */ ixmin = (Q3C_HALF + xmin) * n0; ixmax = (Q3C_HALF + xmax) * n0; iymin = (Q3C_HALF + ymin) * n0; iymax = (Q3C_HALF + ymax) * n0; ixmax = (ixmax == n0 ? n0 - 1 : ixmax); iymax = (iymax == n0 ? n0 - 1 : iymax); n1 = nside / n0; if (ixmin == ixmax) { if (iymin == iymax) { xistack[0] = (q3c_ipix_t)(ixmin * n1); yistack[0] = (q3c_ipix_t)(iymin * n1); facestack[0] = face_num; nstack[0] = n1; nistack = 1; } else { xistack[0] = (q3c_ipix_t)(ixmin * n1); yistack[0] = (q3c_ipix_t)(iymin * n1); facestack[0] = face_num; nstack[0] = n1; xistack[1] = (q3c_ipix_t)(ixmin * n1); yistack[1] = (q3c_ipix_t)(iymax * n1); facestack[1] = face_num; nstack[1] = n1; nistack = 2; } } else { xistack[0] = (q3c_ipix_t)(ixmin * n1); yistack[0] = (q3c_ipix_t)(iymin * n1); facestack[0] = face_num; nstack[0] = n1; xistack[1] = (q3c_ipix_t)(ixmax * n1); yistack[1] = (q3c_ipix_t)(iymin * n1); facestack[1] = face_num; nstack[1] = n1; nistack = 2; } face_num = q3c_xy2facenum(2 * points[0], 2 * points[1], face_num0); q3c_fast_get_xy_minmax(face_num, region, region_data, &xmin, &xmax, &ymin, &ymax); xmax = (xmax > Q3C_HALF ? Q3C_HALF : xmax); xmin = (xmin < -Q3C_HALF ? -Q3C_HALF : xmin); ymax = (ymax > Q3C_HALF ? Q3C_HALF : ymax); ymin = (ymin < -Q3C_HALF ? -Q3C_HALF : ymin); xesize = xmax - xmin; yesize = ymax - ymin; xesize = xesize > yesize ? xesize : yesize; if (xesize * nside < 1) /* If the region is too small */ { xesize = 1 / (q3c_coord_t)nside; } n0 = 1 << ((q3c_ipix_t)(-q3c_ceil(q3c_log(xesize) / q3c_lg2))); /* n0 is now the level of quadtree for which the minimal * element is >~ our ellipse */ ixmin = (Q3C_HALF + xmin) * n0; ixmax = (Q3C_HALF + xmax) * n0; iymin = (Q3C_HALF + ymin) * n0; iymax = (Q3C_HALF + ymax) * n0; ixmax = (ixmax == n0 ? n0 - 1 : ixmax); iymax = (iymax == n0 ? n0 - 1 : iymax); n1 = nside / n0; if (ixmin == ixmax) { if (iymin == iymax) { xistack[nistack] = (q3c_ipix_t)(ixmin * n1); yistack[nistack] = (q3c_ipix_t)(iymin * n1); facestack[nistack] = face_num; nstack[nistack++] = n1; } else { xistack[nistack] = (q3c_ipix_t)(ixmin * n1); yistack[nistack] = (q3c_ipix_t)(iymin * n1); facestack[nistack] = face_num; nstack[nistack++] = n1; xistack[nistack] = (q3c_ipix_t)(ixmin * n1); yistack[nistack] = (q3c_ipix_t)(iymax * n1); facestack[nistack] = face_num; nstack[nistack++] = n1; } } else { xistack[nistack] = (q3c_ipix_t)(ixmin * n1); yistack[nistack] = (q3c_ipix_t)(iymin * n1); facestack[nistack] = face_num; nstack[nistack++] = n1; xistack[nistack] = (q3c_ipix_t)(ixmax * n1); yistack[nistack] = (q3c_ipix_t)(iymin * n1); facestack[nistack] = face_num; nstack[nistack++] = n1; } } else { xesize = xmax - xmin; yesize = ymax - ymin; xesize = xesize > yesize ? xesize : yesize; if (xesize * nside < 1) /* If the region is too small */ { xesize=1 / (q3c_coord_t)nside; } n0 = 1 << ((q3c_ipix_t)(-q3c_ceil(q3c_log(xesize) / q3c_lg2))); /* n0 is now the level of quadtree for which the minimal * element is >~ our ellipse */ ixmin = (Q3C_HALF + xmin) * n0; ixmax = (Q3C_HALF + xmax) * n0; iymin = (Q3C_HALF + ymin) * n0; iymax = (Q3C_HALF + ymax) * n0; ixmax = (ixmax == n0 ? n0 - 1 : ixmax); iymax = (iymax == n0 ? n0 - 1 : iymax); n1 = nside / n0; xistack[0] = (q3c_ipix_t)(ixmin * n1); yistack[0] = (q3c_ipix_t)(iymin * n1); facestack[0] = face_num; nstack[0] = n1; nistack = 1; face_num = q3c_xy2facenum(2 * points[0], 2 * points[1], face_num0); q3c_fast_get_xy_minmax(face_num, region, region_data, &xmin, &xmax, &ymin, &ymax); xmax = (xmax > Q3C_HALF ? Q3C_HALF : xmax); xmin = (xmin < -Q3C_HALF ? -Q3C_HALF : xmin); ymax = (ymax > Q3C_HALF ? Q3C_HALF : ymax); ymin = (ymin < -Q3C_HALF ? -Q3C_HALF : ymin); xesize = xmax - xmin; yesize = ymax - ymin; xesize = xesize > yesize ? xesize : yesize; if (xesize * nside < 1) /* If the region is too small */ { xesize=1 / (q3c_coord_t)nside; } n0 = 1 << ((q3c_ipix_t)(-q3c_ceil(q3c_log(xesize) / q3c_lg2))); /* n0 is now the level of quadtree for which the minimal * element is >~ our ellipse */ ixmin = (Q3C_HALF + xmin) * n0; ixmax = (Q3C_HALF + xmax) * n0; iymin = (Q3C_HALF + ymin) * n0; iymax = (Q3C_HALF + ymax) * n0; ixmax = (ixmax == n0 ? n0 - 1 : ixmax); iymax = (iymax == n0 ? n0 - 1 : iymax); n1 = nside / n0; xistack[1] = (q3c_ipix_t)(ixmin * n1); yistack[1] = (q3c_ipix_t)(iymin * n1); facestack[1] = face_num; nstack[1] = n1; nistack = 2; face_num = q3c_xy2facenum(2 * points[2], 2 * points[3], face_num0); q3c_fast_get_xy_minmax(face_num, region, region_data, &xmin, &xmax, &ymin, &ymax); xmax = (xmax > Q3C_HALF ? Q3C_HALF : xmax); xmin = (xmin < -Q3C_HALF ? -Q3C_HALF : xmin); ymax = (ymax > Q3C_HALF ? Q3C_HALF : ymax); ymin = (ymin < -Q3C_HALF ? -Q3C_HALF : ymin); xesize = xmax - xmin; yesize = ymax - ymin; xesize = xesize > yesize ? xesize : yesize; if (xesize * nside < 1) /* If the region is too small */ { xesize = 1 / (q3c_coord_t)nside; } n0 = 1 << ((q3c_ipix_t)(-q3c_ceil(q3c_log(xesize) / q3c_lg2))); /* n0 is now the level of quadtree for which the minimal * element is >~ our ellipse */ ixmin = (Q3C_HALF + xmin) * n0; ixmax = (Q3C_HALF + xmax) * n0; iymin = (Q3C_HALF + ymin) * n0; iymax = (Q3C_HALF + ymax) * n0; ixmax = (ixmax == n0 ? n0-1 : ixmax); iymax = (iymax == n0 ? n0-1 : iymax); n1 = nside / n0; xistack[2] = (q3c_ipix_t)(ixmin * n1); yistack[2] = (q3c_ipix_t)(iymin * n1); facestack[2] = face_num; nstack[2] = n1; nistack = 3; } } #ifdef Q3C_DEBUG fprintf(stderr, "MULTI_FLAG: %d\n", multi_flag); #endif /* Now I produce the final pixel value by converting x and y values to bitfields and combining them by interleaving, using the predefined arrays xbits and ybits */ for(i = 0; i < nistack ; i++) { face_num = facestack[i]; xi = xistack[i]; yi = yistack[i]; n1 = nstack[i]; ipix0 = q3c_xiyi2ipix(nside, xbits, ybits, face_num, xi, yi); *(ipix_cur++) = ipix0; *(ipix_cur++) = ipix0 + n1 * n1 - 1; /* IMPORTANT!! I subtract 1 to make after the query with <=ipix<= */ } for(; i < 4; i++) { *(ipix_cur++) = 1; *(ipix_cur++) = -1; } } /* Converts integer coordinates on cube face to * ipix number by performing bit interleaving */ q3c_ipix_t q3c_xiyi2ipix(q3c_ipix_t nside, q3c_ipix_t *xbits, q3c_ipix_t *ybits, char face_num, q3c_ipix_t xi, q3c_ipix_t yi) { return ((q3c_ipix_t)face_num) * nside * nside + xbits[xi % Q3C_I1] + ybits[yi % Q3C_I1] + (xbits[(xi >> Q3C_INTERLEAVED_NBITS) % Q3C_I1] + ybits[(yi >> Q3C_INTERLEAVED_NBITS) % Q3C_I1]) * Q3C_I1 * Q3C_I1; /*8byte computation*/ } /* convert ipix number ra,dec in degrees */ void q3c_ipix2ang(struct q3c_prm *hprm, q3c_ipix_t ipix, q3c_coord_t *ra, q3c_coord_t *dec) { q3c_ipix_t nside = hprm->nside, ipix1, *xbits1=hprm->xbits1, *ybits1 = hprm->ybits1, i2, i3, x0, y0; q3c_coord_t x, y, ra0; char face_num = ipix / (nside * nside); const q3c_ipix_t ii1 = 1 << (Q3C_INTERLEAVED_NBITS / 2); ipix1 = ipix % (nside * nside); i3 = ipix1 % Q3C_I1; i2 = ipix1 / Q3C_I1; x0 = xbits1[i3]; y0 = ybits1[i3]; i3 = i2 % Q3C_I1; i2 = i2 / Q3C_I1; x0 += xbits1[i3] * ii1; y0 += ybits1[i3] * ii1; i3 = i2 % Q3C_I1; i2 = i2 / Q3C_I1; x0 += xbits1[i3] * ii1 * ii1; y0 += ybits1[i3] * ii1 * ii1; i3 = i2 % Q3C_I1; i2 = i2 / Q3C_I1; x0 += xbits1[i3] * ii1 * ii1 * ii1; y0 += ybits1[i3] * ii1 * ii1 * ii1; /* BIT_PRINT8(ipix); BIT_PRINT8ix(x0); BIT_PRINT8iy(y0); */ x = (((q3c_coord_t)x0) / nside) * 2 - 1; y = (((q3c_coord_t)y0) / nside) * 2 - 1; /* Now -1= 1) && (face_num <= 4)) { ra0 = q3c_atan(x); *dec = Q3C_RADEG * q3c_atan(y * q3c_cos(ra0)); ra0 = ra0 * Q3C_RADEG + ((q3c_coord_t)face_num - 1) * 90; if (ra0 < 0) { ra0 += (q3c_coord_t)360; } *ra = ra0; } else { if (face_num == 0) { ra0 = Q3C_RADEG * (q3c_atan2(-x, y) + Q3C_PI); *dec = Q3C_RADEG * q3c_atan( 1 / q3c_sqrt(x * x + y * y)); *ra = ra0; } if (face_num == 5) { ra0 = Q3C_RADEG * (q3c_atan2(-x, -y) + Q3C_PI); *dec = -Q3C_RADEG * q3c_atan(1 / q3c_sqrt(x * x + y * y)); *ra = ra0; } } /*fprintf(stdout,"XXX %d %.20Lf %.20Lf\n",face_num,*ra,*dec);*/ } /* Compute the area of a given Q3C pixel for a given ipix and depth * depth here goes from 1 to 30 in the case of 8byte ints * and means depth == 1 pixel is the the smallest pixel, and depth== 30 pixel * is the whole cube face */ q3c_coord_t q3c_pixarea(struct q3c_prm *hprm, q3c_ipix_t ipix, int depth) { /* The first part of this function's text was taken from q3c_ipix2ang() * In the future I should split the ipix2xy and xy2ang codepaths * and put them in the separate functions */ q3c_ipix_t nside = hprm->nside, ipix1, *xbits1=hprm->xbits1, *ybits1 = hprm->ybits1, i2, i3, x0, y0, idx, ix1, iy1, ix2, iy2; q3c_coord_t x1, y1, x2, y2, result; /* char face_num = ipix / (nside * nside);*/ const q3c_ipix_t ii1 = 1 << (Q3C_INTERLEAVED_NBITS / 2); ipix1 = ipix % (nside * nside); i3 = ipix1 % Q3C_I1; i2 = ipix1 / Q3C_I1; x0 = xbits1[i3]; y0 = ybits1[i3]; i3 = i2 % Q3C_I1; i2 = i2 / Q3C_I1; x0 += xbits1[i3] * ii1; y0 += ybits1[i3] * ii1; i3 = i2 % Q3C_I1; i2 = i2 / Q3C_I1; x0 += xbits1[i3] * ii1 * ii1; y0 += ybits1[i3] * ii1 * ii1; i3 = i2 % Q3C_I1; i2 = i2 / Q3C_I1; x0 += xbits1[i3] * ii1 * ii1 * ii1; y0 += ybits1[i3] * ii1 * ii1 * ii1; /* BIT_PRINT8(ipix); BIT_PRINT8ix(x0); BIT_PRINT8iy(y0); */ ix1 = (x0 >> depth) << depth; iy1 = (y0 >> depth) << depth; idx = ((q3c_ipix_t)1)<1e-4) { result = ( q3c_acos(x1 * y2) - q3c_acos(x1 * y1) ) + ( q3c_acos(x2 * y1) - q3c_acos(x2 * y2) ); } else { result = q3c_asin( x1*(y1-y2)*(y1+y2)/(y2*sqrt(1-x1*x1*y1*y1)+y1*sqrt(1-x1*x1*y2*y2)))+ q3c_asin( x2*(y2-y1)*(y1+y2)/(y1*sqrt(1-x2*x2*y2*y2)+y2*sqrt(1-x2*x2*y1*y1))); } result = q3c_fabs(result); return result; } /* Find to which facenum a given x,y point on a given face_num0 corresponds * The input x, y should be >=-1 and <=1 */ char q3c_xy2facenum(q3c_coord_t x, q3c_coord_t y, char face_num0) { q3c_coord_t ra = 0, dec = 0; /* I do the initialization since gcc warns about probable not * initialization of ra and dec */ /* This code has been cut out from ipix2ang BEGIN */ if ((face_num0 >= 1) && (face_num0 <= 4)) { ra = q3c_atan(x); dec = Q3C_RADEG * q3c_atan(y * q3c_cos(ra)); ra = ra * Q3C_RADEG + ((q3c_coord_t)face_num0 - 1) * 90; if (ra < 0) { ra += (q3c_coord_t)360; } } else { if (face_num0 == 0) { ra = Q3C_RADEG * q3c_atan2(x, -y); dec = Q3C_RADEG * q3c_atan(1 / q3c_sqrt(x * x + y * y)); if (ra < 0) { ra += (q3c_coord_t)360; } } if (face_num0 == 5) { ra = Q3C_RADEG * q3c_atan2(x, y); dec = -Q3C_RADEG * q3c_atan(1 / q3c_sqrt(x * x + y * y)); if (ra < 0) { ra += (q3c_coord_t)360; } } } /* This code has been cut out from ipix2ang END */ return q3c_get_facenum(ra,dec); } /* Initialization of the Q3CUBE structure * hprm -- Pointer to main Q3C structure * nside -- Nside parameter (number of quadtree subdivisions) */ void init_q3c1(struct q3c_prm *hprm, q3c_ipix_t nside) { int i, k, m, l; const q3c_ipix_t nbits = Q3C_INTERLEAVED_NBITS; /* Number of bits used when interleaving bits * so the size of each allocated array will be 2^16 */ q3c_ipix_t *xbits, *ybits, *xbits1, *ybits1, xybits_size = 1 << nbits; hprm->nside = nside; xbits = malloc((xybits_size) * sizeof(q3c_ipix_t)); hprm->xbits = xbits; ybits = malloc((xybits_size) * sizeof(q3c_ipix_t)); hprm->ybits = ybits; xbits1 = malloc((xybits_size) * sizeof(q3c_ipix_t)); hprm->xbits1 = xbits1; ybits1 = malloc((xybits_size) * sizeof(q3c_ipix_t)); hprm->ybits1 = ybits1; xbits[0] = 0; xbits[1] = 1; ybits[0] = 0; ybits[1] = 2; /* BIT_PRINT8(xbits[0]); BIT_PRINT8(xbits[1]); */ for(i = 2, m = 1; i < xybits_size; i++) { k = i / m; if (k == 2) { xbits[i] = xbits[i / 2] * 4; ybits[i] = 2 * xbits[i]; m *= 2; /* BIT_PRINT8(xbits[i]); fprintf(stdout,"%lld\n",ybits[i]); */ continue; } else { xbits[i] = xbits[m] + xbits[i % m]; ybits[i] = 2 * xbits[i]; /* BIT_PRINT8(xbits[i]); fprintf(stdout,"%lld\n",ybits[i]); */ continue; } } xbits1[0] = 0; xbits1[1] = 1; /* fprintf(stdout,"%lld\n",xbits1[0]); fprintf(stdout,"%lld\n",xbits1[1]); BIT_PRINT8(xbits[0]); BIT_PRINT8(xbits[1]); */ for(i = 2, m = 2, l = 2; i < xybits_size; i++) { k = i / m; if (k < 2) { xbits1[i] = xbits1[i - m]; } else { if (k == 4) { xbits1[i] = xbits1[0]; m *= 4; l *= 2; } else xbits1[i] = xbits1[i - 2 * m] + l; } /* fprintf(stdout,"%lld\n",xbits1[i]); */ } ybits1[0] = 0; ybits1[1] = 0; /* fprintf(stdout,"%lld\n",ybits1[0]); fprintf(stdout,"%lld\n",ybits1[1]); */ for(i = 2, m = 1, l = 1; i < xybits_size; i++) { k = i / m; if (k < 2) { ybits1[i] = ybits1[i - m]; } else { if (k == 4) { ybits1[i] = ybits1[0]; m *= 4; l *= 2; } else ybits1[i] = ybits1[i - 2 * m] + l; } /*fprintf(stdout,"%lld\n",ybits1[i]);*/ } } /* Dump the definitions of main Q3C arrays into a .c file */ void q3c_dump_prm(struct q3c_prm *hprm,char *filename) { FILE *fp = fopen(filename, "w"); int i, x = 1 << Q3C_INTERLEAVED_NBITS; q3c_ipix_t *xbits = hprm->xbits, *ybits = hprm->ybits, *xbits1 = hprm->xbits1, *ybits1 = hprm->ybits1; fprintf(fp, "#include \"common.h\"\n"); fprintf(fp, "\nq3c_ipix_t ____xbits[%d]={", x); fprintf(fp, " "); for(i = 0; i < x; i++) { if (i > 0) { fprintf(fp, ","); } fprintf(fp, "Q3C_CONST("Q3C_IPIX_FMT")", xbits[i]); } fprintf(fp, "};"); fprintf(fp, "\nq3c_ipix_t ____ybits[%d]={",x); fprintf(fp, " "); for(i = 0; i < x; i++) { if (i > 0) { fprintf(fp, ","); } fprintf(fp, "Q3C_CONST("Q3C_IPIX_FMT")", ybits[i]); } fprintf(fp, "};"); fprintf(fp, "\nq3c_ipix_t ____xbits1[%d]={", x); fprintf(fp, " "); for(i = 0; i < x; i++) { if (i > 0) { fprintf(fp, ","); } fprintf(fp, "Q3C_CONST("Q3C_IPIX_FMT")", xbits1[i]); } fprintf(fp, "};"); fprintf(fp, "\nq3c_ipix_t ____ybits1[%d]={",x); fprintf(fp, " "); for(i = 0; i < x; i++) { if (i > 0) { fprintf(fp, ","); } fprintf(fp, "Q3C_CONST("Q3C_IPIX_FMT")", ybits1[i]); } fprintf(fp, "};\n"); fprintf(fp, "struct q3c_prm hprm={" Q3C_IPIX_FMT",____xbits,____ybits,____xbits1,____ybits1};\n", hprm->nside); fclose(fp); } /* That function computes the coefficients of the 2nd order poly * describint the ellipse * (axx*x^2+ayy*y^2+2*axy*(x*y)+ax*x+ay*y+a=0) * produced on the cube face by the cone search */ void q3c_get_poly_coefs(char face_num, q3c_coord_t ra0, q3c_coord_t dec0, q3c_coord_t rad, q3c_coord_t *axx, q3c_coord_t *ayy, q3c_coord_t *axy, q3c_coord_t *ax, q3c_coord_t *ay, q3c_coord_t *a) { q3c_coord_t ra1, dec1, sr, cr, cd, sd, crad, p = 1; dec1 = dec0 * Q3C_DEGRA; sd = q3c_sin(dec1); cd = q3c_cos(dec1); crad = q3c_cos(Q3C_DEGRA * rad); if ((face_num >= 1) && (face_num <= 4)) { ra1 = (ra0 - (face_num - 1 ) * 90) * Q3C_DEGRA; sr = q3c_sin(ra1); cr = q3c_cos(ra1); *axx = (crad * crad - sr * sr * cd * cd); *ayy = (crad * crad - sd * sd); *axy = (-2 * sr * sd * cd); *ax = (-2 * sr * cr * cd * cd); *ay = (-2 * cr * sd * cd); *a = crad * crad - cr * cr * cd * cd; } else { if(face_num > 0) p = -1; /* p=1 for North Polar cap & p=-1 for South Polar cap */ ra1 = ra0 * Q3C_DEGRA; sr = q3c_sin(ra1); cr = q3c_cos(ra1); *axx = (crad * crad - sr * sr * cd * cd); *ayy = (crad * crad - cr * cr * cd * cd); *axy = (2 * p * sr * cr * cd * cd); *ax = -(2 * p * sr * sd * cd); *ay = (2 * cr * sd * cd); *a = crad * crad - sd * sd; } /* By this step I convert the coefficient of the polynom to the * coordinate system on the cube face where x[-0.5,0.5] y[-0.5,0.5] * I should incorporate this formulae directly with the formulae * from the top */ (*axx) *= 4; (*ayy) *= 4; (*axy) *= 4; (*ax) *= 2; (*ay) *= 2; } /* That function determines the minimal, maximal x and y of the ellipse with * the given coefficients (axx,ayy,axy...). All the computations are done on * the cube face. */ void q3c_get_xy_minmax(q3c_coord_t axx, q3c_coord_t ayy, q3c_coord_t axy, q3c_coord_t ax, q3c_coord_t ay, q3c_coord_t a, q3c_coord_t *xmin, q3c_coord_t *xmax, q3c_coord_t *ymin, q3c_coord_t *ymax, char *full_flag) { q3c_coord_t tmp0, tmp1, tmp2; tmp0 = axy * ax - 2 * axx * ay; tmp1 = 2 * q3c_sqrt(axx * (axx * ay * ay - axy * ax * ay - 4 * axx * ayy * a + axy * axy * a + ax * ax * ayy)); tmp2 = 4 * axx * ayy - axy * axy; /* * If the discriminant of the curve is smaller than a given threshold, it * means that the curve is (or is close to) a parabola or a hyperbola * In that case I include the whole face, because * I don't know how to compute the intersection of the cube * and the hyperbola */ if (tmp2< Q3C_MINDISCR) { *xmax = 2*Q3C_HALF; *ymax = 2*Q3C_HALF; *xmin = -2*Q3C_HALF; *ymin = -2*Q3C_HALF; *full_flag = 1; return; } *ymin = (tmp0 - tmp1) / tmp2; *ymax = (tmp0 + tmp1) / tmp2; tmp0 = axy * ay - 2 * ayy * ax; tmp1 = 2 * q3c_sqrt(ayy * (ayy * ax * ax - axy * ax * ay - 4 * axx * ayy * a + axy * axy * a + ay * ay * axx)); *xmin = (tmp0 - tmp1) / tmp2; *xmax = (tmp0 + tmp1) / tmp2; //fprintf(stdout,"xmin=%.10Lf xmax=%.10Lf ymin=%.10Lf ymax=%.10Lf\n", *xmin, *xmax, *ymin, *ymax); } /* Check if the region is too big for Q3C to handle properly * The limit here is related to the number of faces the region is * allowed to intersect. Q3C can't handle more than 3 faces. * So for such big regions, we just switch to scan of the whole table */ char q3c_too_big_check(q3c_region region, void * region_data) { switch (region) { case Q3C_CIRCLE: { q3c_circle_region circle = *(q3c_circle_region *)region_data; if (circle.rad>Q3C_MAXRAD) { return 1; } else { return 0; } break; } case Q3C_ELLIPSE: { q3c_ellipse_region ellipse = *(q3c_ellipse_region *)region_data; if (ellipse.rad>Q3C_MAXRAD) { return 1; } else { return 0; } break; } case Q3C_POLYGON: { } } /* should not happen */ return 0; /* DUMMY */ } /* Get the xmin,ymin,xmax,ymax box on a given face for a given region */ void q3c_fast_get_xy_minmax(char face_num, q3c_region region, void *region_data, q3c_coord_t *xmin, q3c_coord_t *xmax, q3c_coord_t *ymin, q3c_coord_t *ymax) { switch (region) { case Q3C_CIRCLE: { q3c_circle_region circle = *(q3c_circle_region *)region_data; q3c_fast_get_circle_xy_minmax(face_num, circle.ra, circle.dec, circle.rad, xmin, xmax, ymin, ymax); break; } case Q3C_ELLIPSE: { q3c_ellipse_region ellipse = *(q3c_ellipse_region *)region_data; q3c_fast_get_ellipse_xy_minmax(face_num, ellipse.ra, ellipse.dec, ellipse.rad, ellipse.e, ellipse.PA, xmin, xmax, ymin, ymax); break; } case Q3C_POLYGON: { } } } /* That function gets the min, max x and y of the ellipse with the given * coefficients (axx,ayy,axy...). All the computations are done on the cube face. * That function take as arguments only the ra, dec of the center of cone search * and radius. */ void q3c_fast_get_circle_xy_minmax(char face_num, q3c_coord_t ra0, q3c_coord_t dec0, q3c_coord_t rad, q3c_coord_t *xmin, q3c_coord_t *xmax, q3c_coord_t *ymin, q3c_coord_t *ymax) { q3c_coord_t tmp0, tmp1, tmp2, ra1, dec1, sr, cr ,sd, cd, srad, crad, crad2, cd2, scd; dec1 = dec0 * Q3C_DEGRA; q3c_sincos(dec1, sd, cd); cd2 = cd * cd; q3c_sincos(Q3C_DEGRA * rad, srad, crad); crad2 = crad * crad; /* tmp1, tmp2 variables in this function will * be related to the coefficients of quadratic equations * for xmin,xmax,ymin,ymax */ if ((face_num >= 1) && (face_num <= 4)) { ra1 = (ra0 - (face_num - 1 ) * 90) * Q3C_DEGRA; q3c_sincos(ra1, sr, cr); tmp2 = 2 * ( cd2 * cr * cr - srad * srad ); /* tmp2 is the discriminant of the curve on the face * zero or negative values mean parabolas or hyperbolas * in that case we better take whole face */ if (tmp2 < Q3C_MINDISCR) { *xmin = -Q3C_HALF; *ymin = -Q3C_HALF; *xmax = Q3C_HALF; *ymax = Q3C_HALF; return; } tmp0 = sr * cr *cd2; tmp1 = srad * q3c_sqrt(cd2 - srad * srad); *xmin = (tmp0 - tmp1) / tmp2; *xmax = (tmp0 + tmp1) / tmp2; tmp0 = cr * cd * sd; tmp1 = srad * q3c_sqrt(crad2 - cd2 * sr * sr); *ymin = (tmp0 - tmp1) / tmp2; *ymax = (tmp0 + tmp1) / tmp2; } else { ra1 = ra0 * Q3C_DEGRA; q3c_sincos(ra1, sr, cr); scd = sd * cd; tmp0 = scd * sr; tmp1 = srad * q3c_sqrt(crad2 - cr * cr * cd2); tmp2 = 2 * (crad2 - cd2); if (tmp2 < Q3C_MINDISCR) { /* tmp2 is the discriminant of the curve on the face * zero or negative values mean parabolas or hyperbolas * in that case we better take whole face */ *xmin = -Q3C_HALF; *ymin = -Q3C_HALF; *xmax = Q3C_HALF; *ymax = Q3C_HALF; return; } if (face_num == 5) tmp0 = -tmp0; *xmin = (tmp0 - tmp1) / tmp2; *xmax = (tmp0 + tmp1) / tmp2; tmp0 = - scd * cr; tmp1 = srad * q3c_sqrt(crad2 - sr * sr * cd2); *ymin = (tmp0 - tmp1) / tmp2; *ymax = (tmp0 + tmp1) / tmp2; } } /* Get the xmin,ymin,xmax,ymax on equatorial cube faces for * elliptic queries */ void q3c_fast_get_equatorial_ellipse_xy_minmax(q3c_coord_t alpha, q3c_coord_t delta, q3c_coord_t d, q3c_coord_t e, q3c_coord_t PA, q3c_coord_t *ymin, q3c_coord_t *ymax, q3c_coord_t *zmin, q3c_coord_t *zmax) { /* Thank you, Maple! */ q3c_coord_t t1 = q3c_sin(alpha); q3c_coord_t t2 = q3c_cos(alpha); q3c_coord_t t21 = q3c_sin(delta); q3c_coord_t t4 = q3c_cos(delta); q3c_coord_t t24 = q3c_sin(PA); q3c_coord_t t13 = q3c_cos(PA); q3c_coord_t t51 = q3c_sin(d); q3c_coord_t t8 = q3c_cos(d); q3c_coord_t t3 = t1*t2; q3c_coord_t t5 = t4*t4; q3c_coord_t t7 = 2.0*t3*t5; q3c_coord_t t9 = t8*t8; q3c_coord_t t12 = t1*t5; q3c_coord_t t14 = t13*t13; q3c_coord_t t15 = t2*t14; q3c_coord_t t22 = t21*t13; q3c_coord_t t23 = t2*t2; q3c_coord_t t34 = t5*t9; q3c_coord_t t39 = t24*t9; q3c_coord_t t47 = -t7-2.0*t3*t9+2.0*t12*t15-2.0*t12*t15*t9+4.0*t22*t23*t24-4.0*t15*t1+4.0*t1*t9*t15+2.0*t3+2.0*t3*t34-2.0*t22*t24+2.0*t22*t39-4.0*t21*t9*t13*t23*t24; q3c_coord_t t48 = e*e; q3c_coord_t t52 = t51*t51; q3c_coord_t t54 = t5*t14*t9; q3c_coord_t t61 = t23*t5; q3c_coord_t t62 = 2.0*t61; q3c_coord_t t63 = t23*t14; q3c_coord_t t67 = t23*t9; q3c_coord_t t69 = t61*t9; q3c_coord_t t71 = t14*t9; q3c_coord_t t73 = t1*t21; q3c_coord_t t77 = t73*t13*t2*t24*t9; q3c_coord_t t79 = t71*t23; q3c_coord_t t85 = t63*t34; q3c_coord_t t89 = -t62-4.0*t63+2.0*t63*t5-2.0*t67+2.0*t69-2.0*t71+4.0*t77+4.0*t79-4.0*t73*t13*t2*t24-2.0*t85+2.0*t14+2.0*t23; q3c_coord_t t92 = t89*t48-2.0+2.0*t9+t62; q3c_coord_t t93 = t1*t13; q3c_coord_t t96 = t21*t2; q3c_coord_t tmpy0 = t47*t48+t7; q3c_coord_t tmpy1 = -4.0*t52*(t9-1.0+t54+t5-t34)*t48+4.0*t52*(-1.0+t9+t5); q3c_coord_t tmpy2 = t92; q3c_coord_t tmpz0 = -2.0*(-t93*t24+t93*t39+t96+t96*t71-t96*t14-t96*t9)*t4*t48+2.0*t96*t4; q3c_coord_t tmpz1 = -4.0*t52*(t61-2.0*t79-t54+t67-2.0*t77-t5-t69+t71+t85+t34)*t48+4.0*t52*(t9+t61-t5); q3c_coord_t tmpz2 = t92; tmpy1 = q3c_sqrt(tmpy1); tmpy2 = (2 * tmpy2); tmpz1 = q3c_sqrt(tmpz1); tmpz2 = (2 * tmpz2); if (tmpy2 < Q3C_MINDISCR) { *ymin = -Q3C_HALF; *ymax = -Q3C_HALF; *zmin = Q3C_HALF; *zmax = Q3C_HALF; return; } *ymin = (tmpy0 - tmpy1) / tmpy2; *ymax = (tmpy0 + tmpy1) / tmpy2; *zmin = (tmpz0 - tmpz1) / tmpz2; *zmax = (tmpz0 + tmpz1) / tmpz2; } /* Get the xmin,ymin,xmax,ymax on polar cube faces for * elliptic queries * !!IMPORTANT!! for south pole the ycoordinates (1st) should be inverted */ void q3c_fast_get_polar_ellipse_xy_minmax(q3c_coord_t alpha, q3c_coord_t delta, q3c_coord_t d, q3c_coord_t e, q3c_coord_t PA, q3c_coord_t *ymin, q3c_coord_t *ymax, q3c_coord_t *zmin, q3c_coord_t *zmax) { /* Thank you, Maple! */ q3c_coord_t t1 = q3c_sin(alpha); q3c_coord_t t14 = q3c_cos(alpha); q3c_coord_t t2 = q3c_sin(delta); q3c_coord_t t19 = q3c_cos(delta); q3c_coord_t t12 = q3c_sin(PA); q3c_coord_t t7 = q3c_cos(PA); q3c_coord_t t25 = q3c_sin(d); q3c_coord_t t4 = q3c_cos(d); q3c_coord_t t3 = t1*t2; q3c_coord_t t5 = t4*t4; q3c_coord_t t6 = t3*t5; q3c_coord_t t8 = t7*t7; q3c_coord_t t10 = t8*t5; q3c_coord_t t13 = t7*t12; q3c_coord_t t15 = t13*t14; q3c_coord_t t21 = e*e; q3c_coord_t t26 = t25*t25; q3c_coord_t t28 = 2.0*t6*t15; q3c_coord_t t29 = t19*t19; q3c_coord_t t30 = t14*t14; q3c_coord_t t31 = t29*t30; q3c_coord_t t32 = t31*t5; q3c_coord_t t34 = 2.0*t10*t30; q3c_coord_t t35 = t30*t5; q3c_coord_t t36 = t31*t10; q3c_coord_t t46 = t29*(1.0-t5-t8+t10)*t21+t5-t29; q3c_coord_t t47 = t7*t1; q3c_coord_t t51 = t14*t2; q3c_coord_t tmpy0 = 2.0*(t6+t3*t8-t3*t10-t15+t13*t14*t5-t3)*t19*t21+2.0*t3*t19; q3c_coord_t tmpy1 = 4.0*t26*(-t5-t28-t32-t34+t35+t36+t31+t10)*t21-4.0*t26*(-t5+t31); q3c_coord_t tmpy2 = 2.0*t46; q3c_coord_t tmpz0 = 2.0*(-t47*t12+t47*t12*t5+t51*t10-t51*t5-t51*t8+t51)*t19*t21-2.0*t51*t19; q3c_coord_t tmpz1 = -4.0*t26*(-t28-t29*t8*t5-t29-t32-t34+t35+t36+t31+t29*t5+t10)*t21+4.0*t26*(t5-t29+t31); q3c_coord_t tmpz2 = 2.0*t46; tmpy1 = q3c_sqrt(tmpy1); tmpy2 = (2 * tmpy2); tmpz1 = q3c_sqrt(tmpz1); tmpz2 = (2 * tmpz2); if (tmpy2 < Q3C_MINDISCR) { *ymin = -Q3C_HALF; *ymax = -Q3C_HALF; *zmin = Q3C_HALF; *zmax = Q3C_HALF; return; } *ymin = (tmpy0 - tmpy1) / tmpy2; *ymax = (tmpy0 + tmpy1) / tmpy2; *zmin = (tmpz0 - tmpz1) / tmpz2; *zmax = (tmpz0 + tmpz1) / tmpz2; } /* get the xmin,xmax,ymin,ymax and polynomial coefficients for the ellipse query * and equatorial cube faces */ void q3c_fast_get_equatorial_ellipse_xy_minmax_and_poly_coefs(q3c_coord_t alpha, q3c_coord_t delta, q3c_coord_t d, q3c_coord_t e, q3c_coord_t PA, q3c_coord_t *ymin, q3c_coord_t *ymax, q3c_coord_t *zmin, q3c_coord_t *zmax, q3c_coord_t *ayy, q3c_coord_t *azz, q3c_coord_t *ayz, q3c_coord_t *ay, q3c_coord_t *az, q3c_coord_t *a) { /* Thank you, Maple! */ q3c_coord_t t1 = q3c_sin(delta); q3c_coord_t t2 = q3c_cos(d); q3c_coord_t t3 = t2*t2; q3c_coord_t t4 = t1*t3; q3c_coord_t t5 = q3c_cos(PA); q3c_coord_t t6 = q3c_cos(alpha); q3c_coord_t t7 = t6*t6; q3c_coord_t t9 = q3c_sin(PA); q3c_coord_t t13 = t5*t5; q3c_coord_t t14 = t6*t13; q3c_coord_t t15 = q3c_sin(alpha); q3c_coord_t t18 = t15*t3; q3c_coord_t t19 = t18*t14; q3c_coord_t t21 = q3c_cos(delta); q3c_coord_t t22 = t21*t21; q3c_coord_t t23 = t15*t22; q3c_coord_t t29 = t15*t6; q3c_coord_t t31 = t22*t3; q3c_coord_t t34 = t1*t5; q3c_coord_t t37 = t9*t3; q3c_coord_t t43 = 2.0*t29*t22; q3c_coord_t t44 = t7*t9; q3c_coord_t t47 = -4.0*t4*t5*t7*t9-4.0*t14*t15+4.0*t19+2.0*t14*t23-2.0*t14*t23*t3+2.0*t29+2.0*t29*t31-2.0*t34*t9+2.0*t34*t37-2.0*t29*t3-t43+4.0*t34*t44; q3c_coord_t t48 = e*e; q3c_coord_t t51 = q3c_sin(d); q3c_coord_t t52 = t51*t51; q3c_coord_t t53 = t22*t13; q3c_coord_t t54 = t53*t3; q3c_coord_t t61 = t15*t1; q3c_coord_t t62 = t61*t3; q3c_coord_t t63 = t5*t6; q3c_coord_t t64 = t63*t9; q3c_coord_t t65 = t62*t64; q3c_coord_t t67 = t13*t3; q3c_coord_t t70 = t7*t3; q3c_coord_t t71 = t53*t70; q3c_coord_t t74 = t22*t7; q3c_coord_t t75 = 2.0*t74; q3c_coord_t t78 = t74*t3; q3c_coord_t t80 = t67*t7; q3c_coord_t t87 = 4.0*t65-2.0*t67+2.0*t13-2.0*t71-2.0*t70-t75-4.0*t7*t13+2.0*t78+4.0*t80+2.0*t74*t13+2.0*t7-4.0*t61*t64; q3c_coord_t t90 = t87*t48-2.0+t75+2.0*t3; q3c_coord_t t91 = t1*t6; q3c_coord_t t94 = t15*t5; q3c_coord_t t101 = t91*t21; q3c_coord_t t111 = t9*t9; q3c_coord_t t112 = t3*t111; q3c_coord_t t113 = t15*t15; q3c_coord_t t117 = t52*t48; q3c_coord_t t124 = 2.0*t62*t63*t9*t48; q3c_coord_t t125 = t1*t1; q3c_coord_t t126 = t7*t125; q3c_coord_t t132 = t4*t5; q3c_coord_t t138 = t6*t3; q3c_coord_t t143 = t22*t52; q3c_coord_t t145 = t111*t6; q3c_coord_t t159 = t21*t9*t3; q3c_coord_t t160 = t5*t48; q3c_coord_t t163 = t67*t48; q3c_coord_t t165 = t52*t21; q3c_coord_t t167 = t165*t48; q3c_coord_t t170 = t21*t13*t3; q3c_coord_t t173 = t21*t111*t3; q3c_coord_t t186 = t113*t22; q3c_coord_t t190 = t113*t125; q3c_coord_t t197 = t125*t52; q3c_coord_t tmpy0 = t47*t48+t43; q3c_coord_t tmpy1 = -4.0*t52*(-1.0+t54+t3+t22-t31)*t48+4.0*t52*(-1.0+t22+t3); q3c_coord_t tmpy2 = t90; q3c_coord_t tmpz0 = -2.0*(-t91*t13-t91*t3+t94*t37+t91+t91*t67-t94*t9)*t21*t48+2.0*t101; q3c_coord_t tmpz1 = 4.0*t52*(-t67-t74-t70+t54+2.0*t80+t78-t71+t22-t31+2.0*t65)*t48+4.0*t52*(t3+t74-t22); q3c_coord_t tmpz2 = t90; *a = -t112*t113-t67*t113+t74*t52-t74*t117+t112*t113*t48+t124+t67*t126*t48-t67*t126-t112*t126; *ay = -2.0*t132*t44*t48+2.0*t132*t113*t9*t48+2.0*t138*t13*t15*t125*t48+2.0*t29*t143+2.0*t18*t145+2.0*t19-2.0*t18*t145*t48-2.0*t138*t13*t15*t125-2.0*t29*t143*t48-2.0*t138*t111*t15*t125; *az = -2.0*t159*t160*t15-2.0*t101*t163+2.0*t91*t165-2.0*t91*t167+2.0*t91*t170+2.0*t91*t173; *ayz = 2.0*t159*t160*t6-2.0*t61*t21*t163+2.0*t61*t165+2.0*t61*t173-2.0*t61*t167+2.0*t61*t170; *ayy = -t112*t7-t80+t186*t52+t112*t7*t48-t67*t190-t112*t190-t186*t117+t67*t190*t48-t124; *azz = t197+t53*t3*t48-t54-t197*t48-t22*t111*t3; tmpy1 = q3c_sqrt(tmpy1); tmpy2 = (2 * tmpy2); tmpz1 = q3c_sqrt(tmpz1); tmpz2 = (2 * tmpz2); *ymin = (tmpy0 - tmpy1) / tmpy2; *ymax = (tmpy0 + tmpy1) / tmpy2; *zmin = (tmpz0 - tmpz1) / tmpz2; *zmax = (tmpz0 + tmpz1) / tmpz2; /* reduce the values to the cube with edge length of 1 (instead of 2) */ *ayy*=-4; *azz*=-4; *ayz*=-4; *ay*=-2; *az*=-2; *a*=-1; } /* get the xmin,xmax,ymin,ymax and polynomial coefficients for the ellipse query * and polar cube faces */ void q3c_fast_get_polar_ellipse_xy_minmax_and_poly_coefs(q3c_coord_t alpha, q3c_coord_t delta, q3c_coord_t d, q3c_coord_t e, q3c_coord_t PA, q3c_coord_t *ymin, q3c_coord_t *ymax, q3c_coord_t *zmin, q3c_coord_t *zmax, q3c_coord_t *ayy, q3c_coord_t *azz, q3c_coord_t *ayz, q3c_coord_t *ay, q3c_coord_t *az, q3c_coord_t *a) { /* Thank you, Maple! */ q3c_coord_t t1 = q3c_sin(alpha); q3c_coord_t t2 = q3c_sin(delta); q3c_coord_t t3 = t1*t2; q3c_coord_t t4 = q3c_cos(d); q3c_coord_t t5 = t4*t4; q3c_coord_t t6 = t3*t5; q3c_coord_t t7 = q3c_cos(PA); q3c_coord_t t8 = t7*t7; q3c_coord_t t9 = t8*t5; q3c_coord_t t11 = q3c_sin(PA); q3c_coord_t t12 = t7*t11; q3c_coord_t t13 = q3c_cos(alpha); q3c_coord_t t14 = t12*t13; q3c_coord_t t15 = t13*t5; q3c_coord_t t19 = q3c_cos(delta); q3c_coord_t t21 = e*e; q3c_coord_t t23 = t3*t19; q3c_coord_t t25 = q3c_sin(d); q3c_coord_t t26 = t25*t25; q3c_coord_t t28 = 2.0*t6*t14; q3c_coord_t t29 = t19*t19; q3c_coord_t t30 = t13*t13; q3c_coord_t t31 = t29*t30; q3c_coord_t t32 = t31*t5; q3c_coord_t t33 = t29*t8; q3c_coord_t t34 = t30*t5; q3c_coord_t t35 = t33*t34; q3c_coord_t t36 = t9*t30; q3c_coord_t t37 = 2.0*t36; q3c_coord_t t47 = t29*(1.0-t5-t8+t9)*t21-t29+t5; q3c_coord_t t48 = t7*t1; q3c_coord_t t52 = t13*t2; q3c_coord_t t59 = t52*t19; q3c_coord_t t61 = t33*t5; q3c_coord_t t71 = t11*t11; q3c_coord_t t74 = t2*t2; q3c_coord_t t75 = t74*t26; q3c_coord_t t79 = t19*t71*t5; q3c_coord_t t82 = t19*t8*t5; q3c_coord_t t84 = t26*t19; q3c_coord_t t85 = t84*t21; q3c_coord_t t87 = t9*t21; q3c_coord_t t90 = t19*t11*t5; q3c_coord_t t91 = t7*t21; q3c_coord_t t112 = t2*t5*t7; q3c_coord_t t113 = t1*t1; q3c_coord_t t120 = t13*t1; q3c_coord_t t121 = t29*t26; q3c_coord_t t123 = t1*t5; q3c_coord_t t126 = t71*t13; q3c_coord_t t136 = t113*t29; q3c_coord_t t138 = t5*t71; q3c_coord_t t144 = 2.0*t6*t7*t13*t11*t21; q3c_coord_t t147 = t113*t74; q3c_coord_t t150 = t26*t21; q3c_coord_t t157 = t30*t74; q3c_coord_t tmpy0 = 2.0*(-t3+t6-t3*t9-t14+t12*t15+t3*t8)*t19*t21+2.0*t23; q3c_coord_t tmpy1 = 4.0*t26*(-t5-t28+t31-t32+t35-t37+t34+t9)*t21-4.0*t26*(t31-t5); q3c_coord_t tmpy2 = 2.0*t47; q3c_coord_t tmpz0 = 2.0*(-t48*t11+t48*t11*t5+t52-t52*t5+t52*t9-t52*t8)*t19*t21-2.0*t59; q3c_coord_t tmpz1 = -4.0*t26*(-t29-t61-t28+t31-t32+t35-t37+t34+t29*t5+t9)*t21+4.0*t26*(-t29+t31+t5); q3c_coord_t tmpz2 = 2.0*t47; *a = t33*t5*t21-t29*t71*t5-t61-t75*t21+t75; *ay = 2.0*t3*t79+2.0*t3*t82-2.0*t3*t85-2.0*t23*t87+2.0*t90*t91*t13+2.0*t3*t84; *az = -2.0*t52*t84+2.0*t52*t85-2.0*t52*t82-2.0*t52*t79+2.0*t90*t91*t1+2.0*t59*t87; *ayz = 2.0*t15*t8*t1*t74-2.0*t15*t8*t1*t74*t21-2.0*t112*t113*t11*t21+2.0*t112*t30*t11*t21-2.0*t120*t121-2.0*t123*t8*t13-2.0*t123*t126+2.0*t15*t71*t1*t74+2.0*t120*t121*t21+2.0*t123*t126*t21; *ayy = -t36+t136*t26-t138*t30-t144+t138*t30*t21-t9*t147-t138*t147-t136*t150+t9*t147*t21; *azz = t138*t113*t21-t9*t157-t138*t157-t31*t150+t9*t157*t21+t144-t138*t113-t9*t113+t31*t26; tmpy1 = q3c_sqrt(tmpy1); tmpy2 = (2 * tmpy2); tmpz1 = q3c_sqrt(tmpz1); tmpz2 = (2 * tmpz2); *ymin = (tmpy0 - tmpy1) / tmpy2; *ymax = (tmpy0 + tmpy1) / tmpy2; *zmin = (tmpz0 - tmpz1) / tmpz2; *zmax = (tmpz0 + tmpz1) / tmpz2; /* reduce the values to the cube with edge length of 1 (instead of 2) */ *ayy*=-4; *azz*=-4; *ayz*=-4; *ay*=-2; *az*=-2; *a*=-1; } /* Get ellipse x,y min,max and poly coeffs for a given ellipse query */ void q3c_fast_get_ellipse_xy_minmax_and_poly_coefs(char face_num, q3c_coord_t ra0, q3c_coord_t dec0, q3c_coord_t d0, q3c_coord_t e, q3c_coord_t PA0, q3c_coord_t *ymin, q3c_coord_t *ymax, q3c_coord_t *zmin, q3c_coord_t *zmax, q3c_coord_t *ayy, q3c_coord_t *azz, q3c_coord_t *ayz, q3c_coord_t *ay, q3c_coord_t *az, q3c_coord_t *a) { q3c_coord_t ra1, dec1 = dec0 * Q3C_DEGRA, d1 = d0 * Q3C_DEGRA, PA1 = PA0 * Q3C_DEGRA, tmpx; if ((face_num > 0) && (face_num < 5)) { ra1 = (ra0 - (face_num - 1) * 90) * Q3C_DEGRA; q3c_fast_get_equatorial_ellipse_xy_minmax_and_poly_coefs( ra1, dec1, d1, e, PA1, ymin, ymax, zmin, zmax, ayy, azz, ayz, ay, az, a); } else { ra1 = ra0 * Q3C_DEGRA; q3c_fast_get_polar_ellipse_xy_minmax_and_poly_coefs( ra1, dec1, d1, e, PA1, ymin, ymax, zmin, zmax, ayy, azz, ayz, ay, az, a); if (face_num == 5) { tmpx = *ymin; *ymin = -(*ymax); *ymax = -tmpx; *ay=-*ay; *ayz=-*ayz; } } } void q3c_fast_get_ellipse_xy_minmax(char face_num, q3c_coord_t ra0, q3c_coord_t dec0, q3c_coord_t rad0, q3c_coord_t e, q3c_coord_t PA0, q3c_coord_t *xmin, q3c_coord_t *xmax, q3c_coord_t *ymin, q3c_coord_t *ymax) { q3c_coord_t ra1, dec1 = dec0 * Q3C_DEGRA, rad1 = rad0 * Q3C_DEGRA, PA1 = PA0 * Q3C_DEGRA, tmpx; if ((face_num > 0) && (face_num < 5)) { ra1 = (ra0 - (face_num - 1) * 90) * Q3C_DEGRA; q3c_fast_get_equatorial_ellipse_xy_minmax(ra1, dec1, rad1, e, PA1, xmin, xmax, ymin, ymax); } else { ra1 = ra0 * Q3C_DEGRA; q3c_fast_get_polar_ellipse_xy_minmax(ra1, dec1, rad1, e, PA1, xmin, xmax, ymin, ymax); if (face_num == 5) { /* We have to invert one axis in the case of south pole face */ tmpx = *xmin; *xmin = - (*xmax); *xmax = -tmpx; } } } /* Function checking whether the square with center xc_cur, yc_cur and the * size cur_size on the cube face lie inside, or intersects etc. with the ellipse * specified by the coefficients (axx, axy, ayy, ax, ay, a) */ static char q3c_circle_cover_check(q3c_coord_t xc_cur, q3c_coord_t yc_cur, q3c_coord_t cur_size, q3c_coord_t xmin, q3c_coord_t xmax, q3c_coord_t ymin, q3c_coord_t ymax, q3c_coord_t axx, q3c_coord_t axy, q3c_coord_t ayy, q3c_coord_t ax, q3c_coord_t ay, q3c_coord_t a) { q3c_coord_t xl_cur, xr_cur, yb_cur, yt_cur; char status = 0, inside; /* Checking the intersection of ellipse and box * The box parameters are set by variables xc_cur, yc_cur and cur_size */ xl_cur = xc_cur - cur_size / 2; /* left */ xr_cur = xc_cur + cur_size / 2; /* right */ yb_cur = yc_cur - cur_size / 2; /* bottom */ yt_cur = yc_cur + cur_size / 2; /* top */ /* Undef labels -- the labels when the current computed values dont allow * to make the final decision about the intersection */ #define EVAL_POLY(x,y) ( x * (axx * x + axy * y + ax) + y * (ayy * y + ay) + a ) /* the idea of the code is following: * we go through the list of vertices till we encounter the one * which is inside the ellipse * If none of the vertices is inside the ellipse we double check the * edge crossings * If all the vertices are inside we return "covered" */ /* Bottom left vertex */ inside = EVAL_POLY(xl_cur, yb_cur) < 0; status += inside; /* Bottom right vertex */ inside = EVAL_POLY(xr_cur, yb_cur) < 0 ; /* we use XOR to check if the current vertex has different status * than the previous ones */ if (inside ^ (status > 0)) { return Q3C_PARTIAL; } status += inside; /* Top right vertex */ inside = EVAL_POLY(xr_cur, yt_cur) < 0; if (inside ^ (status > 0)) { return Q3C_PARTIAL; } status += inside; /* Top left vertex */ inside = EVAL_POLY(xl_cur, yt_cur) < 0; if (inside ^ (status > 0)) { return Q3C_PARTIAL; } status += inside; if (status == 4) { /* All the vertices are inside so the square must be covered by * the ellipse */ return Q3C_COVER; } else { /* All the vertices are outside the ellipse * Now we test if the ellipse crosses the edges of the square */ if ( (Q3C_INTERSECT(xmin, xmax, xl_cur, xr_cur) && Q3C_INTERSECT(ymin, ymax, yb_cur, yt_cur) )&& ((((2 * axx * xl_cur + axy * yt_cur + ax) * (2 * axx * xr_cur + axy * yt_cur + ax)) < 0) || (((2 * axx * xl_cur + axy * yb_cur + ax) * (2 * axx * xr_cur + axy * yb_cur + ax)) < 0) || (((2 * ayy * yb_cur + axy * xl_cur + ay) * (2 * ayy * yt_cur + axy * xl_cur + ay)) < 0) || (((2 * ayy * yb_cur + axy * xr_cur + ay) * (2 * ayy * yt_cur + axy * xr_cur + ay)) < 0) )) { return Q3C_PARTIAL; } else { return Q3C_DISJUNCT; } } #undef POLY_EVAL } /* Try to describe the box on the cube face specified by (xmin,xmax,ymin,ymax) * as a set of quadtree squares * I put them in the stack * n0 is the starting resolution */ int q3c_setup_square_stack(struct q3c_square *stack, q3c_coord_t xmin, q3c_coord_t ymin, q3c_coord_t xmax, q3c_coord_t ymax, int n0) { /* Here we set up the stack with initial squares */ int work_nstack = 0; q3c_ipix_t ixmin = (Q3C_HALF + xmin) * n0; /* Here I use the C truncation of floats */ q3c_ipix_t ixmax = (Q3C_HALF + xmax) * n0; /* to integers */ q3c_ipix_t iymin = (Q3C_HALF + ymin) * n0; q3c_ipix_t iymax = (Q3C_HALF + ymax) * n0; struct q3c_square *cur_square = stack; ixmax = (ixmax == n0 ? (n0 - 1) : ixmax); iymax = (iymax == n0 ? (n0 - 1) : iymax); if (ixmin == ixmax) { if (iymin == iymax) { SET_SQUARE(cur_square, ixmin, iymin, n0); work_nstack = 1; } else { SET_SQUARE(cur_square, ixmin, iymin, n0); cur_square++; SET_SQUARE(cur_square, ixmin, iymax, n0); work_nstack = 2; } } else { if (iymin == iymax) { SET_SQUARE(cur_square, ixmin, iymin, n0); cur_square++; SET_SQUARE(cur_square, ixmax, iymin, n0); work_nstack = 2; } else { SET_SQUARE(cur_square, ixmin, iymin, n0); cur_square++; SET_SQUARE(cur_square, ixmin, iymax, n0); cur_square++; SET_SQUARE(cur_square, ixmax, iymin, n0); cur_square++; SET_SQUARE(cur_square, ixmax, iymax, n0); work_nstack = 4; } } return work_nstack; } /* Process the stack of quad-tree squares and depending on the overlap status * I either keep them, expand them into smaller squares or throw them out */ void q3c_stack_expand(struct q3c_square* work_stack, int *work_nstack, struct q3c_square* out_stack, int *out_nstack, int cur_depth, int res_depth) { /* Now we select the fully covered set of squares from stack and put them * into out_stack, the partly covered squares are expanded to corresponding * set of 4 squares each. * explanation of the following scheme * |xxxxxxxxxxxxx xxxxxxxxxx| * ^ * /---/ tmp_stack2 * tmp_stack1 */ struct q3c_square *cur_square; int tmp_stack1, tmp_stack2; q3c_ipix_t xtmp,ytmp,ntmp; int j,k; for(j = 0, tmp_stack1 = 0, tmp_stack2 = *work_nstack; j < *work_nstack; j++) { cur_square = work_stack + j; //fprintf(stdout,"%d %d %d\n",work_nstack,tmp_stack1,tmp_stack2); if (cur_square->status == Q3C_PARTIAL) /* If this square partially intersects with the ellipse * I should split this square further */ { /* If this is the last stage of resolution loop, I will not split * the "partial" boxes */ if (cur_depth == res_depth) continue; tmp_stack1++; xtmp = 2 * cur_square->x0; ytmp = 2 * cur_square->y0; ntmp = 2 * cur_square->nside0; /* First I try to put the childrens of this square in the part of * the stack freed by thrown away squares (which were disjunct from * the ellipse or which were fully covered by the ellipse) */ for(k = 0; (k <= 3) && (tmp_stack1 > 0); k++) { cur_square = work_stack + (j + 1 - tmp_stack1); SET_SQUARE(cur_square, xtmp + (k & 1), ytmp + ((k & 2) >> 1), ntmp); tmp_stack1--; } for (; k <= 3; k++) { cur_square = work_stack + tmp_stack2; SET_SQUARE(cur_square, xtmp + (k & 1), ytmp + ((k & 2) >> 1), ntmp); tmp_stack2++; } } else { if (cur_square->status == Q3C_COVER) /* I put this square in the output list and * free one place in the stack */ { out_stack[(*out_nstack)++] = *cur_square; tmp_stack1++; } else /* This branch can be reached only if status==Q3C_DISJUNCT */ { tmp_stack1++; /* I just drop this square and free the place in the stack */ } } } /* end of updating of the list of squares loop */ if (cur_depth == res_depth) return; /* After updating the list of squares I compute how many of the * I have them now (except for the case of last resolution step) */ #ifdef Q3C_DEBUG fprintf(stdout,"STACK STATE nw_stack: %d nt_stack1: %d nt_stack2: %d\n", *work_nstack, tmp_stack1, tmp_stack2); #endif if (tmp_stack1 == 0) { *work_nstack = tmp_stack2; } else { if ((tmp_stack2-*work_nstack) > tmp_stack1) { memcpy(work_stack + (*work_nstack - tmp_stack1), work_stack + (tmp_stack2 - tmp_stack1), tmp_stack1 * sizeof(struct q3c_square)); *work_nstack = tmp_stack2 - tmp_stack1; } else { memcpy(work_stack + (*work_nstack - tmp_stack1), work_stack + *work_nstack, (tmp_stack2 - *work_nstack) * sizeof(struct q3c_square)); *work_nstack = tmp_stack2 - tmp_stack1; } } } /* This function processes the stack of quad-tree squares and puts the * fully covered and partially covered squares in the appropriate output * lists */ void q3c_output_stack( struct q3c_prm *hprm, struct q3c_square *out_stack, int out_nstack, struct q3c_square *work_stack, int work_nstack, int face_num, int nside, q3c_ipix_t *out_ipix_arr_fulls, int *out_ipix_arr_fulls_pos, q3c_ipix_t *out_ipix_arr_partials, int *out_ipix_arr_partials_pos) { int i, j; q3c_ipix_t xi, yi, ipix_tmp1, ipix_tmp2, ntmp1; q3c_ipix_t *xbits = hprm->xbits, *ybits = hprm->ybits; struct q3c_square *cur_square; /* Run through fully covered squares (we take them from out_stack) */ for(i = 0; i < out_nstack; i++) { cur_square = out_stack + i; ntmp1 = (nside / cur_square->nside0); //fprintf(stdout, "XX%lld\n", ntmp1); xi = cur_square->x0 * ntmp1; yi = cur_square->y0 * ntmp1; ipix_tmp1 = q3c_xiyi2ipix(nside, xbits, ybits, face_num, xi, yi); ipix_tmp2=ipix_tmp1+(ntmp1*ntmp1); /* Now we have in ipix_tmp1 and ipix_tmp2 -- the pixel range for the * query of current square * The query should be ipix_tmp1 =< II < ipix_tmp2 */ out_ipix_arr_fulls[(*out_ipix_arr_fulls_pos)++] = ipix_tmp1; out_ipix_arr_fulls[(*out_ipix_arr_fulls_pos)++] = ipix_tmp2; } /* End of output run through fully covered squares */ if (out_nstack == 0) /* If the list of fully covered squares is empty */ { /* Now we just do nothing -- the stack of ipix'es will be just empty */ } /* Run through partly covered squares (we take them from work_stack where * the cur_square->status == Q3C_PARTIAL) */ for(i = 0, j = -1; i < work_nstack; i++) { cur_square = work_stack + i; if (cur_square->status != Q3C_PARTIAL) continue; else j+=1; ntmp1 = (nside / cur_square->nside0); //fprintf(stdout, "XX%lld\n", ntmp1); xi = cur_square->x0 * ntmp1; yi = cur_square->y0 * ntmp1; ipix_tmp1 = q3c_xiyi2ipix(nside, xbits, ybits, face_num, xi, yi); ipix_tmp2 = ipix_tmp1 + (ntmp1 * ntmp1); /* Now we have in ipix_tmp1 and ipix_tmp2 -- the pixel range for the * query of current square * The query should be ipix_tmp1 =< II < ipix_tmp2 */ out_ipix_arr_partials[(*out_ipix_arr_partials_pos)++] = ipix_tmp1; out_ipix_arr_partials[(*out_ipix_arr_partials_pos)++] = ipix_tmp2; } /* End of output run through partly covered squares */ } static void array_filler(q3c_ipix_t *fulls, int fullpos, q3c_ipix_t *parts, int partpos) { /* We fill the tail of the out_ipix_arr_fulls and out_ipix_arr_partials * stack by * [1,-1] pairs since our SQL code wants the arrays of fixed length */ int i; for(i = fullpos; i < (2*Q3C_NFULLS);) { fulls[i++] = 1; fulls[i++] = -1; } for(i = partpos; i < (2*Q3C_NPARTIALS);) { parts[i++] = 1; parts[i++] = -1; } } /* Main radial query function */ void q3c_radial_query(struct q3c_prm *hprm, q3c_coord_t ra0, q3c_coord_t dec0, q3c_coord_t rad, q3c_ipix_t *out_ipix_arr_fulls, q3c_ipix_t *out_ipix_arr_partials) { q3c_coord_t axx, ayy, axy, ax, ay, a, xmin, xmax, ymin, ymax, xc_cur = 0 , yc_cur = 0, cur_size, xesize, yesize, points[4]; q3c_ipix_t n0, nside = hprm->nside; char face_num, multi_flag = 0, face_count, face_num0, full_flags[3]={0,0,0}; int out_ipix_arr_fulls_pos = 0; int out_ipix_arr_partials_pos = 0; int work_nstack = 0, i, j, out_nstack = 0, res_depth; struct q3c_square work_stack[Q3C_STACK_SIZE], out_stack[Q3C_STACK_SIZE], *cur_square; /* 35 degrees is a magic size above which the cone from the search can * produce a hyperbola or a parabola on a main face and where a lot of * code will start to break. * So if the query is that large, I just query the whole sphere */ /* TODO * I can instead of querying the whole sphere, just query the appropriate * faces */ if (rad>=Q3C_MAXRAD) { q3c_ipix_t maxval = 6*(nside*nside); for(i = out_ipix_arr_fulls_pos; i < (2*Q3C_NFULLS);) { /* don't have any fully covered squares*/ out_ipix_arr_fulls[i++] = 1 ; out_ipix_arr_fulls[i++] = -1; } i = out_ipix_arr_partials_pos; out_ipix_arr_partials[i++] = -1; out_ipix_arr_partials[i++] = maxval; /* everything is partially covered */ for(; i < (2*Q3C_NPARTIALS);) { /* fill with dummy ranges the rest*/ out_ipix_arr_partials[i++] = 1; out_ipix_arr_partials[i++] = -1; } return; } face_num = q3c_get_facenum(ra0, dec0); q3c_get_poly_coefs(face_num, ra0, dec0, rad, &axx, &ayy, &axy, &ax, &ay, &a); /* The coefficients of the polynome are obtained for the projection * on the cube face for the cube with the edge length 1 * axx*x^2+ayy*y^2+axy*x*y+ax*x+ay*y+a */ q3c_get_xy_minmax(axx, ayy, axy, ax, ay, a, &xmin, &xmax, &ymin, &ymax, full_flags); q3c_multi_face_check(&xmin, &ymin, &xmax, &ymax, points, &multi_flag); face_num0 = face_num; for(face_count = 0; face_count <= multi_flag; out_nstack = 0, face_count++) { /* This the beginning of the mega-loop over multiple faces */ if (face_count > 0) /* This "if" works when we pass through the secondary faces */ { face_num = q3c_xy2facenum(2 * points[2 * (face_count - 1)], 2 * points[2 * (face_count - 1) + 1], face_num0); q3c_get_poly_coefs(face_num, ra0, dec0, rad, &axx, &ayy, &axy, &ax, &ay, &a); q3c_get_xy_minmax(axx, ayy, axy, ax, ay, a, &xmin, &xmax, &ymin, &ymax, full_flags+face_count); } xmax = (xmax > Q3C_HALF ? Q3C_HALF : xmax); xmin = (xmin < -Q3C_HALF ? -Q3C_HALF : xmin); ymax = (ymax > Q3C_HALF ? Q3C_HALF : ymax); ymin = (ymin < -Q3C_HALF ? -Q3C_HALF : ymin); #ifdef Q3C_DEBUG fprintf(stdout,"FACE RUN: %d FACE_NUM: %d\n", face_count, face_num); #endif xesize = xmax - xmin; yesize = ymax - ymin; xesize = xesize > yesize ? xesize : yesize; if (xesize * nside < 1) /* If the region is too small */ { xesize = 1 / (q3c_coord_t)nside; } if (full_flags[(int)face_count]) /* Take the whole face */ { q3c_ipix_t tmpmin = face_num*nside*nside; q3c_ipix_t tmpmax = (face_num+1)*nside*nside; #ifdef Q3C_DEBUG fprintf(stdout, "FULL_FLAG\n"); #endif out_ipix_arr_partials[out_ipix_arr_partials_pos++]=tmpmin; out_ipix_arr_partials[out_ipix_arr_partials_pos++]=tmpmax; continue; } n0 = 1 << ((q3c_ipix_t)(-q3c_ceil((q3c_log(xesize) / q3c_log(2))))); /* n0 is now the level of quadtree for which the minimal * element is >~ our ellipse */ cur_size = ((q3c_coord_t)1) / n0; /* fprintf(stdout, "%lld %Lf %Lf %Lf\n", n0,cur_size,xesize,yesize);*/ #ifdef Q3C_DEBUG fprintf(stdout,"XMIN: "Q3C_COORD_FMT" XMAX: "Q3C_COORD_FMT" YMIN: "Q3C_COORD_FMT" YMAX: "Q3C_COORD_FMT"\n", xmin, xmax, ymin, ymax); #endif /* Here we set up the stack with initial squares */ work_nstack = q3c_setup_square_stack(work_stack, xmin, ymin, xmax, ymax, n0); /* For this case the maximal increase of resolution of 2^res_depth * for each axis */ res_depth = nside / n0; /* If the the query is too small we cannot go up to Q3C_MAX_DEPTH since we * are limited by nside depth */ res_depth = Q3C_MAX_DEPTH > res_depth ? res_depth : Q3C_MAX_DEPTH; for(i = 1; i <= res_depth; i++) { #ifdef Q3C_DEBUG fprintf(stdout,"SQUARE RUN %d :\n", i); #endif #ifdef Q3C_DEBUG fprintf(stdout,"1) NUM squares in the stack %d\n",work_nstack); #endif /* This loop perform the testing of all squares in work_stack */ for(j = 0; j < work_nstack; j++) { cur_square = work_stack + j; cur_size=((q3c_coord_t) 1) / (cur_square->nside0); xc_cur = (( (q3c_coord_t) cur_square->x0) + Q3C_HALF) / cur_square->nside0 - Q3C_HALF; yc_cur = (( (q3c_coord_t) cur_square->y0) + Q3C_HALF) / cur_square->nside0 - Q3C_HALF; /* xc_cur and yc_cur -- center of the square (in the coordinate system * of big square [-0.5:0.5]x[-0.5:0.5] */ //fprintf(stdout,"%Lf %Lf %Lf %d\n",xc_cur,yc_cur,cur_size, status); cur_square->status = q3c_circle_cover_check(xc_cur, yc_cur, cur_size, xmin, xmax, ymin, ymax, axx, axy, ayy, ax, ay, a); } #ifdef Q3C_DEBUG fprintf(stdout,"2) NUM squares in the stack %d\n",work_nstack); #endif q3c_stack_expand(work_stack, &work_nstack, out_stack, &out_nstack, i, res_depth); } /* end of resolution loop */ // Old printing of the results #ifdef Q3C_DEBUG for(i = 0; i < out_nstack; i++) { cur_square = out_stack + i; fprintf(stdout, "OUT: %f %f %d %d\n", cur_square->x0+0.5,cur_square->y0+0.5,cur_square->nside0,cur_square->status); } for(i = 0; i < work_nstack; i++) { cur_square = work_stack + i; if (cur_square->status == Q3C_PARTIAL) fprintf(stdout, "OUT1: %f %f %d %d\n", cur_square->x0+0.5,cur_square->y0+0.5,cur_square->nside0,cur_square->status); } #endif q3c_output_stack( hprm, out_stack, out_nstack, work_stack, work_nstack, face_num, nside, out_ipix_arr_fulls, &out_ipix_arr_fulls_pos, out_ipix_arr_partials, &out_ipix_arr_partials_pos); } /* End of the mega-loop over the faces */ array_filler(out_ipix_arr_fulls, out_ipix_arr_fulls_pos, out_ipix_arr_partials, out_ipix_arr_partials_pos); } /* End of q3c_radial_query() */ void q3c_poly_query(struct q3c_prm *hprm, q3c_poly *qp, q3c_ipix_t *out_ipix_arr_fulls, q3c_ipix_t *out_ipix_arr_partials, char *too_large) { q3c_coord_t xmin, xmax, ymin, ymax, xc_cur = 0 , yc_cur = 0, cur_size, xesize, yesize, points[4]; q3c_ipix_t n0, nside = hprm->nside; char face_num, multi_flag = 0, face_count, face_num0, large_flag = 0; int out_ipix_arr_fulls_pos = 0; int out_ipix_arr_partials_pos = 0; int work_nstack = 0, i, j, out_nstack = 0, res_depth; struct q3c_square work_stack[Q3C_STACK_SIZE], out_stack[Q3C_STACK_SIZE], *cur_square; face_num = q3c_get_facenum_poly(qp); q3c_project_poly(qp, face_num, &large_flag); if (large_flag) { *too_large = 1; return; } q3c_prepare_poly(qp); q3c_get_minmax_poly(qp, &xmin, &xmax, &ymin, &ymax); q3c_multi_face_check(&xmin, &ymin, &xmax, &ymax, points, &multi_flag); face_num0 = face_num; for(face_count = 0; face_count <= multi_flag; out_nstack = 0, face_count++) { /* This the beginning of the mega-loop over multiple faces */ if (face_count > 0) /* This "if" works when we pass through the secondary faces */ { face_num = q3c_xy2facenum(2 * points[2 * (face_count - 1)], 2 * points[2 * (face_count - 1) + 1], face_num0); q3c_project_poly(qp, face_num, &large_flag); if (large_flag) { *too_large = 1; return; } q3c_prepare_poly(qp); q3c_get_minmax_poly(qp, &xmin, &xmax, &ymin, &ymax); xmax = (xmax > Q3C_HALF ? Q3C_HALF : xmax); xmin = (xmin < -Q3C_HALF ? -Q3C_HALF : xmin); ymax = (ymax > Q3C_HALF ? Q3C_HALF : ymax); ymin = (ymin < -Q3C_HALF ? -Q3C_HALF : ymin); } #ifdef Q3C_DEBUG fprintf(stdout,"FACE RUN: %d FACE_NUM: %d\n", face_count, face_num); #endif xesize = xmax - xmin; yesize = ymax - ymin; xesize = xesize > yesize ? xesize : yesize; if (xesize * nside < 1) /* If the region is too small */ { xesize=1 / (q3c_coord_t)nside; } n0 = 1 << ((q3c_ipix_t)(-q3c_ceil((q3c_log(xesize) / q3c_log(2))))); /* n0 is now the level of quadtree for which the minimal * element is >~ our ellipse */ cur_size = ((q3c_coord_t)1) / n0; //fprintf(stdout, "%lld %Lf %Lf %Lf\n", n0,cur_size,xesize,yesize); #ifdef Q3C_DEBUG fprintf(stdout,"XMIN: "Q3C_COORD_FMT" XMAX: "Q3C_COORD_FMT" YMIN: "Q3C_COORD_FMT" YMAX: "Q3C_COORD_FMT"\n", xmin, xmax, ymin, ymax); #endif work_nstack = q3c_setup_square_stack(work_stack, xmin, ymin, xmax, ymax, n0); /* For this case the maximal increase of resolution of 2^res_depth * for each axis */ res_depth = nside / n0; /* If the the query is too small we cannot go up to Q3C_MAX_DEPTH since we * are limited by nside depth */ res_depth = Q3C_MAX_DEPTH > res_depth ? res_depth : Q3C_MAX_DEPTH; for(i = 1; i <= res_depth; i++) { #ifdef Q3C_DEBUG fprintf(stdout,"SQUARE RUN %d :\n", i); #endif #ifdef Q3C_DEBUG fprintf(stdout,"1) NUM squares in the stack %d\n",work_nstack); #endif /* This loop perform the testing of all squares in work_stack */ for(j = 0; j < work_nstack; j++) { cur_square = work_stack + j; cur_size=((q3c_coord_t) 1) / (cur_square->nside0); xc_cur = (( (q3c_coord_t) cur_square->x0) + Q3C_HALF) / cur_square->nside0 - Q3C_HALF; yc_cur = (( (q3c_coord_t) cur_square->y0) + Q3C_HALF) / cur_square->nside0 - Q3C_HALF; /* xc_cur and yc_cur -- center of the square (in the coordinate system * of big square [-0.5:0.5]x[-0.5:0.5] */ //fprintf(stdout,"%Lf %Lf %Lf %d\n",xc_cur,yc_cur,cur_size, status); #ifdef Q3C_DEBUG fprintf(stderr,"Trying (%f %f %f)(%f %f %f %f) --- ",xc_cur,yc_cur,cur_size,xc_cur-cur_size/2,xc_cur+cur_size/2,yc_cur-cur_size/2,yc_cur+cur_size/2); #endif cur_square->status = q3c_poly_cover_check(qp, xc_cur, yc_cur, cur_size); #ifdef Q3C_DEBUG fprintf(stderr,"%d\n",cur_square->status); #endif } #ifdef Q3C_DEBUG fprintf(stdout,"2) NUM squares in the stack %d\n",work_nstack); #endif q3c_stack_expand(work_stack, &work_nstack, out_stack, &out_nstack, i, res_depth); } // Old printing of the results #ifdef Q3C_DEBUG for(i = 0; i < out_nstack; i++) { cur_square = out_stack + i; fprintf(stdout, "OUT: %f %f %d %d\n", cur_square->x0+0.5,cur_square->y0+0.5,cur_square->nside0,cur_square->status); } for(i = 0; i < work_nstack; i++) { cur_square = work_stack + i; if (cur_square->status == Q3C_PARTIAL) fprintf(stdout, "OUT1: %f %f %d %d\n", cur_square->x0+0.5,cur_square->y0+0.5,cur_square->nside0,cur_square->status); } #endif q3c_output_stack( hprm, out_stack, out_nstack, work_stack, work_nstack, face_num, nside, out_ipix_arr_fulls, &out_ipix_arr_fulls_pos, out_ipix_arr_partials, &out_ipix_arr_partials_pos); } /* End of the mega-loop over the faces */ array_filler(out_ipix_arr_fulls, out_ipix_arr_fulls_pos, out_ipix_arr_partials, out_ipix_arr_partials_pos); } /* End of radial_query() */ void q3c_ellipse_query(struct q3c_prm *hprm, q3c_coord_t ra0, q3c_coord_t dec0, q3c_coord_t majax, q3c_coord_t ell, q3c_coord_t PA, q3c_ipix_t *out_ipix_arr_fulls, q3c_ipix_t *out_ipix_arr_partials) { q3c_coord_t xmin, xmax, ymin, ymax, xc_cur = 0, yc_cur = 0, cur_size, xesize, yesize, points[4], axx, ayy, axy, ax, ay, a; q3c_ipix_t n0, nside = hprm->nside; char face_num, multi_flag = 0, face_count, face_num0; int out_ipix_arr_fulls_pos = 0; int out_ipix_arr_partials_pos = 0; int work_nstack = 0, i, j, out_nstack = 0, res_depth; struct q3c_square work_stack[Q3C_STACK_SIZE], out_stack[Q3C_STACK_SIZE], *cur_square; /* 35 degrees is a magic size above which the cone from the search can * produce a hyperbola or a parabola on a main face and where a lot of * code will start to break. * So if the query is that large, I just query the whole sphere */ /* TODO * I can instead of querying the whole sphere, just query the appropriate * faces */ if (majax>= Q3C_MAXRAD) { q3c_ipix_t maxval = 6*(nside*nside); for(i = out_ipix_arr_fulls_pos; i < (2*Q3C_NFULLS);) { /* don't have any fully covered squares*/ out_ipix_arr_fulls[i++] = 1 ; out_ipix_arr_fulls[i++] = -1; } i = out_ipix_arr_partials_pos; out_ipix_arr_partials[i++] = -1; out_ipix_arr_partials[i++] = maxval; /* everything is partially covered */ for(; i < (2*Q3C_NPARTIALS);) { /* fill with dummy ranges the rest*/ out_ipix_arr_partials[i++] = 1; out_ipix_arr_partials[i++] = -1; } return; } face_num = q3c_get_facenum(ra0, dec0); q3c_fast_get_ellipse_xy_minmax_and_poly_coefs(face_num, ra0, dec0, majax, ell, PA, &xmin, &xmax, &ymin, &ymax, &axx, &ayy, &axy, &ax, &ay, &a); q3c_multi_face_check(&xmin, &ymin, &xmax, &ymax, points, &multi_flag); face_num0 = face_num; for(face_count = 0; face_count <= multi_flag; out_nstack = 0, face_count++) { /* This the beginning of the mega-loop over multiple faces */ if (face_count > 0) /* This "if" works when we pass through the secondary faces */ { face_num = q3c_xy2facenum(2 * points[2 * (face_count - 1)], 2 * points[2 * (face_count - 1) + 1], face_num0); q3c_fast_get_ellipse_xy_minmax_and_poly_coefs(face_num, ra0, dec0, majax, ell, PA, &xmin, &xmax, &ymin, &ymax, &axx, &ayy, &axy, &ax, &ay, &a); xmax = (xmax > Q3C_HALF ? Q3C_HALF : xmax); xmin = (xmin < -Q3C_HALF ? -Q3C_HALF : xmin); ymax = (ymax > Q3C_HALF ? Q3C_HALF : ymax); ymin = (ymin < -Q3C_HALF ? -Q3C_HALF : ymin); } #ifdef Q3C_DEBUG fprintf(stdout,"FACE RUN: %d FACE_NUM: %d\n", face_count, face_num); #endif xesize = xmax - xmin; yesize = ymax - ymin; xesize = xesize > yesize ? xesize : yesize; if (xesize * nside < 1) /* If the region is too small */ { xesize=1 / (q3c_coord_t)nside; } n0 = 1 << ((q3c_ipix_t)(-q3c_ceil((q3c_log(xesize) / q3c_log(2))))); /* n0 is now the level of quadtree for which the minimal * element is >~ our ellipse */ cur_size = ((q3c_coord_t)1) / n0; #ifdef Q3C_DEBUG fprintf(stdout,"XMIN: "Q3C_COORD_FMT" XMAX: "Q3C_COORD_FMT" YMIN: "Q3C_COORD_FMT" YMAX: "Q3C_COORD_FMT"\n", xmin, xmax, ymin, ymax); fprintf(stdout,Q3C_COORD_FMT" "Q3C_COORD_FMT" "Q3C_COORD_FMT" "Q3C_COORD_FMT" "Q3C_COORD_FMT" "Q3C_COORD_FMT"\n", axx,ayy,axy,ax,ay,a); #endif work_nstack = q3c_setup_square_stack(work_stack, xmin, ymin, xmax, ymax, n0); /* For this case the maximal increase of resolution of 2^res_depth * for each axis */ res_depth = nside / n0; /* If the the query is too small we cannot go up to Q3C_MAX_DEPTH since we * are limited by nside depth */ res_depth = Q3C_MAX_DEPTH > res_depth ? res_depth : Q3C_MAX_DEPTH; for(i = 1; i <= res_depth; i++) { #ifdef Q3C_DEBUG fprintf(stdout,"SQUARE RUN %d :\n", i); #endif #ifdef Q3C_DEBUG fprintf(stdout,"1) NUM squares in the stack %d\n",work_nstack); #endif /* This loop perform the testing of all squares in work_stack */ for(j = 0; j < work_nstack; j++) { cur_square = work_stack + j; cur_size=((q3c_coord_t) 1) / (cur_square->nside0); xc_cur = (( (q3c_coord_t) cur_square->x0) + Q3C_HALF) / cur_square->nside0 - Q3C_HALF; yc_cur = (( (q3c_coord_t) cur_square->y0) + Q3C_HALF) / cur_square->nside0 - Q3C_HALF; /* xc_cur and yc_cur -- center of the square (in the coordinate system * of big square [-0.5:0.5]x[-0.5:0.5] */ //fprintf(stdout,"%Lf %Lf %Lf %d\n",xc_cur,yc_cur,cur_size, status); cur_square->status = q3c_circle_cover_check(xc_cur, yc_cur, cur_size, xmin, xmax, ymin, ymax, axx, axy, ayy, ax, ay, a); #ifdef Q3C_DEBUG fprintf(stderr,"Trying (%f %f %f)(%f %f %f %f) --- ",xc_cur, yc_cur,cur_size,xc_cur-cur_size/2,xc_cur+cur_size/2,yc_cur-cur_size/2,yc_cur+cur_size/2); fprintf(stderr,"%d\n",cur_square->status); #endif } #ifdef Q3C_DEBUG fprintf(stdout,"2) NUM squares in the stack %d\n",work_nstack); #endif q3c_stack_expand(work_stack, &work_nstack, out_stack, &out_nstack, i, res_depth); } /* end of resolution loop */ // Old printing of the results #ifdef Q3C_DEBUG for(i = 0; i < out_nstack; i++) { cur_square = out_stack + i; fprintf(stdout, "OUT: %f %f %d %d\n", cur_square->x0+0.5,cur_square->y0+0.5,cur_square->nside0,cur_square->status); } for(i = 0; i < work_nstack; i++) { cur_square = work_stack + i; if (cur_square->status == Q3C_PARTIAL) fprintf(stdout, "OUT1: %f %f %d %d\n", cur_square->x0+0.5,cur_square->y0+0.5,cur_square->nside0,cur_square->status); } #endif q3c_output_stack( hprm, out_stack, out_nstack, work_stack, work_nstack, face_num, nside, out_ipix_arr_fulls, &out_ipix_arr_fulls_pos, out_ipix_arr_partials, &out_ipix_arr_partials_pos); } /* End of the mega-loop over the faces */ array_filler(out_ipix_arr_fulls, out_ipix_arr_fulls_pos, out_ipix_arr_partials, out_ipix_arr_partials_pos); } /* End of q3c_ellipse_query() */ q3c-2.0.0/scripts/000077500000000000000000000000001363277220100136715ustar00rootroot00000000000000q3c-2.0.0/scripts/q3c--1.5.0--1.6.0.sql000066400000000000000000000047621363277220100163420ustar00rootroot00000000000000\echo Use "CREATE EXTENSION pair" to load this file. \quit CREATE OR REPLACE FUNCTION q3c_sindist_pm( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, epoch1 double precision, ra2 double precision, dec2 double precision, epoch2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_sindist_pm' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is not strict CREATE OR REPLACE FUNCTION q3c_dist_pm( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, epoch1 double precision, ra2 double precision, dec2 double precision, epoch2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_dist_pm' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is not strict CREATE OR REPLACE FUNCTION q3c_nearby_pm_it( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, maxepoch_delta double precision, rad double precision, flag integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_nearby_pm_it' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is NOT as strict function because we accept nulls as pms CREATE OR REPLACE FUNCTION q3c_join_pm( left_ra double precision, -- 1 left_dec double precision, -- 2 left_pmra double precision, -- 3 left_pmdec double precision, -- 4 left_epoch double precision, -- 5 right_ra double precision, -- 6 right_dec double precision, -- 7 right_epoch double precision, -- 8 max_epoch_delta double precision, --9 radius double precision -- 10 ) RETURNS boolean AS ' SELECT ( ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,0)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,1))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,2)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,3))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,4)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,5))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,6)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,7)))) AND q3c_sindist_pm($1,$2,$3,$4,$5,$6,$7,$8)>== ( LEFTARG = double precision, RIGHTARG = q3c_type, PROCEDURE = q3c_seloper, RESTRICT = q3c_sel, JOIN = q3c_seljoin ); DROP FUNCTION q3c_radial_query(bigint, double precision, double precision, double precision, double precision, double precision); DROP FUNCTION q3c_join(double precision, double precision, double precision, double precision, bigint, double precision); CREATE OR REPLACE FUNCTION q3c_join(leftra double precision, leftdec double precision, rightra double precision, rightdec double precision, radius double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,7))))) AND q3c_sindist($1,$2,$3,$4)>== ($1,$2,$3,$4)::q3c_type) ' LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION q3c_join(leftra double precision, leftdec double precision, rightra real, rightdec real, radius double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,7))))) AND q3c_sindist($1,$2,$3,$4)>== ($1,$2,$3,$4)::q3c_type) ' LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION q3c_join_pm( left_ra double precision, -- 1 left_dec double precision, -- 2 left_pmra double precision, -- 3 left_pmdec double precision, -- 4 left_epoch double precision, -- 5 right_ra double precision, -- 6 right_dec double precision, -- 7 right_epoch double precision, -- 8 max_epoch_delta double precision, --9 radius double precision -- 10 ) RETURNS boolean AS ' SELECT ( ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,0)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,1))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,2)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,3))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,4)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,5))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,6)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,7)))) AND q3c_sindist_pm($1,$2,$3,$4,$5,$6,$7,$8)>== ($1,$2,$6,$7)::q3c_type) ' LANGUAGE SQL IMMUTABLE; -- not strict CREATE OR REPLACE FUNCTION q3c_ellipse_join(leftra double precision, leftdec double precision, rightra double precision, rightdec double precision, majoraxis double precision, axisratio double precision, pa double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,7))))) AND q3c_in_ellipse($3,$4,$1,$2,$5,$6,$7) AND ($5::double precision ==<<>>== ($1,$2,$3,$4)::q3c_type) ' LANGUAGE SQL IMMUTABLE; q3c-2.0.0/scripts/q3c--1.6.0.sql000066400000000000000000002312661363277220100156270ustar00rootroot00000000000000\echo Use "CREATE EXTENSION q3c" to load this file. \quit CREATE OR REPLACE FUNCTION q3c_version() RETURNS cstring AS 'MODULE_PATHNAME', 'pgq3c_get_version' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_version() IS 'Function returning Q3C version'; CREATE OR REPLACE FUNCTION q3c_ang2ipix(double precision, double precision) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ang2ipix' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_ang2ipix (double precision, double precision) IS 'Function converting Ra and Dec to the Q3C ipix value'; CREATE OR REPLACE FUNCTION q3c_ang2ipix(ra real, decl real) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ang2ipix_real' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_ang2ipix(real, real) IS 'Function converting Ra and Dec(floats) to the Q3C ipix value'; CREATE OR REPLACE FUNCTION q3c_ipix2ang(ipix bigint) RETURNS double precision[] AS 'MODULE_PATHNAME', 'pgq3c_ipix2ang' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_ipix2ang (bigint) IS 'Function converting the Q3C ipix value to Ra, Dec'; CREATE OR REPLACE FUNCTION q3c_pixarea(ipix bigint, depth int) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_pixarea' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_pixarea (bigint, int ) IS 'Function returning the area of the pixel containing ipix being located at certain depth in the quadtree'; CREATE OR REPLACE FUNCTION q3c_ipixcenter(ra double precision, decl double precision, int) RETURNS bigint AS 'SELECT ((q3c_ang2ipix($1,$2))>>((2*$3))<<((2*$3))) + ((1::bigint)<<(2*($3-1))) -1' LANGUAGE SQL; CREATE OR REPLACE FUNCTION q3c_dist(ra1 double precision, dec1 double precision, ra2 double precision, dec2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_dist' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_dist(double precision, double precision, double precision, double precision) IS 'Function q3c_dist(ra1, dec1, ra2, dec2) computing the distance between points (ra1, dec1) and (ra2, dec2)'; CREATE OR REPLACE FUNCTION q3c_sindist(double precision, double precision, double precision, double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_sindist' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_sindist_pm( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, epoch1 double precision, ra2 double precision, dec2 double precision, epoch2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_sindist_pm' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is not strict CREATE OR REPLACE FUNCTION q3c_dist_pm( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, epoch1 double precision, ra2 double precision, dec2 double precision, epoch2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_dist_pm' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is not strict CREATE OR REPLACE FUNCTION q3c_nearby_it(double precision, double precision, double precision, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_nearby_it' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_nearby_pm_it( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, maxepoch_delta double precision, rad double precision, flag integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_nearby_pm_it' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is NOT as strict function because we accept nulls as pms CREATE OR REPLACE FUNCTION q3c_ellipse_nearby_it(double precision, double precision, double precision, double precision, double precision, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ellipse_nearby_it' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_in_ellipse(ra0 double precision, dec0 double precision, ra_ell double precision, dec_ell double precision, maj_ax double precision, axis_ratio double precision, pa double precision) RETURNS boolean AS 'MODULE_PATHNAME', 'pgq3c_in_ellipse' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_radial_query_it(double precision, double precision, double precision, integer, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_radial_query_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_ellipse_query_it(ra_ell double precision, dec_ell double precision, majax double precision, axis_ratio double precision, PA double precision, iteration integer, full_flag integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ellipse_query_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_poly_query_it(double precision[], integer, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_poly_query_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_in_poly(double precision, double precision, double precision[]) RETURNS boolean AS 'MODULE_PATHNAME', 'pgq3c_in_poly' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_join(leftra double precision, leftdec double precision, rightra double precision, rightdec double precision, radius double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,7))))) AND q3c_sindist($1,$2,$3,$4)=(q3c_nearby_it($1,$2,$5,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,7))))) AND q3c_sindist($1,$2,$3,$4)= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,0)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,1))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,2)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,3))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,4)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,5))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,6)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,7)))) AND q3c_sindist_pm($1,$2,$3,$4,$5,$6,$7,$8)=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,7))))) AND q3c_in_ellipse($3,$4,$1,$2,$5,$6,$7) ' LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION q3c_radial_query(bigint, double precision, double precision, double precision, double precision, double precision) returns boolean as 'SELECT ( ($1>=q3c_radial_query_it($4,$5,$6,0,1) AND $1=q3c_radial_query_it($4,$5,$6,2,1) AND $1=q3c_radial_query_it($4,$5,$6,4,1) AND $1=q3c_radial_query_it($4,$5,$6,6,1) AND $1=q3c_radial_query_it($4,$5,$6,8,1) AND $1=q3c_radial_query_it($4,$5,$6,10,1) AND $1=q3c_radial_query_it($4,$5,$6,12,1) AND $1=q3c_radial_query_it($4,$5,$6,14,1) AND $1=q3c_radial_query_it($4,$5,$6,16,1) AND $1=q3c_radial_query_it($4,$5,$6,18,1) AND $1=q3c_radial_query_it($4,$5,$6,20,1) AND $1=q3c_radial_query_it($4,$5,$6,22,1) AND $1=q3c_radial_query_it($4,$5,$6,24,1) AND $1=q3c_radial_query_it($4,$5,$6,26,1) AND $1=q3c_radial_query_it($4,$5,$6,28,1) AND $1=q3c_radial_query_it($4,$5,$6,30,1) AND $1=q3c_radial_query_it($4,$5,$6,32,1) AND $1=q3c_radial_query_it($4,$5,$6,34,1) AND $1=q3c_radial_query_it($4,$5,$6,36,1) AND $1=q3c_radial_query_it($4,$5,$6,38,1) AND $1=q3c_radial_query_it($4,$5,$6,40,1) AND $1=q3c_radial_query_it($4,$5,$6,42,1) AND $1=q3c_radial_query_it($4,$5,$6,44,1) AND $1=q3c_radial_query_it($4,$5,$6,46,1) AND $1=q3c_radial_query_it($4,$5,$6,48,1) AND $1=q3c_radial_query_it($4,$5,$6,50,1) AND $1=q3c_radial_query_it($4,$5,$6,52,1) AND $1=q3c_radial_query_it($4,$5,$6,54,1) AND $1=q3c_radial_query_it($4,$5,$6,56,1) AND $1=q3c_radial_query_it($4,$5,$6,58,1) AND $1=q3c_radial_query_it($4,$5,$6,60,1) AND $1=q3c_radial_query_it($4,$5,$6,62,1) AND $1=q3c_radial_query_it($4,$5,$6,64,1) AND $1=q3c_radial_query_it($4,$5,$6,66,1) AND $1=q3c_radial_query_it($4,$5,$6,68,1) AND $1=q3c_radial_query_it($4,$5,$6,70,1) AND $1=q3c_radial_query_it($4,$5,$6,72,1) AND $1=q3c_radial_query_it($4,$5,$6,74,1) AND $1=q3c_radial_query_it($4,$5,$6,76,1) AND $1=q3c_radial_query_it($4,$5,$6,78,1) AND $1=q3c_radial_query_it($4,$5,$6,80,1) AND $1=q3c_radial_query_it($4,$5,$6,82,1) AND $1=q3c_radial_query_it($4,$5,$6,84,1) AND $1=q3c_radial_query_it($4,$5,$6,86,1) AND $1=q3c_radial_query_it($4,$5,$6,88,1) AND $1=q3c_radial_query_it($4,$5,$6,90,1) AND $1=q3c_radial_query_it($4,$5,$6,92,1) AND $1=q3c_radial_query_it($4,$5,$6,94,1) AND $1=q3c_radial_query_it($4,$5,$6,96,1) AND $1=q3c_radial_query_it($4,$5,$6,98,1) AND $1=q3c_radial_query_it($4,$5,$6,0,0) AND $1=q3c_radial_query_it($4,$5,$6,2,0) AND $1=q3c_radial_query_it($4,$5,$6,4,0) AND $1=q3c_radial_query_it($4,$5,$6,6,0) AND $1=q3c_radial_query_it($4,$5,$6,8,0) AND $1=q3c_radial_query_it($4,$5,$6,10,0) AND $1=q3c_radial_query_it($4,$5,$6,12,0) AND $1=q3c_radial_query_it($4,$5,$6,14,0) AND $1=q3c_radial_query_it($4,$5,$6,16,0) AND $1=q3c_radial_query_it($4,$5,$6,18,0) AND $1=q3c_radial_query_it($4,$5,$6,20,0) AND $1=q3c_radial_query_it($4,$5,$6,22,0) AND $1=q3c_radial_query_it($4,$5,$6,24,0) AND $1=q3c_radial_query_it($4,$5,$6,26,0) AND $1=q3c_radial_query_it($4,$5,$6,28,0) AND $1=q3c_radial_query_it($4,$5,$6,30,0) AND $1=q3c_radial_query_it($4,$5,$6,32,0) AND $1=q3c_radial_query_it($4,$5,$6,34,0) AND $1=q3c_radial_query_it($4,$5,$6,36,0) AND $1=q3c_radial_query_it($4,$5,$6,38,0) AND $1=q3c_radial_query_it($4,$5,$6,40,0) AND $1=q3c_radial_query_it($4,$5,$6,42,0) AND $1=q3c_radial_query_it($4,$5,$6,44,0) AND $1=q3c_radial_query_it($4,$5,$6,46,0) AND $1=q3c_radial_query_it($4,$5,$6,48,0) AND $1=q3c_radial_query_it($4,$5,$6,50,0) AND $1=q3c_radial_query_it($4,$5,$6,52,0) AND $1=q3c_radial_query_it($4,$5,$6,54,0) AND $1=q3c_radial_query_it($4,$5,$6,56,0) AND $1=q3c_radial_query_it($4,$5,$6,58,0) AND $1=q3c_radial_query_it($4,$5,$6,60,0) AND $1=q3c_radial_query_it($4,$5,$6,62,0) AND $1=q3c_radial_query_it($4,$5,$6,64,0) AND $1=q3c_radial_query_it($4,$5,$6,66,0) AND $1=q3c_radial_query_it($4,$5,$6,68,0) AND $1=q3c_radial_query_it($4,$5,$6,70,0) AND $1=q3c_radial_query_it($4,$5,$6,72,0) AND $1=q3c_radial_query_it($4,$5,$6,74,0) AND $1=q3c_radial_query_it($4,$5,$6,76,0) AND $1=q3c_radial_query_it($4,$5,$6,78,0) AND $1=q3c_radial_query_it($4,$5,$6,80,0) AND $1=q3c_radial_query_it($4,$5,$6,82,0) AND $1=q3c_radial_query_it($4,$5,$6,84,0) AND $1=q3c_radial_query_it($4,$5,$6,86,0) AND $1=q3c_radial_query_it($4,$5,$6,88,0) AND $1=q3c_radial_query_it($4,$5,$6,90,0) AND $1=q3c_radial_query_it($4,$5,$6,92,0) AND $1=q3c_radial_query_it($4,$5,$6,94,0) AND $1=q3c_radial_query_it($4,$5,$6,96,0) AND $1=q3c_radial_query_it($4,$5,$6,98,0) AND $1=q3c_radial_query_it($3,$4,$5,0,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,0,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,0,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,0,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,0,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,2,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,4,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,6,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,8,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,10,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,12,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,14,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,16,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,18,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,20,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,22,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,24,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,26,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,28,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,30,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,32,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,34,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,36,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,38,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,40,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,42,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,44,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,46,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,48,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,50,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,52,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,54,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,56,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,58,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,60,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,62,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,64,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,66,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,68,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,70,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,72,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,74,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,76,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,78,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,80,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,82,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,84,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,86,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,88,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,90,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,92,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,94,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,96,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,98,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,0,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,2,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,4,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,6,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,8,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,10,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,12,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,14,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,16,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,18,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,20,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,22,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,24,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,26,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,28,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,30,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,32,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,34,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,36,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,38,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,40,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,42,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,44,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,46,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,48,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,50,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,52,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,54,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,56,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,58,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,60,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,62,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,64,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,66,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,68,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,70,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,72,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,74,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,76,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,78,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,80,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,82,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,84,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,86,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,88,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,90,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,92,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,94,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,96,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,98,0) AND q3c_ang2ipix($1,$2)=(q3c_nearby_it($1,$2,$6,0))) AND ($5<=(q3c_nearby_it($1,$2,$6,1)))) OR (($5>=(q3c_nearby_it($1,$2,$6,2))) AND ($5<=(q3c_nearby_it($1,$2,$6,3)))) OR (($5>=(q3c_nearby_it($1,$2,$6,4))) AND ($5<=(q3c_nearby_it($1,$2,$6,5)))) OR (($5>=(q3c_nearby_it($1,$2,$6,6))) AND ($5<=(q3c_nearby_it($1,$2,$6,7))))) AND q3c_sindist($1,$2,$3,$4)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)>== ( LEFTARG = double precision, RIGHTARG = q3c_type, PROCEDURE = q3c_seloper, RESTRICT = q3c_sel, JOIN = q3c_seljoin ); CREATE OR REPLACE FUNCTION q3c_version() RETURNS cstring AS 'MODULE_PATHNAME', 'pgq3c_get_version' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_version() IS 'Function returning Q3C version'; CREATE OR REPLACE FUNCTION q3c_ang2ipix(double precision, double precision) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ang2ipix' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_ang2ipix (double precision, double precision) IS 'Function converting Ra and Dec to the Q3C ipix value'; CREATE OR REPLACE FUNCTION q3c_ang2ipix(ra real, decl real) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ang2ipix_real' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_ang2ipix(real, real) IS 'Function converting Ra and Dec(floats) to the Q3C ipix value'; CREATE OR REPLACE FUNCTION q3c_ipix2ang(ipix bigint) RETURNS double precision[] AS 'MODULE_PATHNAME', 'pgq3c_ipix2ang' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_ipix2ang (bigint) IS 'Function converting the Q3C ipix value to Ra, Dec'; CREATE OR REPLACE FUNCTION q3c_pixarea(ipix bigint, depth int) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_pixarea' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_pixarea (bigint, int ) IS 'Function returning the area of the pixel containing ipix being located at certain depth in the quadtree'; CREATE OR REPLACE FUNCTION q3c_ipixcenter(ra double precision, decl double precision, int) RETURNS bigint AS 'SELECT ((q3c_ang2ipix($1,$2))>>((2*$3))<<((2*$3))) + ((1::bigint)<<(2*($3-1))) -1' LANGUAGE SQL; CREATE OR REPLACE FUNCTION q3c_dist(ra1 double precision, dec1 double precision, ra2 double precision, dec2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_dist' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_dist(double precision, double precision, double precision, double precision) IS 'Function q3c_dist(ra1, dec1, ra2, dec2) computing the distance between points (ra1, dec1) and (ra2, dec2)'; CREATE OR REPLACE FUNCTION q3c_sindist(double precision, double precision, double precision, double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_sindist' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_sindist_pm( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, epoch1 double precision, ra2 double precision, dec2 double precision, epoch2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_sindist_pm' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is not strict CREATE OR REPLACE FUNCTION q3c_dist_pm( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, epoch1 double precision, ra2 double precision, dec2 double precision, epoch2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_dist_pm' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is not strict CREATE OR REPLACE FUNCTION q3c_nearby_it(double precision, double precision, double precision, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_nearby_it' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_nearby_pm_it( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, maxepoch_delta double precision, rad double precision, flag integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_nearby_pm_it' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is NOT as strict function because we accept nulls as pms CREATE OR REPLACE FUNCTION q3c_ellipse_nearby_it(double precision, double precision, double precision, double precision, double precision, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ellipse_nearby_it' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_in_ellipse(ra0 double precision, dec0 double precision, ra_ell double precision, dec_ell double precision, maj_ax double precision, axis_ratio double precision, pa double precision) RETURNS boolean AS 'MODULE_PATHNAME', 'pgq3c_in_ellipse' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_radial_query_it(double precision, double precision, double precision, integer, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_radial_query_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_ellipse_query_it(ra_ell double precision, dec_ell double precision, majax double precision, axis_ratio double precision, PA double precision, iteration integer, full_flag integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ellipse_query_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_poly_query_it(double precision[], integer, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_poly_query_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_in_poly(double precision, double precision, double precision[]) RETURNS boolean AS 'MODULE_PATHNAME', 'pgq3c_in_poly' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_join(leftra double precision, leftdec double precision, rightra double precision, rightdec double precision, radius double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,7))))) AND q3c_sindist($1,$2,$3,$4)>== ($1,$2,$3,$4)::q3c_type) ' LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION q3c_join(leftra double precision, leftdec double precision, rightra real, rightdec real, radius double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,7))))) AND q3c_sindist($1,$2,$3,$4)>== ($1,$2,$3,$4)::q3c_type) ' LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION q3c_join_pm( left_ra double precision, -- 1 left_dec double precision, -- 2 left_pmra double precision, -- 3 left_pmdec double precision, -- 4 left_epoch double precision, -- 5 right_ra double precision, -- 6 right_dec double precision, -- 7 right_epoch double precision, -- 8 max_epoch_delta double precision, --9 radius double precision -- 10 ) RETURNS boolean AS ' SELECT ( ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,0)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,1))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,2)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,3))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,4)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,5))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,6)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,7)))) AND q3c_sindist_pm($1,$2,$3,$4,$5,$6,$7,$8)>== ($1,$2,$6,$7)::q3c_type) ' LANGUAGE SQL IMMUTABLE; -- not strict CREATE OR REPLACE FUNCTION q3c_ellipse_join(leftra double precision, leftdec double precision, rightra double precision, rightdec double precision, majoraxis double precision, axisratio double precision, pa double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,7))))) AND q3c_in_ellipse($3,$4,$1,$2,$5,$6,$7) AND ($5::double precision ==<<>>== ($1,$2,$3,$4)::q3c_type) ' LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION q3c_radial_query( real, real, double precision, double precision, double precision) returns boolean as 'SELECT ( (q3c_ang2ipix($1,$2)>=q3c_radial_query_it($3,$4,$5,0,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,0,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,0,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,0,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,0,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,2,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,4,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,6,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,8,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,10,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,12,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,14,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,16,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,18,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,20,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,22,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,24,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,26,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,28,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,30,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,32,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,34,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,36,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,38,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,40,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,42,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,44,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,46,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,48,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,50,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,52,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,54,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,56,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,58,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,60,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,62,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,64,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,66,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,68,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,70,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,72,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,74,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,76,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,78,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,80,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,82,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,84,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,86,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,88,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,90,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,92,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,94,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,96,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,98,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,0,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,2,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,4,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,6,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,8,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,10,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,12,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,14,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,16,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,18,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,20,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,22,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,24,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,26,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,28,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,30,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,32,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,34,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,36,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,38,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,40,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,42,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,44,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,46,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,48,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,50,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,52,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,54,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,56,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,58,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,60,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,62,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,64,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,66,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,68,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,70,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,72,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,74,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,76,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,78,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,80,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,82,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,84,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,86,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,88,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,90,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,92,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,94,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,96,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,0)) AND (q3c_ang2ipix($7,$8) <= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,1))) OR ((q3c_ang2ipix($7,$8) >= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,2)) AND (q3c_ang2ipix($7,$8) <= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,3))) OR ((q3c_ang2ipix($7,$8) >= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,4)) AND (q3c_ang2ipix($7,$8) <= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,5))) OR ((q3c_ang2ipix($7,$8) >= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,6)) AND (q3c_ang2ipix($7,$8) <= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,7)))) AND q3c_sindist_pm($1,$2,$3,$4,$5,$6,$7,$8,$9)>== ($1,$2,$6,$7)::q3c_type) ' LANGUAGE SQL IMMUTABLE; -- not strict q3c-2.0.0/scripts/q3c--1.8.0.sql000066400000000000000000002635121363277220100156300ustar00rootroot00000000000000\echo Use "CREATE EXTENSION q3c" to load this file. \quit -- A dummy type used in the selectivity operator create type q3c_type as (ra double precision, dec double precision, ra1 double precision, dec1 double precision); -- A dummy operator function (always returns true) CREATE OR REPLACE FUNCTION q3c_seloper(double precision, q3c_type) RETURNS bool AS 'MODULE_PATHNAME', 'pgq3c_seloper' LANGUAGE C STRICT IMMUTABLE COST 1000; -- A selectivity function for the q3c operator CREATE OR REPLACE FUNCTION q3c_sel(internal, oid, internal, int4) RETURNS float8 AS 'MODULE_PATHNAME', 'pgq3c_sel' LANGUAGE C IMMUTABLE STRICT ; -- A selectivity function for the q3c operator CREATE OR REPLACE FUNCTION q3c_seljoin(internal, oid, internal, int2, internal) RETURNS float8 AS 'MODULE_PATHNAME', 'pgq3c_seljoin' LANGUAGE C IMMUTABLE STRICT ; -- distance operator with correct selectivity CREATE OPERATOR ==<<>>== ( LEFTARG = double precision, RIGHTARG = q3c_type, PROCEDURE = q3c_seloper, RESTRICT = q3c_sel, JOIN = q3c_seljoin ); CREATE OR REPLACE FUNCTION q3c_version() RETURNS cstring AS 'MODULE_PATHNAME', 'pgq3c_get_version' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_version() IS 'Function returning Q3C version'; CREATE OR REPLACE FUNCTION q3c_ang2ipix(double precision, double precision) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ang2ipix' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_ang2ipix (double precision, double precision) IS 'Function converting Ra and Dec to the Q3C ipix value'; CREATE OR REPLACE FUNCTION q3c_ang2ipix(ra real, decl real) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ang2ipix_real' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_ang2ipix(real, real) IS 'Function converting Ra and Dec(floats) to the Q3C ipix value'; CREATE OR REPLACE FUNCTION q3c_ipix2ang(ipix bigint) RETURNS double precision[] AS 'MODULE_PATHNAME', 'pgq3c_ipix2ang' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_ipix2ang (bigint) IS 'Function converting the Q3C ipix value to Ra, Dec'; CREATE OR REPLACE FUNCTION q3c_pixarea(ipix bigint, depth int) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_pixarea' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_pixarea (bigint, int ) IS 'Function returning the area of the pixel containing ipix being located at certain depth in the quadtree'; CREATE OR REPLACE FUNCTION q3c_ipixcenter(ra double precision, decl double precision, int) RETURNS bigint AS 'SELECT ((q3c_ang2ipix($1,$2))>>((2*$3))<<((2*$3))) + ((1::bigint)<<(2*($3-1))) -1' LANGUAGE SQL; CREATE OR REPLACE FUNCTION q3c_dist(ra1 double precision, dec1 double precision, ra2 double precision, dec2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_dist' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_dist(double precision, double precision, double precision, double precision) IS 'Function q3c_dist(ra1, dec1, ra2, dec2) computing the distance between points (ra1, dec1) and (ra2, dec2)'; CREATE OR REPLACE FUNCTION q3c_sindist(double precision, double precision, double precision, double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_sindist' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_sindist_pm( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, epoch1 double precision, ra2 double precision, dec2 double precision, epoch2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_sindist_pm' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is not strict CREATE OR REPLACE FUNCTION q3c_dist_pm( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, epoch1 double precision, ra2 double precision, dec2 double precision, epoch2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_dist_pm' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is not strict CREATE OR REPLACE FUNCTION q3c_nearby_it(double precision, double precision, double precision, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_nearby_it' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_nearby_pm_it( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, maxepoch_delta double precision, rad double precision, flag integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_nearby_pm_it' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is NOT as strict function because we accept nulls as pms CREATE OR REPLACE FUNCTION q3c_ellipse_nearby_it(double precision, double precision, double precision, double precision, double precision, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ellipse_nearby_it' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_in_ellipse(ra0 double precision, dec0 double precision, ra_ell double precision, dec_ell double precision, maj_ax double precision, axis_ratio double precision, pa double precision) RETURNS boolean AS 'MODULE_PATHNAME', 'pgq3c_in_ellipse' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_radial_query_it(double precision, double precision, double precision, integer, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_radial_query_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_ellipse_query_it(ra_ell double precision, dec_ell double precision, majax double precision, axis_ratio double precision, PA double precision, iteration integer, full_flag integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ellipse_query_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_poly_query_it(double precision[], integer, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_poly_query_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_poly_query_it(polygon, integer, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_poly_query1_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_in_poly(double precision, double precision, double precision[]) RETURNS boolean AS 'MODULE_PATHNAME', 'pgq3c_in_poly' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_in_poly(double precision, double precision, polygon) RETURNS boolean AS 'MODULE_PATHNAME', 'pgq3c_in_poly1' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_join(leftra double precision, leftdec double precision, rightra double precision, rightdec double precision, radius double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,7))))) AND q3c_sindist($1,$2,$3,$4)>== ($1,$2,$3,$4)::q3c_type) ' LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION q3c_join(leftra double precision, leftdec double precision, rightra real, rightdec real, radius double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,7))))) AND q3c_sindist($1,$2,$3,$4)>== ($1,$2,$3,$4)::q3c_type) ' LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION q3c_join_pm( left_ra double precision, -- 1 left_dec double precision, -- 2 left_pmra double precision, -- 3 left_pmdec double precision, -- 4 left_epoch double precision, -- 5 right_ra double precision, -- 6 right_dec double precision, -- 7 right_epoch double precision, -- 8 max_epoch_delta double precision, --9 radius double precision -- 10 ) RETURNS boolean AS ' SELECT ( ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,0)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,1))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,2)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,3))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,4)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,5))) OR ((q3c_ang2ipix($6,$7) >= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,6)) AND (q3c_ang2ipix($6,$7) <= q3c_nearby_pm_it($1,$2,$3,$4,$9,$10,7)))) AND q3c_sindist_pm($1,$2,$3,$4,$5,$6,$7,$8)>== ($1,$2,$6,$7)::q3c_type) ' LANGUAGE SQL IMMUTABLE; -- not strict CREATE OR REPLACE FUNCTION q3c_ellipse_join(leftra double precision, leftdec double precision, rightra double precision, rightdec double precision, majoraxis double precision, axisratio double precision, pa double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,7))))) AND q3c_in_ellipse($3,$4,$1,$2,$5,$6,$7) AND ($5::double precision ==<<>>== ($1,$2,$3,$4)::q3c_type) ' LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION q3c_radial_query( real, real, double precision, double precision, double precision) returns boolean as 'SELECT ( (q3c_ang2ipix($1,$2)>=q3c_radial_query_it($3,$4,$5,0,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,0,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,0,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,0,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,0,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,2,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,4,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,6,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,8,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,10,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,12,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,14,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,16,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,18,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,20,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,22,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,24,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,26,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,28,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,30,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,32,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,34,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,36,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,38,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,40,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,42,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,44,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,46,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,48,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,50,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,52,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,54,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,56,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,58,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,60,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,62,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,64,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,66,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,68,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,70,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,72,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,74,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,76,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,78,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,80,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,82,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,84,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,86,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,88,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,90,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,92,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,94,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,96,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,98,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,0,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,2,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,4,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,6,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,8,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,10,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,12,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,14,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,16,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,18,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,20,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,22,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,24,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,26,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,28,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,30,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,32,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,34,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,36,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,38,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,40,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,42,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,44,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,46,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,48,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,50,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,52,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,54,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,56,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,58,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,60,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,62,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,64,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,66,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,68,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,70,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,72,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,74,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,76,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,78,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,80,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,82,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,84,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,86,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,88,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,90,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,92,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,94,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,96,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)>== ( LEFTARG = double precision, RIGHTARG = q3c_type, PROCEDURE = q3c_seloper, RESTRICT = q3c_sel, JOIN = q3c_seljoin ); CREATE OR REPLACE FUNCTION q3c_version() RETURNS cstring AS 'MODULE_PATHNAME', 'pgq3c_get_version' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_version() IS 'Function returning Q3C version'; CREATE OR REPLACE FUNCTION q3c_ang2ipix(double precision, double precision) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ang2ipix' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_ang2ipix (double precision, double precision) IS 'Function converting Ra and Dec to the Q3C ipix value'; CREATE OR REPLACE FUNCTION q3c_ang2ipix(ra real, decl real) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ang2ipix_real' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_ang2ipix(real, real) IS 'Function converting Ra and Dec(floats) to the Q3C ipix value'; CREATE OR REPLACE FUNCTION q3c_ipix2ang(ipix bigint) RETURNS double precision[] AS 'MODULE_PATHNAME', 'pgq3c_ipix2ang' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_ipix2ang (bigint) IS 'Function converting the Q3C ipix value to Ra, Dec'; CREATE OR REPLACE FUNCTION q3c_pixarea(ipix bigint, depth int) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_pixarea' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_pixarea (bigint, int ) IS 'Function returning the area of the pixel containing ipix being located at certain depth in the quadtree'; CREATE OR REPLACE FUNCTION q3c_ipixcenter(ra double precision, decl double precision, int) RETURNS bigint AS 'SELECT ((q3c_ang2ipix($1,$2))>>((2*$3))<<((2*$3))) + ((1::bigint)<<(2*($3-1))) -1' LANGUAGE SQL; CREATE OR REPLACE FUNCTION q3c_dist(ra1 double precision, dec1 double precision, ra2 double precision, dec2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_dist' LANGUAGE C IMMUTABLE STRICT; COMMENT ON FUNCTION q3c_dist(double precision, double precision, double precision, double precision) IS 'Function q3c_dist(ra1, dec1, ra2, dec2) computing the distance between points (ra1, dec1) and (ra2, dec2)'; CREATE OR REPLACE FUNCTION q3c_sindist(double precision, double precision, double precision, double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_sindist' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_sindist_pm( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, cosdec_flag integer, epoch1 double precision, ra2 double precision, dec2 double precision, epoch2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_sindist_pm' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is not strict CREATE OR REPLACE FUNCTION q3c_dist_pm( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, cosdec_flag int, epoch1 double precision, ra2 double precision, dec2 double precision, epoch2 double precision) RETURNS double precision AS 'MODULE_PATHNAME', 'pgq3c_dist_pm' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is not strict CREATE OR REPLACE FUNCTION q3c_nearby_it(double precision, double precision, double precision, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_nearby_it' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_nearby_pm_it( ra1 double precision, dec1 double precision, pmra1 double precision, pmdec1 double precision, cosdec_flag int, maxepoch_delta double precision, rad double precision, flag integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_nearby_pm_it' LANGUAGE C IMMUTABLE COST 100; -- Importantly this is NOT as strict function because we accept nulls as pms CREATE OR REPLACE FUNCTION q3c_ellipse_nearby_it(double precision, double precision, double precision, double precision, double precision, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ellipse_nearby_it' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_in_ellipse(ra0 double precision, dec0 double precision, ra_ell double precision, dec_ell double precision, maj_ax double precision, axis_ratio double precision, pa double precision) RETURNS boolean AS 'MODULE_PATHNAME', 'pgq3c_in_ellipse' LANGUAGE C IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION q3c_radial_query_it(double precision, double precision, double precision, integer, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_radial_query_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_ellipse_query_it(ra_ell double precision, dec_ell double precision, majax double precision, axis_ratio double precision, PA double precision, iteration integer, full_flag integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_ellipse_query_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_poly_query_it(double precision[], integer, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_poly_query_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_poly_query_it(polygon, integer, integer) RETURNS bigint AS 'MODULE_PATHNAME', 'pgq3c_poly_query1_it' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_in_poly(double precision, double precision, double precision[]) RETURNS boolean AS 'MODULE_PATHNAME', 'pgq3c_in_poly' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_in_poly(double precision, double precision, polygon) RETURNS boolean AS 'MODULE_PATHNAME', 'pgq3c_in_poly1' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION q3c_join(leftra double precision, leftdec double precision, rightra double precision, rightdec double precision, radius double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,7))))) AND q3c_sindist($1,$2,$3,$4)>== ($1,$2,$3,$4)::q3c_type) ' LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION q3c_join(leftra double precision, leftdec double precision, rightra real, rightdec real, radius double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_nearby_it($1,$2,$5,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_nearby_it($1,$2,$5,7))))) AND q3c_sindist($1,$2,$3,$4)>== ($1,$2,$3,$4)::q3c_type) ' LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION q3c_join_pm( left_ra double precision, -- 1 left_dec double precision, -- 2 left_pmra double precision, -- 3 left_pmdec double precision, -- 4 cosdec_flag int, --5 left_epoch double precision, -- 6 right_ra double precision, -- 7 right_dec double precision, -- 8 right_epoch double precision, -- 9 max_epoch_delta double precision, -- 10 radius double precision -- 11 ) RETURNS boolean AS ' SELECT ( ((q3c_ang2ipix($7,$8) >= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,0)) AND (q3c_ang2ipix($7,$8) <= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,1))) OR ((q3c_ang2ipix($7,$8) >= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,2)) AND (q3c_ang2ipix($7,$8) <= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,3))) OR ((q3c_ang2ipix($7,$8) >= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,4)) AND (q3c_ang2ipix($7,$8) <= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,5))) OR ((q3c_ang2ipix($7,$8) >= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,6)) AND (q3c_ang2ipix($7,$8) <= q3c_nearby_pm_it($1,$2,$3,$4,$5,$10,$11,7)))) AND q3c_sindist_pm($1,$2,$3,$4,$5,$6,$7,$8,$9)>== ($1,$2,$6,$7)::q3c_type) ' LANGUAGE SQL IMMUTABLE; -- not strict CREATE OR REPLACE FUNCTION q3c_ellipse_join(leftra double precision, leftdec double precision, rightra double precision, rightdec double precision, majoraxis double precision, axisratio double precision, pa double precision) RETURNS boolean AS ' SELECT (((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,0))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,1)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,2))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,3)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,4))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,5)))) OR ((q3c_ang2ipix($3,$4)>=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,6))) AND (q3c_ang2ipix($3,$4)<=(q3c_ellipse_nearby_it($1,$2,$5,$6,$7,7))))) AND q3c_in_ellipse($3,$4,$1,$2,$5,$6,$7) AND ($5::double precision ==<<>>== ($1,$2,$3,$4)::q3c_type) ' LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION q3c_radial_query( real, real, double precision, double precision, double precision) returns boolean as 'SELECT ( (q3c_ang2ipix($1,$2)>=q3c_radial_query_it($3,$4,$5,0,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,0,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,0,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,1) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,0,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,2,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,4,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,6,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,8,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,10,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,12,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,14,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,16,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,18,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,20,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,22,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,24,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,26,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,28,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,30,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,32,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,34,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,36,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,38,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,40,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,42,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,44,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,46,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,48,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,50,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,52,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,54,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,56,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,58,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,60,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,62,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,64,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,66,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,68,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,70,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,72,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,74,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,76,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,78,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,80,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,82,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,84,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,86,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,88,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,90,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,92,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,94,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,96,0) AND q3c_ang2ipix($1,$2)=q3c_radial_query_it($3,$4,$5,98,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,0,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,2,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,4,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,6,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,8,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,10,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,12,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,14,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,16,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,18,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,20,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,22,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,24,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,26,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,28,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,30,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,32,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,34,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,36,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,38,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,40,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,42,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,44,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,46,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,48,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,50,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,52,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,54,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,56,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,58,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,60,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,62,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,64,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,66,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,68,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,70,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,72,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,74,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,76,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,78,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,80,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,82,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,84,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,86,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,88,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,90,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,92,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,94,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,96,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,98,1) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,0,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,2,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,4,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,6,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,8,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,10,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,12,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,14,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,16,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,18,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,20,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,22,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,24,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,26,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,28,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,30,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,32,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,34,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,36,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,38,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,40,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,42,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,44,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,46,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,48,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,50,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,52,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,54,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,56,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,58,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,60,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,62,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,64,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,66,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,68,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,70,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,72,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,74,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,76,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,78,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,80,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,82,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,84,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,86,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,88,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,90,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,92,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,94,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,96,0) AND q3c_ang2ipix($1,$2)=q3c_ellipse_query_it($3,$4,$5,$6,$7,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,1) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,0,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,2,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,4,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,6,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,8,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,10,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,12,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,14,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,16,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,18,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,20,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,22,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,24,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,26,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,28,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,30,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,32,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,34,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,36,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,38,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,40,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,42,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,44,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,46,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,48,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,50,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,52,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,54,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,56,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,58,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,60,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,62,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,64,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,66,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,68,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,70,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,72,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,74,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,76,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,78,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,80,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,82,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,84,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,86,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,88,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,90,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,92,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,94,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,96,0) AND q3c_ang2ipix($1,$2)=q3c_poly_query_it($3,98,0) AND q3c_ang2ipix($1,$2)3; q3c-2.0.0/utils/000077500000000000000000000000001363277220100133425ustar00rootroot00000000000000q3c-2.0.0/utils/check_poly.py000066400000000000000000000074161363277220100160440ustar00rootroot00000000000000import shapely import numpy as np,numpy.random import random import multiprocessing,sys from readcol import readcol from shapely.geometry import Point, Polygon def torect(ra,dec): cd=np.cos(np.deg2rad(dec)) sd=np.sin(np.deg2rad(dec)) sr=np.sin(np.deg2rad(ra)) cr=np.cos(np.deg2rad(ra)) x,y,z=cd*cr,cd*sr,sd return x,y,z def fromrect(x,y,z): ra = np.rad2deg(np.arctan2(y, x)) dec = np.rad2deg(np.arctan2(z, np.sqrt(x**2+y**2))) rad = np.sqrt(x**2+y**2+z**2) return ra,dec def within_poly(ra,dec,rapoly,decpoly,getmask=False): rapolycen, decpolycen = (rapoly[0]), (decpoly[0]) x, y, z = torect(ra, dec) xpoly,ypoly,zpoly=torect(rapoly,decpoly) xpolycen,ypolycen,zpolycen=torect(rapolycen,decpolycen ) dists = x*xpolycen+y*ypolycen+z*zpolycen ind = dists>np.cos(np.deg2rad(70)) # only consider the points located at the same #hemisphere as the polygon x1,y1,z1=x[ind],y[ind],z[ind] point = Point(0,0) arr = [] for curx,cury,curz in zip(x1,y1,z1): curx1 = curx + random.random() cury1 = cury + random.random() curz1 = curz + random.random() # this is the perturbed vector to the point vec0 = np.array([curx, cury, curz]) vec1 = np.array([curx1, cury1, curz1]) vec1 = vec1 / (vec1**2).sum()**.5 vec1 = vec1 - (vec0 * vec1).sum() *vec0 vec1 = vec1 / (vec1**2).sum()**.5 vec2 = np.cross(vec0, vec1) # vec0,vec1,vec2 this is the orthogonal system of vectors summer = lambda t: xpoly * t[0] + ypoly * t[1] + zpoly * t[2] norm = summer(vec0) curxpoly = summer(vec1) / norm curypoly = summer(vec2) / norm # curxpoly aren now projections of the polygon vertex onto the plane # perpednicular to the vector pointing towards curx,cury,curz # the rotation angle of this plane is random #print repr(curxpoly),repr(curypoly) poly = Polygon(zip(curxpoly, curypoly)) arr.append(point.within(poly)) result = int(np.array(arr).sum()) print >>sys.stderr , result ind[ind]=arr[:] if getmask: return result,ind return result#,ind def get_rotation_matrix(fi1, fi2, fi3): mat1 = np.matrix([ [ 1, 0, 0 ], [ 0, np.cos(fi1), -np.sin(fi1) ], [ 0, np.sin(fi1), np.cos(fi1) ] ]) mat2 = np.matrix([ [ np.cos(fi2), 0, np.sin(fi2) ], [ 0, 1, 0 ], [ -np.sin(fi2), 0, np.cos(fi2) ] ]) mat3 = np.matrix([ [ np.cos(fi3), -np.sin(fi3), 0 ], [ np.sin(fi3), np.cos(fi3), 0 ], [ 0, 0, 1 ] ]) return mat1*mat2*mat3 def gen_random_poly(): minvert = 3 maxvert = 10 mindist = 1 maxdist = 10 nvert = np.random.uniform(minvert, maxvert, 1)[0] fi1, fi2, fi3 = np.random.uniform(0,2*np.pi,1)[0],\ np.random.uniform(0,2*np.pi,1)[0],\ np.random.uniform(0,2*np.pi,1)[0] mat = get_rotation_matrix(fi1, fi2, fi3) while True: ras = np.sort(np.random.uniform(0, 360, nvert)) if (ras[-1]-ras[0])>180: break dists = np.random.uniform(mindist, maxdist, nvert) decs = (90 - dists) #print ras,decs x,y,z = torect(ras, decs) vec = np.array([x, y, z]) vec1 = mat * vec ras,decs = fromrect(np.array(vec1[0]).flatten(),np.array(vec1[1]).flatten(), np.array(vec1[2]).flatten()) ras = (ras + (180-ras[0]))%360 - (180-ras[0]) ras = ras - (ras)%0.001 ras = (ras+360)%360 decs = decs - (decs)%0.001 return ras,decs def get_all_polys(): npolys = 10000 tab = 'test_small' np.random.seed(1) catra, catdec = readcol('/tmp/zz3_')#./gen_data 3 10000 pool = multiprocessing.Pool(8) res = [] for i in range(npolys): a,b = gen_random_poly() coostring = ','.join(['%f'%_ for _ in np.array([a,b]).T.flatten()]) query = 'select count(*) from %s where q3c_poly_query(ra,dec,ARRAY[%s]);'%(tab,coostring) print query #print a,b #print within_poly(catra,catdec,a,b); res.append(pool.apply_async(within_poly,(catra,catdec,a,b))) pool.close() pool.join() for r in res: print r.get()q3c-2.0.0/utils/create_drops.pl000066400000000000000000000004671363277220100163600ustar00rootroot00000000000000my $state=0; while(<>) { if (/^--/) { next; } elsif (s/CREATE OR REPLACE FUNCTION/DROP FUNCTION/) { if (!(/\)/)) { $state=1; chomp; print; next; } chomp; print; print ";\n"; next; } if ($state==1) { chomp; print; if (/\)/) { print ";\n"; $state=0; } } }q3c-2.0.0/utils/formulae000066400000000000000000000020121363277220100150720ustar00rootroot00000000000000Misc spherical distance formulae: cos(r)=cos(ra1)cos(ra2)cos(dec1)cos(dec2)+sin(ra1)sin(ra2)cos(dec1)cos(dec2)+sin(dec1)sin(dec2) cos(r)=cos(dec1)cos(dec2)cos(ra1-ra2)+sin(dec1)*sin(dec2) cos(r)=cos(dec1)cos(dec2)(1-2sin^2(ra1-ra2))+sin(dec1)*sin(dec2) cos(r)=cos(dec1)cos(dec2)-2sin^2((ra1-ra2)/2)*cos(dec1)cos(dec2)+sin(dec1)*sin(dec2) cos(r)=cos(dec1-dec2)-2sin^2(ra1-ra2)*cos(dec1)cos(dec2) cos(r)=1-2sin^2((dec1-dec2)/2)-2sin^2(ra1-ra2)cos(dec1)cos(dec2) 1-2sin^2(r/2)=1-2sin^2((dec1-dec2)/2)-2sin^2(ra1-ra2)cos(dec1)cos(dec2) sin^2(r/2)=sin^2((dec1-dec2)/2)+sin^2(ra1-ra2)cos(dec1)cos(dec2) sin^2(r/2)=sin^2((dec1-dec2)/2)+sin^2(ra1-ra2)0.5*(cos(dec1-dec2)+cos(dec1+dec2)) sin^2(r/2)=sin^2((dec1-dec2)/2)+sin^2(ra1-ra2)0.5*(1-2*sin^2((dec1-dec2)/2)+cos(dec1+dec2)) sin^2(r / 2) = sin^2(ra1 - ra2) * (cos^2((dec1 + dec2) / 2) - sin^2((dec1 - dec2) / 2)) + sin^2((dec1 - dec2) / 2) q3c-2.0.0/utils/generate_rad_query.pl000066400000000000000000000042221363277220100175440ustar00rootroot00000000000000#!/usr/bin/perl use strict; # Here the numbers are the number of PAIRS!!! of ranges (as in C program) my $full_array_len=50;#800; my $partial_array_len=50;#800; my $q3c_func='q3c_radial_query_it'; my ($ipix_col, $ra_col, $dec_col, $ra_cen, $dec_cen, $radius, $coltype); for (1..3) { if ($_==1) { $ipix_col='$1'; $ra_col='$2'; $dec_col='$3'; $ra_cen='$4'; $dec_cen='$5'; $radius='$6'; print "CREATE OR REPLACE FUNCTION q3c_radial_query(bigint, double precision, double precision, double precision, double precision, double precision) returns boolean as '"; } else { $ipix_col='q3c_ang2ipix($1,$2)'; $ra_col='$1'; $dec_col='$2'; $ra_cen='$3'; $dec_cen='$4'; $radius='$5'; if ($_==2) { $coltype='real'; } else { $coltype='double precision'; } print "CREATE OR REPLACE FUNCTION q3c_radial_query( $coltype, $coltype, double precision, double precision, double precision) returns boolean as '"; } print "SELECT ((\n"; my $i = 0; while(1) { if ($i < 2 * ($full_array_len - 1)) { print "($ipix_col>=$q3c_func($ra_cen,$dec_cen,$radius," . "" . ($i++) . ",1) AND $ipix_col<$q3c_func($ra_cen,$dec_cen,$radius,".($i++).",1)) OR\n"; } else { print "($ipix_col>=$q3c_func($ra_cen,$dec_cen,$radius," . "" . ($i++) . ",1) AND $ipix_col<$q3c_func($ra_cen,$dec_cen,$radius,".($i++).",1)) \n"; last; } } print ") OR (\n"; $i=0; while(1) { if ($i < 2 * ($partial_array_len - 1)) { print "($ipix_col>=$q3c_func($ra_cen,$dec_cen,$radius," . "" . ($i++) . ",0) AND $ipix_col<$q3c_func($ra_cen,$dec_cen,$radius,".($i++).",0)) OR\n"; } else { print "($ipix_col>=$q3c_func($ra_cen,$dec_cen,$radius," . "" . ($i++) . ",0) AND $ipix_col<$q3c_func($ra_cen,$dec_cen,$radius,".($i++).",0)) \n"; last; } } print ")\n AND q3c_sindist($ra_col,$dec_col,$ra_cen,$dec_cen)