Showing preview only (1,660K chars total). Download the full file or copy to clipboard to get everything.
Repository: allenyangyl/Face_Liveness_Detection
Branch: master
Commit: 9e92d3353e8a
Files: 178
Total size: 35.0 MB
Directory structure:
gitextract_0t6fbsbr/
├── C++/
│ ├── README.txt
│ ├── lbp/
│ │ ├── CMakeLists.txt
│ │ ├── LICENSE
│ │ ├── histogram.cpp
│ │ ├── histogram.hpp
│ │ ├── lbp.cpp
│ │ ├── lbp.hpp
│ │ ├── main.cpp
│ │ ├── mapping_n16.txt
│ │ └── mapping_n8.txt
│ ├── liveness.cpp
│ ├── liveness.h
│ ├── svm_minmax_NUAA.txt
│ ├── svm_model_NUAA
│ └── test.cpp
├── Matlab/
│ ├── DoG.m
│ ├── DoGLBP_Test.m
│ ├── DoG_CASIA_Test.m
│ ├── DoG_CASIA_Train.m
│ ├── DoG_LBP_All_Train.m
│ ├── DoG_LBP_CASIA_Test.m
│ ├── DoG_LBP_CASIA_Train.m
│ ├── DoG_LBP_NUAA_Test.m
│ ├── DoG_LBP_NUAA_Train.m
│ ├── DoG_LBP_PRINT_ATTACK_Test.m
│ ├── DoG_LBP_PRINT_ATTACK_Train.m
│ ├── DoG_NUAA_Test.m
│ ├── DoG_NUAA_Train.m
│ ├── DoG_PRINT_ATTACK_Test.m
│ ├── DoG_PRINT_ATTACK_Train.m
│ ├── HFD.m
│ ├── HFDTest.m
│ ├── HFDTrain.m
│ ├── HOOF/
│ │ ├── README
│ │ ├── README~
│ │ ├── chiSquareDist.m
│ │ ├── computeDistanceModularHistogram.m
│ │ ├── computeDistanceOrdinalHistogram.m
│ │ ├── computeDistancesBetweenKPCASystems.m
│ │ ├── findSubspaceAnglesBetweenKPCASystems.m
│ │ ├── findSubspaceAnglesBetweenKPCASystemsSqrtHist.asv
│ │ ├── findSubspaceAnglesBetweenKPCASystemsSqrtHist.m
│ │ ├── gradientHistogram.m
│ │ ├── histogramKernel.m
│ │ ├── identifySystemUsingKPCA.m
│ │ ├── traceKernelKPCASystems.m
│ │ └── traceKernelKPCASystemsSqrtHist.m
│ ├── HOOF.m
│ ├── HSoptflow.m
│ ├── LBP_CASIA_Test.m
│ ├── LBP_CASIA_Train.m
│ ├── LBP_NUAA_Test.m
│ ├── LBP_NUAA_Train.m
│ ├── LBP_PRINT_ATTACK_Test.m
│ ├── LBP_PRINT_ATTACK_Train.m
│ ├── LBP_feature.m
│ ├── NUAA/
│ │ ├── client_test_normalized.txt
│ │ ├── client_train_normalized.txt
│ │ ├── imposter_test_normalized.txt
│ │ ├── imposter_train_normalized.txt
│ │ └── readme.txt
│ ├── OF_All_Train.m
│ ├── OF_CASIA_Test.m
│ ├── OF_CASIA_Train.m
│ ├── OF_PRINT_ATTACK_Test.m
│ ├── OF_PRINT_ATTACK_Train.m
│ ├── RealTime_DoGLBP.m
│ ├── RealTime_OF.m
│ ├── Save_CASIA_Test.m
│ ├── Save_CASIA_Train.m
│ ├── Save_NUAA.m
│ ├── Save_PRINT_ATTACK_Test.m
│ ├── Save_PRINT_ATTACK_Train.m
│ ├── lbp-0.3.3/
│ │ ├── getmapping.m
│ │ └── lbp.m
│ ├── liblinear-1.96/
│ │ ├── COPYRIGHT
│ │ ├── Makefile
│ │ ├── Makefile.win
│ │ ├── README
│ │ ├── blas/
│ │ │ ├── Makefile
│ │ │ ├── blas.h
│ │ │ ├── blasp.h
│ │ │ ├── daxpy.c
│ │ │ ├── ddot.c
│ │ │ ├── dnrm2.c
│ │ │ └── dscal.c
│ │ ├── heart_scale
│ │ ├── linear.cpp
│ │ ├── linear.def
│ │ ├── linear.h
│ │ ├── matlab/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── libsvmread.c
│ │ │ ├── libsvmread.mexw64
│ │ │ ├── libsvmwrite.c
│ │ │ ├── libsvmwrite.mexw64
│ │ │ ├── linear_model_matlab.c
│ │ │ ├── linear_model_matlab.h
│ │ │ ├── make.m
│ │ │ ├── predict.c
│ │ │ ├── predict.mexw64
│ │ │ ├── train.c
│ │ │ └── train.mexw64
│ │ ├── predict.c
│ │ ├── python/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── liblinear.py
│ │ │ └── liblinearutil.py
│ │ ├── train.c
│ │ ├── tron.cpp
│ │ ├── tron.h
│ │ └── windows/
│ │ ├── libsvmread.mexw64
│ │ ├── libsvmwrite.mexw64
│ │ ├── predict.mexw64
│ │ └── train.mexw64
│ └── libsvm-3.19/
│ ├── COPYRIGHT
│ ├── FAQ.html
│ ├── Makefile
│ ├── Makefile.win
│ ├── README
│ ├── heart_scale
│ ├── java/
│ │ ├── Makefile
│ │ ├── libsvm/
│ │ │ ├── svm.java
│ │ │ ├── svm.m4
│ │ │ ├── svm_model.java
│ │ │ ├── svm_node.java
│ │ │ ├── svm_parameter.java
│ │ │ ├── svm_print_interface.java
│ │ │ └── svm_problem.java
│ │ ├── libsvm.jar
│ │ ├── svm_predict.java
│ │ ├── svm_scale.java
│ │ ├── svm_toy.java
│ │ ├── svm_train.java
│ │ └── test_applet.html
│ ├── matlab/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── libsvmread.c
│ │ ├── libsvmread.mexw64
│ │ ├── libsvmwrite.c
│ │ ├── libsvmwrite.mexw64
│ │ ├── make.m
│ │ ├── svm_model_matlab.c
│ │ ├── svm_model_matlab.h
│ │ ├── svmpredict.c
│ │ ├── svmpredict.mexw64
│ │ ├── svmtrain.c
│ │ └── svmtrain.mexw64
│ ├── python/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── svm.py
│ │ └── svmutil.py
│ ├── svm-predict.c
│ ├── svm-scale.c
│ ├── svm-toy/
│ │ ├── gtk/
│ │ │ ├── Makefile
│ │ │ ├── callbacks.cpp
│ │ │ ├── callbacks.h
│ │ │ ├── interface.c
│ │ │ ├── interface.h
│ │ │ ├── main.c
│ │ │ └── svm-toy.glade
│ │ ├── qt/
│ │ │ ├── Makefile
│ │ │ └── svm-toy.cpp
│ │ └── windows/
│ │ └── svm-toy.cpp
│ ├── svm-train.c
│ ├── svm.cpp
│ ├── svm.def
│ ├── svm.h
│ ├── tools/
│ │ ├── README
│ │ ├── checkdata.py
│ │ ├── easy.py
│ │ ├── grid.py
│ │ └── subset.py
│ └── windows/
│ ├── libsvmread.mexw64
│ ├── libsvmwrite.mexw64
│ ├── svmpredict.mexw64
│ └── svmtrain.mexw64
└── README.md
================================================
FILE CONTENTS
================================================
================================================
FILE: C++/README.txt
================================================
ļ嵥
liveness.cpp
liveness.hͷļ
svm_modelѵsvmģ
svm_minmaxʱһIJ
./lbpLBPȡ
./libsvm-3.19LibSVM
ҪĿcppļ
liveness.cpp
./lbp/lbp.cpp
./lbp/histogram.cpp
./libsvm-3.19/svm.cpp
õͷļΪ
#include"liveness.h"
ʹõOpenCV汾Ϊ3.0.0-RC1
ʹõݿNUAA, PRINT-ATTACK, CASIA
Щⲻճ
class ThuVisionFaceLiveCheck{
public:
// Initialization: successful - true; failed - false
bool Init();
// Liveness Predict: input image path or Mat.
// If it is a real face, return true; otherwise, return false
bool Check(std::string imgPath);
bool Check(cv::Mat img);
private:
int img_size;
int LBP_size;
svm_model* model;
double* Feature_Max;
double* Feature_Min;
vector<int> mapping_r8;
vector<int> mapping_r16;
};
================================================
FILE: C++/lbp/CMakeLists.txt
================================================
PROJECT(githublbp)
SET(CMAKE_BUILD_TYPE Release)
CMAKE_MINIMUM_REQUIRED( VERSION 2.6 )
FIND_PACKAGE( OpenCV REQUIRED )
ADD_EXECUTABLE(lbp main.cpp lbp.cpp histogram.cpp)
TARGET_LINK_LIBRARIES(lbp ${OpenCV_LIBS})
================================================
FILE: C++/lbp/LICENSE
================================================
Copyright (c) 2011, philipp <bytefish[at]gmx.de>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the organization nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: C++/lbp/histogram.cpp
================================================
#include "histogram.hpp"
#include <vector>
template <typename _Tp>
void lbp::histogram_(const Mat& src, Mat& hist, int numPatterns) {
hist = Mat::zeros(1, numPatterns, CV_32SC1);
for(int i = 0; i < src.rows; i++) {
for(int j = 0; j < src.cols; j++) {
int bin = src.at<_Tp>(i,j);
hist.at<int>(0,bin) += 1;
}
}
}
template <typename _Tp>
double lbp::chi_square_(const Mat& histogram0, const Mat& histogram1) {
if(histogram0.type() != histogram1.type())
CV_Error(CV_StsBadArg, "Histograms must be of equal type.");
if(histogram0.rows != 1 || histogram0.rows != histogram1.rows || histogram0.cols != histogram1.cols)
CV_Error(CV_StsBadArg, "Histograms must be of equal dimension.");
double result = 0.0;
for(int i=0; i < histogram0.cols; i++) {
double a = histogram0.at<_Tp>(0,i) - histogram1.at<_Tp>(0,i);
double b = histogram0.at<_Tp>(0,i) + histogram1.at<_Tp>(0,i);
if(abs(b) > numeric_limits<double>::epsilon()) {
result+=(a*a)/b;
}
}
return result;
}
void lbp::spatial_histogram(const Mat& src, Mat& hist, int numPatterns, const Size& window, int overlap) {
int width = src.cols;
int height = src.rows;
vector<Mat> histograms;
for(int x=0; x < width - window.width + 1; x+=(window.width-overlap)) {
for(int y=0; y < height-window.height + 1; y+=(window.height-overlap)) {
Mat cell = Mat(src, Rect(x,y,window.width, window.height));
histograms.push_back(histogram(cell, numPatterns));
}
}
hist.create(1, histograms.size()*numPatterns, CV_32SC1);
// i know this is a bit lame now... feel free to make this a bit more efficient...
for(int histIdx=0; histIdx < histograms.size(); histIdx++) {
for(int valIdx = 0; valIdx < numPatterns; valIdx++) {
int y = histIdx*numPatterns+valIdx;
hist.at<int>(0,y) = histograms[histIdx].at<int>(valIdx);
}
}
}
// wrappers
void lbp::histogram(const Mat& src, Mat& hist, int numPatterns) {
switch(src.type()) {
case CV_8SC1: histogram_<char>(src, hist, numPatterns); break;
case CV_8UC1: histogram_<unsigned char>(src, hist, numPatterns); break;
case CV_16SC1: histogram_<short>(src, hist, numPatterns); break;
case CV_16UC1: histogram_<unsigned short>(src, hist, numPatterns); break;
case CV_32SC1: histogram_<int>(src, hist, numPatterns); break;
}
}
double lbp::chi_square(const Mat& histogram0, const Mat& histogram1) {
switch(histogram0.type()) {
case CV_8SC1: return chi_square_<char>(histogram0,histogram1); break;
case CV_8UC1: return chi_square_<unsigned char>(histogram0,histogram1); break;
case CV_16SC1: return chi_square_<short>(histogram0, histogram1); break;
case CV_16UC1: return chi_square_<unsigned short>(histogram0,histogram1); break;
case CV_32SC1: return chi_square_<int>(histogram0,histogram1); break;
}
}
void lbp::spatial_histogram(const Mat& src, Mat& dst, int numPatterns, int gridx, int gridy, int overlap) {
int width = static_cast<int>(floor(src.cols / gridx));
int height = static_cast<int>(floor(src.rows / gridy));
spatial_histogram(src, dst, numPatterns, Size_<int>(width, height), overlap);
}
// Mat return type functions
Mat lbp::histogram(const Mat& src, int numPatterns) {
Mat hist;
histogram(src, hist, numPatterns);
return hist;
}
Mat lbp::spatial_histogram(const Mat& src, int numPatterns, const Size& window, int overlap) {
Mat hist;
spatial_histogram(src, hist, numPatterns, window, overlap);
return hist;
}
Mat lbp::spatial_histogram(const Mat& src, int numPatterns, int gridx, int gridy, int overlap) {
Mat hist;
spatial_histogram(src, hist, numPatterns, gridx, gridy, overlap);
return hist;
}
================================================
FILE: C++/lbp/histogram.hpp
================================================
#ifndef HISTOGRAM_HPP_
#define HISTOGRAM_HPP_
//! \author philipp <bytefish[at]gmx[dot]de>
//! \copyright BSD, see LICENSE.
#include <cv.h>
#include <limits>
using namespace cv;
using namespace std;
namespace lbp {
// templated functions
template <typename _Tp>
void histogram_(const Mat& src, Mat& hist, int numPatterns);
template <typename _Tp>
double chi_square_(const Mat& histogram0, const Mat& histogram1);
// non-templated functions
void spatial_histogram(const Mat& src, Mat& spatialhist, int numPatterns, const Size& window, int overlap=0);
// wrapper functions
void spatial_histogram(const Mat& src, Mat& spatialhist, int numPatterns, int gridx=8, int gridy=8, int overlap=0);
void histogram(const Mat& src, Mat& hist, int numPatterns);
double chi_square(const Mat& histogram0, const Mat& histogram1);
// Mat return type functions
Mat histogram(const Mat& src, int numPatterns);
Mat spatial_histogram(const Mat& src, int numPatterns, const Size& window, int overlap=0);
Mat spatial_histogram(const Mat& src, int numPatterns, int gridx=8, int gridy=8, int overlap=0);
}
#endif
================================================
FILE: C++/lbp/lbp.cpp
================================================
#include "lbp.hpp"
#define M_PI 3.14159265358979323846
using namespace cv;
template <typename _Tp>
void lbp::OLBP_(const Mat& src, Mat& dst) {
dst = Mat::zeros(src.rows-2, src.cols-2, CV_8UC1);
for(int i=1;i<src.rows-1;i++) {
for(int j=1;j<src.cols-1;j++) {
_Tp center = src.at<_Tp>(i,j);
unsigned char code = 0;
code |= (src.at<_Tp>(i-1,j-1) > center) << 7;
code |= (src.at<_Tp>(i-1,j) > center) << 6;
code |= (src.at<_Tp>(i-1,j+1) > center) << 5;
code |= (src.at<_Tp>(i,j+1) > center) << 4;
code |= (src.at<_Tp>(i+1,j+1) > center) << 3;
code |= (src.at<_Tp>(i+1,j) > center) << 2;
code |= (src.at<_Tp>(i+1,j-1) > center) << 1;
code |= (src.at<_Tp>(i,j-1) > center) << 0;
dst.at<unsigned char>(i-1,j-1) = code;
}
}
}
template <typename _Tp>
void lbp::ELBP_(const Mat& src, Mat& dst, int radius, int neighbors) {
neighbors = max(min(neighbors,31),1); // set bounds...
// Note: alternatively you can switch to the new OpenCV Mat_
// type system to define an unsigned int matrix... I am probably
// mistaken here, but I didn't see an unsigned int representation
// in OpenCV's classic typesystem...
dst = Mat::zeros(src.rows-2*radius, src.cols-2*radius, CV_32SC1);
for(int n=0; n<neighbors; n++) {
// sample points
float x = static_cast<float>(radius) * cos(2.0*M_PI*n/static_cast<float>(neighbors));
float y = static_cast<float>(radius) * -sin(2.0*M_PI*n/static_cast<float>(neighbors));
// relative indices
int fx = static_cast<int>(floor(x));
int fy = static_cast<int>(floor(y));
int cx = static_cast<int>(ceil(x));
int cy = static_cast<int>(ceil(y));
// fractional part
float ty = y - fy;
float tx = x - fx;
// set interpolation weights
float w1 = (1 - tx) * (1 - ty);
float w2 = tx * (1 - ty);
float w3 = (1 - tx) * ty;
float w4 = tx * ty;
// iterate through your data
for(int i=radius; i < src.rows-radius;i++) {
for(int j=radius;j < src.cols-radius;j++) {
float t = w1*src.at<_Tp>(i+fy,j+fx) + w2*src.at<_Tp>(i+fy,j+cx) + w3*src.at<_Tp>(i+cy,j+fx) + w4*src.at<_Tp>(i+cy,j+cx);
// we are dealing with floating point precision, so add some little tolerance
dst.at<int>(i-radius,j-radius) += ((t > src.at<_Tp>(i,j)) && (abs(t-src.at<_Tp>(i,j)) > std::numeric_limits<float>::epsilon())) << n;
}
}
}
}
template <typename _Tp>
void lbp::VARLBP_(const Mat& src, Mat& dst, int radius, int neighbors) {
max(min(neighbors,31),1); // set bounds
dst = Mat::zeros(src.rows-2*radius, src.cols-2*radius, CV_32FC1); //! result
// allocate some memory for temporary on-line variance calculations
Mat _mean = Mat::zeros(src.rows, src.cols, CV_32FC1);
Mat _delta = Mat::zeros(src.rows, src.cols, CV_32FC1);
Mat _m2 = Mat::zeros(src.rows, src.cols, CV_32FC1);
for(int n=0; n<neighbors; n++) {
// sample points
float x = static_cast<float>(radius) * cos(2.0*M_PI*n/static_cast<float>(neighbors));
float y = static_cast<float>(radius) * -sin(2.0*M_PI*n/static_cast<float>(neighbors));
// relative indices
int fx = static_cast<int>(floor(x));
int fy = static_cast<int>(floor(y));
int cx = static_cast<int>(ceil(x));
int cy = static_cast<int>(ceil(y));
// fractional part
float ty = y - fy;
float tx = x - fx;
// set interpolation weights
float w1 = (1 - tx) * (1 - ty);
float w2 = tx * (1 - ty);
float w3 = (1 - tx) * ty;
float w4 = tx * ty;
// iterate through your data
for(int i=radius; i < src.rows-radius;i++) {
for(int j=radius;j < src.cols-radius;j++) {
float t = w1*src.at<_Tp>(i+fy,j+fx) + w2*src.at<_Tp>(i+fy,j+cx) + w3*src.at<_Tp>(i+cy,j+fx) + w4*src.at<_Tp>(i+cy,j+cx);
_delta.at<float>(i,j) = t - _mean.at<float>(i,j);
_mean.at<float>(i,j) = (_mean.at<float>(i,j) + (_delta.at<float>(i,j) / (1.0*(n+1)))); // i am a bit paranoid
_m2.at<float>(i,j) = _m2.at<float>(i,j) + _delta.at<float>(i,j) * (t - _mean.at<float>(i,j));
}
}
}
// calculate result
for(int i = radius; i < src.rows-radius; i++) {
for(int j = radius; j < src.cols-radius; j++) {
dst.at<float>(i-radius, j-radius) = _m2.at<float>(i,j) / (1.0*(neighbors-1));
}
}
}
// now the wrapper functions
void lbp::OLBP(const Mat& src, Mat& dst) {
switch(src.type()) {
case CV_8SC1: OLBP_<char>(src, dst); break;
case CV_8UC1: OLBP_<unsigned char>(src, dst); break;
case CV_16SC1: OLBP_<short>(src, dst); break;
case CV_16UC1: OLBP_<unsigned short>(src, dst); break;
case CV_32SC1: OLBP_<int>(src, dst); break;
case CV_32FC1: OLBP_<float>(src, dst); break;
case CV_64FC1: OLBP_<double>(src, dst); break;
}
}
void lbp::ELBP(const Mat& src, Mat& dst, int radius, int neighbors) {
switch(src.type()) {
case CV_8SC1: ELBP_<char>(src, dst, radius, neighbors); break;
case CV_8UC1: ELBP_<unsigned char>(src, dst, radius, neighbors); break;
case CV_16SC1: ELBP_<short>(src, dst, radius, neighbors); break;
case CV_16UC1: ELBP_<unsigned short>(src, dst, radius, neighbors); break;
case CV_32SC1: ELBP_<int>(src, dst, radius, neighbors); break;
case CV_32FC1: ELBP_<float>(src, dst, radius, neighbors); break;
case CV_64FC1: ELBP_<double>(src, dst, radius, neighbors); break;
}
}
void lbp::VARLBP(const Mat& src, Mat& dst, int radius, int neighbors) {
switch(src.type()) {
case CV_8SC1: VARLBP_<char>(src, dst, radius, neighbors); break;
case CV_8UC1: VARLBP_<unsigned char>(src, dst, radius, neighbors); break;
case CV_16SC1: VARLBP_<short>(src, dst, radius, neighbors); break;
case CV_16UC1: VARLBP_<unsigned short>(src, dst, radius, neighbors); break;
case CV_32SC1: VARLBP_<int>(src, dst, radius, neighbors); break;
case CV_32FC1: VARLBP_<float>(src, dst, radius, neighbors); break;
case CV_64FC1: VARLBP_<double>(src, dst, radius, neighbors); break;
}
}
// now the Mat return functions
Mat lbp::OLBP(const Mat& src) { Mat dst; OLBP(src, dst); return dst; }
Mat lbp::ELBP(const Mat& src, int radius, int neighbors) { Mat dst; ELBP(src, dst, radius, neighbors); return dst; }
Mat lbp::VARLBP(const Mat& src, int radius, int neighbors) { Mat dst; VARLBP(src, dst, radius, neighbors); return dst; }
================================================
FILE: C++/lbp/lbp.hpp
================================================
#ifndef LBP_HPP_
#define LBP_HPP_
//! \author philipp <bytefish[at]gmx[dot]de>
//! \copyright BSD, see LICENSE.
#include <cv.h>
#include <limits>
using namespace cv;
using namespace std;
namespace lbp {
// templated functions
template <typename _Tp>
void OLBP_(const cv::Mat& src, cv::Mat& dst);
template <typename _Tp>
void ELBP_(const cv::Mat& src, cv::Mat& dst, int radius = 1, int neighbors = 8);
template <typename _Tp>
void VARLBP_(const cv::Mat& src, cv::Mat& dst, int radius = 1, int neighbors = 8);
// wrapper functions
void OLBP(const Mat& src, Mat& dst);
void ELBP(const Mat& src, Mat& dst, int radius = 1, int neighbors = 8);
void VARLBP(const Mat& src, Mat& dst, int radius = 1, int neighbors = 8);
// Mat return type functions
Mat OLBP(const Mat& src);
Mat ELBP(const Mat& src, int radius = 1, int neighbors = 8);
Mat VARLBP(const Mat& src, int radius = 1, int neighbors = 8);
}
#endif
================================================
FILE: C++/lbp/main.cpp
================================================
#include <cv.h>
#include <highgui.h>
#include "lbp.hpp"
#include "histogram.hpp"
using namespace cv;
int main(int argc, const char *argv[]) {
int deviceId = 0;
if(argc > 1)
deviceId = atoi(argv[1]);
VideoCapture cap(deviceId);
if(!cap.isOpened()) {
cerr << "Capture Device ID " << deviceId << "cannot be opened." << endl;
return -1;
}
// initial values
int radius = 1;
int neighbors = 8;
// windows
namedWindow("original",CV_WINDOW_AUTOSIZE);
namedWindow("lbp",CV_WINDOW_AUTOSIZE);
// matrices used
Mat frame; // always references the last frame
Mat dst; // image after preprocessing
Mat lbp; // lbp image
// just to switch between possible lbp operators
vector<string> lbp_names;
lbp_names.push_back("Extended LBP"); // 0
lbp_names.push_back("Fixed Sampling LBP"); // 1
lbp_names.push_back("Variance-based LBP"); // 2
int lbp_operator=0;
bool running=true;
while(running) {
cap >> frame;
cvtColor(frame, dst, CV_BGR2GRAY);
GaussianBlur(dst, dst, Size(7,7), 5, 3, BORDER_CONSTANT); // tiny bit of smoothing is always a good idea
// comment the following lines for original size
resize(frame, frame, Size(), 0.5, 0.5);
resize(dst,dst,Size(), 0.5, 0.5);
//
switch(lbp_operator) {
case 0:
lbp::ELBP(dst, lbp, radius, neighbors); // use the extended operator
break;
case 1:
lbp::OLBP(dst, lbp); // use the original operator
break;
case 2:
lbp::VARLBP(dst, lbp, radius, neighbors);
break;
}
// now to show the patterns a normalization is necessary
// a simple min-max norm will do the job...
normalize(lbp, lbp, 0, 255, NORM_MINMAX, CV_8UC1);
imshow("original", frame);
imshow("lbp", lbp);
char key = (char) waitKey(20);
// exit on escape
if(key == 27)
running=false;
// to make it a bit interactive, you can increase and decrease the parameters
switch(key) {
case 'q': case 'Q':
running=false;
break;
// lower case r decreases the radius (min 1)
case 'r':
radius-=1;
radius = std::max(radius,1);
cout << "radius=" << radius << endl;
break;
// upper case r increases the radius (there's no real upper bound)
case 'R':
radius+=1;
radius = std::min(radius,32);
cout << "radius=" << radius << endl;
break;
// lower case p decreases the number of sampling points (min 1)
case 'p':
neighbors-=1;
neighbors = std::max(neighbors,1);
cout << "sampling points=" << neighbors << endl;
break;
// upper case p increases the number of sampling points (max 31)
case 'P':
neighbors+=1;
neighbors = std::min(neighbors,31);
cout << "sampling points=" << neighbors << endl;
break;
// switch between operators
case 'o': case 'O':
lbp_operator = (lbp_operator + 1) % 3;
cout << "Switched to operator " << lbp_names[lbp_operator] << endl;
break;
case 's': case 'S':
imwrite("original.jpg", frame);
imwrite("lbp.jpg", lbp);
cout << "Screenshot (operator=" << lbp_names[lbp_operator] << ",radius=" << radius <<",points=" << neighbors << ")" << endl;
break;
default:
break;
}
}
return 0; // success
}
================================================
FILE: C++/lbp/mapping_n16.txt
================================================
0 1 2 3 4 242 5 6 7 242 242 242 8 242 9 10 11 242 242 242 242 242 242 242 12 242 242 242 13 242 14 15 16 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 17 242 242 242 242 242 242 242 18 242 242 242 19 242 20 21 22 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 23 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 24 242 242 242 242 242 242 242 25 242 242 242 26 242 27 28 29 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 30 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 31 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 32 242 242 242 242 242 242 242 33 242 242 242 34 242 35 36 37 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 38 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 39 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 40 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 41 242 242 242 242 242 242 242 42 242 242 242 43 242 44 45 46 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 47 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 48 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 49 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 50 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 51 242 242 242 242 242 242 242 52 242 242 242 53 242 54 55 56 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 57 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 58 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 59 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 60 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 61 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 62 242 242 242 242 242 242 242 63 242 242 242 64 242 65 66 67 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 68 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 69 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 70 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 71 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 72 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 73 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 74 242 242 242 242 242 242 242 75 242 242 242 76 242 77 78 79 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 80 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 81 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 82 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 83 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 84 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 85 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 86 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 87 242 242 242 242 242 242 242 88 242 242 242 89 242 90 91 92 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 93 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 94 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 95 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 96 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 97 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 98 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 99 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 100 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 101 242 242 242 242 242 242 242 102 242 242 242 103 242 104 105 106 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 107 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 108 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 109 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 110 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 111 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 112 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 113 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 114 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 115 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 116 242 242 242 242 242 242 242 117 242 242 242 118 242 119 120 121 122 242 123 242 242 242 124 242 242 242 242 242 242 242 125 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 126 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 127 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 128 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 129 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 130 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 131 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 132 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 133 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 134 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 242 24
gitextract_0t6fbsbr/ ├── C++/ │ ├── README.txt │ ├── lbp/ │ │ ├── CMakeLists.txt │ │ ├── LICENSE │ │ ├── histogram.cpp │ │ ├── histogram.hpp │ │ ├── lbp.cpp │ │ ├── lbp.hpp │ │ ├── main.cpp │ │ ├── mapping_n16.txt │ │ └── mapping_n8.txt │ ├── liveness.cpp │ ├── liveness.h │ ├── svm_minmax_NUAA.txt │ ├── svm_model_NUAA │ └── test.cpp ├── Matlab/ │ ├── DoG.m │ ├── DoGLBP_Test.m │ ├── DoG_CASIA_Test.m │ ├── DoG_CASIA_Train.m │ ├── DoG_LBP_All_Train.m │ ├── DoG_LBP_CASIA_Test.m │ ├── DoG_LBP_CASIA_Train.m │ ├── DoG_LBP_NUAA_Test.m │ ├── DoG_LBP_NUAA_Train.m │ ├── DoG_LBP_PRINT_ATTACK_Test.m │ ├── DoG_LBP_PRINT_ATTACK_Train.m │ ├── DoG_NUAA_Test.m │ ├── DoG_NUAA_Train.m │ ├── DoG_PRINT_ATTACK_Test.m │ ├── DoG_PRINT_ATTACK_Train.m │ ├── HFD.m │ ├── HFDTest.m │ ├── HFDTrain.m │ ├── HOOF/ │ │ ├── README │ │ ├── README~ │ │ ├── chiSquareDist.m │ │ ├── computeDistanceModularHistogram.m │ │ ├── computeDistanceOrdinalHistogram.m │ │ ├── computeDistancesBetweenKPCASystems.m │ │ ├── findSubspaceAnglesBetweenKPCASystems.m │ │ ├── findSubspaceAnglesBetweenKPCASystemsSqrtHist.asv │ │ ├── findSubspaceAnglesBetweenKPCASystemsSqrtHist.m │ │ ├── gradientHistogram.m │ │ ├── histogramKernel.m │ │ ├── identifySystemUsingKPCA.m │ │ ├── traceKernelKPCASystems.m │ │ └── traceKernelKPCASystemsSqrtHist.m │ ├── HOOF.m │ ├── HSoptflow.m │ ├── LBP_CASIA_Test.m │ ├── LBP_CASIA_Train.m │ ├── LBP_NUAA_Test.m │ ├── LBP_NUAA_Train.m │ ├── LBP_PRINT_ATTACK_Test.m │ ├── LBP_PRINT_ATTACK_Train.m │ ├── LBP_feature.m │ ├── NUAA/ │ │ ├── client_test_normalized.txt │ │ ├── client_train_normalized.txt │ │ ├── imposter_test_normalized.txt │ │ ├── imposter_train_normalized.txt │ │ └── readme.txt │ ├── OF_All_Train.m │ ├── OF_CASIA_Test.m │ ├── OF_CASIA_Train.m │ ├── OF_PRINT_ATTACK_Test.m │ ├── OF_PRINT_ATTACK_Train.m │ ├── RealTime_DoGLBP.m │ ├── RealTime_OF.m │ ├── Save_CASIA_Test.m │ ├── Save_CASIA_Train.m │ ├── Save_NUAA.m │ ├── Save_PRINT_ATTACK_Test.m │ ├── Save_PRINT_ATTACK_Train.m │ ├── lbp-0.3.3/ │ │ ├── getmapping.m │ │ └── lbp.m │ ├── liblinear-1.96/ │ │ ├── COPYRIGHT │ │ ├── Makefile │ │ ├── Makefile.win │ │ ├── README │ │ ├── blas/ │ │ │ ├── Makefile │ │ │ ├── blas.h │ │ │ ├── blasp.h │ │ │ ├── daxpy.c │ │ │ ├── ddot.c │ │ │ ├── dnrm2.c │ │ │ └── dscal.c │ │ ├── heart_scale │ │ ├── linear.cpp │ │ ├── linear.def │ │ ├── linear.h │ │ ├── matlab/ │ │ │ ├── Makefile │ │ │ ├── README │ │ │ ├── libsvmread.c │ │ │ ├── libsvmread.mexw64 │ │ │ ├── libsvmwrite.c │ │ │ ├── libsvmwrite.mexw64 │ │ │ ├── linear_model_matlab.c │ │ │ ├── linear_model_matlab.h │ │ │ ├── make.m │ │ │ ├── predict.c │ │ │ ├── predict.mexw64 │ │ │ ├── train.c │ │ │ └── train.mexw64 │ │ ├── predict.c │ │ ├── python/ │ │ │ ├── Makefile │ │ │ ├── README │ │ │ ├── liblinear.py │ │ │ └── liblinearutil.py │ │ ├── train.c │ │ ├── tron.cpp │ │ ├── tron.h │ │ └── windows/ │ │ ├── libsvmread.mexw64 │ │ ├── libsvmwrite.mexw64 │ │ ├── predict.mexw64 │ │ └── train.mexw64 │ └── libsvm-3.19/ │ ├── COPYRIGHT │ ├── FAQ.html │ ├── Makefile │ ├── Makefile.win │ ├── README │ ├── heart_scale │ ├── java/ │ │ ├── Makefile │ │ ├── libsvm/ │ │ │ ├── svm.java │ │ │ ├── svm.m4 │ │ │ ├── svm_model.java │ │ │ ├── svm_node.java │ │ │ ├── svm_parameter.java │ │ │ ├── svm_print_interface.java │ │ │ └── svm_problem.java │ │ ├── libsvm.jar │ │ ├── svm_predict.java │ │ ├── svm_scale.java │ │ ├── svm_toy.java │ │ ├── svm_train.java │ │ └── test_applet.html │ ├── matlab/ │ │ ├── Makefile │ │ ├── README │ │ ├── libsvmread.c │ │ ├── libsvmread.mexw64 │ │ ├── libsvmwrite.c │ │ ├── libsvmwrite.mexw64 │ │ ├── make.m │ │ ├── svm_model_matlab.c │ │ ├── svm_model_matlab.h │ │ ├── svmpredict.c │ │ ├── svmpredict.mexw64 │ │ ├── svmtrain.c │ │ └── svmtrain.mexw64 │ ├── python/ │ │ ├── Makefile │ │ ├── README │ │ ├── svm.py │ │ └── svmutil.py │ ├── svm-predict.c │ ├── svm-scale.c │ ├── svm-toy/ │ │ ├── gtk/ │ │ │ ├── Makefile │ │ │ ├── callbacks.cpp │ │ │ ├── callbacks.h │ │ │ ├── interface.c │ │ │ ├── interface.h │ │ │ ├── main.c │ │ │ └── svm-toy.glade │ │ ├── qt/ │ │ │ ├── Makefile │ │ │ └── svm-toy.cpp │ │ └── windows/ │ │ └── svm-toy.cpp │ ├── svm-train.c │ ├── svm.cpp │ ├── svm.def │ ├── svm.h │ ├── tools/ │ │ ├── README │ │ ├── checkdata.py │ │ ├── easy.py │ │ ├── grid.py │ │ └── subset.py │ └── windows/ │ ├── libsvmread.mexw64 │ ├── libsvmwrite.mexw64 │ ├── svmpredict.mexw64 │ └── svmtrain.mexw64 └── README.md
SYMBOL INDEX (599 symbols across 58 files)
FILE: C++/lbp/histogram.cpp
function Mat (line 81) | Mat lbp::histogram(const Mat& src, int numPatterns) {
function Mat (line 88) | Mat lbp::spatial_histogram(const Mat& src, int numPatterns, const Size& ...
function Mat (line 95) | Mat lbp::spatial_histogram(const Mat& src, int numPatterns, int gridx, i...
FILE: C++/lbp/histogram.hpp
type lbp (line 13) | namespace lbp {
FILE: C++/lbp/lbp.cpp
function Mat (line 143) | Mat lbp::OLBP(const Mat& src) { Mat dst; OLBP(src, dst); return dst; }
function Mat (line 144) | Mat lbp::ELBP(const Mat& src, int radius, int neighbors) { Mat dst; ELBP...
function Mat (line 145) | Mat lbp::VARLBP(const Mat& src, int radius, int neighbors) { Mat dst; VA...
FILE: C++/lbp/lbp.hpp
type lbp (line 13) | namespace lbp {
FILE: C++/lbp/main.cpp
function main (line 8) | int main(int argc, const char *argv[]) {
FILE: C++/liveness.cpp
function sigmoid (line 4) | double sigmoid(double input)
function Mat (line 10) | Mat DoG(Mat input, double sigma1, double sigma2)
function Mat (line 29) | Mat LBP(Mat input, vector<int> mapping_r8, vector<int> mapping_r16)
function svm_node (line 61) | svm_node* Liveness_Feature(Mat img, vector<int> mapping_r8, vector<int> ...
function Liveness_Predict (line 94) | double Liveness_Predict(Mat img, svm_model* model, double* Feature_Max, ...
function Train (line 204) | void Train()
function Test (line 359) | void Test()
FILE: C++/liveness.h
function class (line 30) | class ThuVisionFaceLiveCheck{
FILE: C++/test.cpp
function main (line 4) | int main()
FILE: Matlab/liblinear-1.96/blas/blas.h
type fcomplex (line 12) | typedef struct { float r, i; } fcomplex;
type dcomplex (line 13) | typedef struct { double r, i; } dcomplex;
type blasbool (line 14) | typedef int blasbool;
FILE: Matlab/liblinear-1.96/blas/daxpy.c
function daxpy_ (line 7) | int daxpy_(int *n, double *sa, double *sx, int *incx, double *sy,
FILE: Matlab/liblinear-1.96/blas/ddot.c
function ddot_ (line 7) | double ddot_(int *n, double *sx, int *incx, double *sy, int *incy)
FILE: Matlab/liblinear-1.96/blas/dnrm2.c
function dnrm2_ (line 8) | double dnrm2_(int *n, double *x, int *incx)
FILE: Matlab/liblinear-1.96/blas/dscal.c
function dscal_ (line 7) | int dscal_(int *n, double *sa, double *sx, int *incx)
FILE: Matlab/liblinear-1.96/linear.cpp
function swap (line 10) | static inline void swap(T& x, T& y) { T t=x; x=y; y=t; }
function T (line 12) | static inline T min(T x,T y) { return (x<y)?x:y; }
function T (line 15) | static inline T max(T x,T y) { return (x>y)?x:y; }
function clone (line 17) | static inline void clone(T*& dst, S* src, int n)
function print_string_stdout (line 25) | static void print_string_stdout(const char *s)
function info (line 34) | static void info(const char *fmt,...)
function info (line 44) | static void info(const char *fmt,...) {}
class l2r_lr_fun (line 47) | class l2r_lr_fun: public function
class l2r_l2_svc_fun (line 191) | class l2r_l2_svc_fun: public function
class l2r_l2_svr_fun (line 355) | class l2r_l2_svr_fun: public l2r_l2_svc_fun
class Solver_MCSVM_CS (line 456) | class Solver_MCSVM_CS
function compare_double (line 492) | int compare_double(const void *a, const void *b)
function solve_l2r_l1l2_svc (line 778) | static void solve_l2r_l1l2_svc(
function solve_l2r_l1l2_svr (line 996) | static void solve_l2r_l1l2_svr(
function solve_l2r_lr_dual (line 1223) | void solve_l2r_lr_dual(const problem *prob, double *w, double eps, doubl...
function solve_l1r_l2_svc (line 1397) | static void solve_l1r_l2_svc(
function solve_l1r_lr (line 1684) | static void solve_l1r_lr(
function transpose (line 2049) | static void transpose(const problem *prob, feature_node **x_space_ret, p...
function group_classes (line 2106) | static void group_classes(const problem *prob, int *nr_class_ret, int **...
function train_one (line 2181) | static void train_one(const problem *prob, const parameter *param, doubl...
function model (line 2293) | model* train(const problem *prob, const parameter *param)
function cross_validation (line 2425) | void cross_validation(const problem *prob, const parameter *param, int n...
function predict_values (line 2483) | double predict_values(const struct model *model_, const struct feature_n...
function predict (line 2530) | double predict(const model *model_, const feature_node *x)
function predict_probability (line 2538) | double predict_probability(const struct model *model_, const struct feat...
function save_model (line 2580) | int save_model(const char *model_file_name, const struct model *model_)
type model (line 2635) | struct model
function get_nr_feature (line 2746) | int get_nr_feature(const model *model_)
function get_nr_class (line 2751) | int get_nr_class(const model *model_)
function get_labels (line 2756) | void get_labels(const model *model_, int* label)
function get_w_value (line 2764) | static inline double get_w_value(const struct model *model_, int idx, in...
function get_decfun_coef (line 2793) | double get_decfun_coef(const struct model *model_, int feat_idx, int lab...
function get_decfun_bias (line 2800) | double get_decfun_bias(const struct model *model_, int label_idx)
function free_model_content (line 2810) | void free_model_content(struct model *model_ptr)
function free_and_destroy_model (line 2818) | void free_and_destroy_model(struct model **model_ptr_ptr)
function destroy_param (line 2828) | void destroy_param(parameter* param)
function check_probability_model (line 2863) | int check_probability_model(const struct model *model_)
function check_regression_model (line 2870) | int check_regression_model(const struct model *model_)
function set_print_string_function (line 2877) | void set_print_string_function(void (*print_func)(const char*))
FILE: Matlab/liblinear-1.96/linear.h
type feature_node (line 8) | struct feature_node
type problem (line 14) | struct problem
type parameter (line 24) | struct parameter
type model (line 37) | struct model
type model (line 47) | struct model
type problem (line 47) | struct problem
type parameter (line 47) | struct parameter
type problem (line 48) | struct problem
type parameter (line 48) | struct parameter
type model (line 50) | struct model
type feature_node (line 50) | struct feature_node
type model (line 51) | struct model
type feature_node (line 51) | struct feature_node
type model (line 52) | struct model
type feature_node (line 52) | struct feature_node
type model (line 54) | struct model
type model (line 55) | struct model
type model (line 57) | struct model
type model (line 58) | struct model
type model (line 59) | struct model
type model (line 60) | struct model
type model (line 61) | struct model
type model (line 63) | struct model
type model (line 64) | struct model
type parameter (line 65) | struct parameter
type problem (line 67) | struct problem
type parameter (line 67) | struct parameter
type model (line 68) | struct model
type model (line 69) | struct model
FILE: Matlab/liblinear-1.96/matlab/libsvmread.c
type mwIndex (line 11) | typedef int mwIndex;
function exit_with_help (line 21) | void exit_with_help()
function fake_answer (line 28) | static void fake_answer(int nlhs, mxArray *plhs[])
function read_problem (line 57) | void read_problem(const char *filename, int nlhs, mxArray *plhs[])
function mexFunction (line 188) | void mexFunction( int nlhs, mxArray *plhs[],
FILE: Matlab/liblinear-1.96/matlab/libsvmwrite.c
type mwIndex (line 8) | typedef int mwIndex;
function exit_with_help (line 12) | void exit_with_help()
function fake_answer (line 19) | static void fake_answer(int nlhs, mxArray *plhs[])
function libsvmwrite (line 26) | void libsvmwrite(const char *filename, const mxArray *label_vec, const m...
function mexFunction (line 84) | void mexFunction( int nlhs, mxArray *plhs[],
FILE: Matlab/liblinear-1.96/matlab/linear_model_matlab.c
type mwIndex (line 9) | typedef int mwIndex;
type model (line 26) | struct model
type model (line 105) | struct model
FILE: Matlab/liblinear-1.96/matlab/linear_model_matlab.h
type model (line 1) | struct model
type model (line 2) | struct model
FILE: Matlab/liblinear-1.96/matlab/predict.c
type mwIndex (line 11) | typedef int mwIndex;
function print_null (line 19) | int print_null(const char *s,...) {}
function read_sparse_instance (line 24) | void read_sparse_instance(const mxArray *prhs, int index, struct feature...
function fake_answer (line 52) | static void fake_answer(int nlhs, mxArray *plhs[])
function do_predict (line 59) | void do_predict(int nlhs, mxArray *plhs[], const mxArray *prhs[], struct...
function exit_with_help (line 213) | void exit_with_help()
function mexFunction (line 229) | void mexFunction( int nlhs, mxArray *plhs[],
FILE: Matlab/liblinear-1.96/matlab/train.c
type mwIndex (line 13) | typedef int mwIndex;
function print_null (line 21) | void print_null(const char *s) {}
function print_string_matlab (line 22) | void print_string_matlab(const char *s) {mexPrintf(s);}
function exit_with_help (line 24) | void exit_with_help()
type parameter (line 70) | struct parameter
type problem (line 71) | struct problem
type model (line 72) | struct model
type feature_node (line 73) | struct feature_node
function do_cross_validation (line 79) | double do_cross_validation()
function parse_command_line (line 125) | int parse_command_line(int nrhs, const mxArray *prhs[], char *model_file...
function fake_answer (line 246) | static void fake_answer(int nlhs, mxArray *plhs[])
function read_problem_sparse (line 253) | int read_problem_sparse(const mxArray *label_vec, const mxArray *instanc...
function mexFunction (line 341) | void mexFunction( int nlhs, mxArray *plhs[],
FILE: Matlab/liblinear-1.96/predict.c
function print_null (line 8) | int print_null(const char *s,...) {return 0;}
type feature_node (line 12) | struct feature_node
type model (line 15) | struct model
function exit_input_error (line 18) | void exit_input_error(int line_num)
function do_predict (line 45) | void do_predict(FILE *input, FILE *output)
function exit_with_help (line 175) | void exit_with_help()
function main (line 186) | int main(int argc, char **argv)
FILE: Matlab/liblinear-1.96/python/liblinear.py
function print_null (line 42) | def print_null(s):
function genFields (line 45) | def genFields(names, types):
function fillprototype (line 48) | def fillprototype(f, restype, argtypes):
class feature_node (line 52) | class feature_node(Structure):
method __str__ (line 57) | def __str__(self):
function gen_feature_nodearray (line 60) | def gen_feature_nodearray(xi, feature_max=None, issparse=True):
class problem (line 87) | class problem(Structure):
method __init__ (line 92) | def __init__(self, y, x, bias = -1):
method set_bias (line 114) | def set_bias(self, bias):
class parameter (line 129) | class parameter(Structure):
method __init__ (line 134) | def __init__(self, options = None):
method __str__ (line 139) | def __str__(self):
method set_to_default_values (line 149) | def set_to_default_values(self):
method parse_options (line 162) | def parse_options(self, options):
class model (line 228) | class model(Structure):
method __init__ (line 233) | def __init__(self):
method __del__ (line 236) | def __del__(self):
method get_nr_feature (line 241) | def get_nr_feature(self):
method get_nr_class (line 244) | def get_nr_class(self):
method get_labels (line 247) | def get_labels(self):
method get_decfun_coef (line 253) | def get_decfun_coef(self, feat_idx, label_idx=0):
method get_decfun_bias (line 256) | def get_decfun_bias(self, label_idx=0):
method get_decfun (line 259) | def get_decfun(self, label_idx=0):
method is_probability_model (line 264) | def is_probability_model(self):
method is_regression_model (line 267) | def is_regression_model(self):
function toPyModel (line 270) | def toPyModel(model_ptr):
FILE: Matlab/liblinear-1.96/python/liblinearutil.py
function svm_read_problem (line 13) | def svm_read_problem(data_file_name):
function load_model (line 35) | def load_model(model_file_name):
function save_model (line 48) | def save_model(model_file_name, model):
function evaluations (line 56) | def evaluations(ty, pv):
function train (line 85) | def train(arg1, arg2=None, arg3=None):
function predict (line 171) | def predict(y, x, m, options=""):
FILE: Matlab/liblinear-1.96/train.c
function print_null (line 11) | void print_null(const char *s) {}
function exit_with_help (line 13) | void exit_with_help()
function exit_input_error (line 57) | void exit_input_error(int line_num)
type feature_node (line 88) | struct feature_node
type parameter (line 89) | struct parameter
type problem (line 90) | struct problem
type model (line 91) | struct model
function main (line 96) | int main(int argc, char **argv)
function do_cross_validation (line 135) | void do_cross_validation()
function parse_command_line (line 176) | void parse_command_line(int argc, char **argv, char *input_file_name, ch...
function read_problem (line 300) | void read_problem(const char *filename)
FILE: Matlab/liblinear-1.96/tron.cpp
function T (line 8) | static inline T min(T x,T y) { return (x<y)?x:y; }
function T (line 12) | static inline T max(T x,T y) { return (x>y)?x:y; }
function default_print (line 28) | static void default_print(const char *buf)
FILE: Matlab/liblinear-1.96/tron.h
function class (line 4) | class function
function class (line 15) | class TRON
FILE: Matlab/libsvm-3.19/java/libsvm/svm.java
class Cache (line 16) | class Cache {
class head_t (line 19) | private final class head_t
method Cache (line 28) | Cache(int l_, long size_)
method lru_delete (line 41) | private void lru_delete(head_t h)
method lru_insert (line 48) | private void lru_insert(head_t h)
method get_data (line 61) | int get_data(int index, float[][] data, int len)
method swap_index (line 92) | void swap_index(int i, int j)
class QMatrix (line 130) | abstract class QMatrix {
method get_Q (line 131) | abstract float[] get_Q(int column, int len);
method get_QD (line 132) | abstract double[] get_QD();
method swap_index (line 133) | abstract void swap_index(int i, int j);
class Kernel (line 136) | abstract class Kernel extends QMatrix {
method get_Q (line 146) | abstract float[] get_Q(int column, int len);
method get_QD (line 147) | abstract double[] get_QD();
method swap_index (line 149) | void swap_index(int i, int j)
method powi (line 155) | private static double powi(double base, int times)
method kernel_function (line 167) | double kernel_function(int i, int j)
method Kernel (line 186) | Kernel(int l, svm_node[][] x_, svm_parameter param)
method dot (line 204) | static double dot(svm_node[] x, svm_node[] y)
method k_function (line 226) | static double k_function(svm_node[] x, svm_node[] y,
class Solver (line 303) | class Solver {
method get_C (line 324) | double get_C(int i)
method update_alpha_status (line 328) | void update_alpha_status(int i)
method is_upper_bound (line 336) | boolean is_upper_bound(int i) { return alpha_status[i] == UPPER_BOUND; }
method is_lower_bound (line 337) | boolean is_lower_bound(int i) { return alpha_status[i] == LOWER_BOUND; }
method is_free (line 338) | boolean is_free(int i) { return alpha_status[i] == FREE; }
class SolutionInfo (line 342) | static class SolutionInfo {
method swap_index (line 350) | void swap_index(int i, int j)
method reconstruct_gradient (line 362) | void reconstruct_gradient()
method Solve (line 404) | void Solve(int l, QMatrix Q, double[] p_, byte[] y_,
method select_working_set (line 673) | int select_working_set(int[] working_set)
method be_shrunk (line 772) | private boolean be_shrunk(int i, double Gmax1, double Gmax2)
method do_shrinking (line 792) | void do_shrinking()
method calculate_rho (line 852) | double calculate_rho()
class Solver_NU (line 897) | final class Solver_NU extends Solver
method Solve (line 901) | void Solve(int l, QMatrix Q, double[] p, byte[] y,
method select_working_set (line 910) | int select_working_set(int[] working_set)
method be_shrunk (line 1022) | private boolean be_shrunk(int i, double Gmax1, double Gmax2, double Gm...
method do_shrinking (line 1042) | void do_shrinking()
method calculate_rho (line 1094) | double calculate_rho()
class SVC_Q (line 1148) | class SVC_Q extends Kernel
method SVC_Q (line 1154) | SVC_Q(svm_problem prob, svm_parameter param, byte[] y_)
method get_Q (line 1164) | float[] get_Q(int i, int len)
method get_QD (line 1176) | double[] get_QD()
method swap_index (line 1181) | void swap_index(int i, int j)
class ONE_CLASS_Q (line 1190) | class ONE_CLASS_Q extends Kernel
method ONE_CLASS_Q (line 1195) | ONE_CLASS_Q(svm_problem prob, svm_parameter param)
method get_Q (line 1204) | float[] get_Q(int i, int len)
method get_QD (line 1216) | double[] get_QD()
method swap_index (line 1221) | void swap_index(int i, int j)
class SVR_Q (line 1229) | class SVR_Q extends Kernel
method SVR_Q (line 1239) | SVR_Q(svm_problem prob, svm_parameter param)
method swap_index (line 1260) | void swap_index(int i, int j)
method get_Q (line 1267) | float[] get_Q(int i, int len)
method get_QD (line 1286) | double[] get_QD()
class svm (line 1292) | public class svm {
method print (line 1301) | public void print(String s)
method info (line 1310) | static void info(String s)
method solve_c_svc (line 1315) | private static void solve_c_svc(svm_problem prob, svm_parameter param,
method solve_nu_svc (line 1347) | private static void solve_nu_svc(svm_problem prob, svm_parameter param,
method solve_one_class (line 1398) | private static void solve_one_class(svm_problem prob, svm_parameter pa...
method solve_epsilon_svr (line 1426) | private static void solve_epsilon_svr(svm_problem prob, svm_parameter ...
method solve_nu_svr (line 1459) | private static void solve_nu_svr(svm_problem prob, svm_parameter param,
class decision_function (line 1495) | static class decision_function
method svm_train_one (line 1501) | static decision_function svm_train_one(
method sigmoid_train (line 1559) | private static void sigmoid_train(int l, double[] dec_values, double[]...
method sigmoid_predict (line 1672) | private static double sigmoid_predict(double decision_value, double A,...
method multiclass_probability (line 1682) | private static void multiclass_probability(int k, double[][] r, double...
method svm_binary_svc_probability (line 1742) | private static void svm_binary_svc_probability(svm_problem prob, svm_p...
method svm_svr_probability (line 1823) | private static double svm_svr_probability(svm_problem prob, svm_parame...
method svm_group_classes (line 1854) | private static void svm_group_classes(svm_problem prob, int[] nr_class...
method svm_train (line 1935) | public static svm_model svm_train(svm_problem prob, svm_parameter param)
method svm_cross_validation (line 2172) | public static void svm_cross_validation(svm_problem prob, svm_paramete...
method svm_get_svm_type (line 2282) | public static int svm_get_svm_type(svm_model model)
method svm_get_nr_class (line 2287) | public static int svm_get_nr_class(svm_model model)
method svm_get_labels (line 2292) | public static void svm_get_labels(svm_model model, int[] label)
method svm_get_sv_indices (line 2299) | public static void svm_get_sv_indices(svm_model model, int[] indices)
method svm_get_nr_sv (line 2306) | public static int svm_get_nr_sv(svm_model model)
method svm_get_svr_probability (line 2311) | public static double svm_get_svr_probability(svm_model model)
method svm_predict_values (line 2323) | public static double svm_predict_values(svm_model model, svm_node[] x,...
method svm_predict (line 2396) | public static double svm_predict(svm_model model, svm_node[] x)
method svm_predict_probability (line 2410) | public static double svm_predict_probability(svm_model model, svm_node...
method svm_save_model (line 2453) | public static void svm_save_model(String model_file_name, svm_model mo...
method atof (line 2538) | private static double atof(String s)
method atoi (line 2543) | private static int atoi(String s)
method read_model_header (line 2548) | private static boolean read_model_header(BufferedReader fp, svm_model ...
method svm_load_model (line 2661) | public static svm_model svm_load_model(String model_file_name) throws ...
method svm_load_model (line 2666) | public static svm_model svm_load_model(BufferedReader fp) throws IOExc...
method svm_check_parameter (line 2711) | public static String svm_check_parameter(svm_problem prob, svm_paramet...
method svm_check_probability_model (line 2831) | public static int svm_check_probability_model(svm_model model)
method svm_set_print_string_function (line 2842) | public static void svm_set_print_string_function(svm_print_interface p...
FILE: Matlab/libsvm-3.19/java/libsvm/svm_model.java
class svm_model (line 5) | public class svm_model implements java.io.Serializable
FILE: Matlab/libsvm-3.19/java/libsvm/svm_node.java
class svm_node (line 2) | public class svm_node implements java.io.Serializable
FILE: Matlab/libsvm-3.19/java/libsvm/svm_parameter.java
class svm_parameter (line 2) | public class svm_parameter implements Cloneable,java.io.Serializable
method clone (line 36) | public Object clone()
FILE: Matlab/libsvm-3.19/java/libsvm/svm_print_interface.java
type svm_print_interface (line 2) | public interface svm_print_interface
method print (line 4) | public void print(String s);
FILE: Matlab/libsvm-3.19/java/libsvm/svm_problem.java
class svm_problem (line 2) | public class svm_problem implements java.io.Serializable
FILE: Matlab/libsvm-3.19/java/svm_predict.java
class svm_predict (line 5) | class svm_predict {
method print (line 8) | public void print(String s) {}
method print (line 13) | public void print(String s)
method info (line 21) | static void info(String s)
method atof (line 26) | private static double atof(String s)
method atoi (line 31) | private static int atoi(String s)
method predict (line 36) | private static void predict(BufferedReader input, DataOutputStream out...
method exit_with_help (line 121) | private static void exit_with_help()
method main (line 130) | public static void main(String argv[]) throws IOException
FILE: Matlab/libsvm-3.19/java/svm_scale.java
class svm_scale (line 6) | class svm_scale
method exit_with_help (line 22) | private static void exit_with_help()
method rewind (line 36) | private BufferedReader rewind(BufferedReader fp, String filename) thro...
method output_target (line 42) | private void output_target(double value)
method output (line 58) | private void output(int index, double value)
method readline (line 80) | private String readline(BufferedReader fp) throws IOException
method run (line 86) | private void run(String []argv) throws IOException
method main (line 345) | public static void main(String argv[]) throws IOException
FILE: Matlab/libsvm-3.19/java/svm_toy.java
class svm_toy (line 8) | public class svm_toy extends Applet {
class point (line 32) | class point {
method point (line 33) | point(double x, double y, byte value)
method init (line 46) | public void init()
method draw_point (line 114) | void draw_point(point p)
method clear_all (line 125) | void clear_all()
method draw_all_points (line 136) | void draw_all_points()
method button_change_clicked (line 143) | void button_change_clicked()
method atof (line 149) | private static double atof(String s)
method atoi (line 154) | private static int atoi(String s)
method button_run_clicked (line 159) | void button_run_clicked(String args)
method button_clear_clicked (line 366) | void button_clear_clicked()
method button_save_clicked (line 371) | void button_save_clicked(String args)
method button_load_clicked (line 409) | void button_load_clicked()
method processMouseEvent (line 445) | protected void processMouseEvent(MouseEvent e)
method paint (line 458) | public void paint(Graphics g)
method getPreferredSize (line 470) | public Dimension getPreferredSize() { return new Dimension(XLEN,YLEN+5...
method setSize (line 472) | public void setSize(Dimension d) { setSize(d.width,d.height); }
method setSize (line 473) | public void setSize(int w,int h) {
method main (line 480) | public static void main(String[] argv)
class AppletFrame (line 486) | class AppletFrame extends Frame {
method AppletFrame (line 487) | AppletFrame(String title, Applet applet, int width, int height)
FILE: Matlab/libsvm-3.19/java/svm_train.java
class svm_train (line 5) | class svm_train {
method print (line 17) | public void print(String s) {}
method exit_with_help (line 20) | private static void exit_with_help()
method do_cross_validation (line 54) | private void do_cross_validation()
method run (line 92) | private void run(String argv[]) throws IOException
method main (line 115) | public static void main(String argv[]) throws IOException
method atof (line 121) | private static double atof(String s)
method atoi (line 132) | private static int atoi(String s)
method parse_command_line (line 137) | private void parse_command_line(String argv[])
method read_problem (line 262) | private void read_problem() throws IOException
FILE: Matlab/libsvm-3.19/matlab/libsvmread.c
type mwIndex (line 11) | typedef int mwIndex;
function exit_with_help (line 21) | void exit_with_help()
function fake_answer (line 28) | static void fake_answer(int nlhs, mxArray *plhs[])
function read_problem (line 57) | void read_problem(const char *filename, int nlhs, mxArray *plhs[])
function mexFunction (line 188) | void mexFunction( int nlhs, mxArray *plhs[],
FILE: Matlab/libsvm-3.19/matlab/libsvmwrite.c
type mwIndex (line 8) | typedef int mwIndex;
function exit_with_help (line 12) | void exit_with_help()
function fake_answer (line 19) | static void fake_answer(int nlhs, mxArray *plhs[])
function libsvmwrite (line 26) | void libsvmwrite(const char *filename, const mxArray *label_vec, const m...
function mexFunction (line 84) | void mexFunction( int nlhs, mxArray *plhs[],
FILE: Matlab/libsvm-3.19/matlab/svm_model_matlab.c
type mwIndex (line 9) | typedef int mwIndex;
type svm_model (line 31) | struct svm_model
type svm_model (line 211) | struct svm_model
type svm_node (line 216) | struct svm_node
type svm_model (line 217) | struct svm_model
type svm_node (line 351) | struct svm_node
type svm_node (line 351) | struct svm_node
type svm_node (line 352) | struct svm_node
type svm_node (line 352) | struct svm_node
FILE: Matlab/libsvm-3.19/matlab/svm_model_matlab.h
type svm_model (line 1) | struct svm_model
type svm_model (line 2) | struct svm_model
FILE: Matlab/libsvm-3.19/matlab/svmpredict.c
type mwIndex (line 11) | typedef int mwIndex;
function print_null (line 17) | int print_null(const char *s,...) {}
function read_sparse_instance (line 20) | void read_sparse_instance(const mxArray *prhs, int index, struct svm_nod...
function fake_answer (line 42) | static void fake_answer(int nlhs, mxArray *plhs[])
function predict (line 49) | void predict(int nlhs, mxArray *plhs[], const mxArray *prhs[], struct sv...
function exit_with_help (line 255) | void exit_with_help()
function mexFunction (line 272) | void mexFunction( int nlhs, mxArray *plhs[],
FILE: Matlab/libsvm-3.19/matlab/svmtrain.c
type mwIndex (line 12) | typedef int mwIndex;
function print_null (line 19) | void print_null(const char *s) {}
function print_string_matlab (line 20) | void print_string_matlab(const char *s) {mexPrintf(s);}
function exit_with_help (line 22) | void exit_with_help()
type svm_parameter (line 56) | struct svm_parameter
type svm_problem (line 57) | struct svm_problem
type svm_model (line 58) | struct svm_model
type svm_node (line 59) | struct svm_node
function do_cross_validation (line 64) | double do_cross_validation()
function parse_command_line (line 108) | int parse_command_line(int nrhs, const mxArray *prhs[], char *model_file...
function read_problem_dense (line 222) | int read_problem_dense(const mxArray *label_vec, const mxArray *instance...
function read_problem_sparse (line 302) | int read_problem_sparse(const mxArray *label_vec, const mxArray *instanc...
function fake_answer (line 375) | static void fake_answer(int nlhs, mxArray *plhs[])
function mexFunction (line 384) | void mexFunction( int nlhs, mxArray *plhs[],
FILE: Matlab/libsvm-3.19/python/svm.py
function print_null (line 42) | def print_null(s):
function genFields (line 45) | def genFields(names, types):
function fillprototype (line 48) | def fillprototype(f, restype, argtypes):
class svm_node (line 52) | class svm_node(Structure):
method __str__ (line 57) | def __str__(self):
function gen_svm_nodearray (line 60) | def gen_svm_nodearray(xi, feature_max=None, isKernel=None):
class svm_problem (line 87) | class svm_problem(Structure):
method __init__ (line 92) | def __init__(self, y, x, isKernel=None):
class svm_parameter (line 111) | class svm_parameter(Structure):
method __init__ (line 120) | def __init__(self, options = None):
method __str__ (line 125) | def __str__(self):
method set_to_default_values (line 135) | def set_to_default_values(self):
method parse_options (line 155) | def parse_options(self, options):
class svm_model (line 230) | class svm_model(Structure):
method __init__ (line 239) | def __init__(self):
method __del__ (line 242) | def __del__(self):
method get_svm_type (line 247) | def get_svm_type(self):
method get_nr_class (line 250) | def get_nr_class(self):
method get_svr_probability (line 253) | def get_svr_probability(self):
method get_labels (line 256) | def get_labels(self):
method get_sv_indices (line 262) | def get_sv_indices(self):
method get_nr_sv (line 268) | def get_nr_sv(self):
method is_probability_model (line 271) | def is_probability_model(self):
method get_sv_coef (line 274) | def get_sv_coef(self):
method get_SV (line 278) | def get_SV(self):
function toPyModel (line 293) | def toPyModel(model_ptr):
FILE: Matlab/libsvm-3.19/python/svmutil.py
function svm_read_problem (line 14) | def svm_read_problem(data_file_name):
function svm_load_model (line 36) | def svm_load_model(model_file_name):
function svm_save_model (line 49) | def svm_save_model(model_file_name, model):
function evaluations (line 57) | def evaluations(ty, pv):
function svm_train (line 86) | def svm_train(arg1, arg2=None, arg3=None):
function svm_predict (line 173) | def svm_predict(y, x, m, options=""):
FILE: Matlab/libsvm-3.19/svm-predict.c
function print_null (line 8) | int print_null(const char *s,...) {return 0;}
type svm_node (line 12) | struct svm_node
type svm_model (line 15) | struct svm_model
function exit_input_error (line 39) | void exit_input_error(int line_num)
function predict (line 45) | void predict(FILE *input, FILE *output)
function exit_with_help (line 159) | void exit_with_help()
function main (line 170) | int main(int argc, char **argv)
FILE: Matlab/libsvm-3.19/svm-scale.c
function exit_with_help (line 7) | void exit_with_help()
function main (line 42) | int main(int argc,char **argv)
function output_target (line 350) | void output_target(double value)
function output (line 364) | void output(int index, double value)
function clean_up (line 386) | int clean_up(FILE *fp_restore, FILE *fp, const char* msg)
FILE: Matlab/libsvm-3.19/svm-toy/gtk/callbacks.cpp
function svm_toy_initialize (line 42) | void svm_toy_initialize()
function redraw_area (line 61) | void redraw_area(GtkWidget* widget, int x, int y, int w, int h)
function draw_point (line 69) | void draw_point(const point& p)
function draw_all_points (line 76) | void draw_all_points()
function clear_all (line 82) | void clear_all()
function on_button_change_clicked (line 90) | void
function on_button_run_clicked (line 98) | void
function on_button_clear_clicked (line 302) | void
function on_window1_destroy (line 309) | void
function gboolean (line 316) | gboolean
function gboolean (line 327) | gboolean
function show_fileselection (line 341) | void show_fileselection()
function on_button_save_clicked (line 357) | void
function on_button_load_clicked (line 366) | void
function on_filesel_ok_clicked (line 374) | void
function on_fileselection_destroy (line 437) | void
function on_filesel_cancel_clicked (line 443) | void
FILE: Matlab/libsvm-3.19/svm-toy/gtk/interface.c
function GtkWidget (line 16) | GtkWidget*
function GtkWidget (line 130) | GtkWidget*
FILE: Matlab/libsvm-3.19/svm-toy/gtk/main.c
function main (line 10) | int main (int argc, char *argv[])
FILE: Matlab/libsvm-3.19/svm-toy/qt/svm-toy.cpp
class SvmToyWindow (line 25) | class SvmToyWindow : public QWidget
type point (line 49) | struct point {
method QPixmap (line 55) | const QPixmap& choose_icon(int v)
method clear_all (line 61) | void clear_all()
method draw_point (line 67) | void draw_point(const point& p)
method draw_all_points (line 73) | void draw_all_points()
method button_change_icon_clicked (line 79) | void button_change_icon_clicked()
method button_run_clicked (line 85) | void button_run_clicked()
method button_clear_clicked (line 280) | void button_clear_clicked()
method button_save_clicked (line 284) | void button_save_clicked()
method button_load_clicked (line 313) | void button_load_clicked()
function main (line 428) | int main( int argc, char* argv[] )
FILE: Matlab/libsvm-3.19/svm-toy/windows/svm-toy.cpp
type point (line 48) | struct point {
function WinMain (line 58) | int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
function getfilename (line 128) | int getfilename( HWND hWnd , char *filename, int len, int save)
function clear_all (line 143) | void clear_all()
function HBRUSH (line 150) | HBRUSH choose_brush(int v)
function draw_point (line 157) | void draw_point(const point & p)
function draw_all_points (line 168) | void draw_all_points()
function button_run_clicked (line 174) | void button_run_clicked()
function LRESULT (line 372) | LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lPa...
FILE: Matlab/libsvm-3.19/svm-train.c
function print_null (line 9) | void print_null(const char *s) {}
function exit_with_help (line 11) | void exit_with_help()
function exit_input_error (line 45) | void exit_input_error(int line_num)
type svm_parameter (line 55) | struct svm_parameter
type svm_problem (line 56) | struct svm_problem
type svm_model (line 57) | struct svm_model
type svm_node (line 58) | struct svm_node
function main (line 83) | int main(int argc, char **argv)
function do_cross_validation (line 122) | void do_cross_validation()
function parse_command_line (line 161) | void parse_command_line(int argc, char **argv, char *input_file_name, ch...
function read_problem (line 278) | void read_problem(const char *filename)
FILE: Matlab/libsvm-3.19/svm.cpp
function T (line 15) | static inline T min(T x,T y) { return (x<y)?x:y; }
function T (line 18) | static inline T max(T x,T y) { return (x>y)?x:y; }
function swap (line 20) | static inline void swap(T& x, T& y) { T t=x; x=y; y=t; }
function clone (line 21) | static inline void clone(T*& dst, S* src, int n)
function powi (line 26) | static inline double powi(double base, int times)
function print_string_stdout (line 41) | static void print_string_stdout(const char *s)
function info (line 48) | static void info(const char *fmt,...)
function info (line 58) | static void info(const char *fmt,...) {}
class Cache (line 67) | class Cache
type head_t (line 81) | struct head_t
class QMatrix (line 194) | class QMatrix {
class Kernel (line 202) | class Kernel: public QMatrix {
method swap_index (line 211) | virtual void swap_index(int i, int j) const // no so const...
method kernel_linear (line 231) | double kernel_linear(int i, int j) const
method kernel_poly (line 235) | double kernel_poly(int i, int j) const
method kernel_rbf (line 239) | double kernel_rbf(int i, int j) const
method kernel_sigmoid (line 243) | double kernel_sigmoid(int i, int j) const
method kernel_precomputed (line 247) | double kernel_precomputed(int i, int j) const
class Solver (line 393) | class Solver {
method Solver (line 395) | Solver() {}
type SolutionInfo (line 398) | struct SolutionInfo {
method get_C (line 426) | double get_C(int i)
method update_alpha_status (line 430) | void update_alpha_status(int i)
method is_upper_bound (line 438) | bool is_upper_bound(int i) { return alpha_status[i] == UPPER_BOUND; }
method is_lower_bound (line 439) | bool is_lower_bound(int i) { return alpha_status[i] == LOWER_BOUND; }
method is_free (line 440) | bool is_free(int i) { return alpha_status[i] == FREE; }
class Solver_NU (line 1009) | class Solver_NU: public Solver
method Solver_NU (line 1012) | Solver_NU() {}
method Solve (line 1013) | void Solve(int l, const QMatrix& Q, const double *p, const schar *y,
class SVC_Q (line 1266) | class SVC_Q: public Kernel
method SVC_Q (line 1269) | SVC_Q(const svm_problem& prob, const svm_parameter& param, const schar...
method Qfloat (line 1279) | Qfloat *get_Q(int i, int len) const
method swap_index (line 1296) | void swap_index(int i, int j) const
class ONE_CLASS_Q (line 1316) | class ONE_CLASS_Q: public Kernel
method ONE_CLASS_Q (line 1319) | ONE_CLASS_Q(const svm_problem& prob, const svm_parameter& param)
method Qfloat (line 1328) | Qfloat *get_Q(int i, int len) const
method swap_index (line 1345) | void swap_index(int i, int j) const
class SVR_Q (line 1362) | class SVR_Q: public Kernel
method SVR_Q (line 1365) | SVR_Q(const svm_problem& prob, const svm_parameter& param)
method swap_index (line 1387) | void swap_index(int i, int j) const
method Qfloat (line 1394) | Qfloat *get_Q(int i, int len) const
function solve_c_svc (line 1440) | static void solve_c_svc(
function solve_nu_svc (line 1475) | static void solve_nu_svc(
function solve_one_class (line 1530) | static void solve_one_class(
function solve_epsilon_svr (line 1562) | static void solve_epsilon_svr(
function solve_nu_svr (line 1600) | static void solve_nu_svr(
type decision_function (line 1641) | struct decision_function
function decision_function (line 1647) | static decision_function svm_train_one(
function sigmoid_train (line 1705) | static void sigmoid_train(
function sigmoid_predict (line 1818) | static double sigmoid_predict(double decision_value, double A, double B)
function multiclass_probability (line 1829) | static void multiclass_probability(int k, double **r, double *p)
function svm_binary_svc_probability (line 1893) | static void svm_binary_svc_probability(
function svm_svr_probability (line 1980) | static double svm_svr_probability(
function svm_group_classes (line 2014) | static void svm_group_classes(const svm_problem *prob, int *nr_class_ret...
function svm_model (line 2092) | svm_model *svm_train(const svm_problem *prob, const svm_parameter *param)
function svm_cross_validation (line 2339) | void svm_cross_validation(const svm_problem *prob, const svm_parameter *...
function svm_get_svm_type (line 2460) | int svm_get_svm_type(const svm_model *model)
function svm_get_nr_class (line 2465) | int svm_get_nr_class(const svm_model *model)
function svm_get_labels (line 2470) | void svm_get_labels(const svm_model *model, int* label)
function svm_get_sv_indices (line 2477) | void svm_get_sv_indices(const svm_model *model, int* indices)
function svm_get_nr_sv (line 2484) | int svm_get_nr_sv(const svm_model *model)
function svm_get_svr_probability (line 2489) | double svm_get_svr_probability(const svm_model *model)
function svm_predict_values (line 2501) | double svm_predict_values(const svm_model *model, const svm_node *x, dou...
function svm_predict (line 2577) | double svm_predict(const svm_model *model, const svm_node *x)
function svm_predict_probability (line 2592) | double svm_predict_probability(
function svm_save_model (line 2641) | int svm_save_model(const char *model_file_name, const svm_model *model)
function read_model_header (line 2764) | bool read_model_header(FILE *fp, svm_model* model)
function svm_model (line 2873) | svm_model *svm_load_model(const char *model_file_name)
function svm_free_model_content (line 2978) | void svm_free_model_content(svm_model* model_ptr)
function svm_free_and_destroy_model (line 3013) | void svm_free_and_destroy_model(svm_model** model_ptr_ptr)
function svm_destroy_param (line 3023) | void svm_destroy_param(svm_parameter* param)
function svm_check_probability_model (line 3150) | int svm_check_probability_model(const svm_model *model)
function svm_set_print_string_function (line 3158) | void svm_set_print_string_function(void (*print_func)(const char *))
FILE: Matlab/libsvm-3.19/svm.h
type svm_node (line 12) | struct svm_node
type svm_problem (line 18) | struct svm_problem
type svm_parameter (line 28) | struct svm_parameter
type svm_model (line 52) | struct svm_model
type svm_model (line 74) | struct svm_model
type svm_problem (line 74) | struct svm_problem
type svm_parameter (line 74) | struct svm_parameter
type svm_problem (line 75) | struct svm_problem
type svm_parameter (line 75) | struct svm_parameter
type svm_model (line 77) | struct svm_model
type svm_model (line 78) | struct svm_model
type svm_model (line 80) | struct svm_model
type svm_model (line 81) | struct svm_model
type svm_model (line 82) | struct svm_model
type svm_model (line 83) | struct svm_model
type svm_model (line 84) | struct svm_model
type svm_model (line 85) | struct svm_model
type svm_model (line 87) | struct svm_model
type svm_node (line 87) | struct svm_node
type svm_model (line 88) | struct svm_model
type svm_node (line 88) | struct svm_node
type svm_model (line 89) | struct svm_model
type svm_node (line 89) | struct svm_node
type svm_model (line 91) | struct svm_model
type svm_model (line 92) | struct svm_model
type svm_parameter (line 93) | struct svm_parameter
type svm_problem (line 95) | struct svm_problem
type svm_parameter (line 95) | struct svm_parameter
type svm_model (line 96) | struct svm_model
FILE: Matlab/libsvm-3.19/tools/checkdata.py
function err (line 18) | def err(line_no, msg):
function my_float (line 22) | def my_float(x):
function main (line 28) | def main():
FILE: Matlab/libsvm-3.19/tools/grid.py
class GridOption (line 17) | class GridOption:
method __init__ (line 18) | def __init__(self, dataset_pathname, options):
method parse_options (line 40) | def parse_options(self, options):
function redraw (line 105) | def redraw(db,best_param,gnuplot,options,tofile=False):
function calculate_jobs (line 159) | def calculate_jobs(options):
class WorkerStopToken (line 241) | class WorkerStopToken: # used to notify the worker to stop or if a work...
class Worker (line 244) | class Worker(Thread):
method __init__ (line 245) | def __init__(self,name,job_queue,result_queue,options):
method run (line 252) | def run(self):
method get_cmd (line 278) | def get_cmd(self,c,g):
class LocalWorker (line 289) | class LocalWorker(Worker):
method run_one (line 290) | def run_one(self,c,g):
class SSHWorker (line 297) | class SSHWorker(Worker):
method __init__ (line 298) | def __init__(self,name,job_queue,result_queue,host,options):
method run_one (line 302) | def run_one(self,c,g):
class TelnetWorker (line 310) | class TelnetWorker(Worker):
method __init__ (line 311) | def __init__(self,name,job_queue,result_queue,host,username,password,o...
method run (line 316) | def run(self):
method run_one (line 331) | def run_one(self,c,g):
function find_parameters (line 339) | def find_parameters(dataset_pathname, options=''):
function exit_with_help (line 465) | def exit_with_help():
FILE: Matlab/libsvm-3.19/tools/subset.py
function exit_with_help (line 9) | def exit_with_help(argv):
function process_options (line 25) | def process_options(argv):
function random_selection (line 56) | def random_selection(dataset, subset_size):
function stratified_selection (line 60) | def stratified_selection(dataset, subset_size):
function main (line 89) | def main(argv=sys.argv):
Condensed preview — 178 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,840K chars).
[
{
"path": "C++/README.txt",
"chars": 718,
"preview": "ļ嵥\r\nliveness.cpp\r\nliveness.hͷļ\r\nsvm_modelѵsvmģ\r\nsvm_minmaxʱһIJ\r\n./lbpLBPȡ\r\n./libsvm-3.19LibSVM\r\n\r\nҪĿcppļ\r\nliveness.cpp\r\n."
},
{
"path": "C++/lbp/CMakeLists.txt",
"chars": 212,
"preview": "PROJECT(githublbp)\nSET(CMAKE_BUILD_TYPE Release)\nCMAKE_MINIMUM_REQUIRED( VERSION 2.6 )\nFIND_PACKAGE( OpenCV REQUIRED )\nA"
},
{
"path": "C++/lbp/LICENSE",
"chars": 1512,
"preview": "Copyright (c) 2011, philipp <bytefish[at]gmx.de>\nAll rights reserved.\n\nRedistribution and use in source and binary forms"
},
{
"path": "C++/lbp/histogram.cpp",
"chars": 3581,
"preview": "#include \"histogram.hpp\"\n#include <vector>\n\ntemplate <typename _Tp>\nvoid lbp::histogram_(const Mat& src, Mat& hist, int "
},
{
"path": "C++/lbp/histogram.hpp",
"chars": 1095,
"preview": "#ifndef HISTOGRAM_HPP_\n#define HISTOGRAM_HPP_\n\n//! \\author philipp <bytefish[at]gmx[dot]de>\n//! \\copyright BSD, see LICE"
},
{
"path": "C++/lbp/lbp.cpp",
"chars": 6123,
"preview": "#include \"lbp.hpp\"\n#define M_PI 3.14159265358979323846\n\nusing namespace cv;\n\ntemplate <typename _Tp>\nvoid lbp::OLBP_(con"
},
{
"path": "C++/lbp/lbp.hpp",
"chars": 910,
"preview": "#ifndef LBP_HPP_\n#define LBP_HPP_\n\n//! \\author philipp <bytefish[at]gmx[dot]de>\n//! \\copyright BSD, see LICENSE.\n\n#inclu"
},
{
"path": "C++/lbp/main.cpp",
"chars": 3362,
"preview": "#include <cv.h>\n#include <highgui.h>\n#include \"lbp.hpp\"\n#include \"histogram.hpp\"\n\nusing namespace cv;\n\nint main(int argc"
},
{
"path": "C++/lbp/mapping_n16.txt",
"chars": 262033,
"preview": "0\t1\t2\t3\t4\t242\t5\t6\t7\t242\t242\t242\t8\t242\t9\t10\t11\t242\t242\t242\t242\t242\t242\t242\t12\t242\t242\t242\t13\t242\t14\t15\t16\t242\t242\t242\t242"
},
{
"path": "C++/lbp/mapping_n8.txt",
"chars": 757,
"preview": "0\t1\t2\t3\t4\t58\t5\t6\t7\t58\t58\t58\t8\t58\t9\t10\t11\t58\t58\t58\t58\t58\t58\t58\t12\t58\t58\t58\t13\t58\t14\t15\t16\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t5"
},
{
"path": "C++/liveness.cpp",
"chars": 13458,
"preview": "#include\"liveness.h\"\r\n\t\r\n// Sigmoid\r\ndouble sigmoid(double input)\r\n{\r\n\treturn 1 / ( 1 + exp(-input) );\r\n}\r\n\r\n// DoG Feat"
},
{
"path": "C++/liveness.h",
"chars": 1434,
"preview": "#include <iostream>\r\n#include <fstream>\r\n#include <sstream>\r\n#include <iomanip>\r\n#include <vector>\r\n#include <opencv2\\op"
},
{
"path": "C++/svm_minmax_NUAA.txt",
"chars": 84169,
"preview": "4638 186\r\n2292.61 0.258032\r\n1968.03 0.0429906\r\n1056.06 0.0884837\r\n2106.64 0.168737\r\n814.024 0.120735\r\n1285.34 0.0165767\r"
},
{
"path": "C++/test.cpp",
"chars": 854,
"preview": "#include\"liveness.h\"\r\n\r\n// Demo of Liveness Detection\r\nint main()\r\n{\r\n\tTest();\r\n\t/*\r\n\t// Initialization\r\n\tThuVisionFaceL"
},
{
"path": "Matlab/DoG.m",
"chars": 440,
"preview": "function Y = DoG(X, sigma1, sigma2)\r\n%% default parameter\r\nif nargin == 1\r\n sigma1 = 0.5;\r\n sigma2 = 1;\r\nend\r\n%% I"
},
{
"path": "Matlab/DoGLBP_Test.m",
"chars": 2371,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./NUA"
},
{
"path": "Matlab/DoG_CASIA_Test.m",
"chars": 2874,
"preview": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% "
},
{
"path": "Matlab/DoG_CASIA_Train.m",
"chars": 2285,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
},
{
"path": "Matlab/DoG_LBP_All_Train.m",
"chars": 2824,
"preview": "clear all, close all, clc\r\n\r\n%% add path\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\n\r\n%% NUAA\r\n% load\r\n"
},
{
"path": "Matlab/DoG_LBP_CASIA_Test.m",
"chars": 2931,
"preview": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% "
},
{
"path": "Matlab/DoG_LBP_CASIA_Train.m",
"chars": 2348,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
},
{
"path": "Matlab/DoG_LBP_NUAA_Test.m",
"chars": 1902,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./NUA"
},
{
"path": "Matlab/DoG_LBP_NUAA_Train.m",
"chars": 2239,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter training data name\r\nClientTrainNormalizedName = importdata('./N"
},
{
"path": "Matlab/DoG_LBP_PRINT_ATTACK_Test.m",
"chars": 3444,
"preview": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% "
},
{
"path": "Matlab/DoG_LBP_PRINT_ATTACK_Train.m",
"chars": 2782,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
},
{
"path": "Matlab/DoG_NUAA_Test.m",
"chars": 1714,
"preview": "% clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./N"
},
{
"path": "Matlab/DoG_NUAA_Train.m",
"chars": 2018,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter training data name\r\nClientTrainNormalizedName = importdata('./N"
},
{
"path": "Matlab/DoG_PRINT_ATTACK_Test.m",
"chars": 3385,
"preview": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% "
},
{
"path": "Matlab/DoG_PRINT_ATTACK_Train.m",
"chars": 2719,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
},
{
"path": "Matlab/HFD.m",
"chars": 882,
"preview": "%% High Frequency Descriptor\r\nfunction HFD = HFD(Image, ThresholdFrequency, ImageSize, HighFrequencyRadius)\r\n%% default "
},
{
"path": "Matlab/HFDTest.m",
"chars": 1740,
"preview": "% clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./N"
},
{
"path": "Matlab/HFDTrain.m",
"chars": 1801,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter training data name\r\nClientTrainNormalizedName = importdata('./N"
},
{
"path": "Matlab/HOOF/README",
"chars": 1955,
"preview": "This code has been provided only for research purposes. If you want to use this for commerical purposes, you will need a"
},
{
"path": "Matlab/HOOF/README~",
"chars": 1875,
"preview": "This code has been provided only for research purposes. If you want to use this for commerical purposes, you will need a"
},
{
"path": "Matlab/HOOF/chiSquareDist.m",
"chars": 284,
"preview": "function distance = chiSquareDist(A)\r\n\r\n% Caclulate Chi Squared for a vector of Histograms\r\n\r\n\r\nL = A;\r\nt = size(L,2);\r\n"
},
{
"path": "Matlab/HOOF/computeDistanceModularHistogram.m",
"chars": 1449,
"preview": "function dist = computeDistanceModularHistogram(hist1, hist2)\r\n\r\n% dist = computeDistanceModularHistogram(hist1, hist2)\r"
},
{
"path": "Matlab/HOOF/computeDistanceOrdinalHistogram.m",
"chars": 679,
"preview": "function dist = computeDistanceOrdinalHistogram(hist1, hist2)\r\n% dist = computeDistanceOrdinalHistogram(hist1, hist2)\r\n%"
},
{
"path": "Matlab/HOOF/computeDistancesBetweenKPCASystems.m",
"chars": 7835,
"preview": "function distances = computeDistancesBetweenKPCASystems(sysParams,metric,kernel)\r\n\r\n% function distances =\r\n% computeDis"
},
{
"path": "Matlab/HOOF/findSubspaceAnglesBetweenKPCASystems.m",
"chars": 1710,
"preview": "function angles = findSubspaceAnglesBetweenKPCASystems(sysParams1, sysParams2)\r\n\r\n% angles = findSubspaceAnglesBetweenKP"
},
{
"path": "Matlab/HOOF/findSubspaceAnglesBetweenKPCASystemsSqrtHist.asv",
"chars": 1478,
"preview": "function angles = findSubspaceAnglesBetweenKPCASystemsSqrtHist(sysParams1, sysParams2)\r\n\r\n% angles = findSubspaceAnglesB"
},
{
"path": "Matlab/HOOF/findSubspaceAnglesBetweenKPCASystemsSqrtHist.m",
"chars": 1474,
"preview": "function angles = findSubspaceAnglesBetweenKPCASystemsSqrtHist(sysParams1, sysParams2)\r\n\r\n% angles = findSubspaceAnglesB"
},
{
"path": "Matlab/HOOF/gradientHistogram.m",
"chars": 1693,
"preview": "function ohog = gradientHistogram(Fx,Fy,binSize)\r\n% Compute HOOF feature\r\n% INPUTS\r\n% Fx - X-flow \r\n% Fy\t - "
},
{
"path": "Matlab/HOOF/histogramKernel.m",
"chars": 834,
"preview": "function [ output ] = histogramKernel( hist1, hist2 )\n%HISTOGRAMKERNEL find the 'histogram kernel' between time series o"
},
{
"path": "Matlab/HOOF/identifySystemUsingKPCA.m",
"chars": 1312,
"preview": "function sysParams = identifySystemUsingKPCA(Yoriginal,kernelMatrix, order)\r\n\r\n% sysParams = identifySystemUsingKPCA(Yor"
},
{
"path": "Matlab/HOOF/traceKernelKPCASystems.m",
"chars": 1131,
"preview": "function kernel = traceKernelKPCASystems(sysParams1, sysParams2, lambda)\r\n\r\n% (c) Rizwan Chaudhry - JHU Vision Lab\r\n\r\nY_"
},
{
"path": "Matlab/HOOF/traceKernelKPCASystemsSqrtHist.m",
"chars": 894,
"preview": "function kernel = traceKernelKPCASystemsSqrtHist(sysParams1, sysParams2, lambda)\r\n\r\n% (c) Rizwan Chaudhry - JHU Vision L"
},
{
"path": "Matlab/HOOF.m",
"chars": 724,
"preview": "function Feature = HOOF(OF, bins, blocks)\r\nFeature = zeros(1, bins * blocks * blocks);\r\n[h, w] = size(OF);\r\nOF(isnan(OF)"
},
{
"path": "Matlab/HSoptflow.m",
"chars": 2502,
"preview": "function [us,vs] = HSoptflow(Xrgb,n)\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n% Author: Gregory P"
},
{
"path": "Matlab/LBP_CASIA_Test.m",
"chars": 2894,
"preview": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% "
},
{
"path": "Matlab/LBP_CASIA_Train.m",
"chars": 2305,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
},
{
"path": "Matlab/LBP_NUAA_Test.m",
"chars": 1852,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./NUA"
},
{
"path": "Matlab/LBP_NUAA_Train.m",
"chars": 2150,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter training data name\r\nClientTrainNormalizedName = importdata('./N"
},
{
"path": "Matlab/LBP_PRINT_ATTACK_Test.m",
"chars": 3405,
"preview": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% "
},
{
"path": "Matlab/LBP_PRINT_ATTACK_Train.m",
"chars": 2739,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
},
{
"path": "Matlab/LBP_feature.m",
"chars": 834,
"preview": "function Y = LBP_feature(X, Map_u2_16, Map_u2_8)\r\n%% histogram\r\nHist_u2_16_2=lbp(X, 2, 16, Map_u2_16,'h');\r\nHist_u2_8_2="
},
{
"path": "Matlab/NUAA/client_test_normalized.txt",
"chars": 93425,
"preview": "0010\\0010_01_05_03_115.bmp\r\n0010\\0010_01_05_03_121.bmp\r\n0010\\0010_01_05_03_125.bmp\r\n0010\\0010_01_05_03_129.bmp\r\n0010\\001"
},
{
"path": "Matlab/NUAA/client_train_normalized.txt",
"chars": 48376,
"preview": "0001\\0001_00_00_01_0.bmp\r\n0001\\0001_00_00_01_101.bmp\r\n0001\\0001_00_00_01_105.bmp\r\n0001\\0001_00_00_01_109.bmp\r\n0001\\0001_"
},
{
"path": "Matlab/NUAA/imposter_test_normalized.txt",
"chars": 160034,
"preview": "0001\\0001_00_03_03_0.bmp\r\n0001\\0001_00_03_03_103.bmp\r\n0001\\0001_00_03_03_109.bmp\r\n0001\\0001_00_03_03_114.bmp\r\n0001\\0001_"
},
{
"path": "Matlab/NUAA/imposter_train_normalized.txt",
"chars": 48562,
"preview": "0001\\0001_00_00_01_0.bmp\r\n0001\\0001_00_00_01_102.bmp\r\n0001\\0001_00_00_01_107.bmp\r\n0001\\0001_00_00_01_111.bmp\r\n0001\\0001_"
},
{
"path": "Matlab/NUAA/readme.txt",
"chars": 1241,
"preview": "short description\r\n\r\nThis directory contains the geometrically normalized face images based on the two eyes' coordinates"
},
{
"path": "Matlab/OF_All_Train.m",
"chars": 1310,
"preview": "clear all, close all, clc\r\n\r\n%% load libsvm\r\naddpath('./libsvm-3.19/matlab');\r\nTrainFeatureAll = [];\r\nTrainTruth = [];\r\n"
},
{
"path": "Matlab/OF_CASIA_Test.m",
"chars": 3822,
"preview": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% "
},
{
"path": "Matlab/OF_CASIA_Train.m",
"chars": 3210,
"preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
},
{
"path": "Matlab/OF_PRINT_ATTACK_Test.m",
"chars": 4330,
"preview": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% "
},
{
"path": "Matlab/OF_PRINT_ATTACK_Train.m",
"chars": 3728,
"preview": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% "
},
{
"path": "Matlab/RealTime_DoGLBP.m",
"chars": 2191,
"preview": "clear all, close all, clc\r\n\r\n%% camera\r\nadaptorname = 'winvideo';\r\ninfo = imaqhwinfo(adaptorname);\r\ndeviceID = info.Devi"
},
{
"path": "Matlab/RealTime_OF.m",
"chars": 2180,
"preview": "clear all, close all, clc\r\n\r\n%% camera\r\nadaptorname = 'winvideo';\r\ninfo = imaqhwinfo(adaptorname);\r\ndeviceID = info.Devi"
},
{
"path": "Matlab/Save_CASIA_Test.m",
"chars": 1200,
"preview": "clear all, close all, clc\r\n\r\ndetector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\ncount_real = 0;\r\ncount_fake"
},
{
"path": "Matlab/Save_CASIA_Train.m",
"chars": 1204,
"preview": "clear all, close all, clc\r\n\r\ndetector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\ncount_real = 0;\r\ncount_fake"
},
{
"path": "Matlab/Save_NUAA.m",
"chars": 1502,
"preview": "clear all, close all, clc\r\n\r\nClientTrainNormalizedName = importdata('./NUAA/client_train_normalized.txt');\r\nClientTrainN"
},
{
"path": "Matlab/Save_PRINT_ATTACK_Test.m",
"chars": 1745,
"preview": "clear all, close all, clc\r\n\r\ndetector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\nfileIndex = {'009', '011', '0"
},
{
"path": "Matlab/Save_PRINT_ATTACK_Train.m",
"chars": 1713,
"preview": "clear all, close all, clc\r\n\r\ndetector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\nfileIndex = {'001', '002', '0"
},
{
"path": "Matlab/lbp-0.3.3/getmapping.m",
"chars": 2748,
"preview": "%GETMAPPING returns a structure containing a mapping table for LBP codes.\r\n% MAPPING = GETMAPPING(SAMPLES,MAPPINGTYPE) "
},
{
"path": "Matlab/lbp-0.3.3/lbp.m",
"chars": 6514,
"preview": "%LBP returns the local binary pattern image or LBP histogram of an image.\r\n% J = LBP(I,R,N,MAPPING,MODE) returns either"
},
{
"path": "Matlab/liblinear-1.96/COPYRIGHT",
"chars": 1486,
"preview": "\nCopyright (c) 2007-2014 The LIBLINEAR Project.\nAll rights reserved.\n\nRedistribution and use in source and binary forms,"
},
{
"path": "Matlab/liblinear-1.96/Makefile",
"chars": 993,
"preview": "CXX ?= g++\nCC ?= gcc\nCFLAGS = -Wall -Wconversion -O3 -fPIC\nLIBS = blas/blas.a\nSHVER = 2\nOS = $(shell uname)\n#LIBS = -lbl"
},
{
"path": "Matlab/liblinear-1.96/Makefile.win",
"chars": 900,
"preview": "#You must ensure nmake.exe, cl.exe, link.exe are in system path.\n#VCVARS32.bat\n#Under dosbox prompt\n#nmake -f Makefile.w"
},
{
"path": "Matlab/liblinear-1.96/README",
"chars": 20224,
"preview": "LIBLINEAR is a simple package for solving large-scale regularized linear \nclassification and regression. It currently su"
},
{
"path": "Matlab/liblinear-1.96/blas/Makefile",
"chars": 293,
"preview": "AR = ar rcv\nRANLIB = ranlib \n\nHEADERS = blas.h blasp.h\nFILES = dnrm2.o daxpy.o ddot.o dscal.o \n\nCFLAGS = $(OPTFLAGS)"
},
{
"path": "Matlab/liblinear-1.96/blas/blas.h",
"chars": 702,
"preview": "/* blas.h -- C header file for BLAS Ver 1.0 */\n/* Jesse Bennett "
},
{
"path": "Matlab/liblinear-1.96/blas/blasp.h",
"chars": 16529,
"preview": "/* blasp.h -- C prototypes for BLAS Ver 1.0 */\n/* Jesse Bennett "
},
{
"path": "Matlab/liblinear-1.96/blas/daxpy.c",
"chars": 1274,
"preview": "#include \"blas.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nint daxpy_(int *n, double *sa, double *sx, int *incx, double "
},
{
"path": "Matlab/liblinear-1.96/blas/ddot.c",
"chars": 1280,
"preview": "#include \"blas.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ndouble ddot_(int *n, double *sx, int *incx, double *sy, int *"
},
{
"path": "Matlab/liblinear-1.96/blas/dnrm2.c",
"chars": 1375,
"preview": "#include <math.h> /* Needed for fabs() and sqrt() */\n#include \"blas.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ndouble "
},
{
"path": "Matlab/liblinear-1.96/blas/dscal.c",
"chars": 1104,
"preview": "#include \"blas.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nint dscal_(int *n, double *sa, double *sx, int *incx)\n{\n lon"
},
{
"path": "Matlab/liblinear-1.96/heart_scale",
"chars": 27670,
"preview": "+1 1:0.708333 2:1 3:1 4:-0.320755 5:-0.105023 6:-1 7:1 8:-0.419847 9:-1 10:-0.225806 12:1 13:-1 \n-1 1:0.583333 2:-1 3:0."
},
{
"path": "Matlab/liblinear-1.96/linear.cpp",
"chars": 57430,
"preview": "#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <stdarg.h>\n#include <locale.h>\n#in"
},
{
"path": "Matlab/liblinear-1.96/linear.def",
"chars": 426,
"preview": "LIBRARY liblinear\nEXPORTS\n\ttrain\t@1\n\tcross_validation\t@2\n\tsave_model\t@3\n\tload_model\t@4\n\tget_nr_feature\t@5\n\tget_nr_class\t"
},
{
"path": "Matlab/liblinear-1.96/linear.h",
"chars": 2211,
"preview": "#ifndef _LIBLINEAR_H\n#define _LIBLINEAR_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct feature_node\n{\n\tint index;\n\tdo"
},
{
"path": "Matlab/liblinear-1.96/matlab/Makefile",
"chars": 1504,
"preview": "# This Makefile is used under Linux\n\nMATLABDIR ?= /usr/local/matlab\nCXX ?= g++\n#CXX = g++-3.3\nCC ?= gcc\nCFLAGS = -Wall -"
},
{
"path": "Matlab/liblinear-1.96/matlab/README",
"chars": 7470,
"preview": "--------------------------------------------\n--- MATLAB/OCTAVE interface of LIBLINEAR ---\n------------------------------"
},
{
"path": "Matlab/liblinear-1.96/matlab/libsvmread.c",
"chars": 4063,
"preview": "#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include <ctype.h>\n#include <errno.h>\n\n#include \"mex.h\"\n\n#ifd"
},
{
"path": "Matlab/liblinear-1.96/matlab/libsvmwrite.c",
"chars": 2341,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"mex.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x070300"
},
{
"path": "Matlab/liblinear-1.96/matlab/linear_model_matlab.c",
"chars": 3545,
"preview": "#include <stdlib.h>\n#include <string.h>\n#include \"../linear.h\"\n\n#include \"mex.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x0"
},
{
"path": "Matlab/liblinear-1.96/matlab/linear_model_matlab.h",
"chars": 166,
"preview": "const char *model_to_matlab_structure(mxArray *plhs[], struct model *model_);\nconst char *matlab_matrix_to_model(struct "
},
{
"path": "Matlab/liblinear-1.96/matlab/make.m",
"chars": 1089,
"preview": "% This make.m is for MATLAB and OCTAVE under Windows, Mac, and Unix\n\ntry\n\tType = ver;\n\t% This part is for OCTAVE\n\tif(str"
},
{
"path": "Matlab/liblinear-1.96/matlab/predict.c",
"chars": 8517,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"../linear.h\"\n\n#include \"mex.h\"\n#include \"linear_mod"
},
{
"path": "Matlab/liblinear-1.96/matlab/train.c",
"chars": 10861,
"preview": "#include <stdio.h>\n#include <math.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include \"../linear.h\"\n\n"
},
{
"path": "Matlab/liblinear-1.96/predict.c",
"chars": 5338,
"preview": "#include <stdio.h>\n#include <ctype.h>\n#include <stdlib.h>\n#include <string.h>\n#include <errno.h>\n#include \"linear.h\"\n\nin"
},
{
"path": "Matlab/liblinear-1.96/python/Makefile",
"chars": 32,
"preview": "all = lib\n\nlib:\n\tmake -C .. lib\n"
},
{
"path": "Matlab/liblinear-1.96/python/README",
"chars": 12195,
"preview": "-------------------------------------\n--- Python interface of LIBLINEAR ---\n-------------------------------------\n\nTable"
},
{
"path": "Matlab/liblinear-1.96/python/liblinear.py",
"chars": 9373,
"preview": "#!/usr/bin/env python\n\nfrom ctypes import *\nfrom ctypes.util import find_library\nfrom os import path\nimport sys\n\n__all__"
},
{
"path": "Matlab/liblinear-1.96/python/liblinearutil.py",
"chars": 8208,
"preview": "#!/usr/bin/env python\n\nimport os, sys\nsys.path = [os.path.dirname(os.path.abspath(__file__))] + sys.path \nfrom liblinear"
},
{
"path": "Matlab/liblinear-1.96/train.c",
"chars": 9109,
"preview": "#include <stdio.h>\n#include <math.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <errno.h>\n#incl"
},
{
"path": "Matlab/liblinear-1.96/tron.cpp",
"chars": 5186,
"preview": "#include <math.h>\n#include <stdio.h>\n#include <string.h>\n#include <stdarg.h>\n#include \"tron.h\"\n\n#ifndef min\ntemplate <cl"
},
{
"path": "Matlab/liblinear-1.96/tron.h",
"chars": 687,
"preview": "#ifndef _TRON_H\n#define _TRON_H\n\nclass function\n{\npublic:\n\tvirtual double fun(double *w) = 0 ;\n\tvirtual void grad(double"
},
{
"path": "Matlab/libsvm-3.19/COPYRIGHT",
"chars": 1497,
"preview": "\nCopyright (c) 2000-2014 Chih-Chung Chang and Chih-Jen Lin\nAll rights reserved.\n\nRedistribution and use in source and bi"
},
{
"path": "Matlab/libsvm-3.19/FAQ.html",
"chars": 78969,
"preview": "\r\n\r\n<html>\n<head>\n<title>LIBSVM FAQ</title>\n</head>\n<body bgcolor=\"#ffffcc\">\n\n<a name=\"_TOP\"><b><h1><a\nhref=http://www.c"
},
{
"path": "Matlab/libsvm-3.19/Makefile",
"chars": 732,
"preview": "CXX ?= g++\nCFLAGS = -Wall -Wconversion -O3 -fPIC\nSHVER = 2\nOS = $(shell uname)\n\nall: svm-train svm-predict svm-scale\n\nli"
},
{
"path": "Matlab/libsvm-3.19/Makefile.win",
"chars": 1084,
"preview": "#You must ensure nmake.exe, cl.exe, link.exe are in system path.\n#VCVARS32.bat\n#Under dosbox prompt\n#nmake -f Makefile.w"
},
{
"path": "Matlab/libsvm-3.19/README",
"chars": 28544,
"preview": "Libsvm is a simple, easy-to-use, and efficient software for SVM\nclassification and regression. It solves C-SVM classific"
},
{
"path": "Matlab/libsvm-3.19/heart_scale",
"chars": 27670,
"preview": "+1 1:0.708333 2:1 3:1 4:-0.320755 5:-0.105023 6:-1 7:1 8:-0.419847 9:-1 10:-0.225806 12:1 13:-1 \n-1 1:0.583333 2:-1 3:0."
},
{
"path": "Matlab/libsvm-3.19/java/Makefile",
"chars": 624,
"preview": ".SUFFIXES: .class .java\nFILES = libsvm/svm.class libsvm/svm_model.class libsvm/svm_node.class \\\n\t\tlibsvm/svm_parameter.c"
},
{
"path": "Matlab/libsvm-3.19/java/libsvm/svm.java",
"chars": 63803,
"preview": "\n\n\n\n\npackage libsvm;\nimport java.io.*;\nimport java.util.*;\n\n//\n// Kernel Cache\n//\n// l is the number of total data items"
},
{
"path": "Matlab/libsvm-3.19/java/libsvm/svm.m4",
"chars": 63095,
"preview": "define(`swap',`do {$1 _=$2; $2=$3; $3=_;} while(false)')\ndefine(`Qfloat',`float')\ndefine(`SIZE_OF_QFLOAT',4)\ndefine(`TAU"
},
{
"path": "Matlab/libsvm-3.19/java/libsvm/svm_model.java",
"chars": 868,
"preview": "//\n// svm_model\n//\npackage libsvm;\npublic class svm_model implements java.io.Serializable\n{\n\tpublic svm_parameter param;"
},
{
"path": "Matlab/libsvm-3.19/java/libsvm/svm_node.java",
"chars": 115,
"preview": "package libsvm;\npublic class svm_node implements java.io.Serializable\n{\n\tpublic int index;\n\tpublic double value;\n}\n"
},
{
"path": "Matlab/libsvm-3.19/java/libsvm/svm_parameter.java",
"chars": 1288,
"preview": "package libsvm;\npublic class svm_parameter implements Cloneable,java.io.Serializable\n{\n\t/* svm_type */\n\tpublic static fi"
},
{
"path": "Matlab/libsvm-3.19/java/libsvm/svm_print_interface.java",
"chars": 87,
"preview": "package libsvm;\npublic interface svm_print_interface\n{\n\tpublic void print(String s);\n}\n"
},
{
"path": "Matlab/libsvm-3.19/java/libsvm/svm_problem.java",
"chars": 136,
"preview": "package libsvm;\npublic class svm_problem implements java.io.Serializable\n{\n\tpublic int l;\n\tpublic double[] y;\n\tpublic sv"
},
{
"path": "Matlab/libsvm-3.19/java/svm_predict.java",
"chars": 4950,
"preview": "import libsvm.*;\nimport java.io.*;\nimport java.util.*;\n\nclass svm_predict {\n\tprivate static svm_print_interface svm_prin"
},
{
"path": "Matlab/libsvm-3.19/java/svm_scale.java",
"chars": 8944,
"preview": "import libsvm.*;\nimport java.io.*;\nimport java.util.*;\nimport java.text.DecimalFormat;\n\nclass svm_scale\n{\n\tprivate Strin"
},
{
"path": "Matlab/libsvm-3.19/java/svm_toy.java",
"chars": 12269,
"preview": "import libsvm.*;\nimport java.applet.*;\nimport java.awt.*;\nimport java.util.*;\nimport java.awt.event.*;\nimport java.io.*;"
},
{
"path": "Matlab/libsvm-3.19/java/svm_train.java",
"chars": 8355,
"preview": "import libsvm.*;\nimport java.io.*;\nimport java.util.*;\n\nclass svm_train {\n\tprivate svm_parameter param;\t\t// set by parse"
},
{
"path": "Matlab/libsvm-3.19/java/test_applet.html",
"chars": 81,
"preview": "<APPLET code=\"svm_toy.class\" archive=\"libsvm.jar\" width=300 height=350></APPLET>\n"
},
{
"path": "Matlab/libsvm-3.19/matlab/Makefile",
"chars": 1240,
"preview": "# This Makefile is used under Linux\n\nMATLABDIR ?= /usr/local/matlab\n# for Mac\n# MATLABDIR ?= /opt/local/matlab\n\nCXX ?= g"
},
{
"path": "Matlab/libsvm-3.19/matlab/README",
"chars": 9826,
"preview": "-----------------------------------------\n--- MATLAB/OCTAVE interface of LIBSVM ---\n------------------------------------"
},
{
"path": "Matlab/libsvm-3.19/matlab/libsvmread.c",
"chars": 4063,
"preview": "#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include <ctype.h>\n#include <errno.h>\n\n#include \"mex.h\"\n\n#ifd"
},
{
"path": "Matlab/libsvm-3.19/matlab/libsvmwrite.c",
"chars": 2341,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"mex.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x070300"
},
{
"path": "Matlab/libsvm-3.19/matlab/make.m",
"chars": 777,
"preview": "% This make.m is for MATLAB and OCTAVE under Windows, Mac, and Unix\n\ntry\n\tType = ver;\n\t% This part is for OCTAVE\n\tif(str"
},
{
"path": "Matlab/libsvm-3.19/matlab/svm_model_matlab.c",
"chars": 8208,
"preview": "#include <stdlib.h>\n#include <string.h>\n#include \"../svm.h\"\n\n#include \"mex.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x0703"
},
{
"path": "Matlab/libsvm-3.19/matlab/svm_model_matlab.h",
"chars": 201,
"preview": "const char *model_to_matlab_structure(mxArray *plhs[], int num_of_feature, struct svm_model *model);\nstruct svm_model *m"
},
{
"path": "Matlab/libsvm-3.19/matlab/svmpredict.c",
"chars": 9823,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"../svm.h\"\n\n#include \"mex.h\"\n#include \"svm_model_mat"
},
{
"path": "Matlab/libsvm-3.19/matlab/svmtrain.c",
"chars": 11821,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include \"../svm.h\"\n\n#include \"mex.h\"\n#inc"
},
{
"path": "Matlab/libsvm-3.19/python/Makefile",
"chars": 32,
"preview": "all = lib\n\nlib:\n\tmake -C .. lib\n"
},
{
"path": "Matlab/libsvm-3.19/python/README",
"chars": 11908,
"preview": "----------------------------------\n--- Python interface of LIBSVM ---\n----------------------------------\n\nTable of Conte"
},
{
"path": "Matlab/libsvm-3.19/python/svm.py",
"chars": 9605,
"preview": "#!/usr/bin/env python\n\nfrom ctypes import *\nfrom ctypes.util import find_library\nfrom os import path\nimport sys\n\n__all__"
},
{
"path": "Matlab/libsvm-3.19/python/svmutil.py",
"chars": 8695,
"preview": "#!/usr/bin/env python\n\nimport os\nimport sys\nfrom svm import *\nfrom svm import __all__ as svm_all\n\n\n__all__ = ['evaluatio"
},
{
"path": "Matlab/libsvm-3.19/svm-predict.c",
"chars": 5536,
"preview": "#include <stdio.h>\n#include <ctype.h>\n#include <stdlib.h>\n#include <string.h>\n#include <errno.h>\n#include \"svm.h\"\n\nint p"
},
{
"path": "Matlab/libsvm-3.19/svm-scale.c",
"chars": 8504,
"preview": "#include <float.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <ctype.h>\n#include <string.h>\n\nvoid exit_with_help()\n"
},
{
"path": "Matlab/libsvm-3.19/svm-toy/gtk/Makefile",
"chars": 573,
"preview": "CC? = gcc\nCXX? = g++\nCFLAGS = -Wall -O3 -g `pkg-config --cflags gtk+-2.0`\nLIBS = `pkg-config --libs gtk+-2.0`\n\nsvm-toy: "
},
{
"path": "Matlab/libsvm-3.19/svm-toy/gtk/callbacks.cpp",
"chars": 10308,
"preview": "#include <gtk/gtk.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <list>\n#incl"
},
{
"path": "Matlab/libsvm-3.19/svm-toy/gtk/callbacks.h",
"chars": 1765,
"preview": "#include <gtk/gtk.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nvoid\non_window1_destroy (GtkObject "
},
{
"path": "Matlab/libsvm-3.19/svm-toy/gtk/interface.c",
"chars": 6457,
"preview": "/*\n * DO NOT EDIT THIS FILE - it is generated by Glade.\n */\n\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <unis"
},
{
"path": "Matlab/libsvm-3.19/svm-toy/gtk/interface.h",
"chars": 203,
"preview": "/*\n * DO NOT EDIT THIS FILE - it is generated by Glade.\n */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nGtkWidget* create_w"
},
{
"path": "Matlab/libsvm-3.19/svm-toy/gtk/main.c",
"chars": 398,
"preview": "/*\n * Initial main.c file generated by Glade. Edit as required.\n * Glade will not overwrite this file.\n */\n\n#include <gt"
},
{
"path": "Matlab/libsvm-3.19/svm-toy/gtk/svm-toy.glade",
"chars": 6402,
"preview": "<?xml version=\"1.0\"?>\n<GTK-Interface>\n\n<project>\n <name>svm-toy</name>\n <program_name>svm-toy</program_name>\n <direct"
},
{
"path": "Matlab/libsvm-3.19/svm-toy/qt/Makefile",
"chars": 392,
"preview": "CXX? = g++\nCFLAGS = -Wall -O3 -I$(INCLUDE) -I$(INCLUDE)/QtGui -lQtGui\nINCLUDE = /usr/include/qt4\nMOC = /usr/bin/moc-qt4\n"
},
{
"path": "Matlab/libsvm-3.19/svm-toy/qt/svm-toy.cpp",
"chars": 9744,
"preview": "#include <QtGui>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <list>\n#include "
},
{
"path": "Matlab/libsvm-3.19/svm-toy/windows/svm-toy.cpp",
"chars": 11503,
"preview": "#include <windows.h>\n#include <windowsx.h>\n#include <stdio.h>\n#include <string.h>\n#include <ctype.h>\n#include <list>\n#in"
},
{
"path": "Matlab/libsvm-3.19/svm-train.c",
"chars": 8986,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <errno.h>\n#include \"svm.h\"\n#defin"
},
{
"path": "Matlab/libsvm-3.19/svm.cpp",
"chars": 64702,
"preview": "#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <ctype.h>\n#include <float.h>\n#include <string.h>\n#incl"
},
{
"path": "Matlab/libsvm-3.19/svm.def",
"chars": 477,
"preview": "LIBRARY libsvm\nEXPORTS\n\tsvm_train\t@1\n\tsvm_cross_validation\t@2\n\tsvm_save_model\t@3\n\tsvm_load_model\t@4\n\tsvm_get_svm_type\t@5"
},
{
"path": "Matlab/libsvm-3.19/svm.h",
"chars": 3382,
"preview": "#ifndef _LIBSVM_H\n#define _LIBSVM_H\n\n#define LIBSVM_VERSION 319\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nextern int libs"
},
{
"path": "Matlab/libsvm-3.19/tools/README",
"chars": 7033,
"preview": "This directory includes some useful codes:\n\n1. subset selection tools.\n2. parameter selection tools.\n3. LIBSVM format ch"
},
{
"path": "Matlab/libsvm-3.19/tools/checkdata.py",
"chars": 2479,
"preview": "#!/usr/bin/env python\n\n#\n# A format checker for LIBSVM\n#\n\n#\n# Copyright (c) 2007, Rong-En Fan\n#\n# All rights reserved.\n#"
},
{
"path": "Matlab/libsvm-3.19/tools/easy.py",
"chars": 2699,
"preview": "#!/usr/bin/env python\n\nimport sys\nimport os\nfrom subprocess import *\n\nif len(sys.argv) <= 1:\n\tprint('Usage: {0} training"
},
{
"path": "Matlab/libsvm-3.19/tools/grid.py",
"chars": 15316,
"preview": "#!/usr/bin/env python\n__all__ = ['find_parameters']\n\nimport os, sys, traceback, getpass, time, re\nfrom threading import "
},
{
"path": "Matlab/libsvm-3.19/tools/subset.py",
"chars": 3202,
"preview": "#!/usr/bin/env python\n\nimport os, sys, math, random\nfrom collections import defaultdict\n\nif sys.version_info[0] >= 3:\n\tx"
},
{
"path": "README.md",
"chars": 513,
"preview": "# Face_Liveness_Detection\n\n## Matlab\n\nNUAA database is included in Matlab folder. PRINT-ATTACK database can be downloade"
}
]
// ... and 18 more files (download for full content)
About this extraction
This page contains the full source code of the allenyangyl/Face_Liveness_Detection GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 178 files (35.0 MB), approximately 679.6k tokens, and a symbol index with 599 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.