/* Copyright (c) 2019, Anthony Latorre * * 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 3 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, see . */ #include "likelihood.h" #include #include "zebra.h" #include "Record_Info.h" #include "event.h" #include "zdab_utils.h" #include "scattering.h" #include "pmt.h" #include "sno_charge.h" #include "db.h" #include "dqxx.h" #include #include /* for sin(), cos(), etc. */ #include /* for gettimeofday() */ #include /* for PRIu32 macro */ #include /* for memcpy() */ #include /* for errno */ #include "pdg.h" #include "optics.h" #include "vector.h" #include "pmt_response.h" #include /* for signal() */ #include "release.h" #include "id_particles.h" #include "misc.h" #include "quad.h" #include "sno.h" #include "find_peaks.h" #include "util.h" /* Maximum number of fit parameters. Should be at least 4 + 3*MAX_VERTICES. */ #define MAX_PARS 100 /* Maximum number of peaks to search for in Hough transform. */ #define MAX_NPEAKS 5 /* Maximum kinetic energy for any particle. */ #define MAX_ENERGY 10000 char *GitSHA1(void); char *GitDirty(void); static int stop = 0; static nlopt_opt opt; #define EV_RECORD 0x45562020 // 'EV ' #define MCTK_RECORD 0x4d43544b // 'MCTK' #define MCVX_RECORD 0x4d435658 // 'MCVX' char *flikelihood; static size_t iter; typedef struct fitParams { event *ev; double dx; double ns; int fast; int print; int id[MAX_VERTICES]; size_t n; int charge_only; int hit_only; } fitParams; int particles[] = { IDP_E_MINUS, IDP_MU_MINUS, }; /* In order to start the fitter close to the minimum, we first do a series of * "quick" minimizations starting at the following points. We keep track of the * parameters with the best likelihood value and then start the "real" * minimization from those parameters. */ static struct startingParameters { double x; double y; double z; } startingParameters[] = { {-800.0,-800.0,-800.0}, {-800.0,-800.0,-700.0}, {-800.0,-800.0,-600.0}, {-800.0,-800.0,-500.0}, {-800.0,-800.0,-400.0}, {-800.0,-800.0,-300.0}, {-800.0,-800.0,-200.0}, {-800.0,-800.0,-100.0}, {-800.0,-800.0, 0.0}, {-800.0,-800.0, 100.0}, {-800.0,-800.0, 200.0}, {-800.0,-800.0, 300.0}, {-800.0,-800.0, 400.0}, {-800.0,-800.0, 500.0}, {-800.0,-800.0, 600.0}, {-800.0,-800.0, 700.0}, {-800.0,-800.0, 800.0}, {-800.0,-700.0,-800.0}, {-800.0,-700.0,-700.0}, {-800.0,-700.0,-600.0}, {-800.0,-700.0,-500.0}, {-800.0,-700.0,-400.0}, {-800.0,-700.0,-300.0}, {-800.0,-700.0,-200.0}, {-800.0,-700.0,-100.0}, {-800.0,-700.0, 0.0}, {-800.0,-700.0, 100.0}, {-800.0,-700.0, 200.0}, {-800.0,-700.0, 300.0}, {-800.0,-700.0, 400.0}, {-800.0,-700.0, 500.0}, {-800.0,-700.0, 600.0}, {-800.0,-700.0, 700.0}, {-800.0,-700.0, 800.0}, {-800.0,-600.0,-800.0}, {-800.0,-600.0,-700.0}, {-800.0,-600.0,-600.0}, {-800.0,-600.0,-500.0}, {-800.0,-600.0,-400.0}, {-800.0,-600.0,-300.0}, {-800.0,-600.0,-200.0}, {-800.0,-600.0,-100.0}, {-800.0,-600.0, 0.0}, {-800.0,-600.0, 100.0}, {-800.0,-600.0, 200.0}, {-800.0,-600.0, 300.0}, {-800.0,-600.0, 400.0}, {-800.0,-600.0, 500.0}, {-800.0,-600.0, 600.0}, {-800.0,-600.0, 700.0}, {-800.0,-600.0, 800.0}, {-800.0,-500.0,-800.0}, {-800.0,-500.0,-700.0}, {-800.0,-500.0,-600.0}, {-800.0,-500.0,-500.0}, {-800.0,-500.0,-400.0}, {-800.0,-500.0,-300.0}, {-800.0,-500.0,-200.0}, {-800.0,-500.0,-100.0}, {-800.0,-500.0, 0.0}, {-800.0,-500.0, 100.0}, {-800.0,-500.0, 200.0}, {-800.0,-500.0, 300.0}, {-800.0,-500.0, 400.0}, {-800.0,-500.0, 500.0}, {-800.0,-500.0, 600.0}, {-800.0,-500.0, 700.0}, {-800.0,-500.0, 800.0}, {-800.0,-400.0,-800.0}, {-800.0,-400.0,-700.0}, {-800.0,-400.0,-600.0}, {-800.0,-400.0,-500.0}, {-800.0,-400.0,-400.0}, {-800.0,-400.0,-300.0}, {-800.0,-400.0,-200.0}, {-800.0,-400.0,-100.0}, {-800.0,-400.0, 0.0}, {-800.0,-400.0, 100.0}, {-800.0,-400.0, 200.0}, {-800.0,-400.0, 300.0}, {-800.0,-400.0, 400.0}, {-800.0,-400.0, 500.0}, {-800.0,-400.0, 600.0}, {-800.0,-400.0, 700.0}, {-800.0,-400.0, 800.0}, {-800.0,-300.0,-800.0}, {-800.0,-300.0,-700.0}, {-800.0,-300.0,-600.0}, {-800.0,-300.0,-500.0}, {-800.0,-300.0,-400.0}, {-800.0,-300.0,-300.0}, {-800.0,-300.0,-200.0}, {-800.0,-300.0,-100.0}, {-800.0,-300.0, 0.0}, {-800.0,-300.0, 100.0}, {-800.0,-300.0, 200.0}, {-800.0,-300.0, 300.0}, {-800.0,-300.0, 400.0}, {-800.0,-300.0, 500.0}, {-800.0,-300.0, 600.0}, {-800.0,-300.0, 700.0}, {-800.0,-300.0, 800.0}, {-800.0,-200.0,-800.0}, {-800.0,-200.0,-700.0}, {-800.0,-200.0,-600.0}, {-800.0,-200.0,-500.0}, {-800.0,-200.0,-400.0}, {-800.0,-200.0,-300.0}, {-800.0,-200.0,-200.0}, {-800.0,-200.0,-100.0}, {-800.0,-200.0, 0.0}, {-800.0,-200.0, 100.0}, {-800.0,-200.0, 200.0}, {-800.0,-200.0, 300.0}, {-800.0,-200.0, 400.0}, {-800.0,-200.0, 500.0}, {-800.0,-200.0, 600.0}, {-800.0,-200.0, 700.0}, {-800.0,-200.0, 800.0}, {-800.0,-100.0,-800.0}, {-800.0,-100.0,-700.0}, {-800.0,-100.0,-600.0}, {-800.0,-100.0,-500.0}, {-800.0,-100.0,-400.0}, {-800.0,-100.0,-300.0}, {-800.0,-100.0,-200.0}, {-800.0,-100.0,-100.0}, {-800.0,-100.0, 0.0}, {-800.0,-100.0, 100.0}, {-800.0,-100.0, 200.0}, {-800.0,-100.0, 300.0}, {-800.0,-100.0, 400.0}, {-800.0,-100.0, 500.0}, {-800.0,-100.0, 600.0}, {-800.0,-100.0, 700.0}, {-800.0,-100.0, 800.0}, {-800.0, 0.0,-800.0}, {-800.0, 0.0,-700.0}, {-800.0, 0.0,-600.0}, {-800.0, 0.0,-500.0}, {-800.0, 0.0,-400.0}, {-800.0, 0.0,-300.0}, {-800.0, 0.0,-200.0}, {-800.0, 0.0,-100.0}, {-800.0, 0.0, 0.0}, {-800.0, 0.0, 100.0}, {-800.0, 0.0, 200.0}, {-800.0, 0.0, 300.0}, {-800.0, 0.0, 400.0}, {-800.0, 0.0, 500.0}, {-800.0, 0.0, 600.0}, {-800.0, 0.0, 700.0}, {-800.0, 0.0, 800.0}, {-800.0, 100.0,-800.0}, {-800.0, 100.0,-700.0}, {-800.0, 100.0,-600.0}, {-800.0, 100.0,-500.0}, {-800.0, 100.0,-400.0}, {-800.0, 100.0,-300.0}, {-800.0, 100.0,-200.0}, {-800.0, 100.0,-100.0}, {-800.0, 100.0, 0.0}, {-800.0, 100.0, 100.0}, {-800.0, 100.0, 200.0}, {-800.0, 100.0, 300.0}, {-800.0, 100.0, 400.0}, {-800.0, 100.0, 500.0}, {-800.0, 100.0, 600.0}, {-800.0, 100.0, 700.0}, {-800.0, 100.0, 800.0}, {-800.0, 200.0,-800.0}, {-800.0, 200.0,-700.0}, {-800.0, 200.0,-600.0}, {-800.0, 200.0,-500.0}, {-800.0, 200.0,-400.0}, {-800.0, 200.0,-300.0}, {-800.0, 200.0,-200.0}, {-800.0, 200.0,-100.0}, {-800.0, 200.0, 0.0}, {-800.0, 200.0, 100.0}, {-800.0, 200.0, 200.0}, {-800.0, 200.0, 300.0}, {-800.0, 200.0, 400.0}, {-800.0, 200.0, 500.0}, {-800.0, 200.0, 600.0}, {-800.0, 200.0, 700.0}, {-800.0, 200.0, 800.0}, {-800.0, 300.0,-800.0}, {-800.0, 300.0,-700.0}, {-800.0, 300.0,-600.0}, {-800.0, 300.0,-500.0}, {-800.0, 300.0,-400.0}, {-800.0, 300.0,-300.0}, {-800.0, 300.0,-200.0}, {-800.0, 300.0,-100.0}, {-800.0, 300.0, 0.0}, {-800.0, 300.0, 100.0}, {-800.0, 300.0, 200.0}, {-800.0, 300.0, 300.0}, {-800.0, 300.0, 400.0}, {-800.0, 300.0, 500.0}, {-800.0, 300.0, 600.0}, {-800.0, 300.0, 700.0}, {-800.0, 300.0, 800.0}, {-800.0, 400.0,-800.0}, {-800.0, 400.0,-700.0}, {-800.0, 400.0,-600.0}, {-800.0, 400.0,-500.0}, {-800.0, 400.0,-400.0}, {-800.0, 400.0,-300.0}, {-800.0, 400.0,-200.0}, {-800.0, 400.0,-100.0}, {-800.0, 400.0, 0.0}, {-800.0, 400.0, 100.0}, {-800.0, 400.0, 200.0}, {-800.0, 400.0, 300.0}, {-800.0, 400.0, 400.0}, {-800.0, 400.0, 500.0}, {-800.0, 400.0, 600.0}, {-800.0, 400.0, 700.0}, {-800.0, 400.0, 800.0}, {-800.0, 500.0,-800.0}, {-800.0, 500.0,-700.0}, {-800.0, 500.0,-600.0}, {-800.0, 500.0,-500.0}, {-800.0, 500.0,-400.0}, {-800.0, 500.0,-300.0}, {-800.0, 500.0,-200.0}, {-800.0, 500.0,-100.0}, {-800.0, 500.0, 0.0}, {-800.0, 500.0, 100.0}, {-800.0, 500.0, 200.0}, {-800.0, 500.0, 300.0}, {-800.0, 500.0, 400.0}, {-800.0, 500.0, 500.0}, {-800.0, 500.0, 600.0}, {-800.0, 500.0, 700.0}, {-800.0, 500.0, 800.0}, {-800.0, 600.0,-800.0}, {-800.0, 600.0,-700.0}, {-800.0, 600.0,-600.0}, {-800.0, 600.0,-500.0}, {-800.0, 600.0,-400.0}, {-800.0, 600.0,-300.0}, {-800.0, 600.0,-200.0}, {-800.0, 600.0,-100.0}, {-800.0, 600.0, 0.0}, {-800.0, 600.0, 100.0}, {-800.0, 600.0, 200.0}, {-800.0, 600.0, 300.0}, {-800.0, 600.0, 400.0}, {-800.0, 600.0, 500.0}, {-800.0, 600.0, 600.0}, {-800.0, 600.0, 700.0}, {-800.0, 600.0, 800.0}, {-800.0, 700.0,-800.0}, {-800.0, 700.0,-700.0}, {-800.0, 700.0,-600.0}, {-800.0, 700.0,-500.0}, {-800.0, 700.0,-400.0}, {-800.0, 700.0,-300.0}, {-800.0, 700.0,-200.0}, {-800.0, 700.0,-100.0}, {-800.0, 700.0, 0.0}, {-800.0, 700.0, 100.0}, {-800.0, 700.0, 200.0}, {-800.0, 700.0, 300.0}, {-800.0, 700.0, 400.0}, {-800.0, 700.0, 500.0}, {-800.0, 700.0, 600.0}, {-800.0, 700.0, 700.0}, {-800.0, 700.0, 800.0}, {-800.0, 800.0,-800.0}, {-800.0, 800.0,-700.0}, {-800.0, 800.0,-600.0}, {-800.0, 800.0,-500.0}, {-800.0, 800.0,-400.0}, {-800.0, 800.0,-300.0}, {-800.0, 800.0,-200.0}, {-800.0, 800.0,-100.0}, {-800.0, 800.0, 0.0}, {-800.0, 800.0, 100.0}, {-800.0, 800.0, 200.0}, {-800.0, 800.0, 300.0}, {-800.0, 800.0, 400.0}, {-800.0, 800.0, 500.0}, {-800.0, 800.0, 600.0}, {-800.0, 800.0, 700.0}, {-800.0, 800.0, 800.0}, {-700.0,-800.0,-800.0}, {-700.0,-800.0,-700.0}, {-700.0,-800.0,-600.0}, {-700.0,-800.0,-500.0}, {-700.0,-800.0,-400.0}, {-700.0,-800.0,-300.0}, {-700.0,-800.0,-200.0}, {-700.0,-800.0,-100.0}, {-700.0,-800.0, 0.0}, {-700.0,-800.0, 100.0}, {-700.0,-800.0, 200.0}, {-700.0,-800.0, 300.0}, {-700.0,-800.0, 400.0}, {-700.0,-800.0, 500.0}, {-700.0,-800.0, 600.0}, {-700.0,-800.0, 700.0}, {-700.0,-800.0, 800.0}, {-700.0,-700.0,-800.0}, {-700.0,-700.0,-700.0}, {-700.0,-700.0,-600.0}, {-700.0,-700.0,-500.0}, {-700.0,-700.0,-400.0}, {-700.0,-700.0,-300.0}, {-700.0,-700.0,-200.0}, {-700.0,-700.0,-100.0}, {-700.0,-700.0, 0.0}, {-700.0,-700.0, 100.0}, {-700.0,-700.0, 200.0}, {-700.0,-700.0, 300.0}, {-700.0,-700.0, 400.0}, {-700.0,-700.0, 500.0}, {-700.0,-700.0, 600.0}, {-700.0,-700.0, 700.0}, {-700.0,-700.0, 800.0}, {-700.0,-600.0,-800.0}, {-700.0,-600.0,-700.0}, {-700.0,-600.0,-600.0}, {-700.0,-600.0,-500.0}, {-700.0,-600.0,-400.0}, {-700.0,-600.0,-300.0}, {-700.0,-600.0,-200.0}, {-700.0,-600.0,-100.0}, {-700.0,-600.0, 0.0}, {-700.0,-600.0, 100.0}, {-700.0,-600.0, 200.0}, {-700.0,-600.0, 300.0}, {-700.0,-600.0, 400.0}, {-700.0,-600.0, 500.0}, {-700.0,-600.0, 600.0}, {-700.0,-600.0, 700.0}, {-700.0,-600.0, 800.0}, {-700.0,-500.0,-800.0}, {-700.0,-500.0,-700.0}, {-700.0,-500.0,-600.0}, {-700.0,-500.0,-500.0}, {-700.0,-500.0,-400.0}, {-700.0,-500.0,-300.0}, {-700.0,-500.0,-200.0}, {-700.0,-500.0,-100.0}, {-700.0,-500.0, 0.0}, {-700.0,-500.0, 100.0}, {-700.0,-500.0, 200.0}, {-700.0,-500.0, 300.0}, {-700.0,-500.0, 400.0}, {-700.0,-500.0, 500.0}, {-700.0,-500.0, 600.0}, {-700.0,-500.0, 700.0}, {-700.0,-500.0, 800.0}, {-700.0,-400.0,-800.0}, {-700.0,-400.0,-700.0}, {-700.0,-400.0,-600.0}, {-700.0,-400.0,-500.0}, {-700.0,-400.0,-400.0}, {-700.0,-400.0,-300.0}, {-700.0,-400.0,-200.0}, {-700.0,-400.0,-100.0}, {-700.0,-400.0, 0.0}, {-700.0,-400.0, 100.0}, {-700.0,-400.0, 200.0}, {-700.0,-400.0, 300.0}, {-700.0,-400.0, 400.0}, {-700.0,-400.0, 500.0}, {-700.0,-400.0, 600.0}, {-700.0,-400.0, 700.0}, {-700.0,-400.0, 800.0}, {-700.0,-300.0,-800.0}, {-700.0,-300.0,-700.0}, {-700.0,-300.0,-600.0}, {-700.0,-300.0,-500.0}, {-700.0,-300.0,-400.0}, {-700.0,-300.0,-300.0}, {-700.0,-300.0,-200.0}, {-700.0,-300.0,-100.0}, {-700.0,-300.0, 0.0}, {-700.0,-300.0, 100.0}, {-700.0,-300.0, 200.0}, {-700.0,-300.0, 300.0}, {-700.0,-300.0, 400.0}, {-700.0,-300.0, 500.0}, {-700.0,-300.0, 600.0}, {-700.0,-300.0, 700.0}, {-700.0,-300.0, 800.0}, {-700.0,-200.0,-800.0}, {-700.0,-200.0,-700.0}, {-700.0,-200.0,-600.0}, {-700.0,-200.0,-500.0}, {-700.0,-200.0,-400.0}, {-700.0,-200.0,-300.0}, {-700.0,-200.0,-200.0}, {-700.0,-200.0,-100.0}, {-700.0,-200.0, 0.0}, {-700.0,-200.0, 100.0}, {-700.0,-200.0, 200.0}, {-700.0,-200.0, 300.0}, {-700.0,-200.0, 400.0}, {-700.0,-200.0, 500.0}, {-700.0,-200.0, 600.0}, {-700.0,-200.0, 700.0}, {-700.0,-200.0, 800.0}, {-700.0,-100.0,-800.0}, {-700.0,-100.0,-700.0}, {-700.0,-100.0,-600.0}, {-700.0,-100.0,-500.0}, {-700.0,-100.0,-400.0}, {-700.0,-100.0,-300.0}, {-700.0,-100.0,-200.0}, {-700.0,-100.0,-100.0}, {-700.0,-100.0, 0.0}, {-700.0,-100.0, 100.0}, {-700.0,-100.0, 200.0}, {-700.0,-100.0, 300.0}, {-700.0,-100.0, 400.0}, {-700.0,-100.0, 500.0}, {-700.0,-100.0, 600.0}, {-700.0,-100.0, 700.0}, {-700.0,-100.0, 800.0}, {-700.0, 0.0,-800.0}, {-700.0, 0.0,-700.0}, {-700.0, 0.0,-600.0}, {-700.0, 0.0,-500.0}, {-700.0, 0.0,-400.0}, {-700.0, 0.0,-300.0}, {-700.0, 0.0,-200.0}, {-700.0, 0.0,-100.0}, {-700.0, 0.0, 0.0}, {-700.0, 0.0, 100.0}, {-700.0, 0.0, 200.0}, {-700.0, 0.0, 300.0}, {-700.0, 0.0, 400.0}, {-700.0, 0.0, 500.0}, {-700.0, 0.0, 600.0}, {-700.0, 0.0, 700.0}, {-700.0, 0.0, 800.0}, {-700.0, 100.0,-800.0}, {-700.0, 100.0,-700.0}, {-700.0, 100.0,-600.0}, {-700.0, 100.0,-500.0}, {-700.0, 100.0,-400.0}, {-700.0, 100.0,-300.0}, {-700.0, 100.0,-200.0}, {-700.0, 100.0,-100.0}, {-700.0, 100.0, 0.0}, {-700.0, 100.0, 100.0}, {-700.0, 100.0, 200.0}, {-700.0, 100.0, 300.0}, {-700.0, 100.0, 400.0}, {-700.0, 100.0, 500.0}, {-700.0, 100.0, 600.0}, {-700.0, 100.0, 700.0}, {-700.0, 100.0, 800.0}, {-700.0, 200.0,-800.0}, {-700.0, 200.0,-700.0}, {-700.0, 200.0,-600.0}, {-700.0, 200.0,-500.0}, {-700.0, 200.0,-400.0}, {-700.0, 200.0,-300.0}, {-700.0, 200.0,-200.0}, {-700.0, 200.0,-100.0}, {-700.0, 200.0, 0.0}, {-700.0, 200.0, 100.0}, {-700.0, 200.0, 200.0}, {-700.0, 200.0, 300.0}, {-700.0, 200.0, 400.0}, {-700.0, 200.0, 500.0}, {-700.0, 200.0, 600.0}, {-700.0, 200.0, 700.0}, {-700.0, 200.0, 800.0}, {-700.0, 300.0,-800.0}, {-700.0, 300.0,-700.0}, {-700.0, 300.0,-600.0}, {-700.0, 300.0,-500.0}, {-700.0, 300.0,-400.0}, {-700.0, 300.0,-300.0}, {-700.0, 300.0,-200.0}, {-700.0, 300.0,-100.0}, {-700.0, 300.0, 0.0}, {-700.0, 300.0, 100.0}, {-700.0, 300.0, 200.0}, {-700.0, 300.0, 300.0}, {-700.0, 300.0, 400.0}, {-700.0, 300.0, 500.0}, {-700.0, 300.0, 600.0}, {-700.0, 300.0, 700.0}, {-700.0, 300.0, 800.0}, {-700.0, 400.0,-800.0}, {-700.0, 400.0,-700.0}, {-700.0, 400.0,-600.0}, {-700.0, 400.0,-500.0}, {-700.0, 400.0,-400.0}, {-700.0, 400.0,-300.0}, {-700.0, 400.0,-200.0}, {-700.0, 400.0,-100.0}, {-700.0, 400.0, 0.0}, {-700.0, 400.0, 100.0}, {-700.0, 400.0, 200.0}, {-700.0, 400.0, 300.0}, {-700.0, 400.0, 400.0}, {-700.0, 400.0, 500.0}, {-700.0, 400.0, 600.0}, {-700.0, 400.0, 700.0}, {-700.0, 400.0, 800.0}, {-700.0, 500.0,-800.0}, {-700.0, 500.0,-700.0}, {-700.0, 500.0,-600.0}, {-700.0, 500.0,-500.0}, {-700.0, 500.0,-400.0}, {-700.0, 500.0,-300.0}, {-700.0, 500.0,-200.0}, {-700.0, 500.0,-100.0}, {-700.0, 500.0, 0.0}, {-700.0, 500.0, 100.0}, {-700.0, 500.0, 200.0}, {-700.0, 500.0, 300.0}, {-700.0, 500.0, 400.0}, {-700.0, 500.0, 500.0}, {-700.0, 500.0, 600.0}, {-700.0, 500.0, 700.0}, {-700.0, 500.0, 800.0}, {-700.0, 600.0,-800.0}, {-700.0, 600.0,-700.0}, {-700.0, 600.0,-600.0}, {-700.0, 600.0,-500.0}, {-700.0, 600.0,-400.0}, {-700.0, 600.0,-300.0}, {-700.0, 600.0,-200.0}, {-700.0, 600.0,-100.0}, {-700.0, 600.0, 0.0}, {-700.0, 600.0, 100.0}, {-700.0, 600.0, 200.0}, {-700.0, 600.0, 300.0}, {-700.0, 600.0, 400.0}, {-700.0, 600.0, 500.0}, {-700.0, 600.0, 600.0}, {-700.0, 600.0, 700.0}, {-700.0, 600.0, 800.0}, {-700.0, 700.0,-800.0}, {-700.0, 700.0,-700.0}, {-700.0, 700.0,-600.0}, {-700.0, 700.0,-500.0}, {-700.0, 700.0,-400.0}, {-700.0, 700.0,-300.0}, {-700.0, 700.0,-200.0}, {-700.0, 700.0,-100.0}, {-700.0, 700.0, 0.0}, {-700.0, 700.0, 100.0}, {-700.0, 700.0, 200.0}, {-700.0, 700.0, 300.0}, {-700.0, 700.0, 400.0}, {-700.0, 700.0, 500.0}, {-700.0, 700.0, 600.0}, {-700.0, 700.0, 700.0}, {-700.0, 700.0, 800.0}, {-700.0, 800.0,-800.0}, {-700.0, 800.0,-700.0}, {-700.0, 800.0,-600.0}, {-700.0, 800.0,-500.0}, {-700.0, 800.0,-400.0}, {-700.0, 800.0,-300.0}, {-700.0, 800.0,-200.0}, {-700.0, 800.0,-100.0}, {-700.0, 800.0, 0.0}, {-700.0, 800.0, 100.0}, {-700.0, 800.0, 200.0}, {-700.0, 800.0, 300.0}, {-700.0, 800.0, 400.0}, {-700.0, 800.0, 500.0}, {-700.0, 800.0, 600.0}, {-700.0, 800.0, 700.0}, {-700.0, 800.0, 800.0}, {-600.0,-800.0,-800.0}, {-600.0,-800.0,-700.0}, {-600.0,-800.0,-600.0}, {-600.0,-800.0,-500.0}, {-600.0,-800.0,-400.0}, {-600.0,-800.0,-300.0}, {-600.0,-800.0,-200.0}, {-600.0,-800.0,-100.0}, {-600.0,-800.0, 0.0}, {-600.0,-800.0, 100.0}, {-600.0,-800.0, 200.0}, {-600.0,-800.0, 300.0}, {-600.0,-800.0, 400.0}, {-600.0,-800.0, 500.0}, {-600.0,-800.0, 600.0}, {-600.0,-800.0, 700.0}, {-600.0,-800.0, 800.0}, {-600.0,-700.0,-800.0}, {-600.0,-700.0,-700.0}, {-600.0,-700.0,-600.0}, {-600.0,-700.0,-500.0}, {-600.0,-700.0,-400.0}, {-600.0,-700.0,-300.0}, {-600.0,-700.0,-200.0}, {-600.0,-700.0,-100.0}, {-600.0,-700.0, 0.0}, {-600.0,-700.0, 100.0}, {-600.0,-700.0, 200.0}, {-600.0,-700.0, 300.0}, {-600.0,-700.0, 400.0}, {-600.0,-700.0, 500.0}, {-600.0,-700.0, 600.0}, {-600.0,-700.0, 700.0}, {-600.0,-700.0, 800.0}, {-600.0,-600.0,-800.0}, {-600.0,-600.0,-700.0}, {-600.0,-600.0,-600.0}, {-600.0,-600.0,-500.0}, {-600.0,-600.0,-400.0}, {-600.0,-600.0,-300.0}, {-600.0,-600.0,-200.0}, {-600.0,-600.0,-100.0}, {-600.0,-600.0, 0.0}, {-600.0,-600.0, 100.0}, {-600.0,-600.0, 200.0}, {-600.0,-600.0, 300.0}, {-600.0,-600.0, 400.0}, {-600.0,-600.0, 500.0}, {-600.0,-600.0, 600.0}, {-600.0,-600.0, 700.0}, {-600.0,-600.0, 800.0}, {-600.0,-500.0,-800.0}, {-600.0,-500.0,-700.0}, {-600.0,-500.0,-600.0}, {-600.0,-500.0,-500.0}, {-600.0,-500.0,-400.0}, {-600.0,-500.0,-300.0}, {-600.0,-500.0,-200.0}, {-600.0,-500.0,-100.0}, {-600.0,-500.0, 0.0}, {-600.0,-500.0, 100.0}, {-600.0,-500.0, 200.0}, {-600.0,-500.0, 300.0}, {-600.0,-500.0, 400.0}, {-600.0,-500.0, 500.0}, {-600.0,-500.0, 600.0}, {-600.0,-500.0, 700.0}, {-600.0,-500.0, 800.0}, {-600.0,-400.0,-800.0}, {-600.0,-400.0,-700.0}, {-600.0,-400.0,-600.0}, {-600.0,-400.0,-500.0}, {-600.0,-400.0,-400.0}, {-600.0,-400.0,-300.0}, {-600.0,-400.0,-200.0}, {-600.0,-400.0,-100.0}, {-600.0,-400.0, 0.0}, {-600.0,-400.0, 100.0}, {-600.0,-400.0, 200.0}, {-600.0,-400.0, 300.0}, {-600.0,-400.0, 400.0}, {-600.0,-400.0, 500.0}, {-600.0,-400.0, 600.0}, {-600.0,-400.0, 700.0}, {-600.0,-400.0, 800.0}, {-600.0,-300.0,-800.0}, {-600.0,-300.0,-700.0}, {-600.0,-300.0,-600.0}, {-600.0,-300.0,-500.0}, {-600.0,-300.0,-400.0}, {-600.0,-300.0,-300.0}, {-600.0,-300.0,-200.0}, {-600.0,-300.0,-100.0}, {-600.0,-300.0, 0.0}, {-600.0,-300.0, 100.0}, {-600.0,-300.0, 200.0}, {-600.0,-300.0, 300.0}, {-600.0,-300.0, 400.0}, {-600.0,-300.0, 500.0}, {-600.0,-300.0, 600.0}, {-600.0,-300.0, 700.0}, {-600.0,-300.0, 800.0}, {-600.0,-200.0,-800.0}, {-600.0,-200.0,-700.0}, {-600.0,-200.0,-600.0}, {-600.0,-200.0,-500.0}, {-600.0,-200.0,-400.0}, {-600.0,-200.0,-300.0}, {-600.0,-200.0,-200.0}, {-600.0,-200.0,-100.0}, {-600.0,-200.0, 0.0}, {-600.0,-200.0, 100.0}, {-600.0,-200.0, 200.0}, {-600.0,-200.0, 300.0}, {-600.0,-200.0, 400.0}, {-600.0,-200.0, 500.0}, {-600.0,-200.0, 600.0}, {-600.0,-200.0, 700.0}, {-600.0,-200.0, 800.0}, {-600.0,-100.0,-800.0}, {-600.0,-100.0,-700.0}, {-600.0,-100.0,-600.0}, {-600.0,-100.0,-500.0}, {-600.0,-100.0,-400.0}, {-600.0,-100.0,-300.0}, {-600.0,-100.0,-200.0}, {-600.0,-100.0,-100.0}, {-600.0,-100.0, 0.0}, {-600.0,-100.0, 100.0}, {-600.0,-100.0, 200.0}, {-600.0,-100.0, 300.0}, {-600.0,-100.0, 400.0}, {-600.0,-100.0, 500.0}, {-600.0,-100.0, 600.0}, {-600.0,-100.0, 700.0}, {-600.0,-100.0, 800.0}, {-600.0, 0.0,-800.0}, {-600.0, 0.0,-700.0}, {-600.0, 0.0,-600.0}, {-600.0, 0.0,-500.0}, {-600.0, 0.0,-400.0}, {-600.0, 0.0,-300.0}, {-600.0, 0.0,-200.0}, {-600.0, 0.0,-100.0}, {-600.0, 0.0, 0.0}, {-600.0, 0.0, 100.0}, {-600.0, 0.0, 200.0}, {-600.0, 0.0, 300.0}, {-600.0, 0.0, 400.0}, {-600.0, 0.0, 500.0}, {-600.0, 0.0, 600.0}, {-600.0, 0.0, 700.0}, {-600.0, 0.0, 800.0}, {-600.0, 100.0,-800.0}, {-600.0, 100.0,-700.0}, {-600.0, 100.0,-600.0}, {-600.0, 100.0,-500.0}, {-600.0, 100.0,-400.0}, {-600.0, 100.0,-300.0}, {-600.0, 100.0,-200.0}, {-600.0, 100.0,-100.0}, {-600.0, 100.0, 0.0}, {-600.0, 100.0, 100.0}, {-600.0, 100.0, 200.0}, {-600.0, 100.0, 300.0}, {-600.0, 100.0, 400.0}, {-600.0, 100.0, 500.0}, {-600.0, 100.0, 600.0}, {-600.0, 100.0, 700.0}, {-600.0, 100.0, 800.0}, {-600.0, 200.0,-800.0}, {-600.0, 200.0,-700.0}, {-600.0, 200.0,-600.0}, {-600.0, 200.0,-500.0}, {-600.0, 200.0,-400.0}, {-600.0, 200.0,-300.0}, {-600.0, 200.0,-200.0}, {-600.0, 200.0,-100.0}, {-600.0, 200.0, 0.0}, {-600.0, 200.0, 100.0}, {-600.0, 200.0, 200.0}, {-600.0, 200.0, 300.0}, {-600.0, 200.0, 400.0}, {-600.0, 200.0, 500.0}, {-600.0, 200.0, 600.0}, {-600.0, 200.0, 700.0}, {-600.0, 200.0, 800.0}, {-600.0, 300.0,-800.0}, {-600.0, 300.0,-700.0}, {-600.0, 300.0,-600.0}, {-600.0, 300.0,-500.0}, {-600.0, 300.0,-400.0}, {-600.0, 300.0,-300.0}, {-600.0, 300.0,-200.0}, {-600.0, 300.0,-100.0}, {-600.0, 300.0, 0.0}, {-600.0, 300.0, 100.0}, {-600.0, 300.0, 200.0}, {-600.0, 300.0, 300.0}, {-600.0, 300.0, 400.0}, {-600.0, 300.0, 500.0}, {-600.0, 300.0, 600.0}, {-600.0, 300.0, 700.0}, {-600.0, 300.0, 800.0}, {-600.0, 400.0,-800.0}, {-600.0, 400.0,-700.0}, {-600.0, 400.0,-600.0}, {-600.0, 400.0,-500.0}, {-600.0, 400.0,-400.0}, {-600.0, 400.0,-300.0}, {-600.0, 400.0,-200.0}, {-600.0, 400.0,-100.0}, {-600.0, 400.0, 0.0}, {-600.0, 400.0, 100.0}, {-600.0, 400.0, 200.0}, {-600.0, 400.0, 300.0}, {-600.0, 400.0, 400.0}, {-600.0, 400.0, 500.0}, {-600.0, 400.0, 600.0}, {-600.0, 400.0, 700.0}, {-600.0, 400.0, 800.0}, {-600.0, 500.0,-800.0}, {-600.0, 500.0,-700.0}, {-600.0, 500.0,-600.0}, {-600.0, 500.0,-500.0}, {-600.0, 500.0,-400.0}, {-600.0, 500.0,-300.0}, {-600.0, 500.0,-200.0}, {-600.0, 500.0,-100.0}, {-600.0, 500.0, 0.0}, {-600.0, 500.0, 100.0}, {-600.0, 500.0, 200.0}, {-600.0, 500.0, 300.0}, {-600.0, 500.0, 400.0}, {-600.0, 500.0, 500.0}, {-600.0, 500.0, 600.0}, {-600.0, 500.0, 700.0}, {-600.0, 500.0, 800.0}, {-600.0, 600.0,-800.0}, {-600.0, 600.0,-700.0}, {-600.0, 600.0,-600.0}, {-600.0, 600.0,-500.0}, {-600.0, 600.0,-400.0}, {-600.0, 600.0,-300.0}, {-600.0, 600.0,-200.0}, {-600.0, 600.0,-100.0}, {-600.0, 600.0, 0.0}, {-600.0, 600.0, 100.0}, {-600.0, 600.0, 200.0}, {-600.0, 600.0, 300.0}, {-600.0, 600.0, 400.0}, {-600.0, 600.0, 500.0}, {-600.0, 600.0, 600.0}, {-600.0, 600.0, 700.0}, {-600.0, 600.0, 800.0}, {-600.0, 700.0,-800.0}, {-600.0, 700.0,-700.0}, {-600.0, 700.0,-600.0}, {-600.0, 700.0,-500.0}, {-600.0, 700.0,-400.0}, {-600.0, 700.0,-300.0}, {-600.0, 700.0,-200.0}, {-600.0, 700.0,-100.0}, {-600.0, 700.0, 0.0}, {-600.0, 700.0, 100.0}, {-600.0, 700.0, 200.0}, {-600.0, 700.0, 300.0}, {-600.0, 700.0, 400.0}, {-600.0, 700.0, 500.0}, {-600.0, 700.0, 600.0}, {-600.0, 700.0, 700.0}, {-600.0, 700.0, 800.0}, {-600.0, 800.0,-800.0}, {-600.0, 800.0,-700.0}, {-600.0, 800.0,-600.0}, {-600.0, 800.0,-500.0}, {-600.0, 800.0,-400.0}, {-600.0, 800.0,-300.0}, {-600.0, 800.0,-200.0}, {-600.0, 800.0,-100.0}, {-600.0, 800.0, 0.0}, {-600.0, 800.0, 100.0}, {-600.0, 800.0, 200.0}, {-600.0, 800.0, 300.0}, {-600.0, 800.0, 400.0}, {-600.0, 800.0, 500.0}, {-600.0, 800.0, 600.0}, {-600.0, 800.0, 700.0}, {-600.0, 800.0, 800.0}, {-500.0,-800.0,-800.0}, {-500.0,-800.0,-700.0}, {-500.0,-800.0,-600.0}, {-500.0,-800.0,-500.0}, {-500.0,-800.0,-400.0}, {-500.0,-800.0,-300.0}, {-500.0,-800.0,-200.0}, {-500.0,-800.0,-100.0}, {-500.0,-800.0, 0.0}, {-500.0,-800.0, 100.0}, {-500.0,-800.0, 200.0}, {-500.0,-800.0, 300.0}, {-500.0,-800.0, 400.0}, {-500.0,-800.0, 500.0}, {-500.0,-800.0, 600.0}, {-500.0,-800.0, 700.0}, {-500.0,-800.0, 800.0}, {-500.0,-700.0,-800.0}, {-500.0,-700.0,-700.0}, {-500.0,-700.0,-600.0}, {-500.0,-700.0,-500.0}, {-500.0,-700.0,-400.0}, {-500.0,-700.0,-300.0}, {-500.0,-700.0,-200.0}, {-500.0,-700.0,-100.0}, {-500.0,-700.0, 0.0}, {-500.0,-700.0, 100.0}, {-500.0,-700.0, 200.0}, {-500.0,-700.0, 300.0}, {-500.0,-700.0, 400.0}, {-500.0,-700.0, 500.0}, {-500.0,-700.0, 600.0}, {-500.0,-700.0, 700.0}, {-500.0,-700.0, 800.0}, {-500.0,-600.0,-800.0}, {-500.0,-600.0,-700.0}, {-500.0,-600.0,-600.0}, {-500.0,-600.0,-500.0}, {-500.0,-600.0,-400.0}, {-500.0,-600.0,-300.0}, {-500.0,-600.0,-200.0}, {-500.0,-600.0,-100.0}, {-500.0,-600.0, 0.0}, {-500.0,-600.0, 100.0}, {-500.0,-600.0, 200.0}, {-500.0,-600.0, 300.0}, {-500.0,-600.0, 400.0}, {-500.0,-600.0, 500.0}, {-500.0,-600.0, 600.0}, {-500.0,-600.0, 700.0}, {-500.0,-600.0, 800.0}, {-500.0,-500.0,-800.0}, {-500.0,-500.0,-700.0}, {-500.0,-500.0,-600.0}, {-500.0,-500.0,-500.0}, {-500.0,-500.0,-400.0}, {-500.0,-500.0,-300.0}, {-500.0,-500.0,-200.0}, {-500.0,-500.0,-100.0}, {-500.0,-500.0, 0.0}, {-500.0,-500.0, 100.0}, {-500.0,-500.0, 200.0}, {-500.0,-500.0, 300.0}, {-500.0,-500.0, 400.0}, {-500.0,-500.0, 500.0}, {-500.0,-500.0, 600.0}, {-500.0,-500.0, 700.0}, {-500.0,-500.0, 800.0}, {-500.0,-400.0,-800.0}, {-500.0,-400.0,-700.0}, {-500.0,-400.0,-600.0}, {-500.0,-400.0,-500.0}, {-500.0,-400.0,-400.0}, {-500.0,-400.0,-300.0}, {-500.0,-400.0,-200.0}, {-500.0,-400.0,-100.0}, {-500.0,-400.0, 0.0}, {-500.0,-400.0, 100.0}, {-500.0,-400.0, 200.0}, {-500.0,-400.0, 300.0}, {-500.0,-400.0, 400.0}, {-500.0,-400.0, 500.0}, {-500.0,-400.0, 600.0}, {-500.0,-400.0, 700.0}, {-500.0,-400.0, 800.0}, {-500.0,-300.0,-800.0}, {-500.0,-300.0,-700.0}, {-500.0,-300.0,-600.0}, {-500.0,-300.0,-500.0}, {-500.0,-300.0,-400.0}, {-500.0,-300.0,-300.0}, {-500.0,-300.0,-200.0}, {-500.0,-300.0,-100.0}, {-500.0,-300.0, 0.0}, {-500.0,-300.0, 100.0}, {-500.0,-300.0, 200.0}, {-500.0,-300.0, 300.0}, {-500.0,-300.0, 400.0}, {-500.0,-300.0, 500.0}, {-500.0,-300.0, 600.0}, {-500.0,-300.0, 700.0}, {-500.0,-300.0, 800.0}, {-500.0,-200.0,-800.0}, {-500.0,-200.0,-700.0}, {-500.0,-200.0,-600.0}, {-500.0,-200.0,-500.0}, {-500.0,-200.0,-400.0}, {-500.0,-200.0,-300.0}, {-500.0,-200.0,-200.0}, {-500.0,-200.0,-100.0}, {-500.0,-200.0, 0.0}, {-500.0,-200.0, 100.0}, {-500.0,-200.0, 200.0}, {-500.0,-200.0, 300.0}, {-500.0,-200.0, 400.0}, {-500.0,-200.0, 500.0}, {-500.0,-200.0, 600.0}, {-500.0,-200.0, 700.0}, {-500.0,-200.0, 800.0}, {-500.0,-100.0,-800.0}, {-500.0,-100.0,-700.0}, {-500.0,-100.0,-600.0}, {-500.0,-100.0,-500.0}, {-500.0,-100.0,-400.0}, {-500.0,-100.0,-300.0}, {-500.0,-100.0,-200.0}, {-500.0,-100.0,-100.0}, {-500.0,-100.0, 0.0}, {-500.0,-100.0, 100.0}, {-500.0,-100.0, 200.0}, {-500.0,-100.0, 300.0}, {-500.0,-100.0, 400.0}, {-500.0,-100.0, 500.0}, {-500.0,-100.0, 600.0}, {-500.0,-100.0, 700.0}, {-500.0,-100.0, 800.0}, {-500.0, 0.0,-800.0}, {-500.0, 0.0,-700.0}, {-500.0, 0.0,-600.0}, {-500.0, 0.0,-500.0}, {-500.0, 0.0,-400.0}, {-500.0, 0.0,-300.0}, {-500.0, 0.0,-200.0}, {-500.0, 0.0,-100.0}, {-500.0, 0.0, 0.0}, {-500.0, 0.0, 100.0}, {-500.0, 0.0, 200.0}, {-500.0, 0.0, 300.0}, {-500.0, 0.0, 400.0}, {-500.0, 0.0, 500.0}, {-500.0, 0.0, 600.0}, {-500.0, 0.0, 700.0}, {-500.0, 0.0, 800.0}, {-500.0, 100.0,-800.0}, {-500.0, 100.0,-700.0}, {-500.0, 100.0,-600.0}, {-500.0, 100.0,-500.0}, {-500.0, 100.0,-400.0}, {-500.0, 100.0,-300.0}, {-500.0, 100.0,-200.0}, {-500.0, 100.0,-100.0}, {-500.0, 100.0, 0.0}, {-500.0, 100.0, 100.0}, {-500.0, 100.0, 200.0}, {-500.0, 100.0, 300.0}, {-500.0, 100.0, 400.0}, {-500.0, 100.0, 500.0}, {-500.0, 100.0, 600.0}, {-500.0, 100.0, 700.0}, {-500.0, 100.0, 800.0}, {-500.0, 200.0,-800.0}, {-500.0, 200.0,-700.0}, {-500.0, 200.0,-600.0}, {-500.0, 200.0,-500.0}, {-500.0, 200.0,-400.0}, {-500.0, 200.0,-300.0}, {-500.0, 200.0,-200.0}, {-500.0, 200.0,-100.0}, {-500.0, 200.0, 0.0}, {-500.0, 200.0, 100.0}, {-500.0, 200.0, 200.0}, {-500.0, 200.0, 300.0}, {-500.0, 200.0, 400.0}, {-500.0, 200.0, 500.0}, {-500.0, 200.0, 600.0}, {-500.0, 200.0, 700.0}, {-500.0, 200.0, 800.0}, {-500.0, 300.0,-800.0}, {-500.0, 300.0,-700.0}, {-500.0, 300.0,-600.0}, {-500.0, 300.0,-500.0}, {-500.0, 300.0,-400.0}, {-500.0, 300.0,-300.0}, {-500.0, 300.0,-200.0}, {-500.0, 300.0,-100.0}, {-500.0, 300.0, 0.0}, {-500.0, 300.0, 100.0}, {-500.0, 300.0, 200.0}, {-500.0, 300.0, 300.0}, {-500.0, 300.0, 400.0}, {-500.0, 300.0, 500.0}, {-500.0, 300.0, 600.0}, {-500.0, 300.0, 700.0}, {-500.0, 300.0, 800.0}, {-500.0, 400.0,-800.0}, {-500.0, 400.0,-700.0}, {-500.0, 400.0,-600.0}, {-500.0, 400.0,-500.0}, {-500.0, 400.0,-400.0}, {-500.0, 400.0,-300.0}, {-500.0, 400.0,-200.0}, {-500.0, 400.0,-100.0}, {-500.0, 400.0, 0.0}, {-500.0, 400.0, 100.0}, {-500.0, 400.0, 200.0}, {-500.0, 400.0, 300.0}, {-500.0, 400.0, 400.0}, {-500.0, 400.0, 500.0}, {-500.0, 400.0, 600.0}, {-500.0, 400.0, 700.0}, {-500.0, 400.0, 800.0}, {-500.0, 500.0,-800.0}, {-500.0, 500.0,-700.0}, {-500.0, 500.0,-600.0}, {-500.0, 500.0,-500.0}, {-500.0, 500.0,-400.0}, {-500.0, 500.0,-300.0}, {-500.0, 500.0,-200.0}, {-500.0, 500.0,-100.0}, {-500.0, 500.0, 0.0}, {-500.0, 500.0, 100.0}, {-500.0, 500.0, 200.0}, {-500.0, 500.0, 300.0}, {-500.0, 500.0, 400.0}, {-500.0, 500.0, 500.0}, {-500.0, 500.0, 600.0}, {-500.0, 500.0, 700.0}, {-500.0, 500.0, 800.0}, {-500.0, 600.0,-800.0}, {-500.0, 600.0,-700.0}, {-500.0, 600.0,-600.0}, {-500.0, 600.0,-500.0}, {-500.0, 600.0,-400.0}, {-500.0, 600.0,-300.0}, {-500.0, 600.0,-200.0}, {-500.0, 600.0,-100.0}, {-500.0, 600.0, 0.0}, {-500.0, 600.0, 100.0}, {-500.0, 600.0, 200.0}, {-500.0, 600.0, 300.0}, {-500.0, 600.0, 400.0}, {-500.0, 600.0, 500.0}, {-500.0, 600.0, 600.0}, {-500.0, 600.0, 700.0}, {-500.0, 600.0, 800.0}, {-500.0, 700.0,-800.0}, {-500.0, 700.0,-700.0}, {-500.0, 700.0,-600.0}, {-500.0, 700.0,-500.0}, {-500.0, 700.0,-400.0}, {-500.0, 700.0,-300.0}, {-500.0, 700.0,-200.0}, {-500.0, 700.0,-100.0}, {-500.0, 700.0, 0.0}, {-500.0, 700.0, 100.0}, {-500.0, 700.0, 200.0}, {-500.0, 700.0, 300.0}, {-500.0, 700.0, 400.0}, {-500.0, 700.0, 500.0}, {-500.0, 700.0, 600.0}, {-500.0, 700.0, 700.0}, {-500.0, 700.0, 800.0}, {-500.0, 800.0,-800.0}, {-500.0, 800.0,-700.0}, {-500.0, 800.0,-600.0}, {-500.0, 800.0,-500.0}, {-500.0, 800.0,-400.0}, {-500.0, 800.0,-300.0}, {-500.0, 800.0,-200.0}, {-500.0, 800.0,-100.0}, {-500.0, 800.0, 0.0}, {-500.0, 800.0, 100.0}, {-500.0, 800.0, 200.0}, {-500.0, 800.0, 300.0}, {-500.0, 800.0, 400.0}, {-500.0, 800.0, 500.0}, {-500.0, 800.0, 600.0}, {-500.0, 800.0, 700.0}, {-500.0, 800.0, 800.0}, {-400.0,-800.0,-800.0}, {-400.0,-800.0,-700.0}, {-400.0,-800.0,-600.0}, {-400.0,-800.0,-500.0}, {-400.0,-800.0,-400.0}, {-400.0,-800.0,-300.0}, {-400.0,-800.0,-200.0}, {-400.0,-800.0,-100.0}, {-400.0,-800.0, 0.0}, {-400.0,-800.0, 100.0}, {-400.0,-800.0, 200.0}, {-400.0,-800.0, 300.0}, {-400.0,-800.0, 400.0}, {-400.0,-800.0, 500.0}, {-400.0,-800.0, 600.0}, {-400.0,-800.0, 700.0}, {-400.0,-800.0, 800.0}, {-400.0,-700.0,-800.0}, {-400.0,-700.0,-700.0}, {-400.0,-700.0,-600.0}, {-400.0,-700.0,-500.0}, {-400.0,-700.0,-400.0}, {-400.0,-700.0,-300.0}, {-400.0,-700.0,-200.0}, {-400.0,-700.0,-100.0}, {-400.0,-700.0, 0.0}, {-400.0,-700.0, 100.0}, {-400.0,-700.0, 200.0}, {-400.0,-700.0, 300.0}, {-400.0,-700.0, 400.0}, {-400.0,-700.0, 500.0}, {-400.0,-700.0, 600.0}, {-400.0,-700.0, 700.0}, {-400.0,-700.0, 800.0}, {-400.0,-600.0,-800.0}, {-400.0,-600.0,-700.0}, {-400.0,-600.0,-600.0}, {-400.0,-600.0,-500.0}, {-400.0,-600.0,-400.0}, {-400.0,-600.0,-300.0}, {-400.0,-600.0,-200.0}, {-400.0,-600.0,-100.0}, {-400.0,-600.0, 0.0}, {-400.0,-600.0, 100.0}, {-400.0,-600.0, 200.0}, {-400.0,-600.0, 300.0}, {-400.0,-600.0, 400.0}, {-400.0,-600.0, 500.0}, {-400.0,-600.0, 600.0}, {-400.0,-600.0, 700.0}, {-400.0,-600.0, 800.0}, {-400.0,-500.0,-800.0}, {-400.0,-500.0,-700.0}, {-400.0,-500.0,-600.0}, {-400.0,-500.0,-500.0}, {-400.0,-500.0,-400.0}, {-400.0,-500.0,-300.0}, {-400.0,-500.0,-200.0}, {-400.0,-500.0,-100.0}, {-400.0,-500.0, 0.0}, {-400.0,-500.0, 100.0}, {-400.0,-500.0, 200.0}, {-400.0,-500.0, 300.0}, {-400.0,-500.0, 400.0}, {-400.0,-500.0, 500.0}, {-400.0,-500.0, 600.0}, {-400.0,-500.0, 700.0}, {-400.0,-500.0, 800.0}, {-400.0,-400.0,-800.0}, {-400.0,-400.0,-700.0}, {-400.0,-400.0,-600.0}, {-400.0,-400.0,-500.0}, {-400.0,-400.0,-400.0}, {-400.0,-400.0,-300.0}, {-400.0,-400.0,-200.0}, {-400.0,-400.0,-100.0}, {-400.0,-400.0, 0.0}, {-400.0,-400.0, 100.0}, {-400.0,-400.0, 200.0}, {-400.0,-400.0, 300.0}, {-400.0,-400.0, 400.0}, {-400.0,-400.0, 500.0}, {-400.0,-400.0, 600.0}, {-400.0,-400.0, 700.0}, {-400.0,-400.0, 800.0}, {-400.0,-300.0,-800.0}, {-400.0,-300.0,-700.0}, {-400.0,-300.0,-600.0}, {-400.0,-300.0,-500.0}, {-400.0,-300.0,-400.0}, {-400.0,-300.0,-300.0}, {-400.0,-300.0,-200.0}, {-400.0,-300.0,-100.0}, {-400.0,-300.0, 0.0}, {-400.0,-300.0, 100.0}, {-400.0,-300.0, 200.0}, {-400.0,-300.0, 300.0}, {-400.0,-300.0, 400.0}, {-400.0,-300.0, 500.0}, {-400.0,-300.0, 600.0}, {-400.0,-300.0, 700.0}, {-400.0,-300.0, 800.0}, {-400.0,-200.0,-800.0}, {-400.0,-200.0,-700.0}, {-400.0,-200.0,-600.0}, {-400.0,-200.0,-500.0}, {-400.0,-200.0,-400.0}, {-400.0,-200.0,-300.0}, {-400.0,-200.0,-200.0}, {-400.0,-200.0,-100.0}, {-400.0,-200.0, 0.0}, {-400.0,-200.0, 100.0}, {-400.0,-200.0, 200.0}, {-400.0,-200.0, 300.0}, {-400.0,-200.0, 400.0}, {-400.0,-200.0, 500.0}, {-400.0,-200.0, 600.0}, {-400.0,-200.0, 700.0}, {-400.0,-200.0, 800.0}, {-400.0,-100.0,-800.0}, {-400.0,-100.0,-700.0}, {-400.0,-100.0,-600.0}, {-400.0,-100.0,-500.0}, {-400.0,-100.0,-400.0}, {-400.0,-100.0,-300.0}, {-400.0,-100.0,-200.0}, {-400.0,-100.0,-100.0}, {-400.0,-100.0, 0.0}, {-400.0,-100.0, 100.0}, {-400.0,-100.0, 200.0}, {-400.0,-100.0, 300.0}, {-400.0,-100.0, 400.0}, {-400.0,-100.0, 500.0}, {-400.0,-100.0, 600.0}, {-400.0,-100.0, 700.0}, {-400.0,-100.0, 800.0}, {-400.0, 0.0,-800.0}, {-400.0, 0.0,-700.0}, {-400.0, 0.0,-600.0}, {-400.0, 0.0,-500.0}, {-400.0, 0.0,-400.0}, {-400.0, 0.0,-300.0}, {-400.0, 0.0,-200.0}, {-400.0, 0.0,-100.0}, {-400.0, 0.0, 0.0}, {-400.0, 0.0, 100.0}, {-400.0, 0.0, 200.0}, {-400.0, 0.0, 300.0}, {-400.0, 0.0, 400.0}, {-400.0, 0.0, 500.0}, {-400.0, 0.0, 600.0}, {-400.0, 0.0, 700.0}, {-400.0, 0.0, 800.0}, {-400.0, 100.0,-800.0}, {-400.0, 100.0,-700.0}, {-400.0, 100.0,-600.0}, {-400.0, 100.0,-500.0}, {-400.0, 100.0,-400.0}, {-400.0, 100.0,-300.0}, {-400.0, 100.0,-200.0}, {-400.0, 100.0,-100.0}, {-400.0, 100.0, 0.0}, {-400.0, 100.0, 100.0}, {-400.0, 100.0, 200.0}, {-400.0, 100.0, 300.0}, {-400.0, 100.0, 400.0}, {-400.0, 100.0, 500.0}, {-400.0, 100.0, 600.0}, {-400.0, 100.0, 700.0}, {-400.0, 100.0, 800.0}, {-400.0, 200.0,-800.0}, {-400.0, 200.0,-700.0}, {-400.0, 200.0,-600.0}, {-400.0, 200.0,-500.0}, {-400.0, 200.0,-400.0}, {-400.0, 200.0,-300.0}, {-400.0, 200.0,-200.0}, {-400.0, 200.0,-100.0}, {-400.0, 200.0, 0.0}, {-400.0, 200.0, 100.0}, {-400.0, 200.0, 200.0}, {-400.0, 200.0, 300.0}, {-400.0, 200.0, 400.0}, {-400.0, 200.0, 500.0}, {-400.0, 200.0, 600.0}, {-400.0, 200.0, 700.0}, {-400.0, 200.0, 800.0}, {-400.0, 300.0,-800.0}, {-400.0, 300.0,-700.0}, {-400.0, 300.0,-600.0}, {-400.0, 300.0,-500.0}, {-400.0, 300.0,-400.0}, {-400.0, 300.0,-300.0}, {-400.0, 300.0,-200.0}, {-400.0, 300.0,-100.0}, {-400.0, 300.0, 0.0}, {-400.0, 300.0, 100.0}, {-400.0, 300.0, 200.0}, {-400.0, 300.0, 300.0}, {-400.0, 300.0, 400.0}, {-400.0, 300.0, 500.0}, {-400.0, 300.0, 600.0}, {-400.0, 300.0, 700.0}, {-400.0, 300.0, 800.0}, {-400.0, 400.0,-800.0}, {-400.0, 400.0,-700.0}, {-400.0, 400.0,-600.0}, {-400.0, 400.0,-500.0}, {-400.0, 400.0,-400.0}, {-400.0, 400.0,-300.0}, {-400.0, 400.0,-200.0}, {-400.0, 400.0,-100.0}, {-400.0, 400.0, 0.0}, {-400.0, 400.0, 100.0}, {-400.0, 400.0, 200.0}, {-400.0, 400.0, 300.0}, {-400.0, 400.0, 400.0}, {-400.0, 400.0, 500.0}, {-400.0, 400.0, 600.0}, {-400.0, 400.0, 700.0}, {-400.0, 400.0, 800.0}, {-400.0, 500.0,-800.0}, {-400.0, 500.0,-700.0}, {-400.0, 500.0,-600.0}, {-400.0, 500.0,-500.0}, {-400.0, 500.0,-400.0}, {-400.0, 500.0,-300.0}, {-400.0, 500.0,-200.0}, {-400.0, 500.0,-100.0}, {-400.0, 500.0, 0.0}, {-400.0, 500.0, 100.0}, {-400.0, 500.0, 200.0}, {-400.0, 500.0, 300.0}, {-400.0, 500.0, 400.0}, {-400.0, 500.0, 500.0}, {-400.0, 500.0, 600.0}, {-400.0, 500.0, 700.0}, {-400.0, 500.0, 800.0}, {-400.0, 600.0,-800.0}, {-400.0, 600.0,-700.0}, {-400.0, 600.0,-600.0}, {-400.0, 600.0,-500.0}, {-400.0, 600.0,-400.0}, {-400.0, 600.0,-300.0}, {-400.0, 600.0,-200.0}, {-400.0, 600.0,-100.0}, {-400.0, 600.0, 0.0}, {-400.0, 600.0, 100.0}, {-400.0, 600.0, 200.0}, {-400.0, 600.0, 300.0}, {-400.0, 600.0, 400.0}, {-400.0, 600.0, 500.0}, {-400.0, 600.0, 600.0}, {-400.0, 600.0, 700.0}, {-400.0, 600.0, 800.0}, {-400.0, 700.0,-800.0}, {-400.0, 700.0,-700.0}, {-400.0, 700.0,-600.0}, {-400.0, 700.0,-500.0}, {-400.0, 700.0,-400.0}, {-400.0, 700.0,-300.0}, {-400.0, 700.0,-200.0}, {-400.0, 700.0,-100.0}, {-400.0, 700.0, 0.0}, {-400.0, 700.0, 100.0}, {-400.0, 700.0, 200.0}, {-400.0, 700.0, 300.0}, {-400.0, 700.0, 400.0}, {-400.0, 700.0, 500.0}, {-400.0, 700.0, 600.0}, {-400.0, 700.0, 700.0}, {-400.0, 700.0, 800.0}, {-400.0, 800.0,-800.0}, {-400.0, 800.0,-700.0}, {-400.0, 800.0,-600.0}, {-400.0, 800.0,-500.0}, {-400.0, 800.0,-400.0}, {-400.0, 800.0,-300.0}, {-400.0, 800.0,-200.0}, {-400.0, 800.0,-100.0}, {-400.0, 800.0, 0.0}, {-400.0, 800.0, 100.0}, {-400.0, 800.0, 200.0}, {-400.0, 800.0, 300.0}, {-400.0, 800.0, 400.0}, {-400.0, 800.0, 500.0}, {-400.0, 800.0, 600.0}, {-400.0, 800.0, 700.0}, {-400.0, 800.0, 800.0}, {-300.0,-800.0,-800.0}, {-300.0,-800.0,-700.0}, {-300.0,-800.0,-600.0}, {-300.0,-800.0,-500.0}, {-300.0,-800.0,-400.0}, {-300.0,-800.0,-300.0}, {-300.0,-800.0,-200.0}, {-300.0,-800.0,-100.0}, {-300.0,-800.0, 0.0}, {-300.0,-800.0, 100.0}, {-300.0,-800.0, 200.0}, {-300.0,-800.0, 300.0}, {-300.0,-800.0, 400.0}, {-300.0,-800.0, 500.0}, {-300.0,-800.0, 600.0}, {-300.0,-800.0, 700.0}, {-300.0,-800.0, 800.0}, {-300.0,-700.0,-800.0}, {-300.0,-700.0,-700.0}, {-300.0,-700.0,-600.0}, {-300.0,-700.0,-500.0}, {-300.0,-700.0,-400.0}, {-300.0,-700.0,-300.0}, {-300.0,-700.0,-200.0}, {-300.0,-700.0,-100.0}, {-300.0,-700.0, 0.0}, {-300.0,-700.0, 100.0}, {-300.0,-700.0, 200.0}, {-300.0,-700.0, 300.0}, {-300.0,-700.0, 400.0}, {-300.0,-700.0, 500.0}, {-300.0,-700.0, 600.0}, {-300.0,-700.0, 700.0}, {-300.0,-700.0, 800.0}, {-300.0,-600.0,-800.0}, {-300.0,-600.0,-700.0}, {-300.0,-600.0,-600.0}, {-300.0,-600.0,-500.0}, {-300.0,-600.0,-400.0}, {-300.0,-600.0,-300.0}, {-300.0,-600.0,-200.0}, {-300.0,-600.0,-100.0}, {-300.0,-600.0, 0.0}, {-300.0,-600.0, 100.0}, {-300.0,-600.0, 200.0}, {-300.0,-600.0, 300.0}, {-300.0,-600.0, 400.0}, {-300.0,-600.0, 500.0}, {-300.0,-600.0, 600.0}, {-300.0,-600.0, 700.0}, {-300.0,-600.0, 800.0}, {-300.0,-500.0,-800.0}, {-300.0,-500.0,-700.0}, {-300.0,-500.0,-600.0}, {-300.0,-500.0,-500.0}, {-300.0,-500.0,-400.0}, {-300.0,-500.0,-300.0}, {-300.0,-500.0,-200.0}, {-300.0,-500.0,-100.0}, {-300.0,-500.0, 0.0}, {-300.0,-500.0, 100.0}, {-300.0,-500.0, 200.0}, {-300.0,-500.0, 300.0}, {-300.0,-500.0, 400.0}, {-300.0,-500.0, 500.0}, {-300.0,-500.0, 600.0}, {-300.0,-500.0, 700.0}, {-300.0,-500.0, 800.0}, {-300.0,-400.0,-800.0}, {-300.0,-400.0,-700.0}, {-300.0,-400.0,-600.0}, {-300.0,-400.0,-500.0}, {-300.0,-400.0,-400.0}, {-300.0,-400.0,-300.0}, {-300.0,-400.0,-200.0}, {-300.0,-400.0,-100.0}, {-300.0,-400.0, 0.0}, {-300.0,-400.0, 100.0}, {-300.0,-400.0, 200.0}, {-300.0,-400.0, 300.0}, {-300.0,-400.0, 400.0}, {-300.0,-400.0, 500.0}, {-300.0,-400.0, 600.0}, {-300.0,-400.0, 700.0}, {-300.0,-400.0, 800.0}, {-300.0,-300.0,-800.0}, {-300.0,-300.0,-700.0}, {-300.0,-300.0,-600.0}, {-300.0,-300.0,-500.0}, {-300.0,-300.0,-400.0}, {-300.0,-300.0,-300.0}, {-300.0,-300.0,-200.0}, {-300.0,-300.0,-100.0}, {-300.0,-300.0, 0.0}, {-300.0,-300.0, 100.0}, {-300.0,-300.0, 200.0}, {-300.0,-300.0, 300.0}, {-300.0,-300.0, 400.0}, {-300.0,-300.0, 500.0}, {-300.0,-300.0, 600.0}, {-300.0,-300.0, 700.0}, {-300.0,-300.0, 800.0}, {-300.0,-200.0,-800.0}, {-300.0,-200.0,-700.0}, {-300.0,-200.0,-600.0}, {-300.0,-200.0,-500.0}, {-300.0,-200.0,-400.0}, {-300.0,-200.0,-300.0}, {-300.0,-200.0,-200.0}, {-300.0,-200.0,-100.0}, {-300.0,-200.0, 0.0}, {-300.0,-200.0, 100.0}, {-300.0,-200.0, 200.0}, {-300.0,-200.0, 300.0}, {-300.0,-200.0, 400.0}, {-300.0,-200.0, 500.0}, {-300.0,-200.0, 600.0}, {-300.0,-200.0, 700.0}, {-300.0,-200.0, 800.0}, {-300.0,-100.0,-800.0}, {-300.0,-100.0,-700.0}, {-300.0,-100.0,-600.0}, {-300.0,-100.0,-500.0}, {-300.0,-100.0,-400.0}, {-300.0,-100.0,-300.0}, {-300.0,-100.0,-200.0}, {-300.0,-100.0,-100.0}, {-300.0,-100.0, 0.0}, {-300.0,-100.0, 100.0}, {-300.0,-100.0, 200.0}, {-300.0,-100.0, 300.0}, {-300.0,-100.0, 400.0}, {-300.0,-100.0, 500.0}, {-300.0,-100.0, 600.0}, {-300.0,-100.0, 700.0}, {-300.0,-100.0, 800.0}, {-300.0, 0.0,-800.0}, {-300.0, 0.0,-700.0}, {-300.0, 0.0,-600.0}, {-300.0, 0.0,-500.0}, {-300.0, 0.0,-400.0}, {-300.0, 0.0,-300.0}, {-300.0, 0.0,-200.0}, {-300.0, 0.0,-100.0}, {-300.0, 0.0, 0.0}, {-300.0, 0.0, 100.0}, {-300.0, 0.0, 200.0}, {-300.0, 0.0, 300.0}, {-300.0, 0.0, 400.0}, {-300.0, 0.0, 500.0}, {-300.0, 0.0, 600.0}, {-300.0, 0.0, 700.0}, {-300.0, 0.0, 800.0}, {-300.0, 100.0,-800.0}, {-300.0, 100.0,-700.0}, {-300.0, 100.0,-600.0}, {-300.0, 100.0,-500.0}, {-300.0, 100.0,-400.0}, {-300.0, 100.0,-300.0}, {-300.0, 100.0,-200.0}, {-300.0, 100.0,-100.0}, {-300.0, 100.0, 0.0}, {-300.0, 100.0, 100.0}, {-300.0, 100.0, 200.0}, {-300.0, 100.0, 300.0}, {-300.0, 100.0, 400.0}, {-300.0, 100.0, 500.0}, {-300.0, 100.0, 600.0}, {-300.0, 100.0, 700.0}, {-300.0, 100.0, 800.0}, {-300.0, 200.0,-800.0}, {-300.0, 200.0,-700.0}, {-300.0, 200.0,-600.0}, {-300.0, 200.0,-500.0}, {-300.0, 200.0,-400.0}, {-300.0, 200.0,-300.0}, {-300.0, 200.0,-200.0}, {-300.0, 200.0,-100.0}, {-300.0, 200.0, 0.0}, {-300.0, 200.0, 100.0}, {-300.0, 200.0, 200.0}, {-300.0, 200.0, 300.0}, {-300.0, 200.0, 400.0}, {-300.0, 200.0, 500.0}, {-300.0, 200.0, 600.0}, {-300.0, 200.0, 700.0}, {-300.0, 200.0, 800.0}, {-300.0, 300.0,-800.0}, {-300.0, 300.0,-700.0}, {-300.0, 300.0,-600.0}, {-300.0, 300.0,-500.0}, {-300.0, 300.0,-400.0}, {-300.0, 300.0,-300.0}, {-300.0, 300.0,-200.0}, {-300.0, 300.0,-100.0}, {-300.0, 300.0, 0.0}, {-300.0, 300.0, 100.0}, {-300.0, 300.0, 200.0}, {-300.0, 300.0, 300.0}, {-300.0, 300.0, 400.0}, {-300.0, 300.0, 500.0}, {-300.0, 300.0, 600.0}, {-300.0, 300.0, 700.0}, {-300.0, 300.0, 800.0}, {-300.0, 400.0,-800.0}, {-300.0, 400.0,-700.0}, {-300.0, 400.0,-600.0}, {-300.0, 400.0,-500.0}, {-300.0, 400.0,-400.0}, {-300.0, 400.0,-300.0}, {-300.0, 400.0,-200.0}, {-300.0, 400.0,-100.0}, {-300.0, 400.0, 0.0}, {-300.0, 400.0, 100.0}, {-300.0, 400.0, 200.0}, {-300.0, 400.0, 300.0}, {-300.0, 400.0, 400.0}, {-300.0, 400.0, 500.0}, {-300.0, 400.0, 600.0}, {-300.0, 400.0, 700.0}, {-300.0, 400.0, 800.0}, {-300.0, 500.0,-800.0}, {-300.0, 500.0,-700.0}, {-300.0, 500.0,-600.0}, {-300.0, 500.0,-500.0}, {-300.0, 500.0,-400.0}, {-300.0, 500.0,-300.0}, {-300.0, 500.0,-200.0}, {-300.0, 500.0,-100.0}, {-300.0, 500.0, 0.0}, {-300.0, 500.0, 100.0}, {-300.0, 500.0, 200.0}, {-300.0, 500.0, 300.0}, {-300.0, 500.0, 400.0}, {-300.0, 500.0, 500.0}, {-300.0, 500.0, 600.0}, {-300.0, 500.0, 700.0}, {-300.0, 500.0, 800.0}, {-300.0, 600.0,-800.0}, {-300.0, 600.0,-700.0}, {-300.0, 600.0,-600.0}, {-300.0, 600.0,-500.0}, {-300.0, 600.0,-400.0}, {-300.0, 600.0,-300.0}, {-300.0, 600.0,-200.0}, {-300.0, 600.0,-100.0}, {-300.0, 600.0, 0.0}, {-300.0, 600.0, 100.0}, {-300.0, 600.0, 200.0}, {-300.0, 600.0, 300.0}, {-300.0, 600.0, 400.0}, {-300.0, 600.0, 500.0}, {-300.0, 600.0, 600.0}, {-300.0, 600.0, 700.0}, {-300.0, 600.0, 800.0}, {-300.0, 700.0,-800.0}, {-300.0, 700.0,-700.0}, {-300.0, 700.0,-600.0}, {-300.0, 700.0,-500.0}, {-300.0, 700.0,-400.0}, {-300.0, 700.0,-300.0}, {-300.0, 700.0,-200.0}, {-300.0, 700.0,-100.0}, {-300.0, 700.0, 0.0}, {-300.0, 700.0, 100.0}, {-300.0, 700.0, 200.0}, {-300.0, 700.0, 300.0}, {-300.0, 700.0, 400.0}, {-300.0, 700.0, 500.0}, {-300.0, 700.0, 600.0}, {-300.0, 700.0, 700.0}, {-300.0, 700.0, 800.0}, {-300.0, 800.0,-800.0}, {-300.0, 800.0,-700.0}, {-300.0, 800.0,-600.0}, {-300.0, 800.0,-500.0}, {-300.0, 800.0,-400.0}, {-300.0, 800.0,-300.0}, {-300.0, 800.0,-200.0}, {-300.0, 800.0,-100.0}, {-300.0, 800.0, 0.0}, {-300.0, 800.0, 100.0}, {-300.0, 800.0, 200.0}, {-300.0, 800.0, 300.0}, {-300.0, 800.0, 400.0}, {-300.0, 800.0, 500.0}, {-300.0, 800.0, 600.0}, {-300.0, 800.0, 700.0}, {-300.0, 800.0, 800.0}, {-200.0,-800.0,-800.0}, {-200.0,-800.0,-700.0}, {-200.0,-800.0,-600.0}, {-200.0,-800.0,-500.0}, {-200.0,-800.0,-400.0}, {-200.0,-800.0,-300.0}, {-200.0,-800.0,-200.0}, {-200.0,-800.0,-100.0}, {-200.0,-800.0, 0.0}, {-200.0,-800.0, 100.0}, {-200.0,-800.0, 200.0}, {-200.0,-800.0, 300.0}, {-200.0,-800.0, 400.0}, {-200.0,-800.0, 500.0}, {-200.0,-800.0, 600.0}, {-200.0,-800.0, 700.0}, {-200.0,-800.0, 800.0}, {-200.0,-700.0,-800.0}, {-200.0,-700.0,-700.0}, {-200.0,-700.0,-600.0}, {-200.0,-700.0,-500.0}, {-200.0,-700.0,-400.0}, {-200.0,-700.0,-300.0}, {-200.0,-700.0,-200.0}, {-200.0,-700.0,-100.0}, {-200.0,-700.0, 0.0}, {-200.0,-700.0, 100.0}, {-200.0,-700.0, 200.0}, {-200.0,-700.0, 300.0}, {-200.0,-700.0, 400.0}, {-200.0,-700.0, 500.0}, {-200.0,-700.0, 600.0}, {-200.0,-700.0, 700.0}, {-200.0,-700.0, 800.0}, {-200.0,-600.0,-800.0}, {-200.0,-600.0,-700.0}, {-200.0,-600.0,-600.0}, {-200.0,-600.0,-500.0}, {-200.0,-600.0,-400.0}, {-200.0,-600.0,-300.0}, {-200.0,-600.0,-200.0}, {-200.0,-600.0,-100.0}, {-200.0,-600.0, 0.0}, {-200.0,-600.0, 100.0}, {-200.0,-600.0, 200.0}, {-200.0,-600.0, 300.0}, {-200.0,-600.0, 400.0}, {-200.0,-600.0, 500.0}, {-200.0,-600.0, 600.0}, {-200.0,-600.0, 700.0}, {-200.0,-600.0, 800.0}, {-200.0,-500.0,-800.0}, {-200.0,-500.0,-700.0}, {-200.0,-500.0,-600.0}, {-200.0,-500.0,-500.0}, {-200.0,-500.0,-400.0}, {-200.0,-500.0,-300.0}, {-200.0,-500.0,-200.0}, {-200.0,-500.0,-100.0}, {-200.0,-500.0, 0.0}, {-200.0,-500.0, 100.0}, {-200.0,-500.0, 200.0}, {-200.0,-500.0, 300.0}, {-200.0,-500.0, 400.0}, {-200.0,-500.0, 500.0}, {-200.0,-500.0, 600.0}, {-200.0,-500.0, 700.0}, {-200.0,-500.0, 800.0}, {-200.0,-400.0,-800.0}, {-200.0,-400.0,-700.0}, {-200.0,-400.0,-600.0}, {-200.0,-400.0,-500.0}, {-200.0,-400.0,-400.0}, {-200.0,-400.0,-300.0}, {-200.0,-400.0,-200.0}, {-200.0,-400.0,-100.0}, {-200.0,-400.0, 0.0}, {-200.0,-400.0, 100.0}, {-200.0,-400.0, 200.0}, {-200.0,-400.0, 300.0}, {-200.0,-400.0, 400.0}, {-200.0,-400.0, 500.0}, {-200.0,-400.0, 600.0}, {-200.0,-400.0, 700.0}, {-200.0,-400.0, 800.0}, {-200.0,-300.0,-800.0}, {-200.0,-300.0,-700.0}, {-200.0,-300.0,-600.0}, {-200.0,-300.0,-500.0}, {-200.0,-300.0,-400.0}, {-200.0,-300.0,-300.0}, {-200.0,-300.0,-200.0}, {-200.0,-300.0,-100.0}, {-200.0,-300.0, 0.0}, {-200.0,-300.0, 100.0}, {-200.0,-300.0, 200.0}, {-200.0,-300.0, 300.0}, {-200.0,-300.0, 400.0}, {-200.0,-300.0, 500.0}, {-200.0,-300.0, 600.0}, {-200.0,-300.0, 700.0}, {-200.0,-300.0, 800.0}, {-200.0,-200.0,-800.0}, {-200.0,-200.0,-700.0}, {-200.0,-200.0,-600.0}, {-200.0,-200.0,-500.0}, {-200.0,-200.0,-400.0}, {-200.0,-200.0,-300.0}, {-200.0,-200.0,-200.0}, {-200.0,-200.0,-100.0}, {-200.0,-200.0, 0.0}, {-200.0,-200.0, 100.0}, {-200.0,-200.0, 200.0}, {-200.0,-200.0, 300.0}, {-200.0,-200.0, 400.0}, {-200.0,-200.0, 500.0}, {-200.0,-200.0, 600.0}, {-200.0,-200.0, 700.0}, {-200.0,-200.0, 800.0}, {-200.0,-100.0,-800.0}, {-200.0,-100.0,-700.0}, {-200.0,-100.0,-600.0}, {-200.0,-100.0,-500.0}, {-200.0,-100.0,-400.0}, {-200.0,-100.0,-300.0}, {-200.0,-100.0,-200.0}, {-200.0,-100.0,-100.0}, {-200.0,-100.0, 0.0}, {-200.0,-100.0, 100.0}, {-200.0,-100.0, 200.0}, {-200.0,-100.0, 300.0}, {-200.0,-100.0, 400.0}, {-200.0,-100.0, 500.0}, {-200.0,-100.0, 600.0}, {-200.0,-100.0, 700.0}, {-200.0,-100.0, 800.0}, {-200.0, 0.0,-800.0}, {-200.0, 0.0,-700.0}, {-200.0, 0.0,-600.0}, {-200.0, 0.0,-500.0}, {-200.0, 0.0,-400.0}, {-200.0, 0.0,-300.0}, {-200.0, 0.0,-200.0}, {-200.0, 0.0,-100.0}, {-200.0, 0.0, 0.0}, {-200.0, 0.0, 100.0}, {-200.0, 0.0, 200.0}, {-200.0, 0.0, 300.0}, {-200.0, 0.0, 400.0}, {-200.0, 0.0, 500.0}, {-200.0, 0.0, 600.0}, {-200.0, 0.0, 700.0}, {-200.0, 0.0, 800.0}, {-200.0, 100.0,-800.0}, {-200.0, 100.0,-700.0}, {-200.0, 100.0,-600.0}, {-200.0, 100.0,-500.0}, {-200.0, 100.0,-400.0}, {-200.0, 100.0,-300.0}, {-200.0, 100.0,-200.0}, {-200.0, 100.0,-100.0}, {-200.0, 100.0, 0.0}, {-200.0, 100.0, 100.0}, {-200.0, 100.0, 200.0}, {-200.0, 100.0, 300.0}, {-200.0, 100.0, 400.0}, {-200.0, 100.0, 500.0}, {-200.0, 100.0, 600.0}, {-200.0, 100.0, 700.0}, {-200.0, 100.0, 800.0}, {-200.0, 200.0,-800.0}, {-200.0, 200.0,-700.0}, {-200.0, 200.0,-600.0}, {-200.0, 200.0,-500.0}, {-200.0, 200.0,-400.0}, {-200.0, 200.0,-300.0}, {-200.0, 200.0,-200.0}, {-200.0, 200.0,-100.0}, {-200.0, 200.0, 0.0}, {-200.0, 200.0, 100.0}, {-200.0, 200.0, 200.0}, {-200.0, 200.0, 300.0}, {-200.0, 200.0, 400.0}, {-200.0, 200.0, 500.0}, {-200.0, 200.0, 600.0}, {-200.0, 200.0, 700.0}, {-200.0, 200.0, 800.0}, {-200.0, 300.0,-800.0}, {-200.0, 300.0,-700.0}, {-200.0, 300.0,-600.0}, {-200.0, 300.0,-500.0}, {-200.0, 300.0,-400.0}, {-200.0, 300.0,-300.0}, {-200.0, 300.0,-200.0}, {-200.0, 300.0,-100.0}, {-200.0, 300.0, 0.0}, {-200.0, 300.0, 100.0}, {-200.0, 300.0, 200.0}, {-200.0, 300.0, 300.0}, {-200.0, 300.0, 400.0}, {-200.0, 300.0, 500.0}, {-200.0, 300.0, 600.0}, {-200.0, 300.0, 700.0}, {-200.0, 300.0, 800.0}, {-200.0, 400.0,-800.0}, {-200.0, 400.0,-700.0}, {-200.0, 400.0,-600.0}, {-200.0, 400.0,-500.0}, {-200.0, 400.0,-400.0}, {-200.0, 400.0,-300.0}, {-200.0, 400.0,-200.0}, {-200.0, 400.0,-100.0}, {-200.0, 400.0, 0.0}, {-200.0, 400.0, 100.0}, {-200.0, 400.0, 200.0}, {-200.0, 400.0, 300.0}, {-200.0, 400.0, 400.0}, {-200.0, 400.0, 500.0}, {-200.0, 400.0, 600.0}, {-200.0, 400.0, 700.0}, {-200.0, 400.0, 800.0}, {-200.0, 500.0,-800.0}, {-200.0, 500.0,-700.0}, {-200.0, 500.0,-600.0}, {-200.0, 500.0,-500.0}, {-200.0, 500.0,-400.0}, {-200.0, 500.0,-300.0}, {-200.0, 500.0,-200.0}, {-200.0, 500.0,-100.0}, {-200.0, 500.0, 0.0}, {-200.0, 500.0, 100.0}, {-200.0, 500.0, 200.0}, {-200.0, 500.0, 300.0}, {-200.0, 500.0, 400.0}, {-200.0, 500.0, 500.0}, {-200.0, 500.0, 600.0}, {-200.0, 500.0, 700.0}, {-200.0, 500.0, 800.0}, {-200.0, 600.0,-800.0}, {-200.0, 600.0,-700.0}, {-200.0, 600.0,-600.0}, {-200.0, 600.0,-500.0}, {-200.0, 600.0,-400.0}, {-200.0, 600.0,-300.0}, {-200.0, 600.0,-200.0}, {-200.0, 600.0,-100.0}, {-200.0, 600.0, 0.0}, {-200.0, 600.0, 100.0}, {-200.0, 600.0, 200.0}, {-200.0, 600.0, 300.0}, {-200.0, 600.0, 400.0}, {-200.0, 600.0, 500.0}, {-200.0, 600.0, 600.0}, {-200.0, 600.0, 700.0}, {-200.0, 600.0, 800.0}, {-200.0, 700.0,-800.0}, {-200.0, 700.0,-700.0}, {-200.0, 700.0,-600.0}, {-200.0, 700.0,-500.0}, {-200.0, 700.0,-400.0}, {-200.0, 700.0,-300.0}, {-200.0, 700.0,-200.0}, {-200.0, 700.0,-100.0}, {-200.0, 700.0, 0.0}, {-200.0, 700.0, 100.0}, {-200.0, 700.0, 200.0}, {-200.0, 700.0, 300.0}, {-200.0, 700.0, 400.0}, {-200.0, 700.0, 500.0}, {-200.0, 700.0, 600.0}, {-200.0, 700.0, 700.0}, {-200.0, 700.0, 800.0}, {-200.0, 800.0,-800.0}, {-200.0, 800.0,-700.0}, {-200.0, 800.0,-600.0}, {-200.0, 800.0,-500.0}, {-200.0, 800.0,-400.0}, {-200.0, 800.0,-300.0}, {-200.0, 800.0,-200.0}, {-200.0, 800.0,-100.0}, {-200.0, 800.0, 0.0}, {-200.0, 800.0, 100.0}, {-200.0, 800.0, 200.0}, {-200.0, 800.0, 300.0}, {-200.0, 800.0, 400.0}, {-200.0, 800.0, 500.0}, {-200.0, 800.0, 600.0}, {-200.0, 800.0, 700.0}, {-200.0, 800.0, 800.0}, {-100.0,-800.0,-800.0}, {-100.0,-800.0,-700.0}, {-100.0,-800.0,-600.0}, {-100.0,-800.0,-500.0}, {-100.0,-800.0,-400.0}, {-100.0,-800.0,-300.0}, {-100.0,-800.0,-200.0}, {-100.0,-800.0,-100.0}, {-100.0,-800.0, 0.0}, {-100.0,-800.0, 100.0}, {-100.0,-800.0, 200.0}, {-100.0,-800.0, 300.0}, {-100.0,-800.0, 400.0}, {-100.0,-800.0, 500.0}, {-100.0,-800.0, 600.0}, {-100.0,-800.0, 700.0}, {-100.0,-800.0, 800.0}, {-100.0,-700.0,-800.0}, {-100.0,-700.0,-700.0}, {-100.0,-700.0,-600.0}, {-100.0,-700.0,-500.0}, {-100.0,-700.0,-400.0}, {-100.0,-700.0,-300.0}, {-100.0,-700.0,-200.0}, {-100.0,-700.0,-100.0}, {-100.0,-700.0, 0.0}, {-100.0,-700.0, 100.0}, {-100.0,-700.0, 200.0}, {-100.0,-700.0, 300.0}, {-100.0,-700.0, 400.0}, {-100.0,-700.0, 500.0}, {-100.0,-700.0, 600.0}, {-100.0,-700.0, 700.0}, {-100.0,-700.0, 800.0}, {-100.0,-600.0,-800.0}, {-100.0,-600.0,-700.0}, {-100.0,-600.0,-600.0}, {-100.0,-600.0,-500.0}, {-100.0,-600.0,-400.0}, {-100.0,-600.0,-300.0}, {-100.0,-600.0,-200.0}, {-100.0,-600.0,-100.0}, {-100.0,-600.0, 0.0}, {-100.0,-600.0, 100.0}, {-100.0,-600.0, 200.0}, {-100.0,-600.0, 300.0}, {-100.0,-600.0, 400.0}, {-100.0,-600.0, 500.0}, {-100.0,-600.0, 600.0}, {-100.0,-600.0, 700.0}, {-100.0,-600.0, 800.0}, {-100.0,-500.0,-800.0}, {-100.0,-500.0,-700.0}, {-100.0,-500.0,-600.0}, {-100.0,-500.0,-500.0}, {-100.0,-500.0,-400.0}, {-100.0,-500.0,-300.0}, {-100.0,-500.0,-200.0}, {-100.0,-500.0,-100.0}, {-100.0,-500.0, 0.0}, {-100.0,-500.0, 100.0}, {-100.0,-500.0, 200.0}, {-100.0,-500.0, 300.0}, {-100.0,-500.0, 400.0}, {-100.0,-500.0, 500.0}, {-100.0,-500.0, 600.0}, {-100.0,-500.0, 700.0}, {-100.0,-500.0, 800.0}, {-100.0,-400.0,-800.0}, {-100.0,-400.0,-700.0}, {-100.0,-400.0,-600.0}, {-100.0,-400.0,-500.0}, {-100.0,-400.0,-400.0}, {-100.0,-400.0,-300.0}, {-100.0,-400.0,-200.0}, {-100.0,-400.0,-100.0}, {-100.0,-400.0, 0.0}, {-100.0,-400.0, 100.0}, {-100.0,-400.0, 200.0}, {-100.0,-400.0, 300.0}, {-100.0,-400.0, 400.0}, {-100.0,-400.0, 500.0}, {-100.0,-400.0, 600.0}, {-100.0,-400.0, 700.0}, {-100.0,-400.0, 800.0}, {-100.0,-300.0,-800.0}, {-100.0,-300.0,-700.0}, {-100.0,-300.0,-600.0}, {-100.0,-300.0,-500.0}, {-100.0,-300.0,-400.0}, {-100.0,-300.0,-300.0}, {-100.0,-300.0,-200.0}, {-100.0,-300.0,-100.0}, {-100.0,-300.0, 0.0}, {-100.0,-300.0, 100.0}, {-100.0,-300.0, 200.0}, {-100.0,-300.0, 300.0}, {-100.0,-300.0, 400.0}, {-100.0,-300.0, 500.0}, {-100.0,-300.0, 600.0}, {-100.0,-300.0, 700.0}, {-100.0,-300.0, 800.0}, {-100.0,-200.0,-800.0}, {-100.0,-200.0,-700.0}, {-100.0,-200.0,-600.0}, {-100.0,-200.0,-500.0}, {-100.0,-200.0,-400.0}, {-100.0,-200.0,-300.0}, {-100.0,-200.0,-200.0}, {-100.0,-200.0,-100.0}, {-100.0,-200.0, 0.0}, {-100.0,-200.0, 100.0}, {-100.0,-200.0, 200.0}, {-100.0,-200.0, 300.0}, {-100.0,-200.0, 400.0}, {-100.0,-200.0, 500.0}, {-100.0,-200.0, 600.0}, {-100.0,-200.0, 700.0}, {-100.0,-200.0, 800.0}, {-100.0,-100.0,-800.0}, {-100.0,-100.0,-700.0}, {-100.0,-100.0,-600.0}, {-100.0,-100.0,-500.0}, {-100.0,-100.0,-400.0}, {-100.0,-100.0,-300.0}, {-100.0,-100.0,-200.0}, {-100.0,-100.0,-100.0}, {-100.0,-100.0, 0.0}, {-100.0,-100.0, 100.0}, {-100.0,-100.0, 200.0}, {-100.0,-100.0, 300.0}, {-100.0,-100.0, 400.0}, {-100.0,-100.0, 500.0}, {-100.0,-100.0, 600.0}, {-100.0,-100.0, 700.0}, {-100.0,-100.0, 800.0}, {-100.0, 0.0,-800.0}, {-100.0, 0.0,-700.0}, {-100.0, 0.0,-600.0}, {-100.0, 0.0,-500.0}, {-100.0, 0.0,-400.0}, {-100.0, 0.0,-300.0}, {-100.0, 0.0,-200.0}, {-100.0, 0.0,-100.0}, {-100.0, 0.0, 0.0}, {-100.0, 0.0, 100.0}, {-100.0, 0.0, 200.0}, {-100.0, 0.0, 300.0}, {-100.0, 0.0, 400.0}, {-100.0, 0.0, 500.0}, {-100.0, 0.0, 600.0}, {-100.0, 0.0, 700.0}, {-100.0, 0.0, 800.0}, {-100.0, 100.0,-800.0}, {-100.0, 100.0,-700.0}, {-100.0, 100.0,-600.0}, {-100.0, 100.0,-500.0}, {-100.0, 100.0,-400.0}, {-100.0, 100.0,-300.0}, {-100.0, 100.0,-200.0}, {-100.0, 100.0,-100.0}, {-100.0, 100.0, 0.0}, {-100.0, 100.0, 100.0}, {-100.0, 100.0, 200.0}, {-100.0, 100.0, 300.0}, {-100.0, 100.0, 400.0}, {-100.0, 100.0, 500.0}, {-100.0, 100.0, 600.0}, {-100.0, 100.0, 700.0}, {-100.0, 100.0, 800.0}, {-100.0, 200.0,-800.0}, {-100.0, 200.0,-700.0}, {-100.0, 200.0,-600.0}, {-100.0, 200.0,-500.0}, {-100.0, 200.0,-400.0}, {-100.0, 200.0,-300.0}, {-100.0, 200.0,-200.0}, {-100.0, 200.0,-100.0}, {-100.0, 200.0, 0.0}, {-100.0, 200.0, 100.0}, {-100.0, 200.0, 200.0}, {-100.0, 200.0, 300.0}, {-100.0, 200.0, 400.0}, {-100.0, 200.0, 500.0}, {-100.0, 200.0, 600.0}, {-100.0, 200.0, 700.0}, {-100.0, 200.0, 800.0}, {-100.0, 300.0,-800.0}, {-100.0, 300.0,-700.0}, {-100.0, 300.0,-600.0}, {-100.0, 300.0,-500.0}, {-100.0, 300.0,-400.0}, {-100.0, 300.0,-300.0}, {-100.0, 300.0,-200.0}, {-100.0, 300.0,-100.0}, {-100.0, 300.0, 0.0}, {-100.0, 300.0, 100.0}, {-100.0, 300.0, 200.0}, {-100.0, 300.0, 300.0}, {-100.0, 300.0, 400.0}, {-100.0, 300.0, 500.0}, {-100.0, 300.0, 600.0}, {-100.0, 300.0, 700.0}, {-100.0, 300.0, 800.0}, {-100.0, 400.0,-800.0}, {-100.0, 400.0,-700.0}, {-100.0, 400.0,-600.0}, {-100.0, 400.0,-500.0}, {-100.0, 400.0,-400.0}, {-100.0, 400.0,-300.0}, {-100.0, 400.0,-200.0}, {-100.0, 400.0,-100.0}, {-100.0, 400.0, 0.0}, {-100.0, 400.0, 100.0}, {-100.0, 400.0, 200.0}, {-100.0, 400.0, 300.0}, {-100.0, 400.0, 400.0}, {-100.0, 400.0, 500.0}, {-100.0, 400.0, 600.0}, {-100.0, 400.0, 700.0}, {-100.0, 400.0, 800.0}, {-100.0, 500.0,-800.0}, {-100.0, 500.0,-700.0}, {-100.0, 500.0,-600.0}, {-100.0, 500.0,-500.0}, {-100.0, 500.0,-400.0}, {-100.0, 500.0,-300.0}, {-100.0, 500.0,-200.0}, {-100.0, 500.0,-100.0}, {-100.0, 500.0, 0.0}, {-100.0, 500.0, 100.0}, {-100.0, 500.0, 200.0}, {-100.0, 500.0, 300.0}, {-100.0, 500.0, 400.0}, {-100.0, 500.0, 500.0}, {-100.0, 500.0, 600.0}, {-100.0, 500.0, 700.0}, {-100.0, 500.0, 800.0}, {-100.0, 600.0,-800.0}, {-100.0, 600.0,-700.0}, {-100.0, 600.0,-600.0}, {-100.0, 600.0,-500.0}, {-100.0, 600.0,-400.0}, {-100.0, 600.0,-300.0}, {-100.0, 600.0,-200.0}, {-100.0, 600.0,-100.0}, {-100.0, 600.0, 0.0}, {-100.0, 600.0, 100.0}, {-100.0, 600.0, 200.0}, {-100.0, 600.0, 300.0}, {-100.0, 600.0, 400.0}, {-100.0, 600.0, 500.0}, {-100.0, 600.0, 600.0}, {-100.0, 600.0, 700.0}, {-100.0, 600.0, 800.0}, {-100.0, 700.0,-800.0}, {-100.0, 700.0,-700.0}, {-100.0, 700.0,-600.0}, {-100.0, 700.0,-500.0}, {-100.0, 700.0,-400.0}, {-100.0, 700.0,-300.0}, {-100.0, 700.0,-200.0}, {-100.0, 700.0,-100.0}, {-100.0, 700.0, 0.0}, {-100.0, 700.0, 100.0}, {-100.0, 700.0, 200.0}, {-100.0, 700.0, 300.0}, {-100.0, 700.0, 400.0}, {-100.0, 700.0, 500.0}, {-100.0, 700.0, 600.0}, {-100.0, 700.0, 700.0}, {-100.0, 700.0, 800.0}, {-100.0, 800.0,-800.0}, {-100.0, 800.0,-700.0}, {-100.0, 800.0,-600.0}, {-100.0, 800.0,-500.0}, {-100.0, 800.0,-400.0}, {-100.0, 800.0,-300.0}, {-100.0, 800.0,-200.0}, {-100.0, 800.0,-100.0}, {-100.0, 800.0, 0.0}, {-100.0, 800.0, 100.0}, {-100.0, 800.0, 200.0}, {-100.0, 800.0, 300.0}, {-100.0, 800.0, 400.0}, {-100.0, 800.0, 500.0}, {-100.0, 800.0, 600.0}, {-100.0, 800.0, 700.0}, {-100.0, 800.0, 800.0}, { 0.0,-800.0,-800.0}, { 0.0,-800.0,-700.0}, { 0.0,-800.0,-600.0}, { 0.0,-800.0,-500.0}, { 0.0,-800.0,-400.0}, { 0.0,-800.0,-300.0}, { 0.0,-800.0,-200.0}, { 0.0,-800.0,-100.0}, { 0.0,-800.0, 0.0}, { 0.0,-800.0, 100.0}, { 0.0,-800.0, 200.0}, { 0.0,-800.0, 300.0}, { 0.0,-800.0, 400.0}, { 0.0,-800.0, 500.0}, { 0.0,-800.0, 600.0}, { 0.0,-800.0, 700.0}, { 0.0,-800.0, 800.0}, { 0.0,-700.0,-800.0}, { 0.0,-700.0,-700.0}, { 0.0,-700.0,-600.0}, { 0.0,-700.0,-500.0}, { 0.0,-700.0,-400.0}, { 0.0,-700.0,-300.0}, { 0.0,-700.0,-200.0}, { 0.0,-700.0,-100.0}, { 0.0,-700.0, 0.0}, { 0.0,-700.0, 100.0}, { 0.0,-700.0, 200.0}, { 0.0,-700.0, 300.0}, { 0.0,-700.0, 400.0}, { 0.0,-700.0, 500.0}, { 0.0,-700.0, 600.0}, { 0.0,-700.0, 700.0}, { 0.0,-700.0, 800.0}, { 0.0,-600.0,-800.0}, { 0.0,-600.0,-700.0}, { 0.0,-600.0,-600.0}, { 0.0,-600.0,-500.0}, { 0.0,-600.0,-400.0}, { 0.0,-600.0,-300.0}, { 0.0,-600.0,-200.0}, { 0.0,-600.0,-100.0}, { 0.0,-600.0, 0.0}, { 0.0,-600.0, 100.0}, { 0.0,-600.0, 200.0}, { 0.0,-600.0, 300.0}, { 0.0,-600.0, 400.0}, { 0.0,-600.0, 500.0}, { 0.0,-600.0, 600.0}, { 0.0,-600.0, 700.0}, { 0.0,-600.0, 800.0}, { 0.0,-500.0,-800.0}, { 0.0,-500.0,-700.0}, { 0.0,-500.0,-600.0}, { 0.0,-500.0,-500.0}, { 0.0,-500.0,-400.0}, { 0.0,-500.0,-300.0}, { 0.0,-500.0,-200.0}, { 0.0,-500.0,-100.0}, { 0.0,-500.0, 0.0}, { 0.0,-500.0, 100.0}, { 0.0,-500.0, 200.0}, { 0.0,-500.0, 300.0}, { 0.0,-500.0, 400.0}, { 0.0,-500.0, 500.0}, { 0.0,-500.0, 600.0}, { 0.0,-500.0, 700.0}, { 0.0,-500.0, 800.0}, { 0.0,-400.0,-800.0}, { 0.0,-400.0,-700.0}, { 0.0,-400.0,-600.0}, { 0.0,-400.0,-500.0}, { 0.0,-400.0,-400.0}, { 0.0,-400.0,-300.0}, { 0.0,-400.0,-200.0}, { 0.0,-400.0,-100.0}, { 0.0,-400.0, 0.0}, { 0.0,-400.0, 100.0}, { 0.0,-400.0, 200.0}, { 0.0,-400.0, 300.0}, { 0.0,-400.0, 400.0}, { 0.0,-400.0, 500.0}, { 0.0,-400.0, 600.0}, { 0.0,-400.0, 700.0}, { 0.0,-400.0, 800.0}, { 0.0,-300.0,-800.0}, { 0.0,-300.0,-700.0}, { 0.0,-300.0,-600.0}, { 0.0,-300.0,-500.0}, { 0.0,-300.0,-400.0}, { 0.0,-300.0,-300.0}, { 0.0,-300.0,-200.0}, { 0.0,-300.0,-100.0}, { 0.0,-300.0, 0.0}, { 0.0,-300.0, 100.0}, { 0.0,-300.0, 200.0}, { 0.0,-300.0, 300.0}, { 0.0,-300.0, 400.0}, { 0.0,-300.0, 500.0}, { 0.0,-300.0, 600.0}, { 0.0,-300.0, 700.0}, { 0.0,-300.0, 800.0}, { 0.0,-200.0,-800.0}, { 0.0,-200.0,-700.0}, { 0.0,-200.0,-600.0}, { 0.0,-200.0,-500.0}, { 0.0,-200.0,-400.0}, { 0.0,-200.0,-300.0}, { 0.0,-200.0,-200.0}, { 0.0,-200.0,-100.0}, { 0.0,-200.0, 0.0}, { 0.0,-200.0, 100.0}, { 0.0,-200.0, 200.0}, { 0.0,-200.0, 300.0}, { 0.0,-200.0, 400.0}, { 0.0,-200.0, 500.0}, { 0.0,-200.0, 600.0}, { 0.0,-200.0, 700.0}, { 0.0,-200.0, 800.0}, { 0.0,-100.0,-800.0}, { 0.0,-100.0,-700.0}, { 0.0,-100.0,-600.0}, { 0.0,-100.0,-500.0}, { 0.0,-100.0,-400.0}, { 0.0,-100.0,-300.0}, { 0.0,-100.0,-200.0}, { 0.0,-100.0,-100.0}, { 0.0,-100.0, 0.0}, { 0.0,-100.0, 100.0}, { 0.0,-100.0, 200.0}, { 0.0,-100.0, 300.0}, { 0.0,-100.0, 400.0}, { 0.0,-100.0, 500.0}, { 0.0,-100.0, 600.0}, { 0.0,-100.0, 700.0}, { 0.0,-100.0, 800.0}, { 0.0, 0.0,-800.0}, { 0.0, 0.0,-700.0}, { 0.0, 0.0,-600.0}, { 0.0, 0.0,-500.0}, { 0.0, 0.0,-400.0}, { 0.0, 0.0,-300.0}, { 0.0, 0.0,-200.0}, { 0.0, 0.0,-100.0}, { 0.0, 0.0, 0.0}, { 0.0, 0.0, 100.0}, { 0.0, 0.0, 200.0}, { 0.0, 0.0, 300.0}, { 0.0, 0.0, 400.0}, { 0.0, 0.0, 500.0}, { 0.0, 0.0, 600.0}, { 0.0, 0.0, 700.0}, { 0.0, 0.0, 800.0}, { 0.0, 100.0,-800.0}, { 0.0, 100.0,-700.0}, { 0.0, 100.0,-600.0}, { 0.0, 100.0,-500.0}, { 0.0, 100.0,-400.0}, { 0.0, 100.0,-300.0}, { 0.0, 100.0,-200.0}, { 0.0, 100.0,-100.0}, { 0.0, 100.0, 0.0}, { 0.0, 100.0, 100.0}, { 0.0, 100.0, 200.0}, { 0.0, 100.0, 300.0}, { 0.0, 100.0, 400.0}, { 0.0, 100.0, 500.0}, { 0.0, 100.0, 600.0}, { 0.0, 100.0, 700.0}, { 0.0, 100.0, 800.0}, { 0.0, 200.0,-800.0}, { 0.0, 200.0,-700.0}, { 0.0, 200.0,-600.0}, { 0.0, 200.0,-500.0}, { 0.0, 200.0,-400.0}, { 0.0, 200.0,-300.0}, { 0.0, 200.0,-200.0}, { 0.0, 200.0,-100.0}, { 0.0, 200.0, 0.0}, { 0.0, 200.0, 100.0}, { 0.0, 200.0, 200.0}, { 0.0, 200.0, 300.0}, { 0.0, 200.0, 400.0}, { 0.0, 200.0, 500.0}, { 0.0, 200.0, 600.0}, { 0.0, 200.0, 700.0}, { 0.0, 200.0, 800.0}, { 0.0, 300.0,-800.0}, { 0.0, 300.0,-700.0}, { 0.0, 300.0,-600.0}, { 0.0, 300.0,-500.0}, { 0.0, 300.0,-400.0}, { 0.0, 300.0,-300.0}, { 0.0, 300.0,-200.0}, { 0.0, 300.0,-100.0}, { 0.0, 300.0, 0.0}, { 0.0, 300.0, 100.0}, { 0.0, 300.0, 200.0}, { 0.0, 300.0, 300.0}, { 0.0, 300.0, 400.0}, { 0.0, 300.0, 500.0}, { 0.0, 300.0, 600.0}, { 0.0, 300.0, 700.0}, { 0.0, 300.0, 800.0}, { 0.0, 400.0,-800.0}, { 0.0, 400.0,-700.0}, { 0.0, 400.0,-600.0}, { 0.0, 400.0,-500.0}, { 0.0, 400.0,-400.0}, { 0.0, 400.0,-300.0}, { 0.0, 400.0,-200.0}, { 0.0, 400.0,-100.0}, { 0.0, 400.0, 0.0}, { 0.0, 400.0, 100.0}, { 0.0, 400.0, 200.0}, { 0.0, 400.0, 300.0}, { 0.0, 400.0, 400.0}, { 0.0, 400.0, 500.0}, { 0.0, 400.0, 600.0}, { 0.0, 400.0, 700.0}, { 0.0, 400.0, 800.0}, { 0.0, 500.0,-800.0}, { 0.0, 500.0,-700.0}, { 0.0, 500.0,-600.0}, { 0.0, 500.0,-500.0}, { 0.0, 500.0,-400.0}, { 0.0, 500.0,-300.0}, { 0.0, 500.0,-200.0}, { 0.0, 500.0,-100.0}, { 0.0, 500.0, 0.0}, { 0.0, 500.0, 100.0}, { 0.0, 500.0, 200.0}, { 0.0, 500.0, 300.0}, { 0.0, 500.0, 400.0}, { 0.0, 500.0, 500.0}, { 0.0, 500.0, 600.0}, { 0.0, 500.0, 700.0}, { 0.0, 500.0, 800.0}, { 0.0, 600.0,-800.0}, { 0.0, 600.0,-700.0}, { 0.0, 600.0,-600.0}, { 0.0, 600.0,-500.0}, { 0.0, 600.0,-400.0}, { 0.0, 600.0,-300.0}, { 0.0, 600.0,-200.0}, { 0.0, 600.0,-100.0}, { 0.0, 600.0, 0.0}, { 0.0, 600.0, 100.0}, { 0.0, 600.0, 200.0}, { 0.0, 600.0, 300.0}, { 0.0, 600.0, 400.0}, { 0.0, 600.0, 500.0}, { 0.0, 600.0, 600.0}, { 0.0, 600.0, 700.0}, { 0.0, 600.0, 800.0}, { 0.0, 700.0,-800.0}, { 0.0, 700.0,-700.0}, { 0.0, 700.0,-600.0}, { 0.0, 700.0,-500.0}, { 0.0, 700.0,-400.0}, { 0.0, 700.0,-300.0}, { 0.0, 700.0,-200.0}, { 0.0, 700.0,-100.0}, { 0.0, 700.0, 0.0}, { 0.0, 700.0, 100.0}, { 0.0, 700.0, 200.0}, { 0.0, 700.0, 300.0}, { 0.0, 700.0, 400.0}, { 0.0, 700.0, 500.0}, { 0.0, 700.0, 600.0}, { 0.0, 700.0, 700.0}, { 0.0, 700.0, 800.0}, { 0.0, 800.0,-800.0}, { 0.0, 800.0,-700.0}, { 0.0, 800.0,-600.0}, { 0.0, 800.0,-500.0}, { 0.0, 800.0,-400.0}, { 0.0, 800.0,-300.0}, { 0.0, 800.0,-200.0}, { 0.0, 800.0,-100.0}, { 0.0, 800.0, 0.0}, { 0.0, 800.0, 100.0}, { 0.0, 800.0, 200.0}, { 0.0, 800.0, 300.0}, { 0.0, 800.0, 400.0}, { 0.0, 800.0, 500.0}, { 0.0, 800.0, 600.0}, { 0.0, 800.0, 700.0}, { 0.0, 800.0, 800.0}, { 100.0,-800.0,-800.0}, { 100.0,-800.0,-700.0}, { 100.0,-800.0,-600.0}, { 100.0,-800.0,-500.0}, { 100.0,-800.0,-400.0}, { 100.0,-800.0,-300.0}, { 100.0,-800.0,-200.0}, { 100.0,-800.0,-100.0}, { 100.0,-800.0, 0.0}, { 100.0,-800.0, 100.0}, { 100.0,-800.0, 200.0}, { 100.0,-800.0, 300.0}, { 100.0,-800.0, 400.0}, { 100.0,-800.0, 500.0}, { 100.0,-800.0, 600.0}, { 100.0,-800.0, 700.0}, { 100.0,-800.0, 800.0}, { 100.0,-700.0,-800.0}, { 100.0,-700.0,-700.0}, { 100.0,-700.0,-600.0}, { 100.0,-700.0,-500.0}, { 100.0,-700.0,-400.0}, { 100.0,-700.0,-300.0}, { 100.0,-700.0,-200.0}, { 100.0,-700.0,-100.0}, { 100.0,-700.0, 0.0}, { 100.0,-700.0, 100.0}, { 100.0,-700.0, 200.0}, { 100.0,-700.0, 300.0}, { 100.0,-700.0, 400.0}, { 100.0,-700.0, 500.0}, { 100.0,-700.0, 600.0}, { 100.0,-700.0, 700.0}, { 100.0,-700.0, 800.0}, { 100.0,-600.0,-800.0}, { 100.0,-600.0,-700.0}, { 100.0,-600.0,-600.0}, { 100.0,-600.0,-500.0}, { 100.0,-600.0,-400.0}, { 100.0,-600.0,-300.0}, { 100.0,-600.0,-200.0}, { 100.0,-600.0,-100.0}, { 100.0,-600.0, 0.0}, { 100.0,-600.0, 100.0}, { 100.0,-600.0, 200.0}, { 100.0,-600.0, 300.0}, { 100.0,-600.0, 400.0}, { 100.0,-600.0, 500.0}, { 100.0,-600.0, 600.0}, { 100.0,-600.0, 700.0}, { 100.0,-600.0, 800.0}, { 100.0,-500.0,-800.0}, { 100.0,-500.0,-700.0}, { 100.0,-500.0,-600.0}, { 100.0,-500.0,-500.0}, { 100.0,-500.0,-400.0}, { 100.0,-500.0,-300.0}, { 100.0,-500.0,-200.0}, { 100.0,-500.0,-100.0}, { 100.0,-500.0, 0.0}, { 100.0,-500.0, 100.0}, { 100.0,-500.0, 200.0}, { 100.0,-500.0, 300.0}, { 100.0,-500.0, 400.0}, { 100.0,-500.0, 500.0}, { 100.0,-500.0, 600.0}, { 100.0,-500.0, 700.0}, { 100.0,-500.0, 800.0}, { 100.0,-400.0,-800.0}, { 100.0,-400.0,-700.0}, { 100.0,-400.0,-600.0}, { 100.0,-400.0,-500.0}, { 100.0,-400.0,-400.0}, { 100.0,-400.0,-300.0}, { 100.0,-400.0,-200.0}, { 100.0,-400.0,-100.0}, { 100.0,-400.0, 0.0}, { 100.0,-400.0, 100.0}, { 100.0,-400.0, 200.0}, { 100.0,-400.0, 300.0}, { 100.0,-400.0, 400.0}, { 100.0,-400.0, 500.0}, { 100.0,-400.0, 600.0}, { 100.0,-400.0, 700.0}, { 100.0,-400.0, 800.0}, { 100.0,-300.0,-800.0}, { 100.0,-300.0,-700.0}, { 100.0,-300.0,-600.0}, { 100.0,-300.0,-500.0}, { 100.0,-300.0,-400.0}, { 100.0,-300.0,-300.0}, { 100.0,-300.0,-200.0}, { 100.0,-300.0,-100.0}, { 100.0,-300.0, 0.0}, { 100.0,-300.0, 100.0}, { 100.0,-300.0, 200.0}, { 100.0,-300.0, 300.0}, { 100.0,-300.0, 400.0}, { 100.0,-300.0, 500.0}, { 100.0,-300.0, 600.0}, { 100.0,-300.0, 700.0}, { 100.0,-300.0, 800.0}, { 100.0,-200.0,-800.0}, { 100.0,-200.0,-700.0}, { 100.0,-200.0,-600.0}, { 100.0,-200.0,-500.0}, { 100.0,-200.0,-400.0}, { 100.0,-200.0,-300.0}, { 100.0,-200.0,-200.0}, { 100.0,-200.0,-100.0}, { 100.0,-200.0, 0.0}, { 100.0,-200.0, 100.0}, { 100.0,-200.0, 200.0}, { 100.0,-200.0, 300.0}, { 100.0,-200.0, 400.0}, { 100.0,-200.0, 500.0}, { 100.0,-200.0, 600.0}, { 100.0,-200.0, 700.0}, { 100.0,-200.0, 800.0}, { 100.0,-100.0,-800.0}, { 100.0,-100.0,-700.0}, { 100.0,-100.0,-600.0}, { 100.0,-100.0,-500.0}, { 100.0,-100.0,-400.0}, { 100.0,-100.0,-300.0}, { 100.0,-100.0,-200.0}, { 100.0,-100.0,-100.0}, { 100.0,-100.0, 0.0}, { 100.0,-100.0, 100.0}, { 100.0,-100.0, 200.0}, { 100.0,-100.0, 300.0}, { 100.0,-100.0, 400.0}, { 100.0,-100.0, 500.0}, { 100.0,-100.0, 600.0}, { 100.0,-100.0, 700.0}, { 100.0,-100.0, 800.0}, { 100.0, 0.0,-800.0}, { 100.0, 0.0,-700.0}, { 100.0, 0.0,-600.0}, { 100.0, 0.0,-500.0}, { 100.0, 0.0,-400.0}, { 100.0, 0.0,-300.0}, { 100.0, 0.0,-200.0}, { 100.0, 0.0,-100.0}, { 100.0, 0.0, 0.0}, { 100.0, 0.0, 100.0}, { 100.0, 0.0, 200.0}, { 100.0, 0.0, 300.0}, { 100.0, 0.0, 400.0}, { 100.0, 0.0, 500.0}, { 100.0, 0.0, 600.0}, { 100.0, 0.0, 700.0}, { 100.0, 0.0, 800.0}, { 100.0, 100.0,-800.0}, { 100.0, 100.0,-700.0}, { 100.0, 100.0,-600.0}, { 100.0, 100.0,-500.0}, { 100.0, 100.0,-400.0}, { 100.0, 100.0,-300.0}, { 100.0, 100.0,-200.0}, { 100.0, 100.0,-100.0}, { 100.0, 100.0, 0.0}, { 100.0, 100.0, 100.0}, { 100.0, 100.0, 200.0}, { 100.0, 100.0, 300.0}, { 100.0, 100.0, 400.0}, { 100.0, 100.0, 500.0}, { 100.0, 100.0, 600.0}, { 100.0, 100.0, 700.0}, { 100.0, 100.0, 800.0}, { 100.0, 200.0,-800.0}, { 100.0, 200.0,-700.0}, { 100.0, 200.0,-600.0}, { 100.0, 200.0,-500.0}, { 100.0, 200.0,-400.0}, { 100.0, 200.0,-300.0}, { 100.0, 200.0,-200.0}, { 100.0, 200.0,-100.0}, { 100.0, 200.0, 0.0}, { 100.0, 200.0, 100.0}, { 100.0, 200.0, 200.0}, { 100.0, 200.0, 300.0}, { 100.0, 200.0, 400.0}, { 100.0, 200.0, 500.0}, { 100.0, 200.0, 600.0}, { 100.0, 200.0, 700.0}, { 100.0, 200.0, 800.0}, { 100.0, 300.0,-800.0}, { 100.0, 300.0,-700.0}, { 100.0, 300.0,-600.0}, { 100.0, 300.0,-500.0}, { 100.0, 300.0,-400.0}, { 100.0, 300.0,-300.0}, { 100.0, 300.0,-200.0}, { 100.0, 300.0,-100.0}, { 100.0, 300.0, 0.0}, { 100.0, 300.0, 100.0}, { 100.0, 300.0, 200.0}, { 100.0, 300.0, 300.0}, { 100.0, 300.0, 400.0}, { 100.0, 300.0, 500.0}, { 100.0, 300.0, 600.0}, { 100.0, 300.0, 700.0}, { 100.0, 300.0, 800.0}, { 100.0, 400.0,-800.0}, { 100.0, 400.0,-700.0}, { 100.0, 400.0,-600.0}, { 100.0, 400.0,-500.0}, { 100.0, 400.0,-400.0}, { 100.0, 400.0,-300.0}, { 100.0, 400.0,-200.0}, { 100.0, 400.0,-100.0}, { 100.0, 400.0, 0.0}, { 100.0, 400.0, 100.0}, { 100.0, 400.0, 200.0}, { 100.0, 400.0, 300.0}, { 100.0, 400.0, 400.0}, { 100.0, 400.0, 500.0}, { 100.0, 400.0, 600.0}, { 100.0, 400.0, 700.0}, { 100.0, 400.0, 800.0}, { 100.0, 500.0,-800.0}, { 100.0, 500.0,-700.0}, { 100.0, 500.0,-600.0}, { 100.0, 500.0,-500.0}, { 100.0, 500.0,-400.0}, { 100.0, 500.0,-300.0}, { 100.0, 500.0,-200.0}, { 100.0, 500.0,-100.0}, { 100.0, 500.0, 0.0}, { 100.0, 500.0, 100.0}, { 100.0, 500.0, 200.0}, { 100.0, 500.0, 300.0}, { 100.0, 500.0, 400.0}, { 100.0, 500.0, 500.0}, { 100.0, 500.0, 600.0}, { 100.0, 500.0, 700.0}, { 100.0, 500.0, 800.0}, { 100.0, 600.0,-800.0}, { 100.0, 600.0,-700.0}, { 100.0, 600.0,-600.0}, { 100.0, 600.0,-500.0}, { 100.0, 600.0,-400.0}, { 100.0, 600.0,-300.0}, { 100.0, 600.0,-200.0}, { 100.0, 600.0,-100.0}, { 100.0, 600.0, 0.0}, { 100.0, 600.0, 100.0}, { 100.0, 600.0, 200.0}, { 100.0, 600.0, 300.0}, { 100.0, 600.0, 400.0}, { 100.0, 600.0, 500.0}, { 100.0, 600.0, 600.0}, { 100.0, 600.0, 700.0}, { 100.0, 600.0, 800.0}, { 100.0, 700.0,-800.0}, { 100.0, 700.0,-700.0}, { 100.0, 700.0,-600.0}, { 100.0, 700.0,-500.0}, { 100.0, 700.0,-400.0}, { 100.0, 700.0,-300.0}, { 100.0, 700.0,-200.0}, { 100.0, 700.0,-100.0}, { 100.0, 700.0, 0.0}, { 100.0, 700.0, 100.0}, { 100.0, 700.0, 200.0}, { 100.0, 700.0, 300.0}, { 100.0, 700.0, 400.0}, { 100.0, 700.0, 500.0}, { 100.0, 700.0, 600.0}, { 100.0, 700.0, 700.0}, { 100.0, 700.0, 800.0}, { 100.0, 800.0,-800.0}, { 100.0, 800.0,-700.0}, { 100.0, 800.0,-600.0}, { 100.0, 800.0,-500.0}, { 100.0, 800.0,-400.0}, { 100.0, 800.0,-300.0}, { 100.0, 800.0,-200.0}, { 100.0, 800.0,-100.0}, { 100.0, 800.0, 0.0}, { 100.0, 800.0, 100.0}, { 100.0, 800.0, 200.0}, { 100.0, 800.0, 300.0}, { 100.0, 800.0, 400.0}, { 100.0, 800.0, 500.0}, { 100.0, 800.0, 600.0}, { 100.0, 800.0, 700.0}, { 100.0, 800.0, 800.0}, { 200.0,-800.0,-800.0}, { 200.0,-800.0,-700.0}, { 200.0,-800.0,-600.0}, { 200.0,-800.0,-500.0}, { 200.0,-800.0,-400.0}, { 200.0,-800.0,-300.0}, { 200.0,-800.0,-200.0}, { 200.0,-800.0,-100.0}, { 200.0,-800.0, 0.0}, { 200.0,-800.0, 100.0}, { 200.0,-800.0, 200.0}, { 200.0,-800.0, 300.0}, { 200.0,-800.0, 400.0}, { 200.0,-800.0, 500.0}, { 200.0,-800.0, 600.0}, { 200.0,-800.0, 700.0}, { 200.0,-800.0, 800.0}, { 200.0,-700.0,-800.0}, { 200.0,-700.0,-700.0}, { 200.0,-700.0,-600.0}, { 200.0,-700.0,-500.0}, { 200.0,-700.0,-400.0}, { 200.0,-700.0,-300.0}, { 200.0,-700.0,-200.0}, { 200.0,-700.0,-100.0}, { 200.0,-700.0, 0.0}, { 200.0,-700.0, 100.0}, { 200.0,-700.0, 200.0}, { 200.0,-700.0, 300.0}, { 200.0,-700.0, 400.0}, { 200.0,-700.0, 500.0}, { 200.0,-700.0, 600.0}, { 200.0,-700.0, 700.0}, { 200.0,-700.0, 800.0}, { 200.0,-600.0,-800.0}, { 200.0,-600.0,-700.0}, { 200.0,-600.0,-600.0}, { 200.0,-600.0,-500.0}, { 200.0,-600.0,-400.0}, { 200.0,-600.0,-300.0}, { 200.0,-600.0,-200.0}, { 200.0,-600.0,-100.0}, { 200.0,-600.0, 0.0}, { 200.0,-600.0, 100.0}, { 200.0,-600.0, 200.0}, { 200.0,-600.0, 300.0}, { 200.0,-600.0, 400.0}, { 200.0,-600.0, 500.0}, { 200.0,-600.0, 600.0}, { 200.0,-600.0, 700.0}, { 200.0,-600.0, 800.0}, { 200.0,-500.0,-800.0}, { 200.0,-500.0,-700.0}, { 200.0,-500.0,-600.0}, { 200.0,-500.0,-500.0}, { 200.0,-500.0,-400.0}, { 200.0,-500.0,-300.0}, { 200.0,-500.0,-200.0}, { 200.0,-500.0,-100.0}, { 200.0,-500.0, 0.0}, { 200.0,-500.0, 100.0}, { 200.0,-500.0, 200.0}, { 200.0,-500.0, 300.0}, { 200.0,-500.0, 400.0}, { 200.0,-500.0, 500.0}, { 200.0,-500.0, 600.0}, { 200.0,-500.0, 700.0}, { 200.0,-500.0, 800.0}, { 200.0,-400.0,-800.0}, { 200.0,-400.0,-700.0}, { 200.0,-400.0,-600.0}, { 200.0,-400.0,-500.0}, { 200.0,-400.0,-400.0}, { 200.0,-400.0,-300.0}, { 200.0,-400.0,-200.0}, { 200.0,-400.0,-100.0}, { 200.0,-400.0, 0.0}, { 200.0,-400.0, 100.0}, { 200.0,-400.0, 200.0}, { 200.0,-400.0, 300.0}, { 200.0,-400.0, 400.0}, { 200.0,-400.0, 500.0}, { 200.0,-400.0, 600.0}, { 200.0,-400.0, 700.0}, { 200.0,-400.0, 800.0}, { 200.0,-300.0,-800.0}, { 200.0,-300.0,-700.0}, { 200.0,-300.0,-600.0}, { 200.0,-300.0,-500.0}, { 200.0,-300.0,-400.0}, { 200.0,-300.0,-300.0}, { 200.0,-300.0,-200.0}, { 200.0,-300.0,-100.0}, { 200.0,-300.0, 0.0}, { 200.0,-300.0, 100.0}, { 200.0,-300.0, 200.0}, { 200.0,-300.0, 300.0}, { 200.0,-300.0, 400.0}, { 200.0,-300.0, 500.0}, { 200.0,-300.0, 600.0}, { 200.0,-300.0, 700.0}, { 200.0,-300.0, 800.0}, { 200.0,-200.0,-800.0}, { 200.0,-200.0,-700.0}, { 200.0,-200.0,-600.0}, { 200.0,-200.0,-500.0}, { 200.0,-200.0,-400.0}, { 200.0,-200.0,-300.0}, { 200.0,-200.0,-200.0}, { 200.0,-200.0,-100.0}, { 200.0,-200.0, 0.0}, { 200.0,-200.0, 100.0}, { 200.0,-200.0, 200.0}, { 200.0,-200.0, 300.0}, { 200.0,-200.0, 400.0}, { 200.0,-200.0, 500.0}, { 200.0,-200.0, 600.0}, { 200.0,-200.0, 700.0}, { 200.0,-200.0, 800.0}, { 200.0,-100.0,-800.0}, { 200.0,-100.0,-700.0}, { 200.0,-100.0,-600.0}, { 200.0,-100.0,-500.0}, { 200.0,-100.0,-400.0}, { 200.0,-100.0,-300.0}, { 200.0,-100.0,-200.0}, { 200.0,-100.0,-100.0}, { 200.0,-100.0, 0.0}, { 200.0,-100.0, 100.0}, { 200.0,-100.0, 200.0}, { 200.0,-100.0, 300.0}, { 200.0,-100.0, 400.0}, { 200.0,-100.0, 500.0}, { 200.0,-100.0, 600.0}, { 200.0,-100.0, 700.0}, { 200.0,-100.0, 800.0}, { 200.0, 0.0,-800.0}, { 200.0, 0.0,-700.0}, { 200.0, 0.0,-600.0}, { 200.0, 0.0,-500.0}, { 200.0, 0.0,-400.0}, { 200.0, 0.0,-300.0}, { 200.0, 0.0,-200.0}, { 200.0, 0.0,-100.0}, { 200.0, 0.0, 0.0}, { 200.0, 0.0, 100.0}, { 200.0, 0.0, 200.0}, { 200.0, 0.0, 300.0}, { 200.0, 0.0, 400.0}, { 200.0, 0.0, 500.0}, { 200.0, 0.0, 600.0}, { 200.0, 0.0, 700.0}, { 200.0, 0.0, 800.0}, { 200.0, 100.0,-800.0}, { 200.0, 100.0,-700.0}, { 200.0, 100.0,-600.0}, { 200.0, 100.0,-500.0}, { 200.0, 100.0,-400.0}, { 200.0, 100.0,-300.0}, { 200.0, 100.0,-200.0}, { 200.0, 100.0,-100.0}, { 200.0, 100.0, 0.0}, { 200.0, 100.0, 100.0}, { 200.0, 100.0, 200.0}, { 200.0, 100.0, 300.0}, { 200.0, 100.0, 400.0}, { 200.0, 100.0, 500.0}, { 200.0, 100.0, 600.0}, { 200.0, 100.0, 700.0}, { 200.0, 100.0, 800.0}, { 200.0, 200.0,-800.0}, { 200.0, 200.0,-700.0}, { 200.0, 200.0,-600.0}, { 200.0, 200.0,-500.0}, { 200.0, 200.0,-400.0}, { 200.0, 200.0,-300.0}, { 200.0, 200.0,-200.0}, { 200.0, 200.0,-100.0}, { 200.0, 200.0, 0.0}, { 200.0, 200.0, 100.0}, { 200.0, 200.0, 200.0}, { 200.0, 200.0, 300.0}, { 200.0, 200.0, 400.0}, { 200.0, 200.0, 500.0}, { 200.0, 200.0, 600.0}, { 200.0, 200.0, 700.0}, { 200.0, 200.0, 800.0}, { 200.0, 300.0,-800.0}, { 200.0, 300.0,-700.0}, { 200.0, 300.0,-600.0}, { 200.0, 300.0,-500.0}, { 200.0, 300.0,-400.0}, { 200.0, 300.0,-300.0}, { 200.0, 300.0,-200.0}, { 200.0, 300.0,-100.0}, { 200.0, 300.0, 0.0}, { 200.0, 300.0, 100.0}, { 200.0, 300.0, 200.0}, { 200.0, 300.0, 300.0}, { 200.0, 300.0, 400.0}, { 200.0, 300.0, 500.0}, { 200.0, 300.0, 600.0}, { 200.0, 300.0, 700.0}, { 200.0, 300.0, 800.0}, { 200.0, 400.0,-800.0}, { 200.0, 400.0,-700.0}, { 200.0, 400.0,-600.0}, { 200.0, 400.0,-500.0}, { 200.0, 400.0,-400.0}, { 200.0, 400.0,-300.0}, { 200.0, 400.0,-200.0}, { 200.0, 400.0,-100.0}, { 200.0, 400.0, 0.0}, { 200.0, 400.0, 100.0}, { 200.0, 400.0, 200.0}, { 200.0, 400.0, 300.0}, { 200.0, 400.0, 400.0}, { 200.0, 400.0, 500.0}, { 200.0, 400.0, 600.0}, { 200.0, 400.0, 700.0}, { 200.0, 400.0, 800.0}, { 200.0, 500.0,-800.0}, { 200.0, 500.0,-700.0}, { 200.0, 500.0,-600.0}, { 200.0, 500.0,-500.0}, { 200.0, 500.0,-400.0}, { 200.0, 500.0,-300.0}, { 200.0, 500.0,-200.0}, { 200.0, 500.0,-100.0}, { 200.0, 500.0, 0.0}, { 200.0, 500.0, 100.0}, { 200.0, 500.0, 200.0}, { 200.0, 500.0, 300.0}, { 200.0, 500.0, 400.0}, { 200.0, 500.0, 500.0}, { 200.0, 500.0, 600.0}, { 200.0, 500.0, 700.0}, { 200.0, 500.0, 800.0}, { 200.0, 600.0,-800.0}, { 200.0, 600.0,-700.0}, { 200.0, 600.0,-600.0}, { 200.0, 600.0,-500.0}, { 200.0, 600.0,-400.0}, { 200.0, 600.0,-300.0}, { 200.0, 600.0,-200.0}, { 200.0, 600.0,-100.0}, { 200.0, 600.0, 0.0}, { 200.0, 600.0, 100.0}, { 200.0, 600.0, 200.0}, { 200.0, 600.0, 300.0}, { 200.0, 600.0, 400.0}, { 200.0, 600.0, 500.0}, { 200.0, 600.0, 600.0}, { 200.0, 600.0, 700.0}, { 200.0, 600.0, 800.0}, { 200.0, 700.0,-800.0}, { 200.0, 700.0,-700.0}, { 200.0, 700.0,-600.0}, { 200.0, 700.0,-500.0}, { 200.0, 700.0,-400.0}, { 200.0, 700.0,-300.0}, { 200.0, 700.0,-200.0}, { 200.0, 700.0,-100.0}, { 200.0, 700.0, 0.0}, { 200.0, 700.0, 100.0}, { 200.0, 700.0, 200.0}, { 200.0, 700.0, 300.0}, { 200.0, 700.0, 400.0}, { 200.0, 700.0, 500.0}, { 200.0, 700.0, 600.0}, { 200.0, 700.0, 700.0}, { 200.0, 700.0, 800.0}, { 200.0, 800.0,-800.0}, { 200.0, 800.0,-700.0}, { 200.0, 800.0,-600.0}, { 200.0, 800.0,-500.0}, { 200.0, 800.0,-400.0}, { 200.0, 800.0,-300.0}, { 200.0, 800.0,-200.0}, { 200.0, 800.0,-100.0}, { 200.0, 800.0, 0.0}, { 200.0, 800.0, 100.0}, { 200.0, 800.0, 200.0}, { 200.0, 800.0, 300.0}, { 200.0, 800.0, 400.0}, { 200.0, 800.0, 500.0}, { 200.0, 800.0, 600.0}, { 200.0, 800.0, 700.0}, { 200.0, 800.0, 800.0}, { 300.0,-800.0,-800.0}, { 300.0,-800.0,-700.0}, { 300.0,-800.0,-600.0}, { 300.0,-800.0,-500.0}, { 300.0,-800.0,-400.0}, { 300.0,-800.0,-300.0}, { 300.0,-800.0,-200.0}, { 300.0,-800.0,-100.0}, { 300.0,-800.0, 0.0}, { 300.0,-800.0, 100.0}, { 300.0,-800.0, 200.0}, { 300.0,-800.0, 300.0}, { 300.0,-800.0, 400.0}, { 300.0,-800.0, 500.0}, { 300.0,-800.0, 600.0}, { 300.0,-800.0, 700.0}, { 300.0,-800.0, 800.0}, { 300.0,-700.0,-800.0}, { 300.0,-700.0,-700.0}, { 300.0,-700.0,-600.0}, { 300.0,-700.0,-500.0}, { 300.0,-700.0,-400.0}, { 300.0,-700.0,-300.0}, { 300.0,-700.0,-200.0}, { 300.0,-700.0,-100.0}, { 300.0,-700.0, 0.0}, { 300.0,-700.0, 100.0}, { 300.0,-700.0, 200.0}, { 300.0,-700.0, 300.0}, { 300.0,-700.0, 400.0}, { 300.0,-700.0, 500.0}, { 300.0,-700.0, 600.0}, { 300.0,-700.0, 700.0}, { 300.0,-700.0, 800.0}, { 300.0,-600.0,-800.0}, { 300.0,-600.0,-700.0}, { 300.0,-600.0,-600.0}, { 300.0,-600.0,-500.0}, { 300.0,-600.0,-400.0}, { 300.0,-600.0,-300.0}, { 300.0,-600.0,-200.0}, { 300.0,-600.0,-100.0}, { 300.0,-600.0, 0.0}, { 300.0,-600.0, 100.0}, { 300.0,-600.0, 200.0}, { 300.0,-600.0, 300.0}, { 300.0,-600.0, 400.0}, { 300.0,-600.0, 500.0}, { 300.0,-600.0, 600.0}, { 300.0,-600.0, 700.0}, { 300.0,-600.0, 800.0}, { 300.0,-500.0,-800.0}, { 300.0,-500.0,-700.0}, { 300.0,-500.0,-600.0}, { 300.0,-500.0,-500.0}, { 300.0,-500.0,-400.0}, { 300.0,-500.0,-300.0}, { 300.0,-500.0,-200.0}, { 300.0,-500.0,-100.0}, { 300.0,-500.0, 0.0}, { 300.0,-500.0, 100.0}, { 300.0,-500.0, 200.0}, { 300.0,-500.0, 300.0}, { 300.0,-500.0, 400.0}, { 300.0,-500.0, 500.0}, { 300.0,-500.0, 600.0}, { 300.0,-500.0, 700.0}, { 300.0,-500.0, 800.0}, { 300.0,-400.0,-800.0}, { 300.0,-400.0,-700.0}, { 300.0,-400.0,-600.0}, { 300.0,-400.0,-500.0}, { 300.0,-400.0,-400.0}, { 300.0,-400.0,-300.0}, { 300.0,-400.0,-200.0}, { 300.0,-400.0,-100.0}, { 300.0,-400.0, 0.0}, { 300.0,-400.0, 100.0}, { 300.0,-400.0, 200.0}, { 300.0,-400.0, 300.0}, { 300.0,-400.0, 400.0}, { 300.0,-400.0, 500.0}, { 300.0,-400.0, 600.0}, { 300.0,-400.0, 700.0}, { 300.0,-400.0, 800.0}, { 300.0,-300.0,-800.0}, { 300.0,-300.0,-700.0}, { 300.0,-300.0,-600.0}, { 300.0,-300.0,-500.0}, { 300.0,-300.0,-400.0}, { 300.0,-300.0,-300.0}, { 300.0,-300.0,-200.0}, { 300.0,-300.0,-100.0}, { 300.0,-300.0, 0.0}, { 300.0,-300.0, 100.0}, { 300.0,-300.0, 200.0}, { 300.0,-300.0, 300.0}, { 300.0,-300.0, 400.0}, { 300.0,-300.0, 500.0}, { 300.0,-300.0, 600.0}, { 300.0,-300.0, 700.0}, { 300.0,-300.0, 800.0}, { 300.0,-200.0,-800.0}, { 300.0,-200.0,-700.0}, { 300.0,-200.0,-600.0}, { 300.0,-200.0,-500.0}, { 300.0,-200.0,-400.0}, { 300.0,-200.0,-300.0}, { 300.0,-200.0,-200.0}, { 300.0,-200.0,-100.0}, { 300.0,-200.0, 0.0}, { 300.0,-200.0, 100.0}, { 300.0,-200.0, 200.0}, { 300.0,-200.0, 300.0}, { 300.0,-200.0, 400.0}, { 300.0,-200.0, 500.0}, { 300.0,-200.0, 600.0}, { 300.0,-200.0, 700.0}, { 300.0,-200.0, 800.0}, { 300.0,-100.0,-800.0}, { 300.0,-100.0,-700.0}, { 300.0,-100.0,-600.0}, { 300.0,-100.0,-500.0}, { 300.0,-100.0,-400.0}, { 300.0,-100.0,-300.0}, { 300.0,-100.0,-200.0}, { 300.0,-100.0,-100.0}, { 300.0,-100.0, 0.0}, { 300.0,-100.0, 100.0}, { 300.0,-100.0, 200.0}, { 300.0,-100.0, 300.0}, { 300.0,-100.0, 400.0}, { 300.0,-100.0, 500.0}, { 300.0,-100.0, 600.0}, { 300.0,-100.0, 700.0}, { 300.0,-100.0, 800.0}, { 300.0, 0.0,-800.0}, { 300.0, 0.0,-700.0}, { 300.0, 0.0,-600.0}, { 300.0, 0.0,-500.0}, { 300.0, 0.0,-400.0}, { 300.0, 0.0,-300.0}, { 300.0, 0.0,-200.0}, { 300.0, 0.0,-100.0}, { 300.0, 0.0, 0.0}, { 300.0, 0.0, 100.0}, { 300.0, 0.0, 200.0}, { 300.0, 0.0, 300.0}, { 300.0, 0.0, 400.0}, { 300.0, 0.0, 500.0}, { 300.0, 0.0, 600.0}, { 300.0, 0.0, 700.0}, { 300.0, 0.0, 800.0}, { 300.0, 100.0,-800.0}, { 300.0, 100.0,-700.0}, { 300.0, 100.0,-600.0}, { 300.0, 100.0,-500.0}, { 300.0, 100.0,-400.0}, { 300.0, 100.0,-300.0}, { 300.0, 100.0,-200.0}, { 300.0, 100.0,-100.0}, { 300.0, 100.0, 0.0}, { 300.0, 100.0, 100.0}, { 300.0, 100.0, 200.0}, { 300.0, 100.0, 300.0}, { 300.0, 100.0, 400.0}, { 300.0, 100.0, 500.0}, { 300.0, 100.0, 600.0}, { 300.0, 100.0, 700.0}, { 300.0, 100.0, 800.0}, { 300.0, 200.0,-800.0}, { 300.0, 200.0,-700.0}, { 300.0, 200.0,-600.0}, { 300.0, 200.0,-500.0}, { 300.0, 200.0,-400.0}, { 300.0, 200.0,-300.0}, { 300.0, 200.0,-200.0}, { 300.0, 200.0,-100.0}, { 300.0, 200.0, 0.0}, { 300.0, 200.0, 100.0}, { 300.0, 200.0, 200.0}, { 300.0, 200.0, 300.0}, { 300.0, 200.0, 400.0}, { 300.0, 200.0, 500.0}, { 300.0, 200.0, 600.0}, { 300.0, 200.0, 700.0}, { 300.0, 200.0, 800.0}, { 300.0, 300.0,-800.0}, { 300.0, 300.0,-700.0}, { 300.0, 300.0,-600.0}, { 300.0, 300.0,-500.0}, { 300.0, 300.0,-400.0}, { 300.0, 300.0,-300.0}, { 300.0, 300.0,-200.0}, { 300.0, 300.0,-100.0}, { 300.0, 300.0, 0.0}, { 300.0, 300.0, 100.0}, { 300.0, 300.0, 200.0}, { 300.0, 300.0, 300.0}, { 300.0, 300.0, 400.0}, { 300.0, 300.0, 500.0}, { 300.0, 300.0, 600.0}, { 300.0, 300.0, 700.0}, { 300.0, 300.0, 800.0}, { 300.0, 400.0,-800.0}, { 300.0, 400.0,-700.0}, { 300.0, 400.0,-600.0}, { 300.0, 400.0,-500.0}, { 300.0, 400.0,-400.0}, { 300.0, 400.0,-300.0}, { 300.0, 400.0,-200.0}, { 300.0, 400.0,-100.0}, { 300.0, 400.0, 0.0}, { 300.0, 400.0, 100.0}, { 300.0, 400.0, 200.0}, { 300.0, 400.0, 300.0}, { 300.0, 400.0, 400.0}, { 300.0, 400.0, 500.0}, { 300.0, 400.0, 600.0}, { 300.0, 400.0, 700.0}, { 300.0, 400.0, 800.0}, { 300.0, 500.0,-800.0}, { 300.0, 500.0,-700.0}, { 300.0, 500.0,-600.0}, { 300.0, 500.0,-500.0}, { 300.0, 500.0,-400.0}, { 300.0, 500.0,-300.0}, { 300.0, 500.0,-200.0}, { 300.0, 500.0,-100.0}, { 300.0, 500.0, 0.0}, { 300.0, 500.0, 100.0}, { 300.0, 500.0, 200.0}, { 300.0, 500.0, 300.0}, { 300.0, 500.0, 400.0}, { 300.0, 500.0, 500.0}, { 300.0, 500.0, 600.0}, { 300.0, 500.0, 700.0}, { 300.0, 500.0, 800.0}, { 300.0, 600.0,-800.0}, { 300.0, 600.0,-700.0}, { 300.0, 600.0,-600.0}, { 300.0, 600.0,-500.0}, { 300.0, 600.0,-400.0}, { 300.0, 600.0,-300.0}, { 300.0, 600.0,-200.0}, { 300.0, 600.0,-100.0}, { 300.0, 600.0, 0.0}, { 300.0, 600.0, 100.0}, { 300.0, 600.0, 200.0}, { 300.0, 600.0, 300.0}, { 300.0, 600.0, 400.0}, { 300.0, 600.0, 500.0}, { 300.0, 600.0, 600.0}, { 300.0, 600.0, 700.0}, { 300.0, 600.0, 800.0}, { 300.0, 700.0,-800.0}, { 300.0, 700.0,-700.0}, { 300.0, 700.0,-600.0}, { 300.0, 700.0,-500.0}, { 300.0, 700.0,-400.0}, { 300.0, 700.0,-300.0}, { 300.0, 700.0,-200.0}, { 300.0, 700.0,-100.0}, { 300.0, 700.0, 0.0}, { 300.0, 700.0, 100.0}, { 300.0, 700.0, 200.0}, { 300.0, 700.0, 300.0}, { 300.0, 700.0, 400.0}, { 300.0, 700.0, 500.0}, { 300.0, 700.0, 600.0}, { 300.0, 700.0, 700.0}, { 300.0, 700.0, 800.0}, { 300.0, 800.0,-800.0}, { 300.0, 800.0,-700.0}, { 300.0, 800.0,-600.0}, { 300.0, 800.0,-500.0}, { 300.0, 800.0,-400.0}, { 300.0, 800.0,-300.0}, { 300.0, 800.0,-200.0}, { 300.0, 800.0,-100.0}, { 300.0, 800.0, 0.0}, { 300.0, 800.0, 100.0}, { 300.0, 800.0, 200.0}, { 300.0, 800.0, 300.0}, { 300.0, 800.0, 400.0}, { 300.0, 800.0, 500.0}, { 300.0, 800.0, 600.0}, { 300.0, 800.0, 700.0}, { 300.0, 800.0, 800.0}, { 400.0,-800.0,-800.0}, { 400.0,-800.0,-700.0}, { 400.0,-800.0,-600.0}, { 400.0,-800.0,-500.0}, { 400.0,-800.0,-400.0}, { 400.0,-800.0,-300.0}, { 400.0,-800.0,-200.0}, { 400.0,-800.0,-100.0}, { 400.0,-800.0, 0.0}, { 400.0,-800.0, 100.0}, { 400.0,-800.0, 200.0}, { 400.0,-800.0, 300.0}, { 400.0,-800.0, 400.0}, { 400.0,-800.0, 500.0}, { 400.0,-800.0, 600.0}, { 400.0,-800.0, 700.0}, { 400.0,-800.0, 800.0}, { 400.0,-700.0,-800.0}, { 400.0,-700.0,-700.0}, { 400.0,-700.0,-600.0}, { 400.0,-700.0,-500.0}, { 400.0,-700.0,-400.0}, { 400.0,-700.0,-300.0}, { 400.0,-700.0,-200.0}, { 400.0,-700.0,-100.0}, { 400.0,-700.0, 0.0}, { 400.0,-700.0, 100.0}, { 400.0,-700.0, 200.0}, { 400.0,-700.0, 300.0}, { 400.0,-700.0, 400.0}, { 400.0,-700.0, 500.0}, { 400.0,-700.0, 600.0}, { 400.0,-700.0, 700.0}, { 400.0,-700.0, 800.0}, { 400.0,-600.0,-800.0}, { 400.0,-600.0,-700.0}, { 400.0,-600.0,-600.0}, { 400.0,-600.0,-500.0}, { 400.0,-600.0,-400.0}, { 400.0,-600.0,-300.0}, { 400.0,-600.0,-200.0}, { 400.0,-600.0,-100.0}, { 400.0,-600.0, 0.0}, { 400.0,-600.0, 100.0}, { 400.0,-600.0, 200.0}, { 400.0,-600.0, 300.0}, { 400.0,-600.0, 400.0}, { 400.0,-600.0, 500.0}, { 400.0,-600.0, 600.0}, { 400.0,-600.0, 700.0}, { 400.0,-600.0, 800.0}, { 400.0,-500.0,-800.0}, { 400.0,-500.0,-700.0}, { 400.0,-500.0,-600.0}, { 400.0,-500.0,-500.0}, { 400.0,-500.0,-400.0}, { 400.0,-500.0,-300.0}, { 400.0,-500.0,-200.0}, { 400.0,-500.0,-100.0}, { 400.0,-500.0, 0.0}, { 400.0,-500.0, 100.0}, { 400.0,-500.0, 200.0}, { 400.0,-500.0, 300.0}, { 400.0,-500.0, 400.0}, { 400.0,-500.0, 500.0}, { 400.0,-500.0, 600.0}, { 400.0,-500.0, 700.0}, { 400.0,-500.0, 800.0}, { 400.0,-400.0,-800.0}, { 400.0,-400.0,-700.0}, { 400.0,-400.0,-600.0}, { 400.0,-400.0,-500.0}, { 400.0,-400.0,-400.0}, { 400.0,-400.0,-300.0}, { 400.0,-400.0,-200.0}, { 400.0,-400.0,-100.0}, { 400.0,-400.0, 0.0}, { 400.0,-400.0, 100.0}, { 400.0,-400.0, 200.0}, { 400.0,-400.0, 300.0}, { 400.0,-400.0, 400.0}, { 400.0,-400.0, 500.0}, { 400.0,-400.0, 600.0}, { 400.0,-400.0, 700.0}, { 400.0,-400.0, 800.0}, { 400.0,-300.0,-800.0}, { 400.0,-300.0,-700.0}, { 400.0,-300.0,-600.0}, { 400.0,-300.0,-500.0}, { 400.0,-300.0,-400.0}, { 400.0,-300.0,-300.0}, { 400.0,-300.0,-200.0}, { 400.0,-300.0,-100.0}, { 400.0,-300.0, 0.0}, { 400.0,-300.0, 100.0}, { 400.0,-300.0, 200.0}, { 400.0,-300.0, 300.0}, { 400.0,-300.0, 400.0}, { 400.0,-300.0, 500.0}, { 400.0,-300.0, 600.0}, { 400.0,-300.0, 700.0}, { 400.0,-300.0, 800.0}, { 400.0,-200.0,-800.0}, { 400.0,-200.0,-700.0}, { 400.0,-200.0,-600.0}, { 400.0,-200.0,-500.0}, { 400.0,-200.0,-400.0}, { 400.0,-200.0,-300.0}, { 400.0,-200.0,-200.0}, { 400.0,-200.0,-100.0}, { 400.0,-200.0, 0.0}, { 400.0,-200.0, 100.0}, { 400.0,-200.0, 200.0}, { 400.0,-200.0, 300.0}, { 400.0,-200.0, 400.0}, { 400.0,-200.0, 500.0}, { 400.0,-200.0, 600.0}, { 400.0,-200.0, 700.0}, { 400.0,-200.0, 800.0}, { 400.0,-100.0,-800.0}, { 400.0,-100.0,-700.0}, { 400.0,-100.0,-600.0}, { 400.0,-100.0,-500.0}, { 400.0,-100.0,-400.0}, { 400.0,-100.0,-300.0}, { 400.0,-100.0,-200.0}, { 400.0,-100.0,-100.0}, { 400.0,-100.0, 0.0}, { 400.0,-100.0, 100.0}, { 400.0,-100.0, 200.0}, { 400.0,-100.0, 300.0}, { 400.0,-100.0, 400.0}, { 400.0,-100.0, 500.0}, { 400.0,-100.0, 600.0}, { 400.0,-100.0, 700.0}, { 400.0,-100.0, 800.0}, { 400.0, 0.0,-800.0}, { 400.0, 0.0,-700.0}, { 400.0, 0.0,-600.0}, { 400.0, 0.0,-500.0}, { 400.0, 0.0,-400.0}, { 400.0, 0.0,-300.0}, { 400.0, 0.0,-200.0}, { 400.0, 0.0,-100.0}, { 400.0, 0.0, 0.0}, { 400.0, 0.0, 100.0}, { 400.0, 0.0, 200.0}, { 400.0, 0.0, 300.0}, { 400.0, 0.0, 400.0}, { 400.0, 0.0, 500.0}, { 400.0, 0.0, 600.0}, { 400.0, 0.0, 700.0}, { 400.0, 0.0, 800.0}, { 400.0, 100.0,-800.0}, { 400.0, 100.0,-700.0}, { 400.0, 100.0,-600.0}, { 400.0, 100.0,-500.0}, { 400.0, 100.0,-400.0}, { 400.0, 100.0,-300.0}, { 400.0, 100.0,-200.0}, { 400.0, 100.0,-100.0}, { 400.0, 100.0, 0.0}, { 400.0, 100.0, 100.0}, { 400.0, 100.0, 200.0}, { 400.0, 100.0, 300.0}, { 400.0, 100.0, 400.0}, { 400.0, 100.0, 500.0}, { 400.0, 100.0, 600.0}, { 400.0, 100.0, 700.0}, { 400.0, 100.0, 800.0}, { 400.0, 200.0,-800.0}, { 400.0, 200.0,-700.0}, { 400.0, 200.0,-600.0}, { 400.0, 200.0,-500.0}, { 400.0, 200.0,-400.0}, { 400.0, 200.0,-300.0}, { 400.0, 200.0,-200.0}, { 400.0, 200.0,-100.0}, { 400.0, 200.0, 0.0}, { 400.0, 200.0, 100.0}, { 400.0, 200.0, 200.0}, { 400.0, 200.0, 300.0}, { 400.0, 200.0, 400.0}, { 400.0, 200.0, 500.0}, { 400.0, 200.0, 600.0}, { 400.0, 200.0, 700.0}, { 400.0, 200.0, 800.0}, { 400.0, 300.0,-800.0}, { 400.0, 300.0,-700.0}, { 400.0, 300.0,-600.0}, { 400.0, 300.0,-500.0}, { 400.0, 300.0,-400.0}, { 400.0, 300.0,-300.0}, { 400.0, 300.0,-200.0}, { 400.0, 300.0,-100.0}, { 400.0, 300.0, 0.0}, { 400.0, 300.0, 100.0}, { 400.0, 300.0, 200.0}, { 400.0, 300.0, 300.0}, { 400.0, 300.0, 400.0}, { 400.0, 300.0, 500.0}, { 400.0, 300.0, 600.0}, { 400.0, 300.0, 700.0}, { 400.0, 300.0, 800.0}, { 400.0, 400.0,-800.0}, { 400.0, 400.0,-700.0}, { 400.0, 400.0,-600.0}, { 400.0, 400.0,-500.0}, { 400.0, 400.0,-400.0}, { 400.0, 400.0,-300.0}, { 400.0, 400.0,-200.0}, { 400.0, 400.0,-100.0}, { 400.0, 400.0, 0.0}, { 400.0, 400.0, 100.0}, { 400.0, 400.0, 200.0}, { 400.0, 400.0, 300.0}, { 400.0, 400.0, 400.0}, { 400.0, 400.0, 500.0}, { 400.0, 400.0, 600.0}, { 400.0, 400.0, 700.0}, { 400.0, 400.0, 800.0}, { 400.0, 500.0,-800.0}, { 400.0, 500.0,-700.0}, { 400.0, 500.0,-600.0}, { 400.0, 500.0,-500.0}, { 400.0, 500.0,-400.0}, { 400.0, 500.0,-300.0}, { 400.0, 500.0,-200.0}, { 400.0, 500.0,-100.0}, { 400.0, 500.0, 0.0}, { 400.0, 500.0, 100.0}, { 400.0, 500.0, 200.0}, { 400.0, 500.0, 300.0}, { 400.0, 500.0, 400.0}, { 400.0, 500.0, 500.0}, { 400.0, 500.0, 600.0}, { 400.0, 500.0, 700.0}, { 400.0, 500.0, 800.0}, { 400.0, 600.0,-800.0}, { 400.0, 600.0,-700.0}, { 400.0, 600.0,-600.0}, { 400.0, 600.0,-500.0}, { 400.0, 600.0,-400.0}, { 400.0, 600.0,-300.0}, { 400.0, 600.0,-200.0}, { 400.0, 600.0,-100.0}, { 400.0, 600.0, 0.0}, { 400.0, 600.0, 100.0}, { 400.0, 600.0, 200.0}, { 400.0, 600.0, 300.0}, { 400.0, 600.0, 400.0}, { 400.0, 600.0, 500.0}, { 400.0, 600.0, 600.0}, { 400.0, 600.0, 700.0}, { 400.0, 600.0, 800.0}, { 400.0, 700.0,-800.0}, { 400.0, 700.0,-700.0}, { 400.0, 700.0,-600.0}, { 400.0, 700.0,-500.0}, { 400.0, 700.0,-400.0}, { 400.0, 700.0,-300.0}, { 400.0, 700.0,-200.0}, { 400.0, 700.0,-100.0}, { 400.0, 700.0, 0.0}, { 400.0, 700.0, 100.0}, { 400.0, 700.0, 200.0}, { 400.0, 700.0, 300.0}, { 400.0, 700.0, 400.0}, { 400.0, 700.0, 500.0}, { 400.0, 700.0, 600.0}, { 400.0, 700.0, 700.0}, { 400.0, 700.0, 800.0}, { 400.0, 800.0,-800.0}, { 400.0, 800.0,-700.0}, { 400.0, 800.0,-600.0}, { 400.0, 800.0,-500.0}, { 400.0, 800.0,-400.0}, { 400.0, 800.0,-300.0}, { 400.0, 800.0,-200.0}, { 400.0, 800.0,-100.0}, { 400.0, 800.0, 0.0}, { 400.0, 800.0, 100.0}, { 400.0, 800.0, 200.0}, { 400.0, 800.0, 300.0}, { 400.0, 800.0, 400.0}, { 400.0, 800.0, 500.0}, { 400.0, 800.0, 600.0}, { 400.0, 800.0, 700.0}, { 400.0, 800.0, 800.0}, { 500.0,-800.0,-800.0}, { 500.0,-800.0,-700.0}, { 500.0,-800.0,-600.0}, { 500.0,-800.0,-500.0}, { 500.0,-800.0,-400.0}, { 500.0,-800.0,-300.0}, { 500.0,-800.0,-200.0}, { 500.0,-800.0,-100.0}, { 500.0,-800.0, 0.0}, { 500.0,-800.0, 100.0}, { 500.0,-800.0, 200.0}, { 500.0,-800.0, 300.0}, { 500.0,-800.0, 400.0}, { 500.0,-800.0, 500.0}, { 500.0,-800.0, 600.0}, { 500.0,-800.0, 700.0}, { 500.0,-800.0, 800.0}, { 500.0,-700.0,-800.0}, { 500.0,-700.0,-700.0}, { 500.0,-700.0,-600.0}, { 500.0,-700.0,-500.0}, { 500.0,-700.0,-400.0}, { 500.0,-700.0,-300.0}, { 500.0,-700.0,-200.0}, { 500.0,-700.0,-100.0}, { 500.0,-700.0, 0.0}, { 500.0,-700.0, 100.0}, { 500.0,-700.0, 200.0}, { 500.0,-700.0, 300.0}, { 500.0,-700.0, 400.0}, { 500.0,-700.0, 500.0}, { 500.0,-700.0, 600.0}, { 500.0,-700.0, 700.0}, { 500.0,-700.0, 800.0}, { 500.0,-600.0,-800.0}, { 500.0,-600.0,-700.0}, { 500.0,-600.0,-600.0}, { 500.0,-600.0,-500.0}, { 500.0,-600.0,-400.0}, { 500.0,-600.0,-300.0}, { 500.0,-600.0,-200.0}, { 500.0,-600.0,-100.0}, { 500.0,-600.0, 0.0}, { 500.0,-600.0, 100.0}, { 500.0,-600.0, 200.0}, { 500.0,-600.0, 300.0}, { 500.0,-600.0, 400.0}, { 500.0,-600.0, 500.0}, { 500.0,-600.0, 600.0}, { 500.0,-600.0, 700.0}, { 500.0,-600.0, 800.0}, { 500.0,-500.0,-800.0}, { 500.0,-500.0,-700.0}, { 500.0,-500.0,-600.0}, { 500.0,-500.0,-500.0}, { 500.0,-500.0,-400.0}, { 500.0,-500.0,-300.0}, { 500.0,-500.0,-200.0}, { 500.0,-500.0,-100.0}, { 500.0,-500.0, 0.0}, { 500.0,-500.0, 100.0}, { 500.0,-500.0, 200.0}, { 500.0,-500.0, 300.0}, { 500.0,-500.0, 400.0}, { 500.0,-500.0, 500.0}, { 500.0,-500.0, 600.0}, { 500.0,-500.0, 700.0}, { 500.0,-500.0, 800.0}, { 500.0,-400.0,-800.0}, { 500.0,-400.0,-700.0}, { 500.0,-400.0,-600.0}, { 500.0,-400.0,-500.0}, { 500.0,-400.0,-400.0}, { 500.0,-400.0,-300.0}, { 500.0,-400.0,-200.0}, { 500.0,-400.0,-100.0}, { 500.0,-400.0, 0.0}, { 500.0,-400.0, 100.0}, { 500.0,-400.0, 200.0}, { 500.0,-400.0, 300.0}, { 500.0,-400.0, 400.0}, { 500.0,-400.0, 500.0}, { 500.0,-400.0, 600.0}, { 500.0,-400.0, 700.0}, { 500.0,-400.0, 800.0}, { 500.0,-300.0,-800.0}, { 500.0,-300.0,-700.0}, { 500.0,-300.0,-600.0}, { 500.0,-300.0,-500.0}, { 500.0,-300.0,-400.0}, { 500.0,-300.0,-300.0}, { 500.0,-300.0,-200.0}, { 500.0,-300.0,-100.0}, { 500.0,-300.0, 0.0}, { 500.0,-300.0, 100.0}, { 500.0,-300.0, 200.0}, { 500.0,-300.0, 300.0}, { 500.0,-300.0, 400.0}, { 500.0,-300.0, 500.0}, { 500.0,-300.0, 600.0}, { 500.0,-300.0, 700.0}, { 500.0,-300.0, 800.0}, { 500.0,-200.0,-800.0}, { 500.0,-200.0,-700.0}, { 500.0,-200.0,-600.0}, { 500.0,-200.0,-500.0}, { 500.0,-200.0,-400.0}, { 500.0,-200.0,-300.0}, { 500.0,-200.0,-200.0}, { 500.0,-200.0,-100.0}, { 500.0,-200.0, 0.0}, { 500.0,-200.0, 100.0}, { 500.0,-200.0, 200.0}, { 500.0,-200.0, 300.0}, { 500.0,-200.0, 400.0}, { 500.0,-200.0, 500.0}, { 500.0,-200.0, 600.0}, { 500.0,-200.0, 700.0}, { 500.0,-200.0, 800.0}, { 500.0,-100.0,-800.0}, { 500.0,-100.0,-700.0}, { 500.0,-100.0,-600.0}, { 500.0,-100.0,-500.0}, { 500.0,-100.0,-400.0}, { 500.0,-100.0,-300.0}, { 500.0,-100.0,-200.0}, { 500.0,-100.0,-100.0}, { 500.0,-100.0, 0.0}, { 500.0,-100.0, 100.0}, { 500.0,-100.0, 200.0}, { 500.0,-100.0, 300.0}, { 500.0,-100.0, 400.0}, { 500.0,-100.0, 500.0}, { 500.0,-100.0, 600.0}, { 500.0,-100.0, 700.0}, { 500.0,-100.0, 800.0}, { 500.0, 0.0,-800.0}, { 500.0, 0.0,-700.0}, { 500.0, 0.0,-600.0}, { 500.0, 0.0,-500.0}, { 500.0, 0.0,-400.0}, { 500.0, 0.0,-300.0}, { 500.0, 0.0,-200.0}, { 500.0, 0.0,-100.0}, { 500.0, 0.0, 0.0}, { 500.0, 0.0, 100.0}, { 500.0, 0.0, 200.0}, { 500.0, 0.0, 300.0}, { 500.0, 0.0, 400.0}, { 500.0, 0.0, 500.0}, { 500.0, 0.0, 600.0}, { 500.0, 0.0, 700.0}, { 500.0, 0.0, 800.0}, { 500.0, 100.0,-800.0}, { 500.0, 100.0,-700.0}, { 500.0, 100.0,-600.0}, { 500.0, 100.0,-500.0}, { 500.0, 100.0,-400.0}, { 500.0, 100.0,-300.0}, { 500.0, 100.0,-200.0}, { 500.0, 100.0,-100.0}, { 500.0, 100.0, 0.0}, { 500.0, 100.0, 100.0}, { 500.0, 100.0, 200.0}, { 500.0, 100.0, 300.0}, { 500.0, 100.0, 400.0}, { 500.0, 100.0, 500.0}, { 500.0, 100.0, 600.0}, { 500.0, 100.0, 700.0}, { 500.0, 100.0, 800.0}, { 500.0, 200.0,-800.0}, { 500.0, 200.0,-700.0}, { 500.0, 200.0,-600.0}, { 500.0, 200.0,-500.0}, { 500.0, 200.0,-400.0}, { 500.0, 200.0,-300.0}, { 500.0, 200.0,-200.0}, { 500.0, 200.0,-100.0}, { 500.0, 200.0, 0.0}, { 500.0, 200.0, 100.0}, { 500.0, 200.0, 200.0}, { 500.0, 200.0, 300.0}, { 500.0, 200.0, 400.0}, { 500.0, 200.0, 500.0}, { 500.0, 200.0, 600.0}, { 500.0, 200.0, 700.0}, { 500.0, 200.0, 800.0}, { 500.0, 300.0,-800.0}, { 500.0, 300.0,-700.0}, { 500.0, 300.0,-600.0}, { 500.0, 300.0,-500.0}, { 500.0, 300.0,-400.0}, { 500.0, 300.0,-300.0}, { 500.0, 300.0,-200.0}, { 500.0, 300.0,-100.0}, { 500.0, 300.0, 0.0}, { 500.0, 300.0, 100.0}, { 500.0, 300.0, 200.0}, { 500.0, 300.0, 300.0}, { 500.0, 300.0, 400.0}, { 500.0, 300.0, 500.0}, { 500.0, 300.0, 600.0}, { 500.0, 300.0, 700.0}, { 500.0, 300.0, 800.0}, { 500.0, 400.0,-800.0}, { 500.0, 400.0,-700.0}, { 500.0, 400.0,-600.0}, { 500.0, 400.0,-500.0}, { 500.0, 400.0,-400.0}, { 500.0, 400.0,-300.0}, { 500.0, 400.0,-200.0}, { 500.0, 400.0,-100.0}, { 500.0, 400.0, 0.0}, { 500.0, 400.0, 100.0}, { 500.0, 400.0, 200.0}, { 500.0, 400.0, 300.0}, { 500.0, 400.0, 400.0}, { 500.0, 400.0, 500.0}, { 500.0, 400.0, 600.0}, { 500.0, 400.0, 700.0}, { 500.0, 400.0, 800.0}, { 500.0, 500.0,-800.0}, { 500.0, 500.0,-700.0}, { 500.0, 500.0,-600.0}, { 500.0, 500.0,-500.0}, { 500.0, 500.0,-400.0}, { 500.0, 500.0,-300.0}, { 500.0, 500.0,-200.0}, { 500.0, 500.0,-100.0}, { 500.0, 500.0, 0.0}, { 500.0, 500.0, 100.0}, { 500.0, 500.0, 200.0}, { 500.0, 500.0, 300.0}, { 500.0, 500.0, 400.0}, { 500.0, 500.0, 500.0}, { 500.0, 500.0, 600.0}, { 500.0, 500.0, 700.0}, { 500.0, 500.0, 800.0}, { 500.0, 600.0,-800.0}, { 500.0, 600.0,-700.0}, { 500.0, 600.0,-600.0}, { 500.0, 600.0,-500.0}, { 500.0, 600.0,-400.0}, { 500.0, 600.0,-300.0}, { 500.0, 600.0,-200.0}, { 500.0, 600.0,-100.0}, { 500.0, 600.0, 0.0}, { 500.0, 600.0, 100.0}, { 500.0, 600.0, 200.0}, { 500.0, 600.0, 300.0}, { 500.0, 600.0, 400.0}, { 500.0, 600.0, 500.0}, { 500.0, 600.0, 600.0}, { 500.0, 600.0, 700.0}, { 500.0, 600.0, 800.0}, { 500.0, 700.0,-800.0}, { 500.0, 700.0,-700.0}, { 500.0, 700.0,-600.0}, { 500.0, 700.0,-500.0}, { 500.0, 700.0,-400.0}, { 500.0, 700.0,-300.0}, { 500.0, 700.0,-200.0}, { 500.0, 700.0,-100.0}, { 500.0, 700.0, 0.0}, { 500.0, 700.0, 100.0}, { 500.0, 700.0, 200.0}, { 500.0, 700.0, 300.0}, { 500.0, 700.0, 400.0}, { 500.0, 700.0, 500.0}, { 500.0, 700.0, 600.0}, { 500.0, 700.0, 700.0}, { 500.0, 700.0, 800.0}, { 500.0, 800.0,-800.0}, { 500.0, 800.0,-700.0}, { 500.0, 800.0,-600.0}, { 500.0, 800.0,-500.0}, { 500.0, 800.0,-400.0}, { 500.0, 800.0,-300.0}, { 500.0, 800.0,-200.0}, { 500.0, 800.0,-100.0}, { 500.0, 800.0, 0.0}, { 500.0, 800.0, 100.0}, { 500.0, 800.0, 200.0}, { 500.0, 800.0, 300.0}, { 500.0, 800.0, 400.0}, { 500.0, 800.0, 500.0}, { 500.0, 800.0, 600.0}, { 500.0, 800.0, 700.0}, { 500.0, 800.0, 800.0}, { 600.0,-800.0,-800.0}, { 600.0,-800.0,-700.0}, { 600.0,-800.0,-600.0}, { 600.0,-800.0,-500.0}, { 600.0,-800.0,-400.0}, { 600.0,-800.0,-300.0}, { 600.0,-800.0,-200.0}, { 600.0,-800.0,-100.0}, { 600.0,-800.0, 0.0}, { 600.0,-800.0, 100.0}, { 600.0,-800.0, 200.0}, { 600.0,-800.0, 300.0}, { 600.0,-800.0, 400.0}, { 600.0,-800.0, 500.0}, { 600.0,-800.0, 600.0}, { 600.0,-800.0, 700.0}, { 600.0,-800.0, 800.0}, { 600.0,-700.0,-800.0}, { 600.0,-700.0,-700.0}, { 600.0,-700.0,-600.0}, { 600.0,-700.0,-500.0}, { 600.0,-700.0,-400.0}, { 600.0,-700.0,-300.0}, { 600.0,-700.0,-200.0}, { 600.0,-700.0,-100.0}, { 600.0,-700.0, 0.0}, { 600.0,-700.0, 100.0}, { 600.0,-700.0, 200.0}, { 600.0,-700.0, 300.0}, { 600.0,-700.0, 400.0}, { 600.0,-700.0, 500.0}, { 600.0,-700.0, 600.0}, { 600.0,-700.0, 700.0}, { 600.0,-700.0, 800.0}, { 600.0,-600.0,-800.0}, { 600.0,-600.0,-700.0}, { 600.0,-600.0,-600.0}, { 600.0,-600.0,-500.0}, { 600.0,-600.0,-400.0}, { 600.0,-600.0,-300.0}, { 600.0,-600.0,-200.0}, { 600.0,-600.0,-100.0}, { 600.0,-600.0, 0.0}, { 600.0,-600.0, 100.0}, { 600.0,-600.0, 200.0}, { 600.0,-600.0, 300.0}, { 600.0,-600.0, 400.0}, { 600.0,-600.0, 500.0}, { 600.0,-600.0, 600.0}, { 600.0,-600.0, 700.0}, { 600.0,-600.0, 800.0}, { 600.0,-500.0,-800.0}, { 600.0,-500.0,-700.0}, { 600.0,-500.0,-600.0}, { 600.0,-500.0,-500.0}, { 600.0,-500.0,-400.0}, { 600.0,-500.0,-300.0}, { 600.0,-500.0,-200.0}, { 600.0,-500.0,-100.0}, { 600.0,-500.0, 0.0}, { 600.0,-500.0, 100.0}, { 600.0,-500.0, 200.0}, { 600.0,-500.0, 300.0}, { 600.0,-500.0, 400.0}, { 600.0,-500.0, 500.0}, { 600.0,-500.0, 600.0}, { 600.0,-500.0, 700.0}, { 600.0,-500.0, 800.0}, { 600.0,-400.0,-800.0}, { 600.0,-400.0,-700.0}, { 600.0,-400.0,-600.0}, { 600.0,-400.0,-500.0}, { 600.0,-400.0,-400.0}, { 600.0,-400.0,-300.0}, { 600.0,-400.0,-200.0}, { 600.0,-400.0,-100.0}, { 600.0,-400.0, 0.0}, { 600.0,-400.0, 100.0}, { 600.0,-400.0, 200.0}, { 600.0,-400.0, 300.0}, { 600.0,-400.0, 400.0}, { 600.0,-400.0, 500.0}, { 600.0,-400.0, 600.0}, { 600.0,-400.0, 700.0}, { 600.0,-400.0, 800.0}, { 600.0,-300.0,-800.0}, { 600.0,-300.0,-700.0}, { 600.0,-300.0,-600.0}, { 600.0,-300.0,-500.0}, { 600.0,-300.0,-400.0}, { 600.0,-300.0,-300.0}, { 600.0,-300.0,-200.0}, { 600.0,-300.0,-100.0}, { 600.0,-300.0, 0.0}, { 600.0,-300.0, 100.0}, { 600.0,-300.0, 200.0}, { 600.0,-300.0, 300.0}, { 600.0,-300.0, 400.0}, { 600.0,-300.0, 500.0}, { 600.0,-300.0, 600.0}, { 600.0,-300.0, 700.0}, { 600.0,-300.0, 800.0}, { 600.0,-200.0,-800.0}, { 600.0,-200.0,-700.0}, { 600.0,-200.0,-600.0}, { 600.0,-200.0,-500.0}, { 600.0,-200.0,-400.0}, { 600.0,-200.0,-300.0}, { 600.0,-200.0,-200.0}, { 600.0,-200.0,-100.0}, { 600.0,-200.0, 0.0}, { 600.0,-200.0, 100.0}, { 600.0,-200.0, 200.0}, { 600.0,-200.0, 300.0}, { 600.0,-200.0, 400.0}, { 600.0,-200.0, 500.0}, { 600.0,-200.0, 600.0}, { 600.0,-200.0, 700.0}, { 600.0,-200.0, 800.0}, { 600.0,-100.0,-800.0}, { 600.0,-100.0,-700.0}, { 600.0,-100.0,-600.0}, { 600.0,-100.0,-500.0}, { 600.0,-100.0,-400.0}, { 600.0,-100.0,-300.0}, { 600.0,-100.0,-200.0}, { 600.0,-100.0,-100.0}, { 600.0,-100.0, 0.0}, { 600.0,-100.0, 100.0}, { 600.0,-100.0, 200.0}, { 600.0,-100.0, 300.0}, { 600.0,-100.0, 400.0}, { 600.0,-100.0, 500.0}, { 600.0,-100.0, 600.0}, { 600.0,-100.0, 700.0}, { 600.0,-100.0, 800.0}, { 600.0, 0.0,-800.0}, { 600.0, 0.0,-700.0}, { 600.0, 0.0,-600.0}, { 600.0, 0.0,-500.0}, { 600.0, 0.0,-400.0}, { 600.0, 0.0,-300.0}, { 600.0, 0.0,-200.0}, { 600.0, 0.0,-100.0}, { 600.0, 0.0, 0.0}, { 600.0, 0.0, 100.0}, { 600.0, 0.0, 200.0}, { 600.0, 0.0, 300.0}, { 600.0, 0.0, 400.0}, { 600.0, 0.0, 500.0}, { 600.0, 0.0, 600.0}, { 600.0, 0.0, 700.0}, { 600.0, 0.0, 800.0}, { 600.0, 100.0,-800.0}, { 600.0, 100.0,-700.0}, { 600.0, 100.0,-600.0}, { 600.0, 100.0,-500.0}, { 600.0, 100.0,-400.0}, { 600.0, 100.0,-300.0}, { 600.0, 100.0,-200.0}, { 600.0, 100.0,-100.0}, { 600.0, 100.0, 0.0}, { 600.0, 100.0, 100.0}, { 600.0, 100.0, 200.0}, { 600.0, 100.0, 300.0}, { 600.0, 100.0, 400.0}, { 600.0, 100.0, 500.0}, { 600.0, 100.0, 600.0}, { 600.0, 100.0, 700.0}, { 600.0, 100.0, 800.0}, { 600.0, 200.0,-800.0}, { 600.0, 200.0,-700.0}, { 600.0, 200.0,-600.0}, { 600.0, 200.0,-500.0}, { 600.0, 200.0,-400.0}, { 600.0, 200.0,-300.0}, { 600.0, 200.0,-200.0}, { 600.0, 200.0,-100.0}, { 600.0, 200.0, 0.0}, { 600.0, 200.0, 100.0}, { 600.0, 200.0, 200.0}, { 600.0, 200.0, 300.0}, { 600.0, 200.0, 400.0}, { 600.0, 200.0, 500.0}, { 600.0, 200.0, 600.0}, { 600.0, 200.0, 700.0}, { 600.0, 200.0, 800.0}, { 600.0, 300.0,-800.0}, { 600.0, 300.0,-700.0}, { 600.0, 300.0,-600.0}, { 600.0, 300.0,-500.0}, { 600.0, 300.0,-400.0}, { 600.0, 300.0,-300.0}, { 600.0, 300.0,-200.0}, { 600.0, 300.0,-100.0}, { 600.0, 300.0, 0.0}, { 600.0, 300.0, 100.0}, { 600.0, 300.0, 200.0}, { 600.0, 300.0, 300.0}, { 600.0, 300.0, 400.0}, { 600.0, 300.0, 500.0}, { 600.0, 300.0, 600.0}, { 600.0, 300.0, 700.0}, { 600.0, 300.0, 800.0}, { 600.0, 400.0,-800.0}, { 600.0, 400.0,-700.0}, { 600.0, 400.0,-600.0}, { 600.0, 400.0,-500.0}, { 600.0, 400.0,-400.0}, { 600.0, 400.0,-300.0}, { 600.0, 400.0,-200.0}, { 600.0, 400.0,-100.0}, { 600.0, 400.0, 0.0}, { 600.0, 400.0, 100.0}, { 600.0, 400.0, 200.0}, { 600.0, 400.0, 300.0}, { 600.0, 400.0, 400.0}, { 600.0, 400.0, 500.0}, { 600.0, 400.0, 600.0}, { 600.0, 400.0, 700.0}, { 600.0, 400.0, 800.0}, { 600.0, 500.0,-800.0}, { 600.0, 500.0,-700.0}, { 600.0, 500.0,-600.0}, { 600.0, 500.0,-500.0}, { 600.0, 500.0,-400.0}, { 600.0, 500.0,-300.0}, { 600.0, 500.0,-200.0}, { 600.0, 500.0,-100.0}, { 600.0, 500.0, 0.0}, { 600.0, 500.0, 100.0}, { 600.0, 500.0, 200.0}, { 600.0, 500.0, 300.0}, { 600.0, 500.0, 400.0}, { 600.0, 500.0, 500.0}, { 600.0, 500.0, 600.0}, { 600.0, 500.0, 700.0}, { 600.0, 500.0, 800.0}, { 600.0, 600.0,-800.0}, { 600.0, 600.0,-700.0}, { 600.0, 600.0,-600.0}, { 600.0, 600.0,-500.0}, { 600.0, 600.0,-400.0}, { 600.0, 600.0,-300.0}, { 600.0, 600.0,-200.0}, { 600.0, 600.0,-100.0}, { 600.0, 600.0, 0.0}, { 600.0, 600.0, 100.0}, { 600.0, 600.0, 200.0}, { 600.0, 600.0, 300.0}, { 600.0, 600.0, 400.0}, { 600.0, 600.0, 500.0}, { 600.0, 600.0, 600.0}, { 600.0, 600.0, 700.0}, { 600.0, 600.0, 800.0}, { 600.0, 700.0,-800.0}, { 600.0, 700.0,-700.0}, { 600.0, 700.0,-600.0}, { 600.0, 700.0,-500.0}, { 600.0, 700.0,-400.0}, { 600.0, 700.0,-300.0}, { 600.0, 700.0,-200.0}, { 600.0, 700.0,-100.0}, { 600.0, 700.0, 0.0}, { 600.0, 700.0, 100.0}, { 600.0, 700.0, 200.0}, { 600.0, 700.0, 300.0}, { 600.0, 700.0, 400.0}, { 600.0, 700.0, 500.0}, { 600.0, 700.0, 600.0}, { 600.0, 700.0, 700.0}, { 600.0, 700.0, 800.0}, { 600.0, 800.0,-800.0}, { 600.0, 800.0,-700.0}, { 600.0, 800.0,-600.0}, { 600.0, 800.0,-500.0}, { 600.0, 800.0,-400.0}, { 600.0, 800.0,-300.0}, { 600.0, 800.0,-200.0}, { 600.0, 800.0,-100.0}, { 600.0, 800.0, 0.0}, { 600.0, 800.0, 100.0}, { 600.0, 800.0, 200.0}, { 600.0, 800.0, 300.0}, { 600.0, 800.0, 400.0}, { 600.0, 800.0, 500.0}, { 600.0, 800.0, 600.0}, { 600.0, 800.0, 700.0}, { 600.0, 800.0, 800.0}, { 700.0,-800.0,-800.0}, { 700.0,-800.0,-700.0}, { 700.0,-800.0,-600.0}, { 700.0,-800.0,-500.0}, { 700.0,-800.0,-400.0}, { 700.0,-800.0,-300.0}, { 700.0,-800.0,-200.0}, { 700.0,-800.0,-100.0}, { 700.0,-800.0, 0.0}, { 700.0,-800.0, 100.0}, { 700.0,-800.0, 200.0}, { 700.0,-800.0, 300.0}, { 700.0,-800.0, 400.0}, { 700.0,-800.0, 500.0}, { 700.0,-800.0, 600.0}, { 700.0,-800.0, 700.0}, { 700.0,-800.0, 800.0}, { 700.0,-700.0,-800.0}, { 700.0,-700.0,-700.0}, { 700.0,-700.0,-600.0}, { 700.0,-700.0,-500.0}, { 700.0,-700.0,-400.0}, { 700.0,-700.0,-300.0}, { 700.0,-700.0,-200.0}, { 700.0,-700.0,-100.0}, { 700.0,-700.0, 0.0}, { 700.0,-700.0, 100.0}, { 700.0,-700.0, 200.0}, { 700.0,-700.0, 300.0}, { 700.0,-700.0, 400.0}, { 700.0,-700.0, 500.0}, { 700.0,-700.0, 600.0}, { 700.0,-700.0, 700.0}, { 700.0,-700.0, 800.0}, { 700.0,-600.0,-800.0}, { 700.0,-600.0,-700.0}, { 700.0,-600.0,-600.0}, { 700.0,-600.0,-500.0}, { 700.0,-600.0,-400.0}, { 700.0,-600.0,-300.0}, { 700.0,-600.0,-200.0}, { 700.0,-600.0,-100.0}, { 700.0,-600.0, 0.0}, { 700.0,-600.0, 100.0}, { 700.0,-600.0, 200.0}, { 700.0,-600.0, 300.0}, { 700.0,-600.0, 400.0}, { 700.0,-600.0, 500.0}, { 700.0,-600.0, 600.0}, { 700.0,-600.0, 700.0}, { 700.0,-600.0, 800.0}, { 700.0,-500.0,-800.0}, { 700.0,-500.0,-700.0}, { 700.0,-500.0,-600.0}, { 700.0,-500.0,-500.0}, { 700.0,-500.0,-400.0}, { 700.0,-500.0,-300.0}, { 700.0,-500.0,-200.0}, { 700.0,-500.0,-100.0}, { 700.0,-500.0, 0.0}, { 700.0,-500.0, 100.0}, { 700.0,-500.0, 200.0}, { 700.0,-500.0, 300.0}, { 700.0,-500.0, 400.0}, { 700.0,-500.0, 500.0}, { 700.0,-500.0, 600.0}, { 700.0,-500.0, 700.0}, { 700.0,-500.0, 800.0}, { 700.0,-400.0,-800.0}, { 700.0,-400.0,-700.0}, { 700.0,-400.0,-600.0}, { 700.0,-400.0,-500.0}, { 700.0,-400.0,-400.0}, { 700.0,-400.0,-300.0}, { 700.0,-400.0,-200.0}, { 700.0,-400.0,-100.0}, { 700.0,-400.0, 0.0}, { 700.0,-400.0, 100.0}, { 700.0,-400.0, 200.0}, { 700.0,-400.0, 300.0}, { 700.0,-400.0, 400.0}, { 700.0,-400.0, 500.0}, { 700.0,-400.0, 600.0}, { 700.0,-400.0, 700.0}, { 700.0,-400.0, 800.0}, { 700.0,-300.0,-800.0}, { 700.0,-300.0,-700.0}, { 700.0,-300.0,-600.0}, { 700.0,-300.0,-500.0}, { 700.0,-300.0,-400.0}, { 700.0,-300.0,-300.0}, { 700.0,-300.0,-200.0}, { 700.0,-300.0,-100.0}, { 700.0,-300.0, 0.0}, { 700.0,-300.0, 100.0}, { 700.0,-300.0, 200.0}, { 700.0,-300.0, 300.0}, { 700.0,-300.0, 400.0}, { 700.0,-300.0, 500.0}, { 700.0,-300.0, 600.0}, { 700.0,-300.0, 700.0}, { 700.0,-300.0, 800.0}, { 700.0,-200.0,-800.0}, { 700.0,-200.0,-700.0}, { 700.0,-200.0,-600.0}, { 700.0,-200.0,-500.0}, { 700.0,-200.0,-400.0}, { 700.0,-200.0,-300.0}, { 700.0,-200.0,-200.0}, { 700.0,-200.0,-100.0}, { 700.0,-200.0, 0.0}, { 700.0,-200.0, 100.0}, { 700.0,-200.0, 200.0}, { 700.0,-200.0, 300.0}, { 700.0,-200.0, 400.0}, { 700.0,-200.0, 500.0}, { 700.0,-200.0, 600.0}, { 700.0,-200.0, 700.0}, { 700.0,-200.0, 800.0}, { 700.0,-100.0,-800.0}, { 700.0,-100.0,-700.0}, { 700.0,-100.0,-600.0}, { 700.0,-100.0,-500.0}, { 700.0,-100.0,-400.0}, { 700.0,-100.0,-300.0}, { 700.0,-100.0,-200.0}, { 700.0,-100.0,-100.0}, { 700.0,-100.0, 0.0}, { 700.0,-100.0, 100.0}, { 700.0,-100.0, 200.0}, { 700.0,-100.0, 300.0}, { 700.0,-100.0, 400.0}, { 700.0,-100.0, 500.0}, { 700.0,-100.0, 600.0}, { 700.0,-100.0, 700.0}, { 700.0,-100.0, 800.0}, { 700.0, 0.0,-800.0}, { 700.0, 0.0,-700.0}, { 700.0, 0.0,-600.0}, { 700.0, 0.0,-500.0}, { 700.0, 0.0,-400.0}, { 700.0, 0.0,-300.0}, { 700.0, 0.0,-200.0}, { 700.0, 0.0,-100.0}, { 700.0, 0.0, 0.0}, { 700.0, 0.0, 100.0}, { 700.0, 0.0, 200.0}, { 700.0, 0.0, 300.0}, { 700.0, 0.0, 400.0}, { 700.0, 0.0, 500.0}, { 700.0, 0.0, 600.0}, { 700.0, 0.0, 700.0}, { 700.0, 0.0, 800.0}, { 700.0, 100.0,-800.0}, { 700.0, 100.0,-700.0}, { 700.0, 100.0,-600.0}, { 700.0, 100.0,-500.0}, { 700.0, 100.0,-400.0}, { 700.0, 100.0,-300.0}, { 700.0, 100.0,-200.0}, { 700.0, 100.0,-100.0}, { 700.0, 100.0, 0.0}, { 700.0, 100.0, 100.0}, { 700.0, 100.0, 200.0}, { 700.0, 100.0, 300.0}, { 700.0, 100.0, 400.0}, { 700.0, 100.0, 500.0}, { 700.0, 100.0, 600.0}, { 700.0, 100.0, 700.0}, { 700.0, 100.0, 800.0}, { 700.0, 200.0,-800.0}, { 700.0, 200.0,-700.0}, { 700.0, 200.0,-600.0}, { 700.0, 200.0,-500.0}, { 700.0, 200.0,-400.0}, { 700.0, 200.0,-300.0}, { 700.0, 200.0,-200.0}, { 700.0, 200.0,-100.0}, { 700.0, 200.0, 0.0}, { 700.0, 200.0, 100.0}, { 700.0, 200.0, 200.0}, { 700.0, 200.0, 300.0}, { 700.0, 200.0, 400.0}, { 700.0, 200.0, 500.0}, { 700.0, 200.0, 600.0}, { 700.0, 200.0, 700.0}, { 700.0, 200.0, 800.0}, { 700.0, 300.0,-800.0}, { 700.0, 300.0,-700.0}, { 700.0, 300.0,-600.0}, { 700.0, 300.0,-500.0}, { 700.0, 300.0,-400.0}, { 700.0, 300.0,-300.0}, { 700.0, 300.0,-200.0}, { 700.0, 300.0,-100.0}, { 700.0, 300.0, 0.0}, { 700.0, 300.0, 100.0}, { 700.0, 300.0, 200.0}, { 700.0, 300.0, 300.0}, { 700.0, 300.0, 400.0}, { 700.0, 300.0, 500.0}, { 700.0, 300.0, 600.0}, { 700.0, 300.0, 700.0}, { 700.0, 300.0, 800.0}, { 700.0, 400.0,-800.0}, { 700.0, 400.0,-700.0}, { 700.0, 400.0,-600.0}, { 700.0, 400.0,-500.0}, { 700.0, 400.0,-400.0}, { 700.0, 400.0,-300.0}, { 700.0, 400.0,-200.0}, { 700.0, 400.0,-100.0}, { 700.0, 400.0, 0.0}, { 700.0, 400.0, 100.0}, { 700.0, 400.0, 200.0}, { 700.0, 400.0, 300.0}, { 700.0, 400.0, 400.0}, { 700.0, 400.0, 500.0}, { 700.0, 400.0, 600.0}, { 700.0, 400.0, 700.0}, { 700.0, 400.0, 800.0}, { 700.0, 500.0,-800.0}, { 700.0, 500.0,-700.0}, { 700.0, 500.0,-600.0}, { 700.0, 500.0,-500.0}, { 700.0, 500.0,-400.0}, { 700.0, 500.0,-300.0}, { 700.0, 500.0,-200.0}, { 700.0, 500.0,-100.0}, { 700.0, 500.0, 0.0}, { 700.0, 500.0, 100.0}, { 700.0, 500.0, 200.0}, { 700.0, 500.0, 300.0}, { 700.0, 500.0, 400.0}, { 700.0, 500.0, 500.0}, { 700.0, 500.0, 600.0}, { 700.0, 500.0, 700.0}, { 700.0, 500.0, 800.0}, { 700.0, 600.0,-800.0}, { 700.0, 600.0,-700.0}, { 700.0, 600.0,-600.0}, { 700.0, 600.0,-500.0}, { 700.0, 600.0,-400.0}, { 700.0, 600.0,-300.0}, { 700.0, 600.0,-200.0}, { 700.0, 600.0,-100.0}, { 700.0, 600.0, 0.0}, { 700.0, 600.0, 100.0}, { 700.0, 600.0, 200.0}, { 700.0, 600.0, 300.0}, { 700.0, 600.0, 400.0}, { 700.0, 600.0, 500.0}, { 700.0, 600.0, 600.0}, { 700.0, 600.0, 700.0}, { 700.0, 600.0, 800.0}, { 700.0, 700.0,-800.0}, { 700.0, 700.0,-700.0}, { 700.0, 700.0,-600.0}, { 700.0, 700.0,-500.0}, { 700.0, 700.0,-400.0}, { 700.0, 700.0,-300.0}, { 700.0, 700.0,-200.0}, { 700.0, 700.0,-100.0}, { 700.0, 700.0, 0.0}, { 700.0, 700.0, 100.0}, { 700.0, 700.0, 200.0}, { 700.0, 700.0, 300.0}, { 700.0, 700.0, 400.0}, { 700.0, 700.0, 500.0}, { 700.0, 700.0, 600.0}, { 700.0, 700.0, 700.0}, { 700.0, 700.0, 800.0}, { 700.0, 800.0,-800.0}, { 700.0, 800.0,-700.0}, { 700.0, 800.0,-600.0}, { 700.0, 800.0,-500.0}, { 700.0, 800.0,-400.0}, { 700.0, 800.0,-300.0}, { 700.0, 800.0,-200.0}, { 700.0, 800.0,-100.0}, { 700.0, 800.0, 0.0}, { 700.0, 800.0, 100.0}, { 700.0, 800.0, 200.0}, { 700.0, 800.0, 300.0}, { 700.0, 800.0, 400.0}, { 700.0, 800.0, 500.0}, { 700.0, 800.0, 600.0}, { 700.0, 800.0, 700.0}, { 700.0, 800.0, 800.0}, { 800.0,-800.0,-800.0}, { 800.0,-800.0,-700.0}, { 800.0,-800.0,-600.0}, { 800.0,-800.0,-500.0}, { 800.0,-800.0,-400.0}, { 800.0,-800.0,-300.0}, { 800.0,-800.0,-200.0}, { 800.0,-800.0,-100.0}, { 800.0,-800.0, 0.0}, { 800.0,-800.0, 100.0}, { 800.0,-800.0, 200.0}, { 800.0,-800.0, 300.0}, { 800.0,-800.0, 400.0}, { 800.0,-800.0, 500.0}, { 800.0,-800.0, 600.0}, { 800.0,-800.0, 700.0}, { 800.0,-800.0, 800.0}, { 800.0,-700.0,-800.0}, { 800.0,-700.0,-700.0}, { 800.0,-700.0,-600.0}, { 800.0,-700.0,-500.0}, { 800.0,-700.0,-400.0}, { 800.0,-700.0,-300.0}, { 800.0,-700.0,-200.0}, { 800.0,-700.0,-100.0}, { 800.0,-700.0, 0.0}, { 800.0,-700.0, 100.0}, { 800.0,-700.0, 200.0}, { 800.0,-700.0, 300.0}, { 800.0,-700.0, 400.0}, { 800.0,-700.0, 500.0}, { 800.0,-700.0, 600.0}, { 800.0,-700.0, 700.0}, { 800.0,-700.0, 800.0}, { 800.0,-600.0,-800.0}, { 800.0,-600.0,-700.0}, { 800.0,-600.0,-600.0}, { 800.0,-600.0,-500.0}, { 800.0,-600.0,-400.0}, { 800.0,-600.0,-300.0}, { 800.0,-600.0,-200.0}, { 800.0,-600.0,-100.0}, { 800.0,-600.0, 0.0}, { 800.0,-600.0, 100.0}, { 800.0,-600.0, 200.0}, { 800.0,-600.0, 300.0}, { 800.0,-600.0, 400.0}, { 800.0,-600.0, 500.0}, { 800.0,-600.0, 600.0}, { 800.0,-600.0, 700.0}, { 800.0,-600.0, 800.0}, { 800.0,-500.0,-800.0}, { 800.0,-500.0,-700.0}, { 800.0,-500.0,-600.0}, { 800.0,-500.0,-500.0}, { 800.0,-500.0,-400.0}, { 800.0,-500.0,-300.0}, { 800.0,-500.0,-200.0}, { 800.0,-500.0,-100.0}, { 800.0,-500.0, 0.0}, { 800.0,-500.0, 100.0}, { 800.0,-500.0, 200.0}, { 800.0,-500.0, 300.0}, { 800.0,-500.0, 400.0}, { 800.0,-500.0, 500.0}, { 800.0,-500.0, 600.0}, { 800.0,-500.0, 700.0}, { 800.0,-500.0, 800.0}, { 800.0,-400.0,-800.0}, { 800.0,-400.0,-700.0}, { 800.0,-400.0,-600.0}, { 800.0,-400.0,-500.0}, { 800.0,-400.0,-400.0}, { 800.0,-400.0,-300.0}, { 800.0,-400.0,-200.0}, { 800.0,-400.0,-100.0}, { 800.0,-400.0, 0.0}, { 800.0,-400.0, 100.0}, { 800.0,-400.0, 200.0}, { 800.0,-400.0, 300.0}, { 800.0,-400.0, 400.0}, { 800.0,-400.0, 500.0}, { 800.0,-400.0, 600.0}, { 800.0,-400.0, 700.0}, { 800.0,-400.0, 800.0}, { 800.0,-300.0,-800.0}, { 800.0,-300.0,-700.0}, { 800.0,-300.0,-600.0}, { 800.0,-300.0,-500.0}, { 800.0,-300.0,-400.0}, { 800.0,-300.0,-300.0}, { 800.0,-300.0,-200.0}, { 800.0,-300.0,-100.0}, { 800.0,-300.0, 0.0}, { 800.0,-300.0, 100.0}, { 800.0,-300.0, 200.0}, { 800.0,-300.0, 300.0}, { 800.0,-300.0, 400.0}, { 800.0,-300.0, 500.0}, { 800.0,-300.0, 600.0}, { 800.0,-300.0, 700.0}, { 800.0,-300.0, 800.0}, { 800.0,-200.0,-800.0}, { 800.0,-200.0,-700.0}, { 800.0,-200.0,-600.0}, { 800.0,-200.0,-500.0}, { 800.0,-200.0,-400.0}, { 800.0,-200.0,-300.0}, { 800.0,-200.0,-200.0}, { 800.0,-200.0,-100.0}, { 800.0,-200.0, 0.0}, { 800.0,-200.0, 100.0}, { 800.0,-200.0, 200.0}, { 800.0,-200.0, 300.0}, { 800.0,-200.0, 400.0}, { 800.0,-200.0, 500.0}, { 800.0,-200.0, 600.0}, { 800.0,-200.0, 700.0}, { 800.0,-200.0, 800.0}, { 800.0,-100.0,-800.0}, { 800.0,-100.0,-700.0}, { 800.0,-100.0,-600.0}, { 800.0,-100.0,-500.0}, { 800.0,-100.0,-400.0}, { 800.0,-100.0,-300.0}, { 800.0,-100.0,-200.0}, { 800.0,-100.0,-100.0}, { 800.0,-100.0, 0.0}, { 800.0,-100.0, 100.0}, { 800.0,-100.0, 200.0}, { 800.0,-100.0, 300.0}, { 800.0,-100.0, 400.0}, { 800.0,-100.0, 500.0}, { 800.0,-100.0, 600.0}, { 800.0,-100.0, 700.0}, { 800.0,-100.0, 800.0}, { 800.0, 0.0,-800.0}, { 800.0, 0.0,-700.0}, { 800.0, 0.0,-600.0}, { 800.0, 0.0,-500.0}, { 800.0, 0.0,-400.0}, { 800.0, 0.0,-300.0}, { 800.0, 0.0,-200.0}, { 800.0, 0.0,-100.0}, { 800.0, 0.0, 0.0}, { 800.0, 0.0, 100.0}, { 800.0, 0.0, 200.0}, { 800.0, 0.0, 300.0}, { 800.0, 0.0, 400.0}, { 800.0, 0.0, 500.0}, { 800.0, 0.0, 600.0}, { 800.0, 0.0, 700.0}, { 800.0, 0.0, 800.0}, { 800.0, 100.0,-800.0}, { 800.0, 100.0,-700.0}, { 800.0, 100.0,-600.0}, { 800.0, 100.0,-500.0}, { 800.0, 100.0,-400.0}, { 800.0, 100.0,-300.0}, { 800.0, 100.0,-200.0}, { 800.0, 100.0,-100.0}, { 800.0, 100.0, 0.0}, { 800.0, 100.0, 100.0}, { 800.0, 100.0, 200.0}, { 800.0, 100.0, 300.0}, { 800.0, 100.0, 400.0}, { 800.0, 100.0, 500.0}, { 800.0, 100.0, 600.0}, { 800.0, 100.0, 700.0}, { 800.0, 100.0, 800.0}, { 800.0, 200.0,-800.0}, { 800.0, 200.0,-700.0}, { 800.0, 200.0,-600.0}, { 800.0, 200.0,-500.0}, { 800.0, 200.0,-400.0}, { 800.0, 200.0,-300.0}, { 800.0, 200.0,-200.0}, { 800.0, 200.0,-100.0}, { 800.0, 200.0, 0.0}, { 800.0, 200.0, 100.0}, { 800.0, 200.0, 200.0}, { 800.0, 200.0, 300.0}, { 800.0, 200.0, 400.0}, { 800.0, 200.0, 500.0}, { 800.0, 200.0, 600.0}, { 800.0, 200.0, 700.0}, { 800.0, 200.0, 800.0}, { 800.0, 300.0,-800.0}, { 800.0, 300.0,-700.0}, { 800.0, 300.0,-600.0}, { 800.0, 300.0,-500.0}, { 800.0, 300.0,-400.0}, { 800.0, 300.0,-300.0}, { 800.0, 300.0,-200.0}, { 800.0, 300.0,-100.0}, { 800.0, 300.0, 0.0}, { 800.0, 300.0, 100.0}, { 800.0, 300.0, 200.0}, { 800.0, 300.0, 300.0}, { 800.0, 300.0, 400.0}, { 800.0, 300.0, 500.0}, { 800.0, 300.0, 600.0}, { 800.0, 300.0, 700.0}, { 800.0, 300.0, 800.0}, { 800.0, 400.0,-800.0}, { 800.0, 400.0,-700.0}, { 800.0, 400.0,-600.0}, { 800.0, 400.0,-500.0}, { 800.0, 400.0,-400.0}, { 800.0, 400.0,-300.0}, { 800.0, 400.0,-200.0}, { 800.0, 400.0,-100.0}, { 800.0, 400.0, 0.0}, { 800.0, 400.0, 100.0}, { 800.0, 400.0, 200.0}, { 800.0, 400.0, 300.0}, { 800.0, 400.0, 400.0}, { 800.0, 400.0, 500.0}, { 800.0, 400.0, 600.0}, { 800.0, 400.0, 700.0}, { 800.0, 400.0, 800.0}, { 800.0, 500.0,-800.0}, { 800.0, 500.0,-700.0}, { 800.0, 500.0,-600.0}, { 800.0, 500.0,-500.0}, { 800.0, 500.0,-400.0}, { 800.0, 500.0,-300.0}, { 800.0, 500.0,-200.0}, { 800.0, 500.0,-100.0}, { 800.0, 500.0, 0.0}, { 800.0, 500.0, 100.0}, { 800.0, 500.0, 200.0}, { 800.0, 500.0, 300.0}, { 800.0, 500.0, 400.0}, { 800.0, 500.0, 500.0}, { 800.0, 500.0, 600.0}, { 800.0, 500.0, 700.0}, { 800.0, 500.0, 800.0}, { 800.0, 600.0,-800.0}, { 800.0, 600.0,-700.0}, { 800.0, 600.0,-600.0}, { 800.0, 600.0,-500.0}, { 800.0, 600.0,-400.0}, { 800.0, 600.0,-300.0}, { 800.0, 600.0,-200.0}, { 800.0, 600.0,-100.0}, { 800.0, 600.0, 0.0}, { 800.0, 600.0, 100.0}, { 800.0, 600.0, 200.0}, { 800.0, 600.0, 300.0}, { 800.0, 600.0, 400.0}, { 800.0, 600.0, 500.0}, { 800.0, 600.0, 600.0}, { 800.0, 600.0, 700.0}, { 800.0, 600.0, 800.0}, { 800.0, 700.0,-800.0}, { 800.0, 700.0,-700.0}, { 800.0, 700.0,-600.0}, { 800.0, 700.0,-500.0}, { 800.0, 700.0,-400.0}, { 800.0, 700.0,-300.0}, { 800.0, 700.0,-200.0}, { 800.0, 700.0,-100.0}, { 800.0, 700.0, 0.0}, { 800.0, 700.0, 100.0}, { 800.0, 700.0, 200.0}, { 800.0, 700.0, 300.0}, { 800.0, 700.0, 400.0}, { 800.0, 700.0, 500.0}, { 800.0, 700.0, 600.0}, { 800.0, 700.0, 700.0}, { 800.0, 700.0, 800.0}, { 800.0, 800.0,-800.0}, { 800.0, 800.0,-700.0}, { 800.0, 800.0,-600.0}, { 800.0, 800.0,-500.0}, { 800.0, 800.0,-400.0}, { 800.0, 800.0,-300.0}, { 800.0, 800.0,-200.0}, { 800.0, 800.0,-100.0}, { 800.0, 800.0, 0.0}, { 800.0, 800.0, 100.0}, { 800.0, 800.0, 200.0}, { 800.0, 800.0, 300.0}, { 800.0, 800.0, 400.0}, { 800.0, 800.0, 500.0}, { 800.0, 800.0, 600.0}, { 800.0, 800.0, 700.0}, { 800.0, 800.0, 800.0}, }; static double nlopt_nll2(unsigned int n, const double *x, double *grad, void *params) { size_t i; fitParams *fpars = (fitParams *) params; double theta, phi; double fval; struct timeval tv_start, tv_stop; vertex v[MAX_VERTICES]; if (stop) nlopt_force_stop(opt); for (i = 0; i < fpars->n; i++) { v[i].id = fpars->id[i]; v[i].T0 = x[4+3*i]; v[i].pos[0] = x[0]; v[i].pos[1] = x[1]; v[i].pos[2] = x[2]; v[i].t0 = x[3]; theta = x[5+3*i]; phi = x[6+3*i]; v[i].dir[0] = sin(theta)*cos(phi); v[i].dir[1] = sin(theta)*sin(phi); v[i].dir[2] = cos(theta); v[i].n = 0; } gettimeofday(&tv_start, NULL); fval = nll(fpars->ev, v, fpars->n, fpars->dx, fpars->ns, fpars->fast, fpars->charge_only, fpars->hit_only); gettimeofday(&tv_stop, NULL); long long elapsed = (tv_stop.tv_sec - tv_start.tv_sec)*1000 + (tv_stop.tv_usec - tv_start.tv_usec)/1000; if (fpars->print) { printf("%5zu %7.2f %7.2f %7.2f %6.2f ", iter++, x[0], x[1], x[2], x[3]); for (i = 0; i < fpars->n; i++) printf("%10.2f %7.2f %7.2f ", x[4+3*i], x[5+3*i], x[6+3*i]); printf("f() = %7.3e took %lld ms\n", fval, elapsed); } return fval; } static double nlopt_nll(unsigned int n, const double *x, double *grad, void *params) { fitParams *fpars = (fitParams *) params; double theta, phi; double fval; struct timeval tv_start, tv_stop; vertex v; if (stop) nlopt_force_stop(opt); v.id = fpars->id[0]; v.T0 = x[0]; v.pos[0] = x[1]; v.pos[1] = x[2]; v.pos[2] = x[3]; theta = x[4]; phi = x[5]; v.dir[0] = sin(theta)*cos(phi); v.dir[1] = sin(theta)*sin(phi); v.dir[2] = cos(theta); v.t0 = x[6]; v.z1[0] = x[7]; v.z2[0] = x[8]; v.n = 1; gettimeofday(&tv_start, NULL); fval = nll(fpars->ev, &v, 1, fpars->dx, fpars->ns, fpars->fast, fpars->charge_only, fpars->hit_only); gettimeofday(&tv_stop, NULL); long long elapsed = (tv_stop.tv_sec - tv_start.tv_sec)*1000 + (tv_stop.tv_usec - tv_start.tv_usec)/1000; if (fpars->print) printf("%5zu %10.2f %7.2f %7.2f %7.2f %5.2f %5.2f %6.2f %5.2f %5.2f f() = %7.3e took %lld ms\n", iter++, x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], fval, elapsed); return fval; } double guess_t0(event *ev, double *pos) { /* Returns a guess for the t0 of event `ev` given a position `pos`. The t0 * is calculated by computing the charge weighted average of the time * difference between each PMT's hit time and the time it would take a * photon to travel from `pos` to the PMT. */ size_t i; double pmt_dir[3], distance, t0, n, qhs_sum; /* Compute the index of refraction for heavy water at 400 nm. */ n = get_index_snoman_d2o(400.0); t0 = 0.0; qhs_sum = 0.0; for (i = 0; i < MAX_PMTS; i++) { /* Only look at normal PMTs that were hit and aren't flagged. */ if (ev->pmt_hits[i].flags || pmts[i].pmt_type != PMT_NORMAL || !ev->pmt_hits[i].hit) continue; /* Compute the vector between `pos` and the PMT. */ SUB(pmt_dir,pmts[i].pos,pos); /* Compute the distance to the PMT. */ distance = NORM(pmt_dir); /* Add the charge weighted time difference between the PMT hit time and * the time it would take a photon to hit the PMT from `pos`. */ t0 += ev->pmt_hits[i].qhs*(ev->pmt_hits[i].t - distance*n/SPEED_OF_LIGHT); qhs_sum += ev->pmt_hits[i].qhs; } /* Divide by the total QHS sum. */ t0 /= qhs_sum; return t0; } void guess_direction(event *ev, double *pos, double *theta, double *phi) { /* Returns the approximate direction of the event from a given position. * The direction is computed by taking the charge weighted average of the * vectors from `pos` to each hit PMT. * * A possible improvement here is to do something like a Hough transform * where we map PMT hits to cones with a 42 degree angle and then search * for the highest point in the transformed space. This method might also * generalize better when searching for a second ring since we can look for * secondary peaks not near the highest peak. */ size_t i; double pmt_dir[3], dir[3]; dir[0] = 0.0; dir[1] = 0.0; dir[2] = 0.0; for (i = 0; i < MAX_PMTS; i++) { /* Only look at normal PMTs that were hit and aren't flagged. */ if (ev->pmt_hits[i].flags || pmts[i].pmt_type != PMT_NORMAL || !ev->pmt_hits[i].hit) continue; /* Compute the vector between `pos` and the PMT. */ SUB(pmt_dir,pmts[i].pos,pos); /* Normalize it. */ normalize(pmt_dir); /* Multiply the vector by the QHS charge in the PMT. */ MUL(pmt_dir,ev->pmt_hits[i].qhs); /* Add this to the estimated direction. */ ADD(dir,dir,pmt_dir); } /* Normalize the charge weighted sum. */ normalize(dir); /* Compute the spherical coordinates for `dir`. */ *theta = acos(dir[2]); *phi = atan2(dir[1],dir[0]); } double guess_energy(event *ev, double *pos, double *dir) { /* Returns the approximate energy for a particle at position `pos` in * direction `dir`. This guess is made by summing up all the charge within * a Cerenkov cone and making the approximation that the particle creates * approximately 6 photons/MeV. * * FIXME: Should update this to something better. */ size_t i; double qhs_sum, n_d2o; double pmt_dir[3]; n_d2o = get_index_snoman_d2o(400.0); qhs_sum = 0.0; for (i = 0; i < MAX_PMTS; i++) { if (ev->pmt_hits[i].flags || pmts[i].pmt_type != PMT_NORMAL || !ev->pmt_hits[i].hit) continue; SUB(pmt_dir,pmts[i].pos,pos); normalize(pmt_dir); if (DOT(pmt_dir,dir) > 1/n_d2o) qhs_sum += ev->pmt_hits[i].qhs; } return qhs_sum/6.0; } int fit_event2(event *ev, double *xopt, double *fmin, int *id, size_t n, double maxtime) { /* Fit the event `ev` under the hypothesis that it's from `n` particles * with ids `id`. The best fit parameters are stored in `xopt` upon success * and the negative log likelihood value at the minimum is stored in * `fmin`. The order of the parameters in `xopt` is: * * xopt[0] - x position (cm) * xopt[1] - y position (cm) * xopt[2] - z position (cm) * xopt[3] - t0 (ns) * xopt[4] - Kinetic energy of particle 1 (MeV) * xopt[5] - Theta direction of particle 1 (radians) * xopt[6] - Phi direction of particle 1 (radians) * xopt[7] - Kinetic energy of particle 2 (MeV) * xopt[8] - Theta direction of particle 2 (radians) * xopt[9] - Phi direction of particle 2 (radians) * ... * * `xopt` should be an array with at least 4+3*n elements. * * `maxtime` specifies the maximum time to perform the fit in seconds. Note * that before doing the full fit we try to calculate a good seed position * by running a "fast" likelihood calculation. This time does not count * towards the maximum so it is possible for the fit to take slighly longer * than maxtime. * * `id` should be an array of the particle ids (see id_particle.h for the * macros defining the particle types). * * On success returns 0, and on error returns NLOPT_FORCED_STOP. This error * is caused when the minimization is forced to halt when for example you * press ctrl-c. */ size_t i, j; fitParams fpars; double x[100], ss[100], lb[100], ub[100], fval, n_d2o, x0[100], T0, Tmin, mass, pos[3], t0, dir[3]; struct timeval tv_start, tv_stop; double time_elapsed; double peak_theta[MAX_NPEAKS]; double peak_phi[MAX_NPEAKS]; size_t npeaks; size_t *result; size_t nvertices; int status; /* Create the minimizer object. */ opt = nlopt_create(NLOPT_LN_BOBYQA, 4+3*n); nlopt_set_min_objective(opt,nlopt_nll2,&fpars); /* Guess the position and t0 of the event using the QUAD fitter. */ status = quad(ev,pos,&t0,10000); if (status || t0 < 0 || t0 > GTVALID || NORM(pos) > PSUP_RADIUS) { /* If the QUAD fitter fails or returns something outside the PSUP or * with an invalid time we just assume it's at the center. */ fprintf(stderr, "quad returned pos = %.2f, %.2f, %.2f t0 = %.2f. Assuming vertex is at the center!\n", pos[0], pos[1], pos[2], t0); pos[0] = 0.0; pos[1] = 0.0; pos[2] = 0.0; t0 = guess_t0(ev,pos); } /* Set the initial parameters for the parameters which don't change during * the fast minimization. */ x0[0] = pos[0]; x0[1] = pos[1]; x0[2] = pos[2]; x0[3] = t0; /* Set the initial step sizes for the parameters which don't change during * the fast minimization. */ ss[0] = 10.0; ss[1] = 10.0; ss[2] = 10.0; ss[3] = 1.0; /* Set the lower bound for the parameters which don't change during the * fast minimization. */ lb[0] = -1000.0; lb[1] = -1000.0; lb[2] = -1000.0; lb[3] = 0.0; /* Set the upper bound for the parameters which don't change during the * fast minimization. */ ub[0] = +1000.0; ub[1] = +1000.0; ub[2] = +1000.0; ub[3] = GTVALID; /* Find the peaks in the Hough transform of the event. */ find_peaks(ev, pos, 100, 100, peak_theta, peak_phi, &npeaks, LEN(peak_theta)); result = malloc(sizeof(size_t)*n*ipow(npeaks,n)); /* Compute the set of all unique combinations of particles and directions. */ unique_vertices(id,n,npeaks,result,&nvertices); /* Compute the index of refraction in D2O. */ n_d2o = get_index_snoman_d2o(400.0); fpars.ev = ev; /* Set the global iteration count back to zero. * * FIXME: Some way to do this which is thread safe? */ iter = 0; /* First we do a set of "quick" minimizations to try and start the * minimizer close to the minimum. */ fpars.dx = 1.0; fpars.ns = 10; fpars.fast = 0; fpars.hit_only = 0; fpars.print = 0; fpars.charge_only = 0; nlopt_set_ftol_abs(opt, 1e-5); nlopt_set_xtol_rel(opt, 1e-2); nlopt_set_maxeval(opt, 1000); fpars.n = n; for (i = 0; i < n; i++) fpars.id[i] = id[i]; for (i = 0; i < nvertices; i++) { /* Copy the starting parameters to the `x` array. */ memcpy(x,x0,sizeof(x)); for (j = 0; j < n; j++) { x[5+3*j] = peak_theta[result[i*n+j]]; x[6+3*j] = peak_phi[result[i*n+j]]; dir[0] = sin(peak_theta[result[i*n+j]])*cos(peak_phi[result[i*n+j]]); dir[1] = sin(peak_theta[result[i*n+j]])*sin(peak_phi[result[i*n+j]]); dir[2] = cos(peak_theta[result[i*n+j]]); T0 = guess_energy(ev,x0,dir); switch (id[j]) { case IDP_E_MINUS: case IDP_E_PLUS: mass = ELECTRON_MASS; break; case IDP_MU_MINUS: case IDP_MU_PLUS: mass = MUON_MASS; break; case IDP_PROTON: mass = PROTON_MASS; break; default: fprintf(stderr, "unknown particle id %i\n", id[j]); exit(1); } /* Calculate the Cerenkov threshold for a muon. */ Tmin = mass/sqrt(1.0-1.0/(n_d2o*n_d2o)) - mass; /* If our guess is below the Cerenkov threshold, start at the Cerenkov * threshold. */ double Tmin2 = sqrt(mass*mass/(1-pow(0.9,2)))-mass; if (T0 < Tmin2) T0 = Tmin2; x[4+3*j] = T0; ss[4+3*j] = x[4+3*j]*0.1; ss[5+3*j] = 0.01; ss[6+3*j] = 0.01; lb[4+3*j] = Tmin; lb[5+3*j] = -INFINITY; lb[6+3*j] = -INFINITY; ub[4+3*j] = MAX_ENERGY; ub[5+3*j] = +INFINITY; ub[6+3*j] = +INFINITY; } nlopt_set_lower_bounds(opt, lb); nlopt_set_upper_bounds(opt, ub); nlopt_set_initial_step(opt, ss); gettimeofday(&tv_start, NULL); nlopt_optimize(opt,x,&fval); gettimeofday(&tv_stop, NULL); if (stop) goto stop; long long elapsed = (tv_stop.tv_sec - tv_start.tv_sec)*1000 + (tv_stop.tv_usec - tv_start.tv_usec)/1000; printf("%4zu/%4zu %7.2f %7.2f %7.2f %6.2f ", i+1, nvertices, x[0], x[1], x[2], x[3]); for (j = 0; j < n; j++) printf("%10.2f %7.2f %7.2f ", x[4+3*j], x[5+3*j], x[6+3*j]); printf("f() = %7.3e took %lld ms\n", fval, elapsed); if (i == 0 || fval < *fmin) { *fmin = fval; memcpy(xopt,x,sizeof(x)); } } /* Reset the lower and upper bounds. */ lb[0] = -1000.0; lb[1] = -1000.0; lb[2] = -1000.0; lb[3] = 0.0; ub[0] = +1000.0; ub[1] = +1000.0; ub[2] = +1000.0; ub[3] = GTVALID; /* Set the energy step size to 2% of the energy. */ for (j = 0; j < n; j++) { ss[4+3*j] = xopt[4+3*j]*0.1; } nlopt_set_lower_bounds(opt, lb); nlopt_set_upper_bounds(opt, ub); nlopt_set_initial_step(opt, ss); /* Now, we do the "real" minimization. */ fpars.dx = 1.0; fpars.ns = 10; fpars.fast = 0; fpars.print = 1; fpars.charge_only = 0; fpars.hit_only = 0; nlopt_set_ftol_abs(opt, 1e-5); nlopt_set_xtol_rel(opt, 1e-2); nlopt_set_maxeval(opt, 1000); nlopt_set_maxtime(opt, maxtime); memcpy(x,xopt,sizeof(x)); if (flikelihood) { FILE *f = fopen(flikelihood, "w"); for (i = 0; i < 50; i++) { for (j = 0; j < 50; j++) { x[5] = xopt[5] - 0.1 + 0.2*i/49; x[6] = xopt[6] - 0.1 + 0.2*j/49; fval = nlopt_nll2(4+3*n,x,NULL,&fpars); fprintf(f, "%.18g %.18g %.18g\n", x[5], x[6], fval); if (stop) goto close; } } close: fclose(f); if (stop) exit(1); exit(0); } gettimeofday(&tv_start, NULL); nlopt_optimize(opt,x,&fval); gettimeofday(&tv_stop, NULL); time_elapsed = tv_stop.tv_sec - tv_start.tv_sec + (tv_stop.tv_usec - tv_start.tv_usec)/1e6; if (time_elapsed > maxtime) goto end; if (stop) goto stop; do { *fmin = fval; memcpy(xopt,x,sizeof(x)); nlopt_set_maxtime(opt, maxtime-time_elapsed); gettimeofday(&tv_start, NULL); nlopt_optimize(opt,x,&fval); gettimeofday(&tv_stop, NULL); time_elapsed += tv_stop.tv_sec - tv_start.tv_sec + (tv_stop.tv_usec - tv_start.tv_usec)/1e6; if (stop) goto stop; } while (fval < *fmin && fabs(fval-*fmin) > 1e-2 && time_elapsed < maxtime); if (fval < *fmin) { *fmin = fval; memcpy(xopt,x,sizeof(x)); } end: free(result); nlopt_destroy(opt); return 0; stop: free(result); nlopt_destroy(opt); return NLOPT_FORCED_STOP; } int fit_event(event *ev, double *xopt, double *fmin, int id, double maxtime) { size_t i; fitParams fpars; double x[9], ss[9], lb[9], ub[9], fval, n, qhs_sum, x0[9], T0, Tmin, mass; struct timeval tv_start, tv_stop; double time_elapsed; opt = nlopt_create(NLOPT_LN_BOBYQA, 9); nlopt_set_min_objective(opt,nlopt_nll,&fpars); /* Make a guess as to the energy. Right now we just use a simple * approximation that the muon produces approximately 6 photons/MeV. * * FIXME: Should update this to something better. */ qhs_sum = 0.0; for (i = 0; i < MAX_PMTS; i++) { if (ev->pmt_hits[i].flags || pmts[i].pmt_type != PMT_NORMAL || !ev->pmt_hits[i].hit) continue; qhs_sum += ev->pmt_hits[i].qhs; } T0 = qhs_sum/6.0; n = get_index_snoman_d2o(400.0); switch (id) { case IDP_E_MINUS: case IDP_E_PLUS: mass = ELECTRON_MASS; break; case IDP_MU_MINUS: case IDP_MU_PLUS: mass = MUON_MASS; break; case IDP_PROTON: mass = PROTON_MASS; break; default: fprintf(stderr, "unknown particle id %i\n", id); exit(1); } /* Calculate the Cerenkov threshold for a muon. */ Tmin = mass/sqrt(1.0-1.0/(n*n)) - mass; /* If our guess is below the Cerenkov threshold, start at the Cerenkov * threshold. */ double Tmin2 = sqrt(mass*mass/(1-pow(0.9,2)))-mass; if (T0 < Tmin2) T0 = Tmin2; x0[0] = T0; x0[1] = 0.0; x0[2] = 0.0; x0[3] = 0.0; x0[4] = 1.57; x0[5] = 0.0; x0[6] = 130.0; x0[7] = 0.0; x0[8] = 0.0; ss[0] = x0[0]*0.02; ss[1] = 10.0; ss[2] = 10.0; ss[3] = 10.0; ss[4] = 0.01; ss[5] = 0.01; ss[6] = 1.0; ss[7] = 0.1; ss[8] = 0.1; lb[0] = Tmin; lb[1] = -1000.0; lb[2] = -1000.0; lb[3] = -1000.0; lb[4] = -INFINITY; lb[5] = -INFINITY; lb[6] = 0.0; lb[7] = -10.0; lb[8] = -10.0; ub[0] = 10000.0; ub[1] = 1000.0; ub[2] = 1000.0; ub[3] = 1000.0; ub[4] = INFINITY; ub[5] = INFINITY; ub[6] = 400.0; ub[7] = 10.0; ub[8] = 10.0; nlopt_set_lower_bounds(opt, lb); nlopt_set_upper_bounds(opt, ub); nlopt_set_initial_step(opt, ss); fpars.ev = ev; fpars.id[0] = id; fpars.n = 1; iter = 0; /* First we do a set of "quick" minimizations to try and start the * minimizer close to the minimum. To make these function evaluations * faster, we set the absolute tolerance on the likelihood to 1.0, the * maximum number of function evaluations to 100, and the relative * tolerance on the numerical integration to 10%. */ fpars.dx = 1.0; fpars.ns = 100; fpars.fast = 1; fpars.print = 0; fpars.charge_only = 0; fpars.hit_only = 1; nlopt_set_ftol_abs(opt, 1.0); nlopt_set_maxeval(opt, 20); for (i = 0; i < LEN(startingParameters); i++) { memcpy(x,x0,sizeof(x)); x[1] = startingParameters[i].x; x[2] = startingParameters[i].y; x[3] = startingParameters[i].z; /* Only fit for the direction and t0 when doing the "quick" * minimizations. To do this we set the lower bound equal to the upper * bound for these parameters which eliminates them from the * minimization. * * See https://nlopt.readthedocs.io/en/latest/NLopt_Reference/. */ lb[0] = T0; lb[1] = x[1]; lb[2] = x[2]; lb[3] = x[3]; lb[7] = 0.0; lb[8] = 0.0; ub[0] = T0; ub[1] = x[1]; ub[2] = x[2]; ub[3] = x[3]; ub[7] = 0.0; ub[8] = 0.0; nlopt_set_lower_bounds(opt, lb); nlopt_set_upper_bounds(opt, ub); guess_direction(ev,x+1,&x[4],&x[5]); x[6] = guess_t0(ev,x+1); gettimeofday(&tv_start, NULL); nlopt_optimize(opt,x,&fval); gettimeofday(&tv_stop, NULL); if (stop) goto stop; long long elapsed = (tv_stop.tv_sec - tv_start.tv_sec)*1000 + (tv_stop.tv_usec - tv_start.tv_usec)/1000; printf("%4zu/%4zu %7.2f %7.2f %7.2f %7.2f %5.2f %5.2f %6.2f %5.2f %5.2f f() = %7.3e took %lld ms\n", i+1, LEN(startingParameters), x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], fval, elapsed); if (i == 0 || fval < *fmin) { *fmin = fval; memcpy(xopt,x,sizeof(x)); } } /* Reset the lower and upper bounds. */ lb[0] = Tmin; lb[1] = -1000.0; lb[2] = -1000.0; lb[3] = -1000.0; lb[4] = -INFINITY; lb[5] = -INFINITY; lb[6] = 0.0; lb[7] = -10.0; lb[8] = -10.0; ub[0] = 10000.0; ub[1] = 1000.0; ub[2] = 1000.0; ub[3] = 1000.0; ub[4] = INFINITY; ub[5] = INFINITY; ub[6] = 400.0; ub[7] = 10.0; ub[8] = 10.0; nlopt_set_lower_bounds(opt, lb); nlopt_set_upper_bounds(opt, ub); /* Now, we do the "real" minimization. */ fpars.dx = 1.0; fpars.ns = 100; fpars.fast = 0; fpars.print = 1; fpars.charge_only = 0; fpars.hit_only = 0; nlopt_set_ftol_abs(opt, 1e-5); nlopt_set_xtol_rel(opt, 1e-2); nlopt_set_maxeval(opt, 1000); nlopt_set_maxtime(opt, maxtime); memcpy(x,xopt,sizeof(x)); gettimeofday(&tv_start, NULL); nlopt_optimize(opt,x,&fval); gettimeofday(&tv_stop, NULL); time_elapsed = tv_stop.tv_sec - tv_start.tv_sec + (tv_stop.tv_usec - tv_start.tv_usec)/1e6; if (time_elapsed > maxtime) goto end; if (stop) goto stop; do { *fmin = fval; memcpy(xopt,x,sizeof(x)); nlopt_set_maxtime(opt, maxtime-time_elapsed); gettimeofday(&tv_start, NULL); nlopt_optimize(opt,x,&fval); gettimeofday(&tv_stop, NULL); time_elapsed += tv_stop.tv_sec - tv_start.tv_sec + (tv_stop.tv_usec - tv_start.tv_usec)/1e6; if (stop) goto stop; } while (fval < *fmin && fabs(fval-*fmin) > 1e-2 && time_elapsed < maxtime); if (fval < *fmin) { *fmin = fval; memcpy(xopt,x,sizeof(x)); } end: nlopt_destroy(opt); return 0; stop: nlopt_destroy(opt); return NLOPT_FORCED_STOP; } void usage(void) { fprintf(stderr,"Usage: ./fit [options] FILENAME\n"); fprintf(stderr," -o output file\n"); fprintf(stderr," --max-time maximum time in seconds per fit (default: 3600)\n"); fprintf(stderr," --skip-second-event only fit the first event after a MAST bank\n"); fprintf(stderr," --max-particles maximum number of particles to fit for (default: 1)\n"); fprintf(stderr," --min-nhit minimum nhit to fit an event (default: 100)\n"); fprintf(stderr," --plot-likelihood FILENAME\n"); fprintf(stderr," scan the likelihood space and write out the results to FILENAME\n"); fprintf(stderr," --gtid only fit a single GTID\n"); fprintf(stderr," -h display this help message\n"); exit(1); } void sigint_handler(int dummy) { stop = 1; } void sprintf_particle_string(int *id, size_t n, char *str) { /* Convert a list of particle id codes to a string. * * This function is used when writing out the results for a multi particle * fit. Ideally we would use a set or something similar, but YAML doesn't * have support for that and lists can't be used as dictionary keys so * currently we just concatenate the integer representation of the * particles. For example: * * electron -> "20" * muon -> "22" * electron, muon -> "2022" * etc. * */ size_t i; sprintf(str,"%i",id[0]); for (i = 1; i < n; i++) sprintf(str+strlen(str),"%i",id[i]); } void sprintf_yaml_list(double *a, size_t n, size_t stride, char *str) { /* Write out a yaml list of doubles to the string pointed to by `str`. * * The array elements are accessed as a[i*stride] for i = 0,1,...,`n`. */ size_t i; if (n == 1) { sprintf(str,"%.2f",*a); return; } sprintf(str,"[%.2f",*a); for (i = 1; i < n; i++) sprintf(str+strlen(str),",%.2f",a[stride*i]); sprintf(str+strlen(str),"]"); } int main(int argc, char **argv) { int i, j, k; zebraFile *f; zebraBank bmast, bmc, bmcgn, mctk, b; int rv; EVBank bev; MCTKBank bmctk; MCVXBank bmcvx; event ev = {0}; double fmin; double xopt[MAX_PARS]; char *filename = NULL; char *output = NULL; FILE *fout = NULL; int skip_second_event = 0; struct timeval tv_start, tv_stop; long long elapsed; double fmin_best; double maxtime = 3600.0; int max_particles = 1; int id[MAX_VERTICES]; size_t combos[100]; size_t len; char tmp[256]; size_t nhit, min_nhit = 100; int last_run; char dqxx_file[256]; int32_t gtid = -1; for (i = 1; i < argc; i++) { if (strlen(argv[i]) >= 2 && !strncmp(argv[i], "--", 2)) { if (!strcmp(argv[i]+2,"skip-second-event")) { skip_second_event = 1; continue; } else if (!strcmp(argv[i]+2,"max-time")) { maxtime = strtod(argv[++i],NULL); continue; } else if (!strcmp(argv[i]+2,"max-particles")) { max_particles = atoi(argv[++i]); continue; } else if (!strcmp(argv[i]+2,"min-nhit")) { min_nhit = atoi(argv[++i]); continue; } else if (!strcmp(argv[i]+2,"plot-likelihood")) { flikelihood = argv[++i]; continue; } else if (!strcmp(argv[i]+2,"gtid")) { gtid = atoi(argv[++i]); continue; } } else if (argv[i][0] == '-') { switch (argv[i][1]) { case 'o': output = argv[++i]; break; case 'h': usage(); default: fprintf(stderr, "unrecognized option '%s'\n", argv[i]); exit(1); } } else { filename = argv[i]; } } if (!filename) usage(); if (max_particles > MAX_VERTICES) { fprintf(stderr, "max_particles must be less than or equal to %i\n", MAX_VERTICES); exit(1); } signal(SIGPIPE, SIG_IGN); signal(SIGINT, sigint_handler); f = zebra_open(filename); if (!f) { fprintf(stderr, "%s\n", zebra_err); return 1; } if (output) { fout = fopen(output, "w"); if (!fout) { fprintf(stderr, "failed to open '%s': %s\n", output, strerror(errno)); return 1; } fprintf(fout, "git_sha1: %s\n", GitSHA1()); fprintf(fout, "git_dirty: %s\n", GitDirty()); fprintf(fout, "data:\n"); } if (load_pmt_info()) { zebra_close(f); if (output) fclose(fout); return 1; } for (i = 0; i < MAX_PMTS; i++) { ev.pmt_hits[i].hit = 0; ev.pmt_hits[i].flags = 0; } ev.run = -1; init_interpolation(); init_charge(); dict *db = db_init(); last_run = 10000; if (load_file(db, "DQXX_0000010000.dat", 0)) { fprintf(stderr, "failed to load DQXX_0000010000.dat: %s\n", db_err); goto err; } if (dqxx_init(db, &ev)) { fprintf(stderr, "failed to initialize DQXX bank: %s\n", dqxx_err); goto err; } if (load_file(db, "pmt_response_qoca_d2o_20060216.dat", 0)) { fprintf(stderr, "failed to load pmt_response_qoca_d2o_20060216.dat: %s\n", db_err); goto err; } if (load_file(db, "rsp_rayleigh.dat", 0)) { fprintf(stderr, "failed to load rsp_rayleigh.dat: %s\n", db_err); goto err; } if (pmt_response_init(db)) { fprintf(stderr, "failed to initialize PMTR bank: %s\n", pmtr_err); goto err; } if (optics_init()) { fprintf(stderr, "failed to initialize optics: %s\n", optics_err); goto err; } while (1) { rv = zebra_read_next_logical_record(f); if (rv == -1) { fprintf(stderr, "error getting logical record: %s\n", zebra_err); goto err; } else if (rv == 1) { /* EOF */ break; } rv = zebra_get_bank(f, &bmast, f->first_bank); if (rv) { fprintf(stderr, "error getting MAST bank: %s\n", zebra_err); goto err; } if (fout) fprintf(fout, " -\n"); if (bmast.links[KMAST_MC-1] == 0) goto skip_mc; rv = zebra_get_bank(f,&bmc,bmast.links[KMAST_MC-1]); if (rv) { fprintf(stderr, "error getting MC bank: %s\n", zebra_err); goto err; } if (bmast.links[KMC_MCGN-1] == 0) { fprintf(stderr, "MCGN link is zero!\n"); goto err; } rv = zebra_get_bank(f,&bmcgn,bmc.links[KMC_MCGN-1]); if (rv) { fprintf(stderr, "error getting MCGN bank: %s\n", zebra_err); goto err; } if (fout) fprintf(fout, " mcgn:\n"); while (1) { if (bmcgn.links[KMCGN_MCTK-1] == 0) { fprintf(stderr, "MCTK link is zero!\n"); goto err; } rv = zebra_get_bank(f,&mctk,bmcgn.links[KMCGN_MCTK-1]); if (rv) { fprintf(stderr, "error getting MCTK bank: %s\n", zebra_err); goto err; } if (mctk.orig == mctk.up - KMCVX_MCTK) { /* This is the first MCTK bank. */ unpack_mctk(mctk.data, &bmctk); } else { /* For some reason SNOMAN sometimes links to the second MCTK * from the MCGN bank. */ rv = zebra_get_bank(f,&b,mctk.orig); if (b.idh != MCTK_RECORD) { fprintf(stderr, "error following origin link from MCTK bank!\n"); goto err; } if (rv) { fprintf(stderr, "error getting MCTK bank: %s\n", zebra_err); goto err; } unpack_mctk(b.data, &bmctk); } if (mctk.up == 0) { fprintf(stderr, "MCVX link is zero!\n"); goto err; } rv = zebra_get_bank(f,&b,mctk.up); if (rv) { fprintf(stderr, "error getting MCVX bank: %s\n", zebra_err); goto err; } unpack_mcvx(b.data, &bmcvx); if (fout) { fprintf(fout, " -\n"); fprintf(fout, " id: %" PRIu32 "\n", bmctk.idp); fprintf(fout, " energy: %.2f\n", bmctk.ene); fprintf(fout, " posx: %.2f\n", bmcvx.x); fprintf(fout, " posy: %.2f\n", bmcvx.y); fprintf(fout, " posz: %.2f\n", bmcvx.z); fprintf(fout, " dirx: %.4f\n", bmctk.drx); fprintf(fout, " diry: %.4f\n", bmctk.dry); fprintf(fout, " dirz: %.4f\n", bmctk.drz); } if (bmcgn.next) { rv = zebra_get_bank(f,&bmcgn,bmcgn.next); if (rv) { fprintf(stderr, "error getting MCGN bank: %s\n", zebra_err); goto err; } } else { break; } } skip_mc: if (bmast.links[KMAST_EV-1] == 0) { /* First logical record in SNOCR files doesn't have an EV bank. */ continue; } rv = zebra_get_bank(f,&b,bmast.links[KMAST_EV-1]); if (rv) { fprintf(stderr, "error getting EV bank: %s\n", zebra_err); goto err; } /* Skip to the last event so we can traverse them in reverse order. The * reason for this is that for some reason SNOMAN puts the events in * reverse order within each logical record. */ while (b.next) { rv = zebra_get_bank(f,&b,b.next); if (rv) { fprintf(stderr, "error getting EV bank: %s\n", zebra_err); goto err; } } if (fout) fprintf(fout, " ev:\n"); while (1) { unpack_ev(b.data, &bev); ev.run = bev.run; ev.gtid = bev.gtr_id; if (gtid > 0 && ev.gtid != gtid) goto skip_event; if (ev.run != last_run) { printf("loading DQXX file for run %010i\n", ev.run); sprintf(dqxx_file, "DQXX_%010i.dat", ev.run); if (load_file(db, dqxx_file, 1)) { fprintf(stderr, "failed to load %s: %s\n", dqxx_file, db_err); goto err; } if (dqxx_init(db, &ev)) { fprintf(stderr, "failed to initialize DQXX bank: %s\n", dqxx_err); goto err; } last_run = ev.run; } rv = get_event(f,&ev,&b); nhit = get_nhit(&ev); if (fout) { fprintf(fout, " - gtid: %i\n", ev.gtid); fprintf(fout, " nhit: %zu\n", nhit); } if (nhit < min_nhit) goto skip_event; if (fout) fprintf(fout, " fit:\n"); fmin_best = nll_best(&ev); /* Loop over 1,2,...,max_particles particle hypotheses. */ for (i = 1; i <= max_particles; i++) { /* Find all unique combinations of i particles. */ combinations_with_replacement(LEN(particles),i,combos,&len); for (j = 0; j < len; j++) { /* Set up the id array with the particle id codes. */ for (k = 0; k < i; k++) { id[k] = particles[combos[j*i+k]]; } /* Fit the event. */ gettimeofday(&tv_start, NULL); if (fit_event2(&ev,xopt,&fmin,id,i,maxtime) == NLOPT_FORCED_STOP) { printf("ctrl-c caught. quitting...\n"); goto end; } gettimeofday(&tv_stop, NULL); elapsed = (tv_stop.tv_sec - tv_start.tv_sec)*1000 + (tv_stop.tv_usec - tv_start.tv_usec)/1000; if (fout) { sprintf_particle_string(id,i,tmp); fprintf(fout, " %s:\n", tmp); fprintf(fout, " posx: %.2f\n", xopt[0]); fprintf(fout, " posy: %.2f\n", xopt[1]); fprintf(fout, " posz: %.2f\n", xopt[2]); fprintf(fout, " t0: %.2f\n", xopt[3]); sprintf_yaml_list(xopt+4,i,3,tmp); fprintf(fout, " energy: %s\n", tmp); sprintf_yaml_list(xopt+5,i,3,tmp); fprintf(fout, " theta: %s\n", tmp); sprintf_yaml_list(xopt+6,i,3,tmp); fprintf(fout, " phi: %s\n", tmp); //fprintf(fout, " z1: %.2f\n", xopt[7]); //fprintf(fout, " z2: %.2f\n", xopt[8]); fprintf(fout, " fmin: %.2f\n", fmin); fprintf(fout, " time: %lld\n", elapsed); fprintf(fout, " psi: %.2f\n", fmin-fmin_best); fflush(fout); } } } skip_event: /* Note the origin link for the first EV bank points back to the * structural link location in the MAST bank. These links are super * confusing! */ if ((b.orig == f->first_bank - KMAST_EV) || skip_second_event) break; rv = zebra_get_bank(f,&b,b.orig); if (rv) { fprintf(stderr, "error getting EV bank: %s\n", zebra_err); goto err; } } } end: free_interpolation(); pmt_response_free(); db_free(db); if (fout) fclose(fout); zebra_close(f); return 0; err: free_interpolation(); pmt_response_free(); db_free(db); if (fout) fclose(fout); zebra_close(f); return 1; }