diff --git a/CMakeLists.txt b/CMakeLists.txt index af4f17c1..95d26f81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ set(OpenCV_LIBS opencv_aruco opencv_core opencv_calib3d opencv_dnn opencv_highgui opencv_features2d opencv_gapi opencv_photo opencv_imgproc opencv_objdetect opencv_video opencv_videoio opencv_stitching - opencv_img_hash opencv_wechat_qrcode + opencv_img_hash opencv_wechat_qrcode opencv_ml ) if(ANDROID) diff --git a/conanfile.py b/conanfile.py index 02eacb2d..bc22d7b1 100644 --- a/conanfile.py +++ b/conanfile.py @@ -7,7 +7,7 @@ from pathlib import Path import yaml -OPENCV_VERSION = "4.9.0+2" +OPENCV_VERSION = "4.9.0+3" OPENCV_FILES_URL = ( f"https://github.com/rainyl/opencv.full/releases/download/{OPENCV_VERSION}" ) diff --git a/ffigen.yaml b/ffigen.yaml index 565fa215..8cb6f4a2 100644 --- a/ffigen.yaml +++ b/ffigen.yaml @@ -29,6 +29,18 @@ headers: - src/highgui/highgui.h - src/imgcodecs/imgcodecs.h - src/imgproc/imgproc.h + - src/ml/ml.h + - src/ml/train_data.h + - src/ml/ann_mlp.h + - src/ml/boost.h + - src/ml/dtrees.h + - src/ml/em.h + - src/ml/knearest.h + - src/ml/logistic_regression.h + - src/ml/normal_bayes_classifier.h + - src/ml/rtrees.h + - src/ml/svm.h + - src/ml/svmsgd.h - src/objdetect/objdetect.h - src/photo/photo.h - src/stitching/stitching.h @@ -50,6 +62,18 @@ headers: - src/highgui/highgui.h - src/imgcodecs/imgcodecs.h - src/imgproc/imgproc.h + - src/ml/ml.h + - src/ml/train_data.h + - src/ml/svm.h + - src/ml/ann_mlp.h + - src/ml/boost.h + - src/ml/dtrees.h + - src/ml/em.h + - src/ml/knearest.h + - src/ml/logistic_regression.h + - src/ml/normal_bayes_classifier.h + - src/ml/rtrees.h + - src/ml/svmsgd.h - src/objdetect/objdetect.h - src/photo/photo.h - src/stitching/stitching.h diff --git a/ffigen_const.yaml b/ffigen_const.yaml index cb83ad99..d14dc2eb 100644 --- a/ffigen_const.yaml +++ b/ffigen_const.yaml @@ -8,9 +8,9 @@ output: compiler-opts: "" headers: entry-points: - - src/constants.h + - src/core/constants.h include-directives: - - src/constants.h + - src/core/constants.h preamble: | // opencv_dart - OpenCV bindings for Dart language diff --git a/lib/src/calib3d/calib3d.dart b/lib/src/calib3d/calib3d.dart index 98a473ca..7d1a4708 100644 --- a/lib/src/calib3d/calib3d.dart +++ b/lib/src/calib3d/calib3d.dart @@ -10,8 +10,8 @@ import '../core/rect.dart'; import '../core/base.dart'; import '../core/mat.dart'; import '../core/size.dart'; -import '../core/termcriteria.dart'; import '../constants.g.dart'; +import '../core/termcriteria.dart'; import '../opencv.g.dart' as cvg; class Fisheye { @@ -189,7 +189,7 @@ class Fisheye { rvecs!.ref, tvecs!.ref, flags, - criteria.toTermCriteria(arena).ref, + criteria.toNativePtr(arena).ref, rmsErr, ), ); @@ -233,8 +233,8 @@ Mat undistortPoints( R ??= Mat.empty(); P ??= Mat.empty(); dst ??= Mat.empty(); - cvRunArena( - (arena) => cvRun( + cvRunArena((arena) { + cvRun( () => CFFI.UndistortPoints( src.ref, dst!.ref, @@ -242,10 +242,10 @@ Mat undistortPoints( distCoeffs.ref, R!.ref, P!.ref, - criteria.toTermCriteria(arena).ref, + criteria.toNativePtr(arena).ref, ), - ), - ); + ); + }); return dst; } diff --git a/lib/src/constants.g.dart b/lib/src/constants.g.dart index c9367d65..fe68758a 100644 --- a/lib/src/constants.g.dart +++ b/lib/src/constants.g.dart @@ -2090,3 +2090,17 @@ const int CALIB_ZERO_DISPARITY = 1024; const int CALIB_USE_LU = 131072; const int CALIB_USE_EXTRINSIC_GUESS = 4194304; + +const int VAR_NUMERICAL = 0; + +const int VAR_ORDERED = 0; + +const int VAR_CATEGORICAL = 1; + +const int TEST_ERROR = 0; + +const int TRAIN_ERROR = 1; + +const int ROW_SAMPLE = 0; + +const int COL_SAMPLE = 1; diff --git a/lib/src/core/core.dart b/lib/src/core/core.dart index 8bb60816..57cb2e61 100644 --- a/lib/src/core/core.dart +++ b/lib/src/core/core.dart @@ -674,7 +674,7 @@ Mat insertChannel(InputArray src, InputOutputArray dst, int coi) { final rval = cvRunArena((arena) { final p = arena(); cvRun( - () => CFFI.KMeans(data.ref, K, bestLabels.ref, criteria.toTermCriteria(arena).ref, attempts, + () => CFFI.KMeans(data.ref, K, bestLabels.ref, criteria.toNativePtr(arena).ref, attempts, flags, centers!.ref, p), ); return p.value; @@ -699,8 +699,8 @@ Mat insertChannel(InputArray src, InputOutputArray dst, int coi) { final rval = cvRunArena((arena) { final p = arena(); cvRun( - () => CFFI.KMeansPoints(pts.ref, K, bestLabels.ref, criteria.toTermCriteria(arena).ref, - attempts, flags, centers!.ref, p), + () => CFFI.KMeansPoints(pts.ref, K, bestLabels.ref, criteria.toNativePtr(arena).ref, attempts, + flags, centers!.ref, p), ); return p.value; }); diff --git a/lib/src/core/termcriteria.dart b/lib/src/core/termcriteria.dart index b2889778..47e9b602 100644 --- a/lib/src/core/termcriteria.dart +++ b/lib/src/core/termcriteria.dart @@ -1,22 +1,25 @@ -library cv; - import 'dart:ffi' as ffi; import 'package:ffi/ffi.dart'; - -import 'base.dart'; import '../opencv.g.dart' as cvg; typedef TermCriteria = (int type, int count, double eps); -extension TermCriteriaExtension on TermCriteria { - /// TermCriteria is the criteria for iterative algorithms. - /// - /// For further details, please see: - /// https://docs.opencv.org/master/d9/d5d/classcv_1_1TermCriteria.html - cvg.TermCriteriaPtr toTermCriteria(Arena arena) { - final p = arena(); - cvRun(() => CFFI.TermCriteria_New($1, $2, $3, p)); - return p; +extension TermCriteriaX on TermCriteria { + ffi.Pointer toNativePtr(Arena arena) { + return arena() + ..ref.type = this.$1 + ..ref.maxCount = this.$2 + ..ref.epsilon = this.$3; + } + + int get type => this.$1; + int get count => this.$2; + double get eps => this.$3; +} + +extension TermCriteriaX1 on cvg.TermCriteria { + TermCriteria toDart() { + return (type, maxCount, epsilon); } } diff --git a/lib/src/imgproc/imgproc.dart b/lib/src/imgproc/imgproc.dart index 026eedbf..25516c58 100644 --- a/lib/src/imgproc/imgproc.dart +++ b/lib/src/imgproc/imgproc.dart @@ -700,8 +700,8 @@ VecPoint2f cornerSubPix( cvRunArena((arena) { final size = winSize.toSize(arena); final zone = zeroZone.toSize(arena); - final c = criteria.toTermCriteria(arena); - cvRun(() => CFFI.CornerSubPix(image.ref, corners.ref, size.ref, zone.ref, c.ref)); + final tc = criteria.toNativePtr(arena); + cvRun(() => CFFI.CornerSubPix(image.ref, corners.ref, size.ref, zone.ref, tc.ref)); }); return corners; } diff --git a/lib/src/ml/ann_mlp.dart b/lib/src/ml/ann_mlp.dart new file mode 100644 index 00000000..bc9cf807 --- /dev/null +++ b/lib/src/ml/ann_mlp.dart @@ -0,0 +1,312 @@ +// ignore_for_file: constant_identifier_names, camel_case_types + +import 'dart:ffi' as ffi; +import 'package:ffi/ffi.dart'; + +import '../core/base.dart'; +import '../core/mat.dart'; +import '../core/termcriteria.dart'; +import '../opencv.g.dart' as cvg; + +class ANN_MLP extends CvStruct { + ANN_MLP._(cvg.PtrANN_MLPPtr ptr) : super.fromPointer(ptr) { + finalizer.attach(this, ptr.cast()); + } + + factory ANN_MLP.create() { + final p = calloc(); + cvRun(() => CFFI.ANN_MLP_Create(p)); + return ANN_MLP._(p); + } + + factory ANN_MLP.load(String filepath) { + return using((arena) { + final fp = filepath.toNativeUtf8(allocator: arena).cast(); + final p = calloc(); + cvRun(() => CFFI.ANN_MLP_Load(fp, p)); + return ANN_MLP._(p); + }); + } + + factory ANN_MLP.loadFromString(String strModel, String objname) { + return using((arena) { + final sm = strModel.toNativeUtf8(allocator: arena).cast(); + final on = objname.toNativeUtf8(allocator: arena).cast(); + final p = calloc(); + cvRun(() => CFFI.ANN_MLP_LoadFromString(sm, on, p)); + return ANN_MLP._(p); + }); + } + + static final finalizer = OcvFinalizer(CFFI.addresses.ANN_MLP_Close); + + int getTrainMethod() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetTrainMethod(ref, p)); + return p.value; + }); + } + + /// Sets training method and common parameters. + /// + /// [method] Default value is [TRAIN_METHODS_RPROP]. + /// + /// https://docs.opencv.org/4.x/d0/dce/classcv_1_1ml_1_1ANN__MLP.html#a4be093cfd2e743ee2f41e34e50cf3a54 + void setTrainMethod(int method, [double param1 = 0, double param2 = 0]) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetTrainMethod(ref, method, param1, param2)); + }); + } + + void setActivationFunction(int type, double param1, double param2) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetActivationFunction(ref, type, param1, param2)); + }); + } + + void setLayerSizes(Mat layerSizes) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetLayerSizes(ref, layerSizes.ref)); + }); + } + + Mat getLayerSizes() { + return using((arena) { + final mat = Mat.empty(); + cvRun(() => CFFI.ANN_MLP_GetLayerSizes(ref, mat.ptr)); + return mat; + }); + } + + void setTermCriteria(TermCriteria val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetTermCriteria(ref, val.toNativePtr(arena).ref)); + }); + } + + TermCriteria getTermCriteria() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetTermCriteria(ref, p)); + return p.ref.toDart(); + }); + } + + void setBackpropWeightScale(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetBackpropWeightScale(ref, val)); + }); + } + + double getBackpropWeightScale() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetBackpropWeightScale(ref, p)); + return p.value; + }); + } + + void setBackpropMomentumScale(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetBackpropMomentumScale(ref, val)); + }); + } + + double getBackpropMomentumScale() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetBackpropMomentumScale(ref, p)); + return p.value; + }); + } + + void setRpropDW0(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetRpropDW0(ref, val)); + }); + } + + double getRpropDW0() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetRpropDW0(ref, p)); + return p.value; + }); + } + + void setRpropDWPlus(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetRpropDWPlus(ref, val)); + }); + } + + double getRpropDWPlus() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetRpropDWPlus(ref, p)); + return p.value; + }); + } + + void setRpropDWMinus(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetRpropDWMinus(ref, val)); + }); + } + + double getRpropDWMinus() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetRpropDWMinus(ref, p)); + return p.value; + }); + } + + void setRpropDWMin(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetRpropDWMin(ref, val)); + }); + } + + double getRpropDWMin() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetRpropDWMin(ref, p)); + return p.value; + }); + } + + void setRpropDWMax(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetRpropDWMax(ref, val)); + }); + } + + double getRpropDWMax() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetRpropDWMax(ref, p)); + return p.value; + }); + } + + void setAnnealInitialT(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetAnnealInitialT(ref, val)); + }); + } + + double getAnnealInitialT() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetAnnealInitialT(ref, p)); + return p.value; + }); + } + + void setAnnealFinalT(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetAnnealFinalT(ref, val)); + }); + } + + double getAnnealFinalT() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetAnnealFinalT(ref, p)); + return p.value; + }); + } + + void setAnnealCoolingRatio(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetAnnealCoolingRatio(ref, val)); + }); + } + + double getAnnealCoolingRatio() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetAnnealCoolingRatio(ref, p)); + return p.value; + }); + } + + void setAnnealItePerStep(int val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetAnnealItePerStep(ref, val)); + }); + } + + int getAnnealItePerStep() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetAnnealItePerStep(ref, p)); + return p.value; + }); + } + + double predict(Mat samples, Mat results, int flags) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_Predict(ref, samples.ref, results.ref, flags, p)); + return p.value; + }); + } + + bool train(cvg.PtrTrainData trainData, int flags) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_Train(ref, trainData, flags, p)); + return p.value; + }); + } + + bool trainWithSamples(Mat samples, int layout, Mat responses) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_Train_1(ref, samples.ref, layout, responses.ref, p)); + return p.value; + }); + } + + void clear() { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_Clear(ref)); + }); + } + + void save(String filename) { + return using((arena) { + final p = filename.toNativeUtf8().cast(); + cvRun(() => CFFI.ANN_MLP_Save(ref, p)); + calloc.free(p); + }); + } + + @override + List get props => [ptr.address]; + + @override + cvg.PtrANN_MLP get ref => ptr.ref; + + /// The back-propagation algorithm. + static const int TRAIN_METHODS_BACKPROP = 0; + + /// The RPROP algorithm. See @cite RPROP93 for details. + static const int TRAIN_METHODS_RPROP = 1; + + /// The simulated annealing algorithm. See @cite Kirkpatrick83 for details. + static const int TRAIN_METHODS_ANNEAL = 2; + + static const int TRAIN_FLAGS_UPDATE_WEIGHTS = 1; + static const int TRAIN_FLAGS_NO_INPUT_SCALE = 2; + static const int TRAIN_FLAGS_NO_OUTPUT_SCALE = 4; + + static const int ACTIVATION_IDENTITY = 0; + static const int ACTIVATION_SIGMOID_SYM = 1; + static const int ACTIVATION_GAUSSIAN = 2; + static const int ACTIVATION_RELU = 3; + static const int ACTIVATION_LEAKYRELU = 4; +} diff --git a/lib/src/ml/svm.dart b/lib/src/ml/svm.dart new file mode 100644 index 00000000..b86b5cd6 --- /dev/null +++ b/lib/src/ml/svm.dart @@ -0,0 +1,432 @@ +// ignore_for_file: constant_identifier_names + +import 'dart:ffi' as ffi; +import 'package:ffi/ffi.dart'; + +import '../core/base.dart'; +import '../core/mat.dart'; +import '../core/termcriteria.dart'; + +import '../opencv.g.dart' as cvg; +import 'train_data.dart'; + +/// Support Vector Machines. +/// https://docs.opencv.org/4.x/d1/d2d/classcv_1_1ml_1_1SVM.html#ab4b93a4c42bbe213ffd9fb3832c6c44f +class SVM extends CvStruct { + SVM._(cvg.PtrSVMPtr ptr) : super.fromPointer(ptr) { + finalizer.attach(this, ptr.cast()); + } + + factory SVM.create() { + final p = calloc(); + cvRun(() => CFFI.SVM_Create(p)); + return SVM._(p); + } + + factory SVM.load(String filepath) { + return using((arena) { + final fp = filepath.toNativeUtf8(allocator: arena).cast(); + final p = calloc(); + cvRun(() => CFFI.SVM_Load(fp, p)); + return SVM._(p); + }); + } + + factory SVM.loadFromString(String strModel, String objname) { + return using((arena) { + final sm = strModel.toNativeUtf8(allocator: arena).cast(); + final on = objname.toNativeUtf8(allocator: arena).cast(); + final p = calloc(); + cvRun(() => CFFI.SVM_LoadFromString(sm, on, p)); + return SVM._(p); + }); + } + + static final finalizer = OcvFinalizer(CFFI.addresses.SVM_Close); + + double getC() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetC(ref, p)); + return p.value; + }); + } + + Mat getClassWeights() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetClassWeights(ref, p)); + return Mat.fromPointer(p); + }); + } + + double getCoef0() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetCoef0(ref, p)); + return p.value; + }); + } + + double getDecisionFunction(int i, Mat alpha, Mat svidx) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetDecisionFunction(ref, i, alpha.ref, svidx.ref, p)); + return p.value; + }); + } + + double getDegree() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetDegree(ref, p)); + return p.value; + }); + } + + double getGamma() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetGamma(ref, p)); + return p.value; + }); + } + + int getKernelType() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetKernelType(ref, p)); + return p.value; + }); + } + + double getNu() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetNu(ref, p)); + return p.value; + }); + } + + double getP() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetP(ref, p)); + return p.value; + }); + } + + Mat getSupportVectors() { + final p = calloc(); + cvRun(() => CFFI.SVM_GetSupportVectors(ref, p)); + return Mat.fromPointer(p); + } + + TermCriteria getTermCriteria() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetTermCriteria(ref, p)); + return p.ref.toDart(); + }); + } + + int getType() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetType(ref, p)); + return p.value; + }); + } + + Mat getUncompressedSupportVectors() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetUncompressedSupportVectors(ref, p)); + return Mat.fromPointer(p); + }); + } + + void setC(double val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetC(ref, val)); + }); + } + + void setClassWeights(Mat val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetClassWeights(ref, val.ref)); + }); + } + + void setCoef0(double val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetCoef0(ref, val)); + }); + } + + void setDegree(double val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetDegree(ref, val)); + }); + } + + void setGamma(double val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetGamma(ref, val)); + }); + } + + void setKernel(int kernelType) { + return using((arena) { + cvRun(() => CFFI.SVM_SetKernel(ref, kernelType)); + }); + } + + void setNu(double val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetNu(ref, val)); + }); + } + + void setP(double val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetP(ref, val)); + }); + } + + void setTermCriteria(TermCriteria val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetTermCriteria(ref, val.toNativePtr(arena).ref)); + }); + } + + void setType(int val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetType(ref, val)); + }); + } + + bool trainAuto(TrainData data, int kFold, ParamGrid cGrid, ParamGrid gammaGrid, ParamGrid pGrid, + ParamGrid nuGrid, ParamGrid coeffGrid, ParamGrid degreeGrid, bool balanced) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_TrainAuto(ref, data.ref, kFold, cGrid.ref, gammaGrid.ref, pGrid.ref, + nuGrid.ref, coeffGrid.ref, degreeGrid.ref, balanced, p)); + return p.value; + }); + } + + bool trainAutoWithSamples( + Mat samples, + int layout, + Mat responses, + int kFold, + ParamGrid cGrid, + ParamGrid gammaGrid, + ParamGrid pGrid, + ParamGrid nuGrid, + ParamGrid coeffGrid, + ParamGrid degreeGrid, + bool balanced) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_TrainAuto_1(ref, samples.ref, layout, responses.ref, kFold, cGrid.ref, + gammaGrid.ref, pGrid.ref, nuGrid.ref, coeffGrid.ref, degreeGrid.ref, balanced, p)); + return p.value; + }); + } + + double calcError(TrainData data, bool test, Mat resp) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_CalcError(ref, data.ref, test, resp.ref, p)); + return p.value; + }); + } + + bool empty() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_Empty(ref, p)); + return p.value; + }); + } + + int getVarCount() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetVarCount(ref, p)); + return p.value; + }); + } + + bool isClassifier() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_IsClassifier(ref, p)); + return p.value; + }); + } + + bool isTrained() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_IsTrained(ref, p)); + return p.value; + }); + } + + double predict(Mat samples, Mat results, int flags) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_Predict(ref, samples.ref, results.ref, flags, p)); + return p.value; + }); + } + + bool train(TrainData trainData, int flags) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_Train(ref, trainData.ref, flags, p)); + return p.value; + }); + } + + bool trainWithSamples(Mat samples, int layout, Mat responses) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_Train_1(ref, samples.ref, layout, responses.ref, p)); + return p.value; + }); + } + + void clear() => cvRun(() => CFFI.SVM_Clear(ref)); + + String getDefaultName() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetDefaultName(ref, p)); + return p.cast().toDartString(); + }); + } + + // ParamGrid getDefaultGrid(int param_id) { + // return using((arena) { + // final p = calloc(); + // cvRun(() => CFFI.SVM_GetDefaultGrid(ref, param_id, p)); + // return ParamGrid.fromPointer(p); + // }); + // } + + ParamGrid getDefaultGridPtr(int paramId) { + return using((arena) { + final p = calloc(); + cvRun(() => CFFI.SVM_GetDefaultGridPtr(ref, paramId, p)); + return ParamGrid.fromPointer(p); + }); + } + + void save(String filename) { + return using((arena) { + final p = filename.toNativeUtf8(allocator: arena).cast(); + cvRun(() => CFFI.SVM_Save(ref, p)); + }); + } + + @override + List get props => [ptr.address]; + + @override + cvg.PtrSVM get ref => ptr.ref; + + static const int KERNEL_CUSTOM = -1; + static const int KERNEL_LINEAR = 0; + static const int KERNEL_POLY = 1; + static const int KERNEL_RBF = 2; + static const int KERNEL_SIGMOID = 3; + static const int KERNEL_CHI2 = 4; + static const int KERNEL_INTER = 5; + + static const int PARAM_C = 0; + static const int PARAM_GAMMA = 1; + static const int PARAM_P = 2; + static const int PARAM_NU = 3; + static const int PARAM_COEF = 4; + static const int PARAM_DEGREE = 5; + + // SVM type + /// C-Support Vector Classification. n-class classification (n \f$\geq\f$ 2), allows + /// imperfect separation of classes with penalty multiplier C for outliers. + static const int C_SVC = 100; + + /// \f$\nu\f$-Support Vector Classification. n-class classification with possible + /// imperfect separation. Parameter \f$\nu\f$ (in the range 0..1, the larger the value, the smoother + /// the decision boundary) is used instead of C. + static const int NU_SVC = 101; + + /// Distribution Estimation (One-class %SVM). All the training data are from + /// the same class, %SVM builds a boundary that separates the class from the rest of the feature + /// space. + static const int ONE_CLASS = 102; + + /// \f$\epsilon\f$-Support Vector Regression. The distance between feature vectors + /// from the training set and the fitting hyper-plane must be less than p. For outliers the + /// penalty multiplier C is used. + static const int EPS_SVR = 103; + + //// \f$\nu\f$-Support Vector Regression. \f$\nu\f$ is used instead of p. + /// See @cite LibSVM for details. + static const int NU_SVR = 104; +} + +class ParamGrid extends CvStruct { + ParamGrid._(cvg.PtrParamGridPtr ptr) : super.fromPointer(ptr) { + finalizer.attach(this, ptr.cast()); + } + + factory ParamGrid.fromPointer(cvg.PtrParamGridPtr ptr) => ParamGrid._(ptr); + + factory ParamGrid.empty() { + final p = calloc(); + cvRun(() => CFFI.ParamGrid_Empty(p)); + return ParamGrid._(p); + } + + factory ParamGrid.create(double minVal, double maxVal, double logstep) { + final p = calloc(); + cvRun(() => CFFI.ParamGrid_New(minVal, maxVal, logstep, p)); + return ParamGrid._(p); + } + + double getMinVal() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ParamGrid_getMinVal(ref, p)); + return p.value; + }); + } + + double getMaxVal() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ParamGrid_GetMaxVal(ref, p)); + return p.value; + }); + } + + double getLogStep() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ParamGrid_GetLogStep(ref, p)); + return p.value; + }); + } + + static final finalizer = OcvFinalizer(CFFI.addresses.ParamGrid_Close); + + @override + List get props => [ptr.address]; + + @override + cvg.PtrParamGrid get ref => ptr.ref; +} diff --git a/lib/src/ml/train_data.dart b/lib/src/ml/train_data.dart new file mode 100644 index 00000000..c051c47a --- /dev/null +++ b/lib/src/ml/train_data.dart @@ -0,0 +1,446 @@ +// ignore_for_file: constant_identifier_names + +library cv; + +import 'dart:convert'; +import 'dart:ffi' as ffi; + +import 'package:ffi/ffi.dart'; + +import '../constants.g.dart'; +import '../core/base.dart'; +import '../core/mat.dart'; +import '../core/vec.dart'; +import '../opencv.g.dart' as cvg; + +class TrainData extends CvStruct { + TrainData._(cvg.PtrTrainDataPtr ptr) : super.fromPointer(ptr) { + finalizer.attach(this, ptr.cast()); + } + + /// Creates training data from in-memory arrays. + /// + /// [samples] matrix of samples. It should have CV_32F type. + /// + /// [layout] see ml::SampleTypes. + /// + /// [responses] matrix of responses. If the responses are scalar, they should be stored as a single row or as a single column. The matrix should have type CV_32F or CV_32S (in the former case the responses are considered as ordered by default; in the latter case - as categorical) + /// + /// [varIdx] vector specifying which variables to use for training. It can be an integer vector (CV_32S) containing 0-based variable indices or byte vector (CV_8U) containing a mask of active variables. + /// + /// [sampleIdx] vector specifying which samples to use for training. It can be an integer vector (CV_32S) containing 0-based sample indices or byte vector (CV_8U) containing a mask of training samples. + /// + /// [sampleWeights] optional vector with weights for each sample. It should have CV_32F type. + /// + /// [varType] optional vector of type CV_8U and size + , containing types of each input and output variable. See ml::VariableTypes. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a7755186f510669f35fbdee8c044ced10 + factory TrainData( + InputArray samples, + int layout, + InputArray responses, { + InputArray? varIdx, + InputArray? sampleIdx, + InputArray? sampleWeights, + InputArray? varType, + }) { + final p = calloc(); + varIdx ??= Mat.empty(); + sampleIdx ??= Mat.empty(); + sampleWeights ??= Mat.empty(); + varType ??= Mat.empty(); + cvRun(() => CFFI.TrainData_Create(samples.ref, layout, responses.ref, varIdx!.ref, + sampleIdx!.ref, sampleWeights!.ref, varType!.ref, p)); + return TrainData._(p); + } + + /// Reads the dataset from a .csv file and returns the ready-to-use training data. + /// + /// [filename] The input file name + /// + /// [headerLineCount] The number of lines in the beginning to skip; besides the header, the function also skips empty lines and lines staring with # + /// + /// [responseStartIdx] Index of the first output variable. If -1, the function considers the last variable as the response + /// + /// [responseEndIdx] Index of the last output variable + 1. If -1, then there is single response variable at responseStartIdx. + /// + /// [varTypeSpec] The optional text string that specifies the variables' types. It has the format ord[n1-n2,n3,n4-n5,...]cat[n6,n7-n8,...]. That is, variables from n1 to n2 (inclusive range), n3, n4 to n5 ... are considered ordered and n6, n7 to n8 ... are considered as categorical. The range [n1..n2] + [n3] + [n4..n5] + ... + [n6] + [n7..n8] should cover all the variables. If varTypeSpec is not specified, then algorithm uses the following rules: + /// + /// - all input variables are considered ordered by default. If some column contains has non- numerical values, e.g. 'apple', 'pear', 'apple', 'apple', 'mango', the corresponding variable is considered categorical. + /// - if there are several output variables, they are all considered as ordered. Error is reported when non-numerical values are used. + /// - if there is a single output variable, then if its values are non-numerical or are all integers, then it's considered categorical. Otherwise, it's considered ordered. + /// + /// [delimiter] The character used to separate values in each line. + /// + /// [missch] The character used to specify missing measurements. It should not be a digit. Although it's a non-numerical value, it surely does not affect the decision of whether the variable ordered or categorical. + /// + ///https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a12eac7e52509b6ee39ddaa7b3df1db8c + factory TrainData.loadFromCSV( + String filename, + int headerLineCount, { + int responseStartIdx = -1, + int responseEndIdx = -1, + String varTypeSpec = "", + String delimiter = ',', + String missch = '?', + }) { + return cvRunArena((arena) { + final p = calloc(); + final fp = filename.toNativeUtf8(allocator: arena).cast(); + final vp = varTypeSpec.toNativeUtf8(allocator: arena).cast(); + final dp = ascii.encode(delimiter)[0]; + final mp = ascii.encode(missch)[0]; + cvRun(() => CFFI.TrainData_LoadFromCSV( + fp, headerLineCount, responseStartIdx, responseEndIdx, vp, dp, mp, p)); + return TrainData._(p); + }); + } + + static double missingValue() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_MissingValue(p)); + return p.value; + }); + } + + static final finalizer = OcvFinalizer(CFFI.addresses.TrainData_Close); + + cvg.TrainData get traindata { + final s = calloc(); + cvRun(() => CFFI.TrainData_Get(ptr, s)); + return s.ref; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a7e687b7ee8325380bced49f5cd5baf15 + int getCatCount(int vi) { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetCatCount(ref, vi, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a3c2c8c6bf46955d9c52f256fdfa9097c + Mat getCatMap() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetCatMap(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a65ad5f0565ffe9ac26fbff8026faec36 + Mat getCatOfs() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetCatOfs(ref, m.ptr)); + return m; + } + + /// Returns the vector of class labels. + /// + /// The function returns vector of unique labels occurred in the responses. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a0e40c6bd62aa9ad0ae6f5273d2bd824b + Mat getClassLabels() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetClassLabels(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ab8c65d4efcb364be41febd8e3c2dae70 + Mat getDefaultSubstValues() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetDefaultSubstValues(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#aa2d2889b6dddad5e663cb18b206ac3f1 + int getLayout() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetLayout(ref, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a71f13029c92961dc432fcfeec376ad9a + Mat getMissing() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetMissing(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a4c81aad5723a86d1f9f97e0ca2cf271b + int getNAllVars() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetNAllVars(ref, p)); + return p.value; + }); + } + + /// Returns vector of symbolic names captured in [TrainData.loadFromCSV] + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ae14e1e1c607472f3c72a5a63679d08cb + List getNames() { + final v = calloc(); + cvRun(() => CFFI.TrainData_GetNames(ref, v)); + return VecVecChar.fromPointer(v).asStringList(); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a2f6bd6ae08ded472532b28e1b1266230 + Mat getNormCatResponses() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetNormCatResponses(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a38b6da04d4765000e890d614a01be446 + int getNSamples() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetNSamples(ref, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a0f3265d83658f7effd2cb4c05fe6b8c8 + int getNTestSamples() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetNTestSamples(ref, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ac34c8467851769cac20d99cde52f3812 + int getNTrainSamples() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetNTrainSamples(ref, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#acafca98ec8fb43ddcec59af1cc906611 + int getNVars() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetNVars(ref, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a10c5bb5ac7c4b70fbc9db0d3a94684e2 + Mat getResponses() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetResponses(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#afc86c4d4670e535dee2459742f87ea95 + int getResponseType() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetResponseType(ref, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a86fc3bbc9a6d0fef62ec97b28eb452fe + VecFloat getSample(InputArray varIdx, int sidx) { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetSample(ref, varIdx.ref, sidx, p)); + return VecFloat.fromPointer(p); + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a86fc3bbc9a6d0fef62ec97b28eb452fe + Mat getSamples() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetSamples(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a7ab7348f09a9a44bf1e30df1b979e034 + Mat getSampleWeights() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetSampleWeights(ref, m.ptr)); + return m; + } + + /// Extract from matrix rows/cols specified by passed indexes. + /// + /// [matrix] input matrix (supported types: CV_32S, CV_32F, CV_64F) + /// + /// [idx] 1D index vector + /// + /// [layout] specifies to extract rows (cv::ml::ROW_SAMPLES) or to extract columns (cv::ml::COL_SAMPLES) + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ac3c8a080653b64495a13913903b4667c + static Mat getSubMatrix(Mat matrix, Mat idx, int layout) { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetSubMatrix(matrix.ref, idx.ref, layout, m.ptr)); + return m; + } + + /// Extract from 1D vector elements specified by passed indexes. + /// + /// [vec] input vector (supported types: CV_32S, CV_32F, CV_64F) + /// + /// [idx] 1D index vector + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a3d01eda6a2eb795bd7ab223b6d065e52 + static Mat getSubVector(Mat vec, Mat idx) { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetSubVector(vec.ref, idx.ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a4fc48158587fe44f863788aefed5d245 + Mat getTestNormCatResponses() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTestNormCatResponses(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ae83fc71c776cd9971463c2e4dbab0427 + Mat getTestResponses() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTestResponses(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a923fc78e64e96543bf8ebe87d179ea29 + Mat getTestSampleIdx() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTestSampleIdx(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ae8549c2b1e3b16b8f0fc64917ffd6fd6 + Mat getTestSamples() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTestSamples(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#acddb9c4642e9b4f39a4bf1337ceb06f7 + Mat getTestSampleWeights() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTestSampleWeights(ref, m.ptr)); + return m; + } + + /// Returns the vector of normalized categorical responses. + /// + /// The function returns vector of responses. Each response is integer from 0 to -1. The actual label value can be retrieved then from the class label vector, see TrainData::getClassLabels. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a0901c9bed4728e3fa29b93a0afa46371 + Mat getTrainNormCatResponses() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTrainNormCatResponses(ref, m.ptr)); + return m; + } + + /// Returns the vector of responses. + /// + /// The function returns ordered or the original categorical responses. Usually it's used in regression algorithms. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ac248adbafbc43a1c00bfa32e2526cf4c + Mat getTrainResponses() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTrainResponses(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#aaefa64f1e3c208d4dc38127b6739eff7 + Mat getTrainSampleIdx() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTrainSampleIdx(ref, m.ptr)); + return m; + } + + /// Returns matrix of train samples. + /// + /// layout The requested layout. If it's different from the initial one, the matrix is transposed. See ml::SampleTypes. + /// + /// compressSamples if true, the function returns only the training samples (specified by sampleIdx) + /// + /// compressVars if true, the function returns the shorter training samples, containing only the active variables. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#af35073f4d4e0777159c57622df56117c + Mat getTrainSamples([ + int layout = ROW_SAMPLE, + bool compressSamples = true, + bool compressVars = true, + ]) { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTrainSamples(ref, layout, compressSamples, compressVars, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ad2de4f384f28259ac849e289be8d970d + Mat getTrainSampleWeights() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTrainSampleWeights(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a38d657b15e30bc94124c31cd3c23d816 + VecFloat getValues(int vi, Mat sidx) { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetValues(ref, vi, sidx.ref, p)); + return VecFloat.fromPointer(p); + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#aee63a2fc0f0679e3f8dd65dbc2c2b571 + Mat getVarIdx() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetVarIdx(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a7d08ff25ec3eed7c970a707e3000d212 + Mat getVarSymbolFlags() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetVarSymbolFlags(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a56959ac3541cd7d8d3bbcba02f8a1308 + Mat getVarType() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetVarType(ref, m.ptr)); + return m; + } + + /// Splits the training data into the training and test parts. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ab444173f4d980bb3c18d856df706c920 + void setTrainTestSplit(int count, [bool shuffle = true]) => + cvRun(() => CFFI.TrainData_SetTrainTestSplit(ref, count, shuffle)); + + /// Splits the training data into the training and test parts. + /// + /// The function selects a subset of specified relative size and then returns + /// it as the training set. If the function is not called, all the data is used + /// for training. Please, note that for each of TrainData::getTrain* there is + /// corresponding TrainData::getTest*, so that the test subset can be retrieved + /// and processed as well. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ad59c8df14e133ba492ff5cbfa21244cc + void setTrainTestSplitRatio(double ratio, [bool shuffle = true]) => + cvRun(() => CFFI.TrainData_SetTrainTestSplitRatio(ref, ratio, shuffle)); + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a0515ddd44168aa5c42478536375c760b + void shuffleTrainTest() => cvRun(() => CFFI.TrainData_ShuffleTrainTest(ref)); + + @override + List get props => [ptr.address]; + + @override + cvg.PtrTrainData get ref => ptr.ref; +} diff --git a/lib/src/opencv.dart b/lib/src/opencv.dart index 51d094bf..cc3b802a 100644 --- a/lib/src/opencv.dart +++ b/lib/src/opencv.dart @@ -37,6 +37,10 @@ export 'imgproc/imgproc.dart'; export 'imgproc/clahe.dart'; export 'imgproc/subdiv2d.dart'; +export 'ml/ann_mlp.dart'; +export 'ml/svm.dart'; +export 'ml/train_data.dart'; + export 'objdetect/objdetect.dart'; export 'photo/photo.dart'; export 'svd/svd.dart'; diff --git a/lib/src/opencv.g.dart b/lib/src/opencv.g.dart index 994b1c1e..79f3ba80 100644 --- a/lib/src/opencv.g.dart +++ b/lib/src/opencv.g.dart @@ -98,13991 +98,18941 @@ class CvNative { late final _AKAZE_DetectAndCompute = _AKAZE_DetectAndComputePtr.asFunction< CvStatus Function(AKAZE, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus AdaptiveThreshold( - Mat src, - Mat dst, - double maxValue, - int adaptiveTyp, - int typ, - int blockSize, - double c, + CvStatus ANN_MLP_Clear( + PtrANN_MLP self, ) { - return _AdaptiveThreshold( - src, - dst, - maxValue, - adaptiveTyp, - typ, - blockSize, - c, + return _ANN_MLP_Clear( + self, ); } - late final _AdaptiveThresholdPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Double, ffi.Int, ffi.Int, ffi.Int, - ffi.Double)>>('AdaptiveThreshold'); - late final _AdaptiveThreshold = _AdaptiveThresholdPtr.asFunction< - CvStatus Function(Mat, Mat, double, int, int, int, double)>(); + late final _ANN_MLP_ClearPtr = + _lookup>( + 'ANN_MLP_Clear'); + late final _ANN_MLP_Clear = + _ANN_MLP_ClearPtr.asFunction(); - void AgastFeatureDetector_Close( - ffi.Pointer a, + void ANN_MLP_Close( + ffi.Pointer self, ) { - return _AgastFeatureDetector_Close( - a, + return _ANN_MLP_Close( + self, ); } - late final _AgastFeatureDetector_ClosePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer)>>( - 'AgastFeatureDetector_Close'); - late final _AgastFeatureDetector_Close = _AgastFeatureDetector_ClosePtr - .asFunction)>(); + late final _ANN_MLP_ClosePtr = + _lookup)>>( + 'ANN_MLP_Close'); + late final _ANN_MLP_Close = + _ANN_MLP_ClosePtr.asFunction)>(); - CvStatus AgastFeatureDetector_Create( - ffi.Pointer rval, + CvStatus ANN_MLP_Create( + ffi.Pointer rval, ) { - return _AgastFeatureDetector_Create( + return _ANN_MLP_Create( rval, ); } - late final _AgastFeatureDetector_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer)>>( - 'AgastFeatureDetector_Create'); - late final _AgastFeatureDetector_Create = _AgastFeatureDetector_CreatePtr - .asFunction)>(); + late final _ANN_MLP_CreatePtr = + _lookup)>>( + 'ANN_MLP_Create'); + late final _ANN_MLP_Create = _ANN_MLP_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus AgastFeatureDetector_Detect( - AgastFeatureDetector a, - Mat src, - ffi.Pointer rval, + CvStatus ANN_MLP_GetAnnealCoolingRatio( + PtrANN_MLP self, + ffi.Pointer rval, ) { - return _AgastFeatureDetector_Detect( - a, - src, + return _ANN_MLP_GetAnnealCoolingRatio( + self, rval, ); } - late final _AgastFeatureDetector_DetectPtr = _lookup< + late final _ANN_MLP_GetAnnealCoolingRatioPtr = _lookup< ffi.NativeFunction< - CvStatus Function(AgastFeatureDetector, Mat, - ffi.Pointer)>>('AgastFeatureDetector_Detect'); - late final _AgastFeatureDetector_Detect = - _AgastFeatureDetector_DetectPtr.asFunction< - CvStatus Function( - AgastFeatureDetector, Mat, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, + ffi.Pointer)>>('ANN_MLP_GetAnnealCoolingRatio'); + late final _ANN_MLP_GetAnnealCoolingRatio = _ANN_MLP_GetAnnealCoolingRatioPtr + .asFunction)>(); - void AlignMTB_Close( - ffi.Pointer b, + CvStatus ANN_MLP_GetAnnealFinalT( + PtrANN_MLP self, + ffi.Pointer rval, ) { - return _AlignMTB_Close( - b, + return _ANN_MLP_GetAnnealFinalT( + self, + rval, ); } - late final _AlignMTB_ClosePtr = - _lookup)>>( - 'AlignMTB_Close'); - late final _AlignMTB_Close = - _AlignMTB_ClosePtr.asFunction)>(); + late final _ANN_MLP_GetAnnealFinalTPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_GetAnnealFinalT'); + late final _ANN_MLP_GetAnnealFinalT = _ANN_MLP_GetAnnealFinalTPtr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus AlignMTB_Create( - ffi.Pointer rval, + CvStatus ANN_MLP_GetAnnealInitialT( + PtrANN_MLP self, + ffi.Pointer rval, ) { - return _AlignMTB_Create( + return _ANN_MLP_GetAnnealInitialT( + self, rval, ); } - late final _AlignMTB_CreatePtr = - _lookup)>>( - 'AlignMTB_Create'); - late final _AlignMTB_Create = _AlignMTB_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ANN_MLP_GetAnnealInitialTPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrANN_MLP, + ffi.Pointer)>>('ANN_MLP_GetAnnealInitialT'); + late final _ANN_MLP_GetAnnealInitialT = _ANN_MLP_GetAnnealInitialTPtr + .asFunction)>(); - CvStatus AlignMTB_CreateWithParams( - int max_bits, - int exclude_range, - bool cut, - ffi.Pointer rval, + CvStatus ANN_MLP_GetAnnealItePerStep( + PtrANN_MLP self, + ffi.Pointer rval, ) { - return _AlignMTB_CreateWithParams( - max_bits, - exclude_range, - cut, + return _ANN_MLP_GetAnnealItePerStep( + self, rval, ); } - late final _AlignMTB_CreateWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Int, ffi.Bool, - ffi.Pointer)>>('AlignMTB_CreateWithParams'); - late final _AlignMTB_CreateWithParams = _AlignMTB_CreateWithParamsPtr - .asFunction)>(); + late final _ANN_MLP_GetAnnealItePerStepPtr = _lookup< + ffi + .NativeFunction)>>( + 'ANN_MLP_GetAnnealItePerStep'); + late final _ANN_MLP_GetAnnealItePerStep = _ANN_MLP_GetAnnealItePerStepPtr + .asFunction)>(); - CvStatus AlignMTB_Process( - AlignMTB b, - VecMat src, - ffi.Pointer dst, + CvStatus ANN_MLP_GetBackpropMomentumScale( + PtrANN_MLP self, + ffi.Pointer rval, ) { - return _AlignMTB_Process( - b, - src, - dst, + return _ANN_MLP_GetBackpropMomentumScale( + self, + rval, ); } - late final _AlignMTB_ProcessPtr = _lookup< + late final _ANN_MLP_GetBackpropMomentumScalePtr = _lookup< ffi.NativeFunction< - CvStatus Function( - AlignMTB, VecMat, ffi.Pointer)>>('AlignMTB_Process'); - late final _AlignMTB_Process = _AlignMTB_ProcessPtr.asFunction< - CvStatus Function(AlignMTB, VecMat, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, + ffi.Pointer)>>('ANN_MLP_GetBackpropMomentumScale'); + late final _ANN_MLP_GetBackpropMomentumScale = + _ANN_MLP_GetBackpropMomentumScalePtr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus ApplyColorMap( - Mat src, - Mat dst, - int colormap, + CvStatus ANN_MLP_GetBackpropWeightScale( + PtrANN_MLP self, + ffi.Pointer rval, ) { - return _ApplyColorMap( - src, - dst, - colormap, + return _ANN_MLP_GetBackpropWeightScale( + self, + rval, ); } - late final _ApplyColorMapPtr = - _lookup>( - 'ApplyColorMap'); - late final _ApplyColorMap = - _ApplyColorMapPtr.asFunction(); + late final _ANN_MLP_GetBackpropWeightScalePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrANN_MLP, + ffi.Pointer)>>('ANN_MLP_GetBackpropWeightScale'); + late final _ANN_MLP_GetBackpropWeightScale = + _ANN_MLP_GetBackpropWeightScalePtr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus ApplyCustomColorMap( - Mat src, - Mat dst, - Mat colormap, + CvStatus ANN_MLP_GetLayerSizes( + PtrANN_MLP self, + ffi.Pointer rval, ) { - return _ApplyCustomColorMap( - src, - dst, - colormap, + return _ANN_MLP_GetLayerSizes( + self, + rval, ); } - late final _ApplyCustomColorMapPtr = - _lookup>( - 'ApplyCustomColorMap'); - late final _ApplyCustomColorMap = - _ApplyCustomColorMapPtr.asFunction(); + late final _ANN_MLP_GetLayerSizesPtr = _lookup< + ffi.NativeFunction)>>( + 'ANN_MLP_GetLayerSizes'); + late final _ANN_MLP_GetLayerSizes = _ANN_MLP_GetLayerSizesPtr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus ApproxPolyDP( - VecPoint curve, - double epsilon, - bool closed, - ffi.Pointer rval, + CvStatus ANN_MLP_GetRpropDW0( + PtrANN_MLP self, + ffi.Pointer rval, ) { - return _ApproxPolyDP( - curve, - epsilon, - closed, + return _ANN_MLP_GetRpropDW0( + self, rval, ); } - late final _ApproxPolyDPPtr = _lookup< + late final _ANN_MLP_GetRpropDW0Ptr = _lookup< ffi.NativeFunction< - CvStatus Function(VecPoint, ffi.Double, ffi.Bool, - ffi.Pointer)>>('ApproxPolyDP'); - late final _ApproxPolyDP = _ApproxPolyDPPtr.asFunction< - CvStatus Function(VecPoint, double, bool, ffi.Pointer)>(); + CvStatus Function( + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_GetRpropDW0'); + late final _ANN_MLP_GetRpropDW0 = _ANN_MLP_GetRpropDW0Ptr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus ArcLength( - VecPoint curve, - bool is_closed, + CvStatus ANN_MLP_GetRpropDWMax( + PtrANN_MLP self, ffi.Pointer rval, ) { - return _ArcLength( - curve, - is_closed, + return _ANN_MLP_GetRpropDWMax( + self, rval, ); } - late final _ArcLengthPtr = _lookup< + late final _ANN_MLP_GetRpropDWMaxPtr = _lookup< ffi.NativeFunction< CvStatus Function( - VecPoint, ffi.Bool, ffi.Pointer)>>('ArcLength'); - late final _ArcLength = _ArcLengthPtr.asFunction< - CvStatus Function(VecPoint, bool, ffi.Pointer)>(); + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_GetRpropDWMax'); + late final _ANN_MLP_GetRpropDWMax = _ANN_MLP_GetRpropDWMaxPtr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus ArrowedLine( - Mat img, - Point pt1, - Point pt2, - Scalar color, - int thickness, - int line_type, - int shift, - double tipLength, + CvStatus ANN_MLP_GetRpropDWMin( + PtrANN_MLP self, + ffi.Pointer rval, ) { - return _ArrowedLine( - img, - pt1, - pt2, - color, - thickness, - line_type, - shift, - tipLength, + return _ANN_MLP_GetRpropDWMin( + self, + rval, ); } - late final _ArrowedLinePtr = _lookup< + late final _ANN_MLP_GetRpropDWMinPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Point, Point, Scalar, ffi.Int, ffi.Int, - ffi.Int, ffi.Double)>>('ArrowedLine'); - late final _ArrowedLine = _ArrowedLinePtr.asFunction< - CvStatus Function(Mat, Point, Point, Scalar, int, int, int, double)>(); - - void ArucoDetectorParameters_Close( - ffi.Pointer ap, - ) { - return _ArucoDetectorParameters_Close( - ap, - ); - } - - late final _ArucoDetectorParameters_ClosePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer)>>( - 'ArucoDetectorParameters_Close'); - late final _ArucoDetectorParameters_Close = _ArucoDetectorParameters_ClosePtr - .asFunction)>(); + CvStatus Function( + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_GetRpropDWMin'); + late final _ANN_MLP_GetRpropDWMin = _ANN_MLP_GetRpropDWMinPtr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_Create( - ffi.Pointer rval, + CvStatus ANN_MLP_GetRpropDWMinus( + PtrANN_MLP self, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_Create( + return _ANN_MLP_GetRpropDWMinus( + self, rval, ); } - late final _ArucoDetectorParameters_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer)>>( - 'ArucoDetectorParameters_Create'); - late final _ArucoDetectorParameters_Create = - _ArucoDetectorParameters_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ANN_MLP_GetRpropDWMinusPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_GetRpropDWMinus'); + late final _ANN_MLP_GetRpropDWMinus = _ANN_MLP_GetRpropDWMinusPtr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAdaptiveThreshConstant( - ArucoDetectorParameters ap, + CvStatus ANN_MLP_GetRpropDWPlus( + PtrANN_MLP self, ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetAdaptiveThreshConstant( - ap, + return _ANN_MLP_GetRpropDWPlus( + self, rval, ); } - late final _ArucoDetectorParameters_GetAdaptiveThreshConstantPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAdaptiveThreshConstant'); - late final _ArucoDetectorParameters_GetAdaptiveThreshConstant = - _ArucoDetectorParameters_GetAdaptiveThreshConstantPtr.asFunction< + late final _ANN_MLP_GetRpropDWPlusPtr = _lookup< + ffi.NativeFunction< CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_GetRpropDWPlus'); + late final _ANN_MLP_GetRpropDWPlus = _ANN_MLP_GetRpropDWPlusPtr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_GetTermCriteria( + PtrANN_MLP self, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax( - ap, + return _ANN_MLP_GetTermCriteria( + self, rval, ); } - late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMaxPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax'); - late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax = - _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMaxPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_GetTermCriteriaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrANN_MLP, + ffi.Pointer)>>('ANN_MLP_GetTermCriteria'); + late final _ANN_MLP_GetTermCriteria = _ANN_MLP_GetTermCriteriaPtr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin( - ArucoDetectorParameters ap, + CvStatus ANN_MLP_GetTrainMethod( + PtrANN_MLP self, ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin( - ap, + return _ANN_MLP_GetTrainMethod( + self, rval, ); } - late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMinPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin'); - late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin = - _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMinPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_GetTrainMethodPtr = _lookup< + ffi + .NativeFunction)>>( + 'ANN_MLP_GetTrainMethod'); + late final _ANN_MLP_GetTrainMethod = _ANN_MLP_GetTrainMethodPtr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_Load( + ffi.Pointer filepath, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep( - ap, + return _ANN_MLP_Load( + filepath, rval, ); } - late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStepPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep'); - late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep = - _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStepPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_LoadPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ffi.Pointer, ffi.Pointer)>>('ANN_MLP_Load'); + late final _ANN_MLP_Load = _ANN_MLP_LoadPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAprilTagCriticalRad( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_LoadFromString( + ffi.Pointer strModel, + ffi.Pointer objname, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetAprilTagCriticalRad( - ap, + return _ANN_MLP_LoadFromString( + strModel, + objname, rval, ); } - late final _ArucoDetectorParameters_GetAprilTagCriticalRadPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagCriticalRad'); - late final _ArucoDetectorParameters_GetAprilTagCriticalRad = - _ArucoDetectorParameters_GetAprilTagCriticalRadPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('ANN_MLP_LoadFromString'); + late final _ANN_MLP_LoadFromString = _ANN_MLP_LoadFromStringPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAprilTagDeglitch( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_Predict( + PtrANN_MLP self, + Mat samples, + Mat results, + int flags, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetAprilTagDeglitch( - ap, + return _ANN_MLP_Predict( + self, + samples, + results, + flags, rval, ); } - late final _ArucoDetectorParameters_GetAprilTagDeglitchPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagDeglitch'); - late final _ArucoDetectorParameters_GetAprilTagDeglitch = - _ArucoDetectorParameters_GetAprilTagDeglitchPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_PredictPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrANN_MLP, Mat, Mat, ffi.Int, + ffi.Pointer)>>('ANN_MLP_Predict'); + late final _ANN_MLP_Predict = _ANN_MLP_PredictPtr.asFunction< + CvStatus Function(PtrANN_MLP, Mat, Mat, int, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAprilTagMaxLineFitMse( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_Save( + PtrANN_MLP self, + ffi.Pointer filename, ) { - return _ArucoDetectorParameters_GetAprilTagMaxLineFitMse( - ap, - rval, + return _ANN_MLP_Save( + self, + filename, ); } - late final _ArucoDetectorParameters_GetAprilTagMaxLineFitMsePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagMaxLineFitMse'); - late final _ArucoDetectorParameters_GetAprilTagMaxLineFitMse = - _ArucoDetectorParameters_GetAprilTagMaxLineFitMsePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SavePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_Save'); + late final _ANN_MLP_Save = _ANN_MLP_SavePtr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAprilTagMaxNmaxima( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetActivationFunction( + PtrANN_MLP self, + int type, + double param1, + double param2, ) { - return _ArucoDetectorParameters_GetAprilTagMaxNmaxima( - ap, - rval, + return _ANN_MLP_SetActivationFunction( + self, + type, + param1, + param2, ); } - late final _ArucoDetectorParameters_GetAprilTagMaxNmaximaPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagMaxNmaxima'); - late final _ArucoDetectorParameters_GetAprilTagMaxNmaxima = - _ArucoDetectorParameters_GetAprilTagMaxNmaximaPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetActivationFunctionPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrANN_MLP, ffi.Int, ffi.Double, + ffi.Double)>>('ANN_MLP_SetActivationFunction'); + late final _ANN_MLP_SetActivationFunction = _ANN_MLP_SetActivationFunctionPtr + .asFunction(); - CvStatus ArucoDetectorParameters_GetAprilTagMinClusterPixels( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetAnnealCoolingRatio( + PtrANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetAprilTagMinClusterPixels( - ap, - rval, + return _ANN_MLP_SetAnnealCoolingRatio( + self, + val, ); } - late final _ArucoDetectorParameters_GetAprilTagMinClusterPixelsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagMinClusterPixels'); - late final _ArucoDetectorParameters_GetAprilTagMinClusterPixels = - _ArucoDetectorParameters_GetAprilTagMinClusterPixelsPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetAnnealCoolingRatioPtr = + _lookup>( + 'ANN_MLP_SetAnnealCoolingRatio'); + late final _ANN_MLP_SetAnnealCoolingRatio = _ANN_MLP_SetAnnealCoolingRatioPtr + .asFunction(); - CvStatus ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetAnnealFinalT( + PtrANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff( - ap, - rval, + return _ANN_MLP_SetAnnealFinalT( + self, + val, ); } - late final _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiffPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff'); - late final _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff = - _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiffPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetAnnealFinalTPtr = + _lookup>( + 'ANN_MLP_SetAnnealFinalT'); + late final _ANN_MLP_SetAnnealFinalT = _ANN_MLP_SetAnnealFinalTPtr.asFunction< + CvStatus Function(PtrANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetAprilTagQuadDecimate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetAnnealInitialT( + PtrANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetAprilTagQuadDecimate( - ap, - rval, + return _ANN_MLP_SetAnnealInitialT( + self, + val, ); } - late final _ArucoDetectorParameters_GetAprilTagQuadDecimatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagQuadDecimate'); - late final _ArucoDetectorParameters_GetAprilTagQuadDecimate = - _ArucoDetectorParameters_GetAprilTagQuadDecimatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetAnnealInitialTPtr = + _lookup>( + 'ANN_MLP_SetAnnealInitialT'); + late final _ANN_MLP_SetAnnealInitialT = _ANN_MLP_SetAnnealInitialTPtr + .asFunction(); - CvStatus ArucoDetectorParameters_GetAprilTagQuadSigma( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetAnnealItePerStep( + PtrANN_MLP self, + int val, ) { - return _ArucoDetectorParameters_GetAprilTagQuadSigma( - ap, - rval, + return _ANN_MLP_SetAnnealItePerStep( + self, + val, ); } - late final _ArucoDetectorParameters_GetAprilTagQuadSigmaPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagQuadSigma'); - late final _ArucoDetectorParameters_GetAprilTagQuadSigma = - _ArucoDetectorParameters_GetAprilTagQuadSigmaPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetAnnealItePerStepPtr = + _lookup>( + 'ANN_MLP_SetAnnealItePerStep'); + late final _ANN_MLP_SetAnnealItePerStep = _ANN_MLP_SetAnnealItePerStepPtr + .asFunction(); - CvStatus ArucoDetectorParameters_GetCornerRefinementMaxIterations( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetBackpropMomentumScale( + PtrANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetCornerRefinementMaxIterations( - ap, - rval, + return _ANN_MLP_SetBackpropMomentumScale( + self, + val, ); } - late final _ArucoDetectorParameters_GetCornerRefinementMaxIterationsPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetCornerRefinementMaxIterations'); - late final _ArucoDetectorParameters_GetCornerRefinementMaxIterations = - _ArucoDetectorParameters_GetCornerRefinementMaxIterationsPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetBackpropMomentumScalePtr = + _lookup>( + 'ANN_MLP_SetBackpropMomentumScale'); + late final _ANN_MLP_SetBackpropMomentumScale = + _ANN_MLP_SetBackpropMomentumScalePtr.asFunction< + CvStatus Function(PtrANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetCornerRefinementMethod( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetBackpropWeightScale( + PtrANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetCornerRefinementMethod( - ap, - rval, + return _ANN_MLP_SetBackpropWeightScale( + self, + val, ); } - late final _ArucoDetectorParameters_GetCornerRefinementMethodPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetCornerRefinementMethod'); - late final _ArucoDetectorParameters_GetCornerRefinementMethod = - _ArucoDetectorParameters_GetCornerRefinementMethodPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetBackpropWeightScalePtr = + _lookup>( + 'ANN_MLP_SetBackpropWeightScale'); + late final _ANN_MLP_SetBackpropWeightScale = + _ANN_MLP_SetBackpropWeightScalePtr.asFunction< + CvStatus Function(PtrANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetCornerRefinementMinAccuracy( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetLayerSizes( + PtrANN_MLP self, + Mat _layer_sizes, ) { - return _ArucoDetectorParameters_GetCornerRefinementMinAccuracy( - ap, - rval, + return _ANN_MLP_SetLayerSizes( + self, + _layer_sizes, ); } - late final _ArucoDetectorParameters_GetCornerRefinementMinAccuracyPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetCornerRefinementMinAccuracy'); - late final _ArucoDetectorParameters_GetCornerRefinementMinAccuracy = - _ArucoDetectorParameters_GetCornerRefinementMinAccuracyPtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetLayerSizesPtr = + _lookup>( + 'ANN_MLP_SetLayerSizes'); + late final _ANN_MLP_SetLayerSizes = _ANN_MLP_SetLayerSizesPtr.asFunction< + CvStatus Function(PtrANN_MLP, Mat)>(); - CvStatus ArucoDetectorParameters_GetCornerRefinementWinSize( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetRpropDW0( + PtrANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetCornerRefinementWinSize( - ap, - rval, + return _ANN_MLP_SetRpropDW0( + self, + val, ); } - late final _ArucoDetectorParameters_GetCornerRefinementWinSizePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetCornerRefinementWinSize'); - late final _ArucoDetectorParameters_GetCornerRefinementWinSize = - _ArucoDetectorParameters_GetCornerRefinementWinSizePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetRpropDW0Ptr = + _lookup>( + 'ANN_MLP_SetRpropDW0'); + late final _ANN_MLP_SetRpropDW0 = _ANN_MLP_SetRpropDW0Ptr.asFunction< + CvStatus Function(PtrANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetDetectInvertedMarker( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetRpropDWMax( + PtrANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetDetectInvertedMarker( - ap, - rval, + return _ANN_MLP_SetRpropDWMax( + self, + val, ); } - late final _ArucoDetectorParameters_GetDetectInvertedMarkerPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetDetectInvertedMarker'); - late final _ArucoDetectorParameters_GetDetectInvertedMarker = - _ArucoDetectorParameters_GetDetectInvertedMarkerPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetRpropDWMaxPtr = + _lookup>( + 'ANN_MLP_SetRpropDWMax'); + late final _ANN_MLP_SetRpropDWMax = _ANN_MLP_SetRpropDWMaxPtr.asFunction< + CvStatus Function(PtrANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetErrorCorrectionRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetRpropDWMin( + PtrANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetErrorCorrectionRate( - ap, - rval, + return _ANN_MLP_SetRpropDWMin( + self, + val, ); } - late final _ArucoDetectorParameters_GetErrorCorrectionRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetErrorCorrectionRate'); - late final _ArucoDetectorParameters_GetErrorCorrectionRate = - _ArucoDetectorParameters_GetErrorCorrectionRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetRpropDWMinPtr = + _lookup>( + 'ANN_MLP_SetRpropDWMin'); + late final _ANN_MLP_SetRpropDWMin = _ANN_MLP_SetRpropDWMinPtr.asFunction< + CvStatus Function(PtrANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetMarkerBorderBits( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetRpropDWMinus( + PtrANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetMarkerBorderBits( - ap, - rval, + return _ANN_MLP_SetRpropDWMinus( + self, + val, ); } - late final _ArucoDetectorParameters_GetMarkerBorderBitsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMarkerBorderBits'); - late final _ArucoDetectorParameters_GetMarkerBorderBits = - _ArucoDetectorParameters_GetMarkerBorderBitsPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetRpropDWMinusPtr = + _lookup>( + 'ANN_MLP_SetRpropDWMinus'); + late final _ANN_MLP_SetRpropDWMinus = _ANN_MLP_SetRpropDWMinusPtr.asFunction< + CvStatus Function(PtrANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetRpropDWPlus( + PtrANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate( - ap, - rval, + return _ANN_MLP_SetRpropDWPlus( + self, + val, ); } - late final _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRatePtr = - _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate'); - late final _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate = - _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetRpropDWPlusPtr = + _lookup>( + 'ANN_MLP_SetRpropDWPlus'); + late final _ANN_MLP_SetRpropDWPlus = _ANN_MLP_SetRpropDWPlusPtr.asFunction< + CvStatus Function(PtrANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetMaxMarkerPerimeterRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetTermCriteria( + PtrANN_MLP self, + TermCriteria val, ) { - return _ArucoDetectorParameters_GetMaxMarkerPerimeterRate( - ap, - rval, + return _ANN_MLP_SetTermCriteria( + self, + val, ); } - late final _ArucoDetectorParameters_GetMaxMarkerPerimeterRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMaxMarkerPerimeterRate'); - late final _ArucoDetectorParameters_GetMaxMarkerPerimeterRate = - _ArucoDetectorParameters_GetMaxMarkerPerimeterRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetTermCriteriaPtr = + _lookup>( + 'ANN_MLP_SetTermCriteria'); + late final _ANN_MLP_SetTermCriteria = _ANN_MLP_SetTermCriteriaPtr.asFunction< + CvStatus Function(PtrANN_MLP, TermCriteria)>(); - CvStatus ArucoDetectorParameters_GetMinCornerDistanceRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetTrainMethod( + PtrANN_MLP self, + int method, + double param1, + double param2, ) { - return _ArucoDetectorParameters_GetMinCornerDistanceRate( - ap, - rval, + return _ANN_MLP_SetTrainMethod( + self, + method, + param1, + param2, ); } - late final _ArucoDetectorParameters_GetMinCornerDistanceRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMinCornerDistanceRate'); - late final _ArucoDetectorParameters_GetMinCornerDistanceRate = - _ArucoDetectorParameters_GetMinCornerDistanceRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetTrainMethodPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrANN_MLP, ffi.Int, ffi.Double, + ffi.Double)>>('ANN_MLP_SetTrainMethod'); + late final _ANN_MLP_SetTrainMethod = _ANN_MLP_SetTrainMethodPtr.asFunction< + CvStatus Function(PtrANN_MLP, int, double, double)>(); - CvStatus ArucoDetectorParameters_GetMinDistanceToBorder( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_Train( + PtrANN_MLP self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetMinDistanceToBorder( - ap, + return _ANN_MLP_Train( + self, + trainData, + flags, rval, ); } - late final _ArucoDetectorParameters_GetMinDistanceToBorderPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMinDistanceToBorder'); - late final _ArucoDetectorParameters_GetMinDistanceToBorder = - _ArucoDetectorParameters_GetMinDistanceToBorderPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_TrainPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrANN_MLP, PtrTrainData, ffi.Int, + ffi.Pointer)>>('ANN_MLP_Train'); + late final _ANN_MLP_Train = _ANN_MLP_TrainPtr.asFunction< + CvStatus Function( + PtrANN_MLP, PtrTrainData, int, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetMinMarkerDistanceRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_Train_1( + PtrANN_MLP self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetMinMarkerDistanceRate( - ap, + return _ANN_MLP_Train_1( + self, + samples, + layout, + responses, rval, ); } - late final _ArucoDetectorParameters_GetMinMarkerDistanceRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMinMarkerDistanceRate'); - late final _ArucoDetectorParameters_GetMinMarkerDistanceRate = - _ArucoDetectorParameters_GetMinMarkerDistanceRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_Train_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrANN_MLP, Mat, ffi.Int, Mat, + ffi.Pointer)>>('ANN_MLP_Train_1'); + late final _ANN_MLP_Train_1 = _ANN_MLP_Train_1Ptr.asFunction< + CvStatus Function(PtrANN_MLP, Mat, int, Mat, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetMinMarkerPerimeterRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus AdaptiveThreshold( + Mat src, + Mat dst, + double maxValue, + int adaptiveTyp, + int typ, + int blockSize, + double c, ) { - return _ArucoDetectorParameters_GetMinMarkerPerimeterRate( - ap, - rval, + return _AdaptiveThreshold( + src, + dst, + maxValue, + adaptiveTyp, + typ, + blockSize, + c, ); } - late final _ArucoDetectorParameters_GetMinMarkerPerimeterRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMinMarkerPerimeterRate'); - late final _ArucoDetectorParameters_GetMinMarkerPerimeterRate = - _ArucoDetectorParameters_GetMinMarkerPerimeterRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _AdaptiveThresholdPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Double, ffi.Int, ffi.Int, ffi.Int, + ffi.Double)>>('AdaptiveThreshold'); + late final _AdaptiveThreshold = _AdaptiveThresholdPtr.asFunction< + CvStatus Function(Mat, Mat, double, int, int, int, double)>(); - CvStatus ArucoDetectorParameters_GetMinOtsuStdDev( - ArucoDetectorParameters ap, - ffi.Pointer rval, + void AgastFeatureDetector_Close( + ffi.Pointer a, ) { - return _ArucoDetectorParameters_GetMinOtsuStdDev( - ap, - rval, + return _AgastFeatureDetector_Close( + a, ); } - late final _ArucoDetectorParameters_GetMinOtsuStdDevPtr = _lookup< + late final _AgastFeatureDetector_ClosePtr = _lookup< ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMinOtsuStdDev'); - late final _ArucoDetectorParameters_GetMinOtsuStdDev = - _ArucoDetectorParameters_GetMinOtsuStdDevPtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + ffi.Void Function(ffi.Pointer)>>( + 'AgastFeatureDetector_Close'); + late final _AgastFeatureDetector_Close = _AgastFeatureDetector_ClosePtr + .asFunction)>(); - CvStatus ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus AgastFeatureDetector_Create( + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell( - ap, + return _AgastFeatureDetector_Create( rval, ); } - late final _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCellPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell'); - late final _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell = - _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCellPtr - .asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _AgastFeatureDetector_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'AgastFeatureDetector_Create'); + late final _AgastFeatureDetector_Create = _AgastFeatureDetector_CreatePtr + .asFunction)>(); - CvStatus ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus AgastFeatureDetector_Detect( + AgastFeatureDetector a, + Mat src, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell( - ap, + return _AgastFeatureDetector_Detect( + a, + src, rval, ); } - late final _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCellPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell'); - late final _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell = - _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCellPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - - CvStatus ArucoDetectorParameters_GetPolygonalApproxAccuracyRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, - ) { - return _ArucoDetectorParameters_GetPolygonalApproxAccuracyRate( - ap, - rval, - ); - } - - late final _ArucoDetectorParameters_GetPolygonalApproxAccuracyRatePtr = - _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetPolygonalApproxAccuracyRate'); - late final _ArucoDetectorParameters_GetPolygonalApproxAccuracyRate = - _ArucoDetectorParameters_GetPolygonalApproxAccuracyRatePtr.asFunction< + late final _AgastFeatureDetector_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(AgastFeatureDetector, Mat, + ffi.Pointer)>>('AgastFeatureDetector_Detect'); + late final _AgastFeatureDetector_Detect = + _AgastFeatureDetector_DetectPtr.asFunction< CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + AgastFeatureDetector, Mat, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAdaptiveThreshConstant( - ArucoDetectorParameters ap, - double adaptiveThreshConstant, + void AlignMTB_Close( + ffi.Pointer b, ) { - return _ArucoDetectorParameters_SetAdaptiveThreshConstant( - ap, - adaptiveThreshConstant, + return _AlignMTB_Close( + b, ); } - late final _ArucoDetectorParameters_SetAdaptiveThreshConstantPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetAdaptiveThreshConstant'); - late final _ArucoDetectorParameters_SetAdaptiveThreshConstant = - _ArucoDetectorParameters_SetAdaptiveThreshConstantPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _AlignMTB_ClosePtr = + _lookup)>>( + 'AlignMTB_Close'); + late final _AlignMTB_Close = + _AlignMTB_ClosePtr.asFunction)>(); - CvStatus ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax( - ArucoDetectorParameters ap, - int adaptiveThreshWinSizeMax, + CvStatus AlignMTB_Create( + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax( - ap, - adaptiveThreshWinSizeMax, + return _AlignMTB_Create( + rval, ); } - late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMaxPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax'); - late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax = - _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMaxPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _AlignMTB_CreatePtr = + _lookup)>>( + 'AlignMTB_Create'); + late final _AlignMTB_Create = _AlignMTB_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin( - ArucoDetectorParameters ap, - int adaptiveThreshWinSizeMin, + CvStatus AlignMTB_CreateWithParams( + int max_bits, + int exclude_range, + bool cut, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin( - ap, - adaptiveThreshWinSizeMin, + return _AlignMTB_CreateWithParams( + max_bits, + exclude_range, + cut, + rval, ); } - late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMinPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin'); - late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin = - _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMinPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _AlignMTB_CreateWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Int, ffi.Int, ffi.Bool, + ffi.Pointer)>>('AlignMTB_CreateWithParams'); + late final _AlignMTB_CreateWithParams = _AlignMTB_CreateWithParamsPtr + .asFunction)>(); - CvStatus ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep( - ArucoDetectorParameters ap, - int adaptiveThreshWinSizeStep, + CvStatus AlignMTB_Process( + AlignMTB b, + VecMat src, + ffi.Pointer dst, ) { - return _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep( - ap, - adaptiveThreshWinSizeStep, + return _AlignMTB_Process( + b, + src, + dst, ); } - late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStepPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep'); - late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep = - _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStepPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _AlignMTB_ProcessPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + AlignMTB, VecMat, ffi.Pointer)>>('AlignMTB_Process'); + late final _AlignMTB_Process = _AlignMTB_ProcessPtr.asFunction< + CvStatus Function(AlignMTB, VecMat, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAprilTagCriticalRad( - ArucoDetectorParameters ap, - double aprilTagCriticalRad, + CvStatus ApplyColorMap( + Mat src, + Mat dst, + int colormap, ) { - return _ArucoDetectorParameters_SetAprilTagCriticalRad( - ap, - aprilTagCriticalRad, + return _ApplyColorMap( + src, + dst, + colormap, ); } - late final _ArucoDetectorParameters_SetAprilTagCriticalRadPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Float)>>('ArucoDetectorParameters_SetAprilTagCriticalRad'); - late final _ArucoDetectorParameters_SetAprilTagCriticalRad = - _ArucoDetectorParameters_SetAprilTagCriticalRadPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ApplyColorMapPtr = + _lookup>( + 'ApplyColorMap'); + late final _ApplyColorMap = + _ApplyColorMapPtr.asFunction(); - CvStatus ArucoDetectorParameters_SetAprilTagDeglitch( - ArucoDetectorParameters ap, - int aprilTagDeglitch, + CvStatus ApplyCustomColorMap( + Mat src, + Mat dst, + Mat colormap, ) { - return _ArucoDetectorParameters_SetAprilTagDeglitch( - ap, - aprilTagDeglitch, + return _ApplyCustomColorMap( + src, + dst, + colormap, ); } - late final _ArucoDetectorParameters_SetAprilTagDeglitchPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAprilTagDeglitch'); - late final _ArucoDetectorParameters_SetAprilTagDeglitch = - _ArucoDetectorParameters_SetAprilTagDeglitchPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ApplyCustomColorMapPtr = + _lookup>( + 'ApplyCustomColorMap'); + late final _ApplyCustomColorMap = + _ApplyCustomColorMapPtr.asFunction(); - CvStatus ArucoDetectorParameters_SetAprilTagMaxLineFitMse( - ArucoDetectorParameters ap, - double aprilTagMaxLineFitMse, + CvStatus ApproxPolyDP( + VecPoint curve, + double epsilon, + bool closed, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAprilTagMaxLineFitMse( - ap, - aprilTagMaxLineFitMse, + return _ApproxPolyDP( + curve, + epsilon, + closed, + rval, ); } - late final _ArucoDetectorParameters_SetAprilTagMaxLineFitMsePtr = _lookup< + late final _ApproxPolyDPPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Float)>>('ArucoDetectorParameters_SetAprilTagMaxLineFitMse'); - late final _ArucoDetectorParameters_SetAprilTagMaxLineFitMse = - _ArucoDetectorParameters_SetAprilTagMaxLineFitMsePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + CvStatus Function(VecPoint, ffi.Double, ffi.Bool, + ffi.Pointer)>>('ApproxPolyDP'); + late final _ApproxPolyDP = _ApproxPolyDPPtr.asFunction< + CvStatus Function(VecPoint, double, bool, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAprilTagMaxNmaxima( - ArucoDetectorParameters ap, - int aprilTagMaxNmaxima, + CvStatus ArcLength( + VecPoint curve, + bool is_closed, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAprilTagMaxNmaxima( - ap, - aprilTagMaxNmaxima, + return _ArcLength( + curve, + is_closed, + rval, ); } - late final _ArucoDetectorParameters_SetAprilTagMaxNmaximaPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAprilTagMaxNmaxima'); - late final _ArucoDetectorParameters_SetAprilTagMaxNmaxima = - _ArucoDetectorParameters_SetAprilTagMaxNmaximaPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArcLengthPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + VecPoint, ffi.Bool, ffi.Pointer)>>('ArcLength'); + late final _ArcLength = _ArcLengthPtr.asFunction< + CvStatus Function(VecPoint, bool, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAprilTagMinClusterPixels( - ArucoDetectorParameters ap, - int aprilTagMinClusterPixels, + CvStatus ArrowedLine( + Mat img, + Point pt1, + Point pt2, + Scalar color, + int thickness, + int line_type, + int shift, + double tipLength, ) { - return _ArucoDetectorParameters_SetAprilTagMinClusterPixels( - ap, - aprilTagMinClusterPixels, + return _ArrowedLine( + img, + pt1, + pt2, + color, + thickness, + line_type, + shift, + tipLength, ); } - late final _ArucoDetectorParameters_SetAprilTagMinClusterPixelsPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAprilTagMinClusterPixels'); - late final _ArucoDetectorParameters_SetAprilTagMinClusterPixels = - _ArucoDetectorParameters_SetAprilTagMinClusterPixelsPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArrowedLinePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Point, Point, Scalar, ffi.Int, ffi.Int, + ffi.Int, ffi.Double)>>('ArrowedLine'); + late final _ArrowedLine = _ArrowedLinePtr.asFunction< + CvStatus Function(Mat, Point, Point, Scalar, int, int, int, double)>(); - CvStatus ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff( - ArucoDetectorParameters ap, - int aprilTagMinWhiteBlackDiff, + void ArucoDetectorParameters_Close( + ffi.Pointer ap, ) { - return _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff( + return _ArucoDetectorParameters_Close( ap, - aprilTagMinWhiteBlackDiff, ); } - late final _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiffPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff'); - late final _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff = - _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiffPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_ClosePtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer)>>( + 'ArucoDetectorParameters_Close'); + late final _ArucoDetectorParameters_Close = _ArucoDetectorParameters_ClosePtr + .asFunction)>(); - CvStatus ArucoDetectorParameters_SetAprilTagQuadDecimate( - ArucoDetectorParameters ap, - double aprilTagQuadDecimate, + CvStatus ArucoDetectorParameters_Create( + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAprilTagQuadDecimate( - ap, - aprilTagQuadDecimate, + return _ArucoDetectorParameters_Create( + rval, ); } - late final _ArucoDetectorParameters_SetAprilTagQuadDecimatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Float)>>('ArucoDetectorParameters_SetAprilTagQuadDecimate'); - late final _ArucoDetectorParameters_SetAprilTagQuadDecimate = - _ArucoDetectorParameters_SetAprilTagQuadDecimatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'ArucoDetectorParameters_Create'); + late final _ArucoDetectorParameters_Create = + _ArucoDetectorParameters_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAprilTagQuadSigma( + CvStatus ArucoDetectorParameters_GetAdaptiveThreshConstant( ArucoDetectorParameters ap, - double aprilTagQuadSigma, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAprilTagQuadSigma( + return _ArucoDetectorParameters_GetAdaptiveThreshConstant( ap, - aprilTagQuadSigma, + rval, ); } - late final _ArucoDetectorParameters_SetAprilTagQuadSigmaPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Float)>>('ArucoDetectorParameters_SetAprilTagQuadSigma'); - late final _ArucoDetectorParameters_SetAprilTagQuadSigma = - _ArucoDetectorParameters_SetAprilTagQuadSigmaPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetAdaptiveThreshConstantPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAdaptiveThreshConstant'); + late final _ArucoDetectorParameters_GetAdaptiveThreshConstant = + _ArucoDetectorParameters_GetAdaptiveThreshConstantPtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetCornerRefinementMaxIterations( + CvStatus ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax( ArucoDetectorParameters ap, - int cornerRefinementMaxIterations, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetCornerRefinementMaxIterations( + return _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax( ap, - cornerRefinementMaxIterations, + rval, ); } - late final _ArucoDetectorParameters_SetCornerRefinementMaxIterationsPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Int)>>( - 'ArucoDetectorParameters_SetCornerRefinementMaxIterations'); - late final _ArucoDetectorParameters_SetCornerRefinementMaxIterations = - _ArucoDetectorParameters_SetCornerRefinementMaxIterationsPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMaxPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax'); + late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax = + _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMaxPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetCornerRefinementMethod( + CvStatus ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin( ArucoDetectorParameters ap, - int cornerRefinementMethod, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetCornerRefinementMethod( + return _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin( ap, - cornerRefinementMethod, + rval, ); } - late final _ArucoDetectorParameters_SetCornerRefinementMethodPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetCornerRefinementMethod'); - late final _ArucoDetectorParameters_SetCornerRefinementMethod = - _ArucoDetectorParameters_SetCornerRefinementMethodPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMinPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin'); + late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin = + _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMinPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetCornerRefinementMinAccuracy( + CvStatus ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep( ArucoDetectorParameters ap, - double cornerRefinementMinAccuracy, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetCornerRefinementMinAccuracy( + return _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep( ap, - cornerRefinementMinAccuracy, + rval, ); } - late final _ArucoDetectorParameters_SetCornerRefinementMinAccuracyPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetCornerRefinementMinAccuracy'); - late final _ArucoDetectorParameters_SetCornerRefinementMinAccuracy = - _ArucoDetectorParameters_SetCornerRefinementMinAccuracyPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStepPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep'); + late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep = + _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStepPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetCornerRefinementWinSize( + CvStatus ArucoDetectorParameters_GetAprilTagCriticalRad( ArucoDetectorParameters ap, - int cornerRefinementWinSize, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetCornerRefinementWinSize( + return _ArucoDetectorParameters_GetAprilTagCriticalRad( ap, - cornerRefinementWinSize, + rval, ); } - late final _ArucoDetectorParameters_SetCornerRefinementWinSizePtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetCornerRefinementWinSize'); - late final _ArucoDetectorParameters_SetCornerRefinementWinSize = - _ArucoDetectorParameters_SetCornerRefinementWinSizePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetAprilTagCriticalRadPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagCriticalRad'); + late final _ArucoDetectorParameters_GetAprilTagCriticalRad = + _ArucoDetectorParameters_GetAprilTagCriticalRadPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetDetectInvertedMarker( + CvStatus ArucoDetectorParameters_GetAprilTagDeglitch( ArucoDetectorParameters ap, - bool detectInvertedMarker, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetDetectInvertedMarker( + return _ArucoDetectorParameters_GetAprilTagDeglitch( ap, - detectInvertedMarker, + rval, ); } - late final _ArucoDetectorParameters_SetDetectInvertedMarkerPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Bool)>>('ArucoDetectorParameters_SetDetectInvertedMarker'); - late final _ArucoDetectorParameters_SetDetectInvertedMarker = - _ArucoDetectorParameters_SetDetectInvertedMarkerPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, bool)>(); + late final _ArucoDetectorParameters_GetAprilTagDeglitchPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagDeglitch'); + late final _ArucoDetectorParameters_GetAprilTagDeglitch = + _ArucoDetectorParameters_GetAprilTagDeglitchPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetErrorCorrectionRate( + CvStatus ArucoDetectorParameters_GetAprilTagMaxLineFitMse( ArucoDetectorParameters ap, - double errorCorrectionRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetErrorCorrectionRate( + return _ArucoDetectorParameters_GetAprilTagMaxLineFitMse( ap, - errorCorrectionRate, + rval, ); } - late final _ArucoDetectorParameters_SetErrorCorrectionRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Double)>>('ArucoDetectorParameters_SetErrorCorrectionRate'); - late final _ArucoDetectorParameters_SetErrorCorrectionRate = - _ArucoDetectorParameters_SetErrorCorrectionRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetAprilTagMaxLineFitMsePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagMaxLineFitMse'); + late final _ArucoDetectorParameters_GetAprilTagMaxLineFitMse = + _ArucoDetectorParameters_GetAprilTagMaxLineFitMsePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMarkerBorderBits( + CvStatus ArucoDetectorParameters_GetAprilTagMaxNmaxima( ArucoDetectorParameters ap, - int markerBorderBits, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMarkerBorderBits( + return _ArucoDetectorParameters_GetAprilTagMaxNmaxima( ap, - markerBorderBits, + rval, ); } - late final _ArucoDetectorParameters_SetMarkerBorderBitsPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetMarkerBorderBits'); - late final _ArucoDetectorParameters_SetMarkerBorderBits = - _ArucoDetectorParameters_SetMarkerBorderBitsPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetAprilTagMaxNmaximaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagMaxNmaxima'); + late final _ArucoDetectorParameters_GetAprilTagMaxNmaxima = + _ArucoDetectorParameters_GetAprilTagMaxNmaximaPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate( + CvStatus ArucoDetectorParameters_GetAprilTagMinClusterPixels( ArucoDetectorParameters ap, - double maxErroneousBitsInBorderRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate( + return _ArucoDetectorParameters_GetAprilTagMinClusterPixels( ap, - maxErroneousBitsInBorderRate, + rval, ); } - late final _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRatePtr = - _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate'); - late final _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate = - _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetAprilTagMinClusterPixelsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagMinClusterPixels'); + late final _ArucoDetectorParameters_GetAprilTagMinClusterPixels = + _ArucoDetectorParameters_GetAprilTagMinClusterPixelsPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMaxMarkerPerimeterRate( + CvStatus ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff( ArucoDetectorParameters ap, - double maxMarkerPerimeterRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMaxMarkerPerimeterRate( + return _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff( ap, - maxMarkerPerimeterRate, + rval, ); } - late final _ArucoDetectorParameters_SetMaxMarkerPerimeterRatePtr = _lookup< + late final _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiffPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetMaxMarkerPerimeterRate'); - late final _ArucoDetectorParameters_SetMaxMarkerPerimeterRate = - _ArucoDetectorParameters_SetMaxMarkerPerimeterRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff'); + late final _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff = + _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiffPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMinCornerDistanceRate( + CvStatus ArucoDetectorParameters_GetAprilTagQuadDecimate( ArucoDetectorParameters ap, - double minCornerDistanceRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMinCornerDistanceRate( + return _ArucoDetectorParameters_GetAprilTagQuadDecimate( ap, - minCornerDistanceRate, + rval, ); } - late final _ArucoDetectorParameters_SetMinCornerDistanceRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Double)>>('ArucoDetectorParameters_SetMinCornerDistanceRate'); - late final _ArucoDetectorParameters_SetMinCornerDistanceRate = - _ArucoDetectorParameters_SetMinCornerDistanceRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetAprilTagQuadDecimatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagQuadDecimate'); + late final _ArucoDetectorParameters_GetAprilTagQuadDecimate = + _ArucoDetectorParameters_GetAprilTagQuadDecimatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMinDistanceToBorder( + CvStatus ArucoDetectorParameters_GetAprilTagQuadSigma( ArucoDetectorParameters ap, - int minDistanceToBorder, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMinDistanceToBorder( + return _ArucoDetectorParameters_GetAprilTagQuadSigma( ap, - minDistanceToBorder, + rval, ); } - late final _ArucoDetectorParameters_SetMinDistanceToBorderPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetMinDistanceToBorder'); - late final _ArucoDetectorParameters_SetMinDistanceToBorder = - _ArucoDetectorParameters_SetMinDistanceToBorderPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetAprilTagQuadSigmaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagQuadSigma'); + late final _ArucoDetectorParameters_GetAprilTagQuadSigma = + _ArucoDetectorParameters_GetAprilTagQuadSigmaPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMinMarkerDistanceRate( + CvStatus ArucoDetectorParameters_GetCornerRefinementMaxIterations( ArucoDetectorParameters ap, - double minMarkerDistanceRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMinMarkerDistanceRate( + return _ArucoDetectorParameters_GetCornerRefinementMaxIterations( ap, - minMarkerDistanceRate, + rval, ); } - late final _ArucoDetectorParameters_SetMinMarkerDistanceRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Double)>>('ArucoDetectorParameters_SetMinMarkerDistanceRate'); - late final _ArucoDetectorParameters_SetMinMarkerDistanceRate = - _ArucoDetectorParameters_SetMinMarkerDistanceRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetCornerRefinementMaxIterationsPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetCornerRefinementMaxIterations'); + late final _ArucoDetectorParameters_GetCornerRefinementMaxIterations = + _ArucoDetectorParameters_GetCornerRefinementMaxIterationsPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMinMarkerPerimeterRate( + CvStatus ArucoDetectorParameters_GetCornerRefinementMethod( ArucoDetectorParameters ap, - double minMarkerPerimeterRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMinMarkerPerimeterRate( + return _ArucoDetectorParameters_GetCornerRefinementMethod( ap, - minMarkerPerimeterRate, + rval, ); } - late final _ArucoDetectorParameters_SetMinMarkerPerimeterRatePtr = _lookup< + late final _ArucoDetectorParameters_GetCornerRefinementMethodPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetMinMarkerPerimeterRate'); - late final _ArucoDetectorParameters_SetMinMarkerPerimeterRate = - _ArucoDetectorParameters_SetMinMarkerPerimeterRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetCornerRefinementMethod'); + late final _ArucoDetectorParameters_GetCornerRefinementMethod = + _ArucoDetectorParameters_GetCornerRefinementMethodPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMinOtsuStdDev( + CvStatus ArucoDetectorParameters_GetCornerRefinementMinAccuracy( ArucoDetectorParameters ap, - double minOtsuStdDev, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMinOtsuStdDev( + return _ArucoDetectorParameters_GetCornerRefinementMinAccuracy( ap, - minOtsuStdDev, + rval, ); } - late final _ArucoDetectorParameters_SetMinOtsuStdDevPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Double)>>('ArucoDetectorParameters_SetMinOtsuStdDev'); - late final _ArucoDetectorParameters_SetMinOtsuStdDev = - _ArucoDetectorParameters_SetMinOtsuStdDevPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetCornerRefinementMinAccuracyPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetCornerRefinementMinAccuracy'); + late final _ArucoDetectorParameters_GetCornerRefinementMinAccuracy = + _ArucoDetectorParameters_GetCornerRefinementMinAccuracyPtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell( + CvStatus ArucoDetectorParameters_GetCornerRefinementWinSize( ArucoDetectorParameters ap, - double perspectiveRemoveIgnoredMarginPerCell, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell( + return _ArucoDetectorParameters_GetCornerRefinementWinSize( ap, - perspectiveRemoveIgnoredMarginPerCell, + rval, ); } - late final _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCellPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell'); - late final _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell = - _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCellPtr - .asFunction(); + late final _ArucoDetectorParameters_GetCornerRefinementWinSizePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetCornerRefinementWinSize'); + late final _ArucoDetectorParameters_GetCornerRefinementWinSize = + _ArucoDetectorParameters_GetCornerRefinementWinSizePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell( + CvStatus ArucoDetectorParameters_GetDetectInvertedMarker( ArucoDetectorParameters ap, - int perspectiveRemovePixelPerCell, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell( + return _ArucoDetectorParameters_GetDetectInvertedMarker( ap, - perspectiveRemovePixelPerCell, + rval, ); } - late final _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCellPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Int)>>( - 'ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell'); - late final _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell = - _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCellPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetDetectInvertedMarkerPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetDetectInvertedMarker'); + late final _ArucoDetectorParameters_GetDetectInvertedMarker = + _ArucoDetectorParameters_GetDetectInvertedMarkerPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetPolygonalApproxAccuracyRate( + CvStatus ArucoDetectorParameters_GetErrorCorrectionRate( ArucoDetectorParameters ap, - double polygonalApproxAccuracyRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetPolygonalApproxAccuracyRate( + return _ArucoDetectorParameters_GetErrorCorrectionRate( ap, - polygonalApproxAccuracyRate, + rval, ); } - late final _ArucoDetectorParameters_SetPolygonalApproxAccuracyRatePtr = - _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetPolygonalApproxAccuracyRate'); - late final _ArucoDetectorParameters_SetPolygonalApproxAccuracyRate = - _ArucoDetectorParameters_SetPolygonalApproxAccuracyRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetErrorCorrectionRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetErrorCorrectionRate'); + late final _ArucoDetectorParameters_GetErrorCorrectionRate = + _ArucoDetectorParameters_GetErrorCorrectionRatePtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - void ArucoDetector_Close( - ffi.Pointer ad, + CvStatus ArucoDetectorParameters_GetMarkerBorderBits( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _ArucoDetector_Close( - ad, + return _ArucoDetectorParameters_GetMarkerBorderBits( + ap, + rval, ); } - late final _ArucoDetector_ClosePtr = _lookup< - ffi.NativeFunction)>>( - 'ArucoDetector_Close'); - late final _ArucoDetector_Close = _ArucoDetector_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_GetMarkerBorderBitsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMarkerBorderBits'); + late final _ArucoDetectorParameters_GetMarkerBorderBits = + _ArucoDetectorParameters_GetMarkerBorderBitsPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetector_DetectMarkers( - ArucoDetector ad, - Mat inputArr, - ffi.Pointer markerCorners, - ffi.Pointer markerIds, - ffi.Pointer rejectedCandidates, + CvStatus ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _ArucoDetector_DetectMarkers( - ad, - inputArr, - markerCorners, - markerIds, - rejectedCandidates, + return _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate( + ap, + rval, ); } - late final _ArucoDetector_DetectMarkersPtr = _lookup< - ffi.NativeFunction< + late final _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRatePtr = + _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate'); + late final _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate = + _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRatePtr.asFunction< CvStatus Function( - ArucoDetector, - Mat, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>('ArucoDetector_DetectMarkers'); - late final _ArucoDetector_DetectMarkers = - _ArucoDetector_DetectMarkersPtr.asFunction< - CvStatus Function(ArucoDetector, Mat, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>(); + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetector_New( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_GetMaxMarkerPerimeterRate( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _ArucoDetector_New( + return _ArucoDetectorParameters_GetMaxMarkerPerimeterRate( + ap, rval, ); } - late final _ArucoDetector_NewPtr = _lookup< - ffi.NativeFunction)>>( - 'ArucoDetector_New'); - late final _ArucoDetector_New = _ArucoDetector_NewPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_GetMaxMarkerPerimeterRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMaxMarkerPerimeterRate'); + late final _ArucoDetectorParameters_GetMaxMarkerPerimeterRate = + _ArucoDetectorParameters_GetMaxMarkerPerimeterRatePtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetector_NewWithParams( - ArucoDictionary dictionary, - ArucoDetectorParameters params, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_GetMinCornerDistanceRate( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _ArucoDetector_NewWithParams( - dictionary, - params, + return _ArucoDetectorParameters_GetMinCornerDistanceRate( + ap, rval, ); } - late final _ArucoDetector_NewWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDictionary, ArucoDetectorParameters, - ffi.Pointer)>>('ArucoDetector_NewWithParams'); - late final _ArucoDetector_NewWithParams = - _ArucoDetector_NewWithParamsPtr.asFunction< - CvStatus Function(ArucoDictionary, ArucoDetectorParameters, - ffi.Pointer)>(); + late final _ArucoDetectorParameters_GetMinCornerDistanceRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMinCornerDistanceRate'); + late final _ArucoDetectorParameters_GetMinCornerDistanceRate = + _ArucoDetectorParameters_GetMinCornerDistanceRatePtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - void ArucoDictionary_Close( - ffi.Pointer self, + CvStatus ArucoDetectorParameters_GetMinDistanceToBorder( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _ArucoDictionary_Close( - self, + return _ArucoDetectorParameters_GetMinDistanceToBorder( + ap, + rval, ); } - late final _ArucoDictionary_ClosePtr = _lookup< - ffi.NativeFunction)>>( - 'ArucoDictionary_Close'); - late final _ArucoDictionary_Close = _ArucoDictionary_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_GetMinDistanceToBorderPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMinDistanceToBorder'); + late final _ArucoDetectorParameters_GetMinDistanceToBorder = + _ArucoDetectorParameters_GetMinDistanceToBorderPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDrawDetectedMarkers( - Mat image, - VecVecPoint2f markerCorners, - VecInt markerIds, - Scalar borderColor, + CvStatus ArucoDetectorParameters_GetMinMarkerDistanceRate( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _ArucoDrawDetectedMarkers( - image, - markerCorners, - markerIds, - borderColor, + return _ArucoDetectorParameters_GetMinMarkerDistanceRate( + ap, + rval, ); } - late final _ArucoDrawDetectedMarkersPtr = _lookup< - ffi.NativeFunction< + late final _ArucoDetectorParameters_GetMinMarkerDistanceRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMinMarkerDistanceRate'); + late final _ArucoDetectorParameters_GetMinMarkerDistanceRate = + _ArucoDetectorParameters_GetMinMarkerDistanceRatePtr.asFunction< CvStatus Function( - Mat, VecVecPoint2f, VecInt, Scalar)>>('ArucoDrawDetectedMarkers'); - late final _ArucoDrawDetectedMarkers = _ArucoDrawDetectedMarkersPtr - .asFunction(); - - CvStatus ArucoGenerateImageMarker( - int dictionaryId, - int id, - int sidePixels, - Mat img, - int borderBits, - ) { - return _ArucoGenerateImageMarker( - dictionaryId, - id, - sidePixels, - img, - borderBits, - ); - } - - late final _ArucoGenerateImageMarkerPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Int, ffi.Int, Mat, - ffi.Int)>>('ArucoGenerateImageMarker'); - late final _ArucoGenerateImageMarker = _ArucoGenerateImageMarkerPtr - .asFunction(); + ArucoDetectorParameters, ffi.Pointer)>(); - void AsyncArray_Close( - ffi.Pointer a, + CvStatus ArucoDetectorParameters_GetMinMarkerPerimeterRate( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _AsyncArray_Close( - a, + return _ArucoDetectorParameters_GetMinMarkerPerimeterRate( + ap, + rval, ); } - late final _AsyncArray_ClosePtr = - _lookup)>>( - 'AsyncArray_Close'); - late final _AsyncArray_Close = - _AsyncArray_ClosePtr.asFunction)>(); + late final _ArucoDetectorParameters_GetMinMarkerPerimeterRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMinMarkerPerimeterRate'); + late final _ArucoDetectorParameters_GetMinMarkerPerimeterRate = + _ArucoDetectorParameters_GetMinMarkerPerimeterRatePtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus AsyncArray_Get( - AsyncArray async_out, - Mat out, + CvStatus ArucoDetectorParameters_GetMinOtsuStdDev( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _AsyncArray_Get( - async_out, - out, + return _ArucoDetectorParameters_GetMinOtsuStdDev( + ap, + rval, ); } - late final _AsyncArray_GetPtr = - _lookup>( - 'AsyncArray_Get'); - late final _AsyncArray_Get = - _AsyncArray_GetPtr.asFunction(); + late final _ArucoDetectorParameters_GetMinOtsuStdDevPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMinOtsuStdDev'); + late final _ArucoDetectorParameters_GetMinOtsuStdDev = + _ArucoDetectorParameters_GetMinOtsuStdDevPtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus AsyncArray_New( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _AsyncArray_New( + return _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell( + ap, rval, ); } - late final _AsyncArray_NewPtr = - _lookup)>>( - 'AsyncArray_New'); - late final _AsyncArray_New = _AsyncArray_NewPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCellPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell'); + late final _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell = + _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCellPtr + .asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - void BFMatcher_Close( - ffi.Pointer b, + CvStatus ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _BFMatcher_Close( - b, + return _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell( + ap, + rval, ); } - late final _BFMatcher_ClosePtr = - _lookup)>>( - 'BFMatcher_Close'); - late final _BFMatcher_Close = - _BFMatcher_ClosePtr.asFunction)>(); + late final _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCellPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell'); + late final _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell = + _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCellPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus BFMatcher_Create( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_GetPolygonalApproxAccuracyRate( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _BFMatcher_Create( + return _ArucoDetectorParameters_GetPolygonalApproxAccuracyRate( + ap, rval, ); } - late final _BFMatcher_CreatePtr = - _lookup)>>( - 'BFMatcher_Create'); - late final _BFMatcher_Create = _BFMatcher_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); - - CvStatus BFMatcher_CreateWithParams( - int normType, - bool crossCheck, - ffi.Pointer rval, - ) { - return _BFMatcher_CreateWithParams( - normType, - crossCheck, - rval, - ); - } - - late final _BFMatcher_CreateWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Bool, - ffi.Pointer)>>('BFMatcher_CreateWithParams'); - late final _BFMatcher_CreateWithParams = _BFMatcher_CreateWithParamsPtr - .asFunction)>(); + late final _ArucoDetectorParameters_GetPolygonalApproxAccuracyRatePtr = + _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetPolygonalApproxAccuracyRate'); + late final _ArucoDetectorParameters_GetPolygonalApproxAccuracyRate = + _ArucoDetectorParameters_GetPolygonalApproxAccuracyRatePtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus BFMatcher_KnnMatch( - BFMatcher b, - Mat query, - Mat train, - int k, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAdaptiveThreshConstant( + ArucoDetectorParameters ap, + double adaptiveThreshConstant, ) { - return _BFMatcher_KnnMatch( - b, - query, - train, - k, - rval, + return _ArucoDetectorParameters_SetAdaptiveThreshConstant( + ap, + adaptiveThreshConstant, ); } - late final _BFMatcher_KnnMatchPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(BFMatcher, Mat, Mat, ffi.Int, - ffi.Pointer)>>('BFMatcher_KnnMatch'); - late final _BFMatcher_KnnMatch = _BFMatcher_KnnMatchPtr.asFunction< - CvStatus Function(BFMatcher, Mat, Mat, int, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetAdaptiveThreshConstantPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetAdaptiveThreshConstant'); + late final _ArucoDetectorParameters_SetAdaptiveThreshConstant = + _ArucoDetectorParameters_SetAdaptiveThreshConstantPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BFMatcher_Match( - BFMatcher b, - Mat query, - Mat train, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax( + ArucoDetectorParameters ap, + int adaptiveThreshWinSizeMax, ) { - return _BFMatcher_Match( - b, - query, - train, - rval, + return _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax( + ap, + adaptiveThreshWinSizeMax, ); } - late final _BFMatcher_MatchPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - BFMatcher, Mat, Mat, ffi.Pointer)>>('BFMatcher_Match'); - late final _BFMatcher_Match = _BFMatcher_MatchPtr.asFunction< - CvStatus Function(BFMatcher, Mat, Mat, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMaxPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax'); + late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax = + _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMaxPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - void BRISK_Close( - ffi.Pointer b, + CvStatus ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin( + ArucoDetectorParameters ap, + int adaptiveThreshWinSizeMin, ) { - return _BRISK_Close( - b, + return _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin( + ap, + adaptiveThreshWinSizeMin, ); } - late final _BRISK_ClosePtr = - _lookup)>>( - 'BRISK_Close'); - late final _BRISK_Close = - _BRISK_ClosePtr.asFunction)>(); + late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMinPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin'); + late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin = + _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMinPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BRISK_Create( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep( + ArucoDetectorParameters ap, + int adaptiveThreshWinSizeStep, ) { - return _BRISK_Create( - rval, + return _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep( + ap, + adaptiveThreshWinSizeStep, ); } - late final _BRISK_CreatePtr = - _lookup)>>( - 'BRISK_Create'); - late final _BRISK_Create = - _BRISK_CreatePtr.asFunction)>(); + late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStepPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep'); + late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep = + _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStepPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BRISK_Detect( - BRISK b, - Mat src, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAprilTagCriticalRad( + ArucoDetectorParameters ap, + double aprilTagCriticalRad, ) { - return _BRISK_Detect( - b, - src, - rval, + return _ArucoDetectorParameters_SetAprilTagCriticalRad( + ap, + aprilTagCriticalRad, ); } - late final _BRISK_DetectPtr = _lookup< + late final _ArucoDetectorParameters_SetAprilTagCriticalRadPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - BRISK, Mat, ffi.Pointer)>>('BRISK_Detect'); - late final _BRISK_Detect = _BRISK_DetectPtr.asFunction< - CvStatus Function(BRISK, Mat, ffi.Pointer)>(); + CvStatus Function(ArucoDetectorParameters, + ffi.Float)>>('ArucoDetectorParameters_SetAprilTagCriticalRad'); + late final _ArucoDetectorParameters_SetAprilTagCriticalRad = + _ArucoDetectorParameters_SetAprilTagCriticalRadPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BRISK_DetectAndCompute( - BRISK b, - Mat src, - Mat mask, - Mat desc, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAprilTagDeglitch( + ArucoDetectorParameters ap, + int aprilTagDeglitch, ) { - return _BRISK_DetectAndCompute( - b, - src, - mask, - desc, - rval, + return _ArucoDetectorParameters_SetAprilTagDeglitch( + ap, + aprilTagDeglitch, ); } - late final _BRISK_DetectAndComputePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(BRISK, Mat, Mat, Mat, - ffi.Pointer)>>('BRISK_DetectAndCompute'); - late final _BRISK_DetectAndCompute = _BRISK_DetectAndComputePtr.asFunction< - CvStatus Function(BRISK, Mat, Mat, Mat, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetAprilTagDeglitchPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAprilTagDeglitch'); + late final _ArucoDetectorParameters_SetAprilTagDeglitch = + _ArucoDetectorParameters_SetAprilTagDeglitchPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BackgroundSubtractorKNN_Apply( - BackgroundSubtractorKNN self, - Mat src, - Mat dst, + CvStatus ArucoDetectorParameters_SetAprilTagMaxLineFitMse( + ArucoDetectorParameters ap, + double aprilTagMaxLineFitMse, ) { - return _BackgroundSubtractorKNN_Apply( - self, - src, - dst, + return _ArucoDetectorParameters_SetAprilTagMaxLineFitMse( + ap, + aprilTagMaxLineFitMse, ); } - late final _BackgroundSubtractorKNN_ApplyPtr = _lookup< + late final _ArucoDetectorParameters_SetAprilTagMaxLineFitMsePtr = _lookup< ffi.NativeFunction< - CvStatus Function(BackgroundSubtractorKNN, Mat, - Mat)>>('BackgroundSubtractorKNN_Apply'); - late final _BackgroundSubtractorKNN_Apply = _BackgroundSubtractorKNN_ApplyPtr - .asFunction(); + CvStatus Function(ArucoDetectorParameters, + ffi.Float)>>('ArucoDetectorParameters_SetAprilTagMaxLineFitMse'); + late final _ArucoDetectorParameters_SetAprilTagMaxLineFitMse = + _ArucoDetectorParameters_SetAprilTagMaxLineFitMsePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - void BackgroundSubtractorKNN_Close( - ffi.Pointer self, + CvStatus ArucoDetectorParameters_SetAprilTagMaxNmaxima( + ArucoDetectorParameters ap, + int aprilTagMaxNmaxima, ) { - return _BackgroundSubtractorKNN_Close( - self, + return _ArucoDetectorParameters_SetAprilTagMaxNmaxima( + ap, + aprilTagMaxNmaxima, ); } - late final _BackgroundSubtractorKNN_ClosePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer)>>( - 'BackgroundSubtractorKNN_Close'); - late final _BackgroundSubtractorKNN_Close = _BackgroundSubtractorKNN_ClosePtr - .asFunction)>(); + late final _ArucoDetectorParameters_SetAprilTagMaxNmaximaPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAprilTagMaxNmaxima'); + late final _ArucoDetectorParameters_SetAprilTagMaxNmaxima = + _ArucoDetectorParameters_SetAprilTagMaxNmaximaPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BackgroundSubtractorKNN_Create( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAprilTagMinClusterPixels( + ArucoDetectorParameters ap, + int aprilTagMinClusterPixels, ) { - return _BackgroundSubtractorKNN_Create( - rval, + return _ArucoDetectorParameters_SetAprilTagMinClusterPixels( + ap, + aprilTagMinClusterPixels, ); } - late final _BackgroundSubtractorKNN_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer)>>( - 'BackgroundSubtractorKNN_Create'); - late final _BackgroundSubtractorKNN_Create = - _BackgroundSubtractorKNN_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetAprilTagMinClusterPixelsPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAprilTagMinClusterPixels'); + late final _ArucoDetectorParameters_SetAprilTagMinClusterPixels = + _ArucoDetectorParameters_SetAprilTagMinClusterPixelsPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BackgroundSubtractorKNN_CreateWithParams( - int history, - double dist2Threshold, - bool detectShadows, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff( + ArucoDetectorParameters ap, + int aprilTagMinWhiteBlackDiff, ) { - return _BackgroundSubtractorKNN_CreateWithParams( - history, - dist2Threshold, - detectShadows, - rval, + return _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff( + ap, + aprilTagMinWhiteBlackDiff, ); } - late final _BackgroundSubtractorKNN_CreateWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Double, ffi.Bool, - ffi.Pointer)>>( - 'BackgroundSubtractorKNN_CreateWithParams'); - late final _BackgroundSubtractorKNN_CreateWithParams = - _BackgroundSubtractorKNN_CreateWithParamsPtr.asFunction< - CvStatus Function( - int, double, bool, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiffPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff'); + late final _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff = + _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiffPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BackgroundSubtractorMOG2_Apply( - BackgroundSubtractorMOG2 self, - Mat src, - Mat dst, + CvStatus ArucoDetectorParameters_SetAprilTagQuadDecimate( + ArucoDetectorParameters ap, + double aprilTagQuadDecimate, ) { - return _BackgroundSubtractorMOG2_Apply( - self, - src, - dst, + return _ArucoDetectorParameters_SetAprilTagQuadDecimate( + ap, + aprilTagQuadDecimate, ); } - late final _BackgroundSubtractorMOG2_ApplyPtr = _lookup< + late final _ArucoDetectorParameters_SetAprilTagQuadDecimatePtr = _lookup< ffi.NativeFunction< - CvStatus Function(BackgroundSubtractorMOG2, Mat, - Mat)>>('BackgroundSubtractorMOG2_Apply'); - late final _BackgroundSubtractorMOG2_Apply = - _BackgroundSubtractorMOG2_ApplyPtr.asFunction< - CvStatus Function(BackgroundSubtractorMOG2, Mat, Mat)>(); + CvStatus Function(ArucoDetectorParameters, + ffi.Float)>>('ArucoDetectorParameters_SetAprilTagQuadDecimate'); + late final _ArucoDetectorParameters_SetAprilTagQuadDecimate = + _ArucoDetectorParameters_SetAprilTagQuadDecimatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - void BackgroundSubtractorMOG2_Close( - ffi.Pointer self, + CvStatus ArucoDetectorParameters_SetAprilTagQuadSigma( + ArucoDetectorParameters ap, + double aprilTagQuadSigma, ) { - return _BackgroundSubtractorMOG2_Close( - self, + return _ArucoDetectorParameters_SetAprilTagQuadSigma( + ap, + aprilTagQuadSigma, ); } - late final _BackgroundSubtractorMOG2_ClosePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer)>>( - 'BackgroundSubtractorMOG2_Close'); - late final _BackgroundSubtractorMOG2_Close = - _BackgroundSubtractorMOG2_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetAprilTagQuadSigmaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, + ffi.Float)>>('ArucoDetectorParameters_SetAprilTagQuadSigma'); + late final _ArucoDetectorParameters_SetAprilTagQuadSigma = + _ArucoDetectorParameters_SetAprilTagQuadSigmaPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BackgroundSubtractorMOG2_Create( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetCornerRefinementMaxIterations( + ArucoDetectorParameters ap, + int cornerRefinementMaxIterations, ) { - return _BackgroundSubtractorMOG2_Create( - rval, + return _ArucoDetectorParameters_SetCornerRefinementMaxIterations( + ap, + cornerRefinementMaxIterations, ); } - late final _BackgroundSubtractorMOG2_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer)>>( - 'BackgroundSubtractorMOG2_Create'); - late final _BackgroundSubtractorMOG2_Create = - _BackgroundSubtractorMOG2_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetCornerRefinementMaxIterationsPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Int)>>( + 'ArucoDetectorParameters_SetCornerRefinementMaxIterations'); + late final _ArucoDetectorParameters_SetCornerRefinementMaxIterations = + _ArucoDetectorParameters_SetCornerRefinementMaxIterationsPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BackgroundSubtractorMOG2_CreateWithParams( - int history, - double varThreshold, - bool detectShadows, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetCornerRefinementMethod( + ArucoDetectorParameters ap, + int cornerRefinementMethod, ) { - return _BackgroundSubtractorMOG2_CreateWithParams( - history, - varThreshold, - detectShadows, - rval, + return _ArucoDetectorParameters_SetCornerRefinementMethod( + ap, + cornerRefinementMethod, ); } - late final _BackgroundSubtractorMOG2_CreateWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Double, ffi.Bool, - ffi.Pointer)>>( - 'BackgroundSubtractorMOG2_CreateWithParams'); - late final _BackgroundSubtractorMOG2_CreateWithParams = - _BackgroundSubtractorMOG2_CreateWithParamsPtr.asFunction< - CvStatus Function( - int, double, bool, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetCornerRefinementMethodPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetCornerRefinementMethod'); + late final _ArucoDetectorParameters_SetCornerRefinementMethod = + _ArucoDetectorParameters_SetCornerRefinementMethodPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BilateralFilter( - Mat src, - Mat dst, - int d, - double sc, - double ss, + CvStatus ArucoDetectorParameters_SetCornerRefinementMinAccuracy( + ArucoDetectorParameters ap, + double cornerRefinementMinAccuracy, ) { - return _BilateralFilter( - src, - dst, - d, - sc, - ss, + return _ArucoDetectorParameters_SetCornerRefinementMinAccuracy( + ap, + cornerRefinementMinAccuracy, ); } - late final _BilateralFilterPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Int, ffi.Double, ffi.Double)>>('BilateralFilter'); - late final _BilateralFilter = _BilateralFilterPtr.asFunction< - CvStatus Function(Mat, Mat, int, double, double)>(); + late final _ArucoDetectorParameters_SetCornerRefinementMinAccuracyPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetCornerRefinementMinAccuracy'); + late final _ArucoDetectorParameters_SetCornerRefinementMinAccuracy = + _ArucoDetectorParameters_SetCornerRefinementMinAccuracyPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - void BlockMeanHash_Close( - ffi.Pointer self, + CvStatus ArucoDetectorParameters_SetCornerRefinementWinSize( + ArucoDetectorParameters ap, + int cornerRefinementWinSize, ) { - return _BlockMeanHash_Close( - self, + return _ArucoDetectorParameters_SetCornerRefinementWinSize( + ap, + cornerRefinementWinSize, ); } - late final _BlockMeanHash_ClosePtr = _lookup< - ffi.NativeFunction)>>( - 'BlockMeanHash_Close'); - late final _BlockMeanHash_Close = _BlockMeanHash_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetCornerRefinementWinSizePtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetCornerRefinementWinSize'); + late final _ArucoDetectorParameters_SetCornerRefinementWinSize = + _ArucoDetectorParameters_SetCornerRefinementWinSizePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BlockMeanHash_Compare( - BlockMeanHash self, - Mat hashOne, - Mat hashTwo, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetDetectInvertedMarker( + ArucoDetectorParameters ap, + bool detectInvertedMarker, ) { - return _BlockMeanHash_Compare( - self, - hashOne, - hashTwo, - rval, + return _ArucoDetectorParameters_SetDetectInvertedMarker( + ap, + detectInvertedMarker, ); } - late final _BlockMeanHash_ComparePtr = _lookup< + late final _ArucoDetectorParameters_SetDetectInvertedMarkerPtr = _lookup< ffi.NativeFunction< - CvStatus Function(BlockMeanHash, Mat, Mat, - ffi.Pointer)>>('BlockMeanHash_Compare'); - late final _BlockMeanHash_Compare = _BlockMeanHash_ComparePtr.asFunction< - CvStatus Function(BlockMeanHash, Mat, Mat, ffi.Pointer)>(); + CvStatus Function(ArucoDetectorParameters, + ffi.Bool)>>('ArucoDetectorParameters_SetDetectInvertedMarker'); + late final _ArucoDetectorParameters_SetDetectInvertedMarker = + _ArucoDetectorParameters_SetDetectInvertedMarkerPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, bool)>(); - CvStatus BlockMeanHash_Compute( - BlockMeanHash self, - Mat inputArr, - Mat outputArr, + CvStatus ArucoDetectorParameters_SetErrorCorrectionRate( + ArucoDetectorParameters ap, + double errorCorrectionRate, ) { - return _BlockMeanHash_Compute( - self, - inputArr, - outputArr, + return _ArucoDetectorParameters_SetErrorCorrectionRate( + ap, + errorCorrectionRate, ); } - late final _BlockMeanHash_ComputePtr = - _lookup>( - 'BlockMeanHash_Compute'); - late final _BlockMeanHash_Compute = _BlockMeanHash_ComputePtr.asFunction< - CvStatus Function(BlockMeanHash, Mat, Mat)>(); + late final _ArucoDetectorParameters_SetErrorCorrectionRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, + ffi.Double)>>('ArucoDetectorParameters_SetErrorCorrectionRate'); + late final _ArucoDetectorParameters_SetErrorCorrectionRate = + _ArucoDetectorParameters_SetErrorCorrectionRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BlockMeanHash_Create( - int mode, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetMarkerBorderBits( + ArucoDetectorParameters ap, + int markerBorderBits, ) { - return _BlockMeanHash_Create( - mode, - rval, + return _ArucoDetectorParameters_SetMarkerBorderBits( + ap, + markerBorderBits, ); } - late final _BlockMeanHash_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ffi.Int, ffi.Pointer)>>('BlockMeanHash_Create'); - late final _BlockMeanHash_Create = _BlockMeanHash_CreatePtr.asFunction< - CvStatus Function(int, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetMarkerBorderBitsPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetMarkerBorderBits'); + late final _ArucoDetectorParameters_SetMarkerBorderBits = + _ArucoDetectorParameters_SetMarkerBorderBitsPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BlockMeanHash_GetMean( - BlockMeanHash self, - ffi.Pointer> rval, - ffi.Pointer length, + CvStatus ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate( + ArucoDetectorParameters ap, + double maxErroneousBitsInBorderRate, ) { - return _BlockMeanHash_GetMean( - self, - rval, - length, + return _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate( + ap, + maxErroneousBitsInBorderRate, ); } - late final _BlockMeanHash_GetMeanPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(BlockMeanHash, ffi.Pointer>, - ffi.Pointer)>>('BlockMeanHash_GetMean'); - late final _BlockMeanHash_GetMean = _BlockMeanHash_GetMeanPtr.asFunction< - CvStatus Function(BlockMeanHash, ffi.Pointer>, - ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRatePtr = + _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate'); + late final _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate = + _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BlockMeanHash_SetMode( - BlockMeanHash self, - int mode, + CvStatus ArucoDetectorParameters_SetMaxMarkerPerimeterRate( + ArucoDetectorParameters ap, + double maxMarkerPerimeterRate, ) { - return _BlockMeanHash_SetMode( - self, - mode, + return _ArucoDetectorParameters_SetMaxMarkerPerimeterRate( + ap, + maxMarkerPerimeterRate, ); } - late final _BlockMeanHash_SetModePtr = - _lookup>( - 'BlockMeanHash_SetMode'); - late final _BlockMeanHash_SetMode = _BlockMeanHash_SetModePtr.asFunction< - CvStatus Function(BlockMeanHash, int)>(); + late final _ArucoDetectorParameters_SetMaxMarkerPerimeterRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetMaxMarkerPerimeterRate'); + late final _ArucoDetectorParameters_SetMaxMarkerPerimeterRate = + _ArucoDetectorParameters_SetMaxMarkerPerimeterRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus Blur( - Mat src, - Mat dst, - Size ps, + CvStatus ArucoDetectorParameters_SetMinCornerDistanceRate( + ArucoDetectorParameters ap, + double minCornerDistanceRate, ) { - return _Blur( - src, - dst, - ps, + return _ArucoDetectorParameters_SetMinCornerDistanceRate( + ap, + minCornerDistanceRate, ); } - late final _BlurPtr = - _lookup>('Blur'); - late final _Blur = _BlurPtr.asFunction(); + late final _ArucoDetectorParameters_SetMinCornerDistanceRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, + ffi.Double)>>('ArucoDetectorParameters_SetMinCornerDistanceRate'); + late final _ArucoDetectorParameters_SetMinCornerDistanceRate = + _ArucoDetectorParameters_SetMinCornerDistanceRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BoundingRect( - VecPoint pts, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetMinDistanceToBorder( + ArucoDetectorParameters ap, + int minDistanceToBorder, ) { - return _BoundingRect( - pts, - rval, + return _ArucoDetectorParameters_SetMinDistanceToBorder( + ap, + minDistanceToBorder, ); } - late final _BoundingRectPtr = _lookup< - ffi.NativeFunction)>>( - 'BoundingRect'); - late final _BoundingRect = _BoundingRectPtr.asFunction< - CvStatus Function(VecPoint, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetMinDistanceToBorderPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetMinDistanceToBorder'); + late final _ArucoDetectorParameters_SetMinDistanceToBorder = + _ArucoDetectorParameters_SetMinDistanceToBorderPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BoxFilter( - Mat src, - Mat dst, - int ddepth, - Size ps, + CvStatus ArucoDetectorParameters_SetMinMarkerDistanceRate( + ArucoDetectorParameters ap, + double minMarkerDistanceRate, ) { - return _BoxFilter( - src, - dst, - ddepth, - ps, + return _ArucoDetectorParameters_SetMinMarkerDistanceRate( + ap, + minMarkerDistanceRate, ); } - late final _BoxFilterPtr = - _lookup>( - 'BoxFilter'); - late final _BoxFilter = - _BoxFilterPtr.asFunction(); + late final _ArucoDetectorParameters_SetMinMarkerDistanceRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, + ffi.Double)>>('ArucoDetectorParameters_SetMinMarkerDistanceRate'); + late final _ArucoDetectorParameters_SetMinMarkerDistanceRate = + _ArucoDetectorParameters_SetMinMarkerDistanceRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BoxPoints( - RotatedRect rect, - ffi.Pointer boxPts, + CvStatus ArucoDetectorParameters_SetMinMarkerPerimeterRate( + ArucoDetectorParameters ap, + double minMarkerPerimeterRate, ) { - return _BoxPoints( - rect, - boxPts, + return _ArucoDetectorParameters_SetMinMarkerPerimeterRate( + ap, + minMarkerPerimeterRate, ); } - late final _BoxPointsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - RotatedRect, ffi.Pointer)>>('BoxPoints'); - late final _BoxPoints = _BoxPointsPtr.asFunction< - CvStatus Function(RotatedRect, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetMinMarkerPerimeterRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetMinMarkerPerimeterRate'); + late final _ArucoDetectorParameters_SetMinMarkerPerimeterRate = + _ArucoDetectorParameters_SetMinMarkerPerimeterRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus CLAHE_Apply( - CLAHE c, - Mat src, - Mat dst, + CvStatus ArucoDetectorParameters_SetMinOtsuStdDev( + ArucoDetectorParameters ap, + double minOtsuStdDev, ) { - return _CLAHE_Apply( - c, - src, - dst, + return _ArucoDetectorParameters_SetMinOtsuStdDev( + ap, + minOtsuStdDev, ); } - late final _CLAHE_ApplyPtr = - _lookup>( - 'CLAHE_Apply'); - late final _CLAHE_Apply = - _CLAHE_ApplyPtr.asFunction(); + late final _ArucoDetectorParameters_SetMinOtsuStdDevPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, + ffi.Double)>>('ArucoDetectorParameters_SetMinOtsuStdDev'); + late final _ArucoDetectorParameters_SetMinOtsuStdDev = + _ArucoDetectorParameters_SetMinOtsuStdDevPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - void CLAHE_Close( - ffi.Pointer c, + CvStatus ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell( + ArucoDetectorParameters ap, + double perspectiveRemoveIgnoredMarginPerCell, ) { - return _CLAHE_Close( - c, + return _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell( + ap, + perspectiveRemoveIgnoredMarginPerCell, ); } - late final _CLAHE_ClosePtr = - _lookup)>>( - 'CLAHE_Close'); - late final _CLAHE_Close = - _CLAHE_ClosePtr.asFunction)>(); + late final _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCellPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell'); + late final _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell = + _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCellPtr + .asFunction(); - CvStatus CLAHE_CollectGarbage( - CLAHE c, + CvStatus ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell( + ArucoDetectorParameters ap, + int perspectiveRemovePixelPerCell, ) { - return _CLAHE_CollectGarbage( - c, + return _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell( + ap, + perspectiveRemovePixelPerCell, ); } - late final _CLAHE_CollectGarbagePtr = - _lookup>( - 'CLAHE_CollectGarbage'); - late final _CLAHE_CollectGarbage = - _CLAHE_CollectGarbagePtr.asFunction(); + late final _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCellPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Int)>>( + 'ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell'); + late final _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell = + _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCellPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus CLAHE_Create( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetPolygonalApproxAccuracyRate( + ArucoDetectorParameters ap, + double polygonalApproxAccuracyRate, ) { - return _CLAHE_Create( - rval, + return _ArucoDetectorParameters_SetPolygonalApproxAccuracyRate( + ap, + polygonalApproxAccuracyRate, ); } - late final _CLAHE_CreatePtr = - _lookup)>>( - 'CLAHE_Create'); - late final _CLAHE_Create = - _CLAHE_CreatePtr.asFunction)>(); + late final _ArucoDetectorParameters_SetPolygonalApproxAccuracyRatePtr = + _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetPolygonalApproxAccuracyRate'); + late final _ArucoDetectorParameters_SetPolygonalApproxAccuracyRate = + _ArucoDetectorParameters_SetPolygonalApproxAccuracyRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus CLAHE_CreateWithParams( - double clipLimit, - Size tileGridSize, - ffi.Pointer rval, + void ArucoDetector_Close( + ffi.Pointer ad, ) { - return _CLAHE_CreateWithParams( - clipLimit, - tileGridSize, - rval, + return _ArucoDetector_Close( + ad, ); } - late final _CLAHE_CreateWithParamsPtr = _lookup< + late final _ArucoDetector_ClosePtr = _lookup< + ffi.NativeFunction)>>( + 'ArucoDetector_Close'); + late final _ArucoDetector_Close = _ArucoDetector_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); + + CvStatus ArucoDetector_DetectMarkers( + ArucoDetector ad, + Mat inputArr, + ffi.Pointer markerCorners, + ffi.Pointer markerIds, + ffi.Pointer rejectedCandidates, + ) { + return _ArucoDetector_DetectMarkers( + ad, + inputArr, + markerCorners, + markerIds, + rejectedCandidates, + ); + } + + late final _ArucoDetector_DetectMarkersPtr = _lookup< ffi.NativeFunction< CvStatus Function( - ffi.Double, Size, ffi.Pointer)>>('CLAHE_CreateWithParams'); - late final _CLAHE_CreateWithParams = _CLAHE_CreateWithParamsPtr.asFunction< - CvStatus Function(double, Size, ffi.Pointer)>(); + ArucoDetector, + Mat, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('ArucoDetector_DetectMarkers'); + late final _ArucoDetector_DetectMarkers = + _ArucoDetector_DetectMarkersPtr.asFunction< + CvStatus Function(ArucoDetector, Mat, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); - CvStatus CLAHE_GetClipLimit( - CLAHE c, - ffi.Pointer rval, + CvStatus ArucoDetector_New( + ffi.Pointer rval, ) { - return _CLAHE_GetClipLimit( - c, + return _ArucoDetector_New( rval, ); } - late final _CLAHE_GetClipLimitPtr = _lookup< - ffi - .NativeFunction)>>( - 'CLAHE_GetClipLimit'); - late final _CLAHE_GetClipLimit = _CLAHE_GetClipLimitPtr.asFunction< - CvStatus Function(CLAHE, ffi.Pointer)>(); + late final _ArucoDetector_NewPtr = _lookup< + ffi.NativeFunction)>>( + 'ArucoDetector_New'); + late final _ArucoDetector_New = _ArucoDetector_NewPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus CLAHE_GetTilesGridSize( - CLAHE c, - ffi.Pointer rval, + CvStatus ArucoDetector_NewWithParams( + ArucoDictionary dictionary, + ArucoDetectorParameters params, + ffi.Pointer rval, ) { - return _CLAHE_GetTilesGridSize( - c, + return _ArucoDetector_NewWithParams( + dictionary, + params, rval, ); } - late final _CLAHE_GetTilesGridSizePtr = - _lookup)>>( - 'CLAHE_GetTilesGridSize'); - late final _CLAHE_GetTilesGridSize = _CLAHE_GetTilesGridSizePtr.asFunction< - CvStatus Function(CLAHE, ffi.Pointer)>(); + late final _ArucoDetector_NewWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDictionary, ArucoDetectorParameters, + ffi.Pointer)>>('ArucoDetector_NewWithParams'); + late final _ArucoDetector_NewWithParams = + _ArucoDetector_NewWithParamsPtr.asFunction< + CvStatus Function(ArucoDictionary, ArucoDetectorParameters, + ffi.Pointer)>(); - CvStatus CLAHE_SetClipLimit( - CLAHE c, - double clipLimit, + void ArucoDictionary_Close( + ffi.Pointer self, ) { - return _CLAHE_SetClipLimit( - c, - clipLimit, + return _ArucoDictionary_Close( + self, ); } - late final _CLAHE_SetClipLimitPtr = - _lookup>( - 'CLAHE_SetClipLimit'); - late final _CLAHE_SetClipLimit = - _CLAHE_SetClipLimitPtr.asFunction(); + late final _ArucoDictionary_ClosePtr = _lookup< + ffi.NativeFunction)>>( + 'ArucoDictionary_Close'); + late final _ArucoDictionary_Close = _ArucoDictionary_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus CLAHE_SetTilesGridSize( - CLAHE c, - Size size, + CvStatus ArucoDrawDetectedMarkers( + Mat image, + VecVecPoint2f markerCorners, + VecInt markerIds, + Scalar borderColor, ) { - return _CLAHE_SetTilesGridSize( - c, - size, + return _ArucoDrawDetectedMarkers( + image, + markerCorners, + markerIds, + borderColor, ); } - late final _CLAHE_SetTilesGridSizePtr = - _lookup>( - 'CLAHE_SetTilesGridSize'); - late final _CLAHE_SetTilesGridSize = - _CLAHE_SetTilesGridSizePtr.asFunction(); + late final _ArucoDrawDetectedMarkersPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, VecVecPoint2f, VecInt, Scalar)>>('ArucoDrawDetectedMarkers'); + late final _ArucoDrawDetectedMarkers = _ArucoDrawDetectedMarkersPtr + .asFunction(); - CvStatus CalcBackProject( - VecMat mats, - VecInt chans, - Mat hist, - Mat backProject, - VecFloat rng, - bool uniform, + CvStatus ArucoGenerateImageMarker( + int dictionaryId, + int id, + int sidePixels, + Mat img, + int borderBits, ) { - return _CalcBackProject( - mats, - chans, - hist, - backProject, - rng, - uniform, + return _ArucoGenerateImageMarker( + dictionaryId, + id, + sidePixels, + img, + borderBits, ); } - late final _CalcBackProjectPtr = _lookup< + late final _ArucoGenerateImageMarkerPtr = _lookup< ffi.NativeFunction< - CvStatus Function(VecMat, VecInt, Mat, Mat, VecFloat, - ffi.Bool)>>('CalcBackProject'); - late final _CalcBackProject = _CalcBackProjectPtr.asFunction< - CvStatus Function(VecMat, VecInt, Mat, Mat, VecFloat, bool)>(); + CvStatus Function(ffi.Int, ffi.Int, ffi.Int, Mat, + ffi.Int)>>('ArucoGenerateImageMarker'); + late final _ArucoGenerateImageMarker = _ArucoGenerateImageMarkerPtr + .asFunction(); - CvStatus CalcHist( - VecMat mats, - VecInt chans, - Mat mask, - Mat hist, - VecInt sz, - VecFloat rng, - bool acc, + void AsyncArray_Close( + ffi.Pointer a, ) { - return _CalcHist( - mats, - chans, - mask, - hist, - sz, - rng, - acc, + return _AsyncArray_Close( + a, ); } - late final _CalcHistPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecMat, VecInt, Mat, Mat, VecInt, VecFloat, - ffi.Bool)>>('CalcHist'); - late final _CalcHist = _CalcHistPtr.asFunction< - CvStatus Function(VecMat, VecInt, Mat, Mat, VecInt, VecFloat, bool)>(); + late final _AsyncArray_ClosePtr = + _lookup)>>( + 'AsyncArray_Close'); + late final _AsyncArray_Close = + _AsyncArray_ClosePtr.asFunction)>(); - CvStatus CalcOpticalFlowFarneback( - Mat prevImg, - Mat nextImg, - Mat flow, - double pyrScale, - int levels, - int winsize, - int iterations, - int polyN, - double polySigma, - int flags, + CvStatus AsyncArray_Get( + AsyncArray async_out, + Mat out, ) { - return _CalcOpticalFlowFarneback( - prevImg, - nextImg, - flow, - pyrScale, - levels, - winsize, - iterations, - polyN, - polySigma, - flags, + return _AsyncArray_Get( + async_out, + out, ); } - late final _CalcOpticalFlowFarnebackPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, - Mat, - Mat, - ffi.Double, - ffi.Int, - ffi.Int, - ffi.Int, - ffi.Int, - ffi.Double, - ffi.Int)>>('CalcOpticalFlowFarneback'); - late final _CalcOpticalFlowFarneback = - _CalcOpticalFlowFarnebackPtr.asFunction< - CvStatus Function( - Mat, Mat, Mat, double, int, int, int, int, double, int)>(); + late final _AsyncArray_GetPtr = + _lookup>( + 'AsyncArray_Get'); + late final _AsyncArray_Get = + _AsyncArray_GetPtr.asFunction(); - CvStatus CalcOpticalFlowPyrLK( - Mat prevImg, - Mat nextImg, - VecPoint2f prevPts, - VecPoint2f nextPts, - VecUChar status, - VecFloat err, + CvStatus AsyncArray_New( + ffi.Pointer rval, ) { - return _CalcOpticalFlowPyrLK( - prevImg, - nextImg, - prevPts, - nextPts, - status, - err, + return _AsyncArray_New( + rval, ); } - late final _CalcOpticalFlowPyrLKPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, VecPoint2f, VecPoint2f, VecUChar, - VecFloat)>>('CalcOpticalFlowPyrLK'); - late final _CalcOpticalFlowPyrLK = _CalcOpticalFlowPyrLKPtr.asFunction< - CvStatus Function( - Mat, Mat, VecPoint2f, VecPoint2f, VecUChar, VecFloat)>(); + late final _AsyncArray_NewPtr = + _lookup)>>( + 'AsyncArray_New'); + late final _AsyncArray_New = _AsyncArray_NewPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus CalcOpticalFlowPyrLKWithParams( - Mat prevImg, - Mat nextImg, - VecPoint2f prevPts, - VecPoint2f nextPts, - VecUChar status, - VecFloat err, - Size winSize, - int maxLevel, - TermCriteria criteria, - int flags, - double minEigThreshold, + void BFMatcher_Close( + ffi.Pointer b, ) { - return _CalcOpticalFlowPyrLKWithParams( - prevImg, - nextImg, - prevPts, - nextPts, - status, - err, - winSize, - maxLevel, - criteria, - flags, - minEigThreshold, + return _BFMatcher_Close( + b, ); } - late final _CalcOpticalFlowPyrLKWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, - Mat, - VecPoint2f, - VecPoint2f, - VecUChar, - VecFloat, - Size, - ffi.Int, - TermCriteria, - ffi.Int, - ffi.Double)>>('CalcOpticalFlowPyrLKWithParams'); - late final _CalcOpticalFlowPyrLKWithParams = - _CalcOpticalFlowPyrLKWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, VecPoint2f, VecPoint2f, VecUChar, - VecFloat, Size, int, TermCriteria, int, double)>(); + late final _BFMatcher_ClosePtr = + _lookup)>>( + 'BFMatcher_Close'); + late final _BFMatcher_Close = + _BFMatcher_ClosePtr.asFunction)>(); - CvStatus CalibrateCamera( - VecVecPoint3f objectPoints, - VecVecPoint2f imagePoints, - Size imageSize, - Mat cameraMatrix, - Mat distCoeffs, - Mat rvecs, - Mat tvecs, - int flag, - TermCriteria criteria, - ffi.Pointer rval, + CvStatus BFMatcher_Create( + ffi.Pointer rval, ) { - return _CalibrateCamera( - objectPoints, - imagePoints, - imageSize, - cameraMatrix, - distCoeffs, - rvecs, - tvecs, - flag, - criteria, + return _BFMatcher_Create( rval, ); } - late final _CalibrateCameraPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - VecVecPoint3f, - VecVecPoint2f, - Size, - Mat, - Mat, - Mat, - Mat, - ffi.Int, - TermCriteria, - ffi.Pointer)>>('CalibrateCamera'); - late final _CalibrateCamera = _CalibrateCameraPtr.asFunction< - CvStatus Function(VecVecPoint3f, VecVecPoint2f, Size, Mat, Mat, Mat, Mat, - int, TermCriteria, ffi.Pointer)>(); + late final _BFMatcher_CreatePtr = + _lookup)>>( + 'BFMatcher_Create'); + late final _BFMatcher_Create = _BFMatcher_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus Canny( - Mat src, - Mat edges, - double t1, - double t2, - int apertureSize, - bool l2gradient, + CvStatus BFMatcher_CreateWithParams( + int normType, + bool crossCheck, + ffi.Pointer rval, ) { - return _Canny( - src, - edges, - t1, - t2, - apertureSize, - l2gradient, + return _BFMatcher_CreateWithParams( + normType, + crossCheck, + rval, ); } - late final _CannyPtr = _lookup< + late final _BFMatcher_CreateWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Double, ffi.Double, ffi.Int, ffi.Bool)>>('Canny'); - late final _Canny = _CannyPtr.asFunction< - CvStatus Function(Mat, Mat, double, double, int, bool)>(); + CvStatus Function(ffi.Int, ffi.Bool, + ffi.Pointer)>>('BFMatcher_CreateWithParams'); + late final _BFMatcher_CreateWithParams = _BFMatcher_CreateWithParamsPtr + .asFunction)>(); - void CascadeClassifier_Close( - ffi.Pointer cs, + CvStatus BFMatcher_KnnMatch( + BFMatcher b, + Mat query, + Mat train, + int k, + ffi.Pointer rval, ) { - return _CascadeClassifier_Close( - cs, + return _BFMatcher_KnnMatch( + b, + query, + train, + k, + rval, ); } - late final _CascadeClassifier_ClosePtr = _lookup< - ffi - .NativeFunction)>>( - 'CascadeClassifier_Close'); - late final _CascadeClassifier_Close = _CascadeClassifier_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _BFMatcher_KnnMatchPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(BFMatcher, Mat, Mat, ffi.Int, + ffi.Pointer)>>('BFMatcher_KnnMatch'); + late final _BFMatcher_KnnMatch = _BFMatcher_KnnMatchPtr.asFunction< + CvStatus Function(BFMatcher, Mat, Mat, int, ffi.Pointer)>(); - CvStatus CascadeClassifier_DetectMultiScale( - CascadeClassifier cs, - Mat img, - ffi.Pointer rval, + CvStatus BFMatcher_Match( + BFMatcher b, + Mat query, + Mat train, + ffi.Pointer rval, ) { - return _CascadeClassifier_DetectMultiScale( - cs, - img, + return _BFMatcher_Match( + b, + query, + train, rval, ); } - late final _CascadeClassifier_DetectMultiScalePtr = _lookup< + late final _BFMatcher_MatchPtr = _lookup< ffi.NativeFunction< - CvStatus Function(CascadeClassifier, Mat, - ffi.Pointer)>>('CascadeClassifier_DetectMultiScale'); - late final _CascadeClassifier_DetectMultiScale = - _CascadeClassifier_DetectMultiScalePtr.asFunction< - CvStatus Function(CascadeClassifier, Mat, ffi.Pointer)>(); + CvStatus Function( + BFMatcher, Mat, Mat, ffi.Pointer)>>('BFMatcher_Match'); + late final _BFMatcher_Match = _BFMatcher_MatchPtr.asFunction< + CvStatus Function(BFMatcher, Mat, Mat, ffi.Pointer)>(); - CvStatus CascadeClassifier_DetectMultiScaleWithParams( - CascadeClassifier cs, - Mat img, - double scale, - int minNeighbors, - int flags, - Size minSize, - Size maxSize, - ffi.Pointer rval, + void BRISK_Close( + ffi.Pointer b, ) { - return _CascadeClassifier_DetectMultiScaleWithParams( - cs, - img, - scale, - minNeighbors, - flags, - minSize, - maxSize, - rval, + return _BRISK_Close( + b, ); } - late final _CascadeClassifier_DetectMultiScaleWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(CascadeClassifier, Mat, ffi.Double, ffi.Int, - ffi.Int, Size, Size, ffi.Pointer)>>( - 'CascadeClassifier_DetectMultiScaleWithParams'); - late final _CascadeClassifier_DetectMultiScaleWithParams = - _CascadeClassifier_DetectMultiScaleWithParamsPtr.asFunction< - CvStatus Function(CascadeClassifier, Mat, double, int, int, Size, - Size, ffi.Pointer)>(); + late final _BRISK_ClosePtr = + _lookup)>>( + 'BRISK_Close'); + late final _BRISK_Close = + _BRISK_ClosePtr.asFunction)>(); - CvStatus CascadeClassifier_Load( - CascadeClassifier cs, - ffi.Pointer name, - ffi.Pointer rval, + CvStatus BRISK_Create( + ffi.Pointer rval, ) { - return _CascadeClassifier_Load( - cs, - name, + return _BRISK_Create( rval, ); } - late final _CascadeClassifier_LoadPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(CascadeClassifier, ffi.Pointer, - ffi.Pointer)>>('CascadeClassifier_Load'); - late final _CascadeClassifier_Load = _CascadeClassifier_LoadPtr.asFunction< - CvStatus Function( - CascadeClassifier, ffi.Pointer, ffi.Pointer)>(); + late final _BRISK_CreatePtr = + _lookup)>>( + 'BRISK_Create'); + late final _BRISK_Create = + _BRISK_CreatePtr.asFunction)>(); - CvStatus CascadeClassifier_New( - ffi.Pointer rval, + CvStatus BRISK_Detect( + BRISK b, + Mat src, + ffi.Pointer rval, ) { - return _CascadeClassifier_New( + return _BRISK_Detect( + b, + src, rval, ); } - late final _CascadeClassifier_NewPtr = _lookup< - ffi - .NativeFunction)>>( - 'CascadeClassifier_New'); - late final _CascadeClassifier_New = _CascadeClassifier_NewPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _BRISK_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + BRISK, Mat, ffi.Pointer)>>('BRISK_Detect'); + late final _BRISK_Detect = _BRISK_DetectPtr.asFunction< + CvStatus Function(BRISK, Mat, ffi.Pointer)>(); - CvStatus Circle( - Mat img, - Point center, - int radius, - Scalar color, - int thickness, + CvStatus BRISK_DetectAndCompute( + BRISK b, + Mat src, + Mat mask, + Mat desc, + ffi.Pointer rval, ) { - return _Circle( - img, - center, - radius, - color, - thickness, + return _BRISK_DetectAndCompute( + b, + src, + mask, + desc, + rval, ); } - late final _CirclePtr = _lookup< + late final _BRISK_DetectAndComputePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Point, ffi.Int, Scalar, ffi.Int)>>('Circle'); - late final _Circle = - _CirclePtr.asFunction(); + CvStatus Function(BRISK, Mat, Mat, Mat, + ffi.Pointer)>>('BRISK_DetectAndCompute'); + late final _BRISK_DetectAndCompute = _BRISK_DetectAndComputePtr.asFunction< + CvStatus Function(BRISK, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus CircleWithParams( - Mat img, - Point center, - int radius, - Scalar color, - int thickness, - int lineType, - int shift, + CvStatus BackgroundSubtractorKNN_Apply( + BackgroundSubtractorKNN self, + Mat src, + Mat dst, ) { - return _CircleWithParams( - img, - center, - radius, - color, - thickness, - lineType, - shift, + return _BackgroundSubtractorKNN_Apply( + self, + src, + dst, ); } - late final _CircleWithParamsPtr = _lookup< + late final _BackgroundSubtractorKNN_ApplyPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Point, ffi.Int, Scalar, ffi.Int, ffi.Int, - ffi.Int)>>('CircleWithParams'); - late final _CircleWithParams = _CircleWithParamsPtr.asFunction< - CvStatus Function(Mat, Point, int, Scalar, int, int, int)>(); + CvStatus Function(BackgroundSubtractorKNN, Mat, + Mat)>>('BackgroundSubtractorKNN_Apply'); + late final _BackgroundSubtractorKNN_Apply = _BackgroundSubtractorKNN_ApplyPtr + .asFunction(); - CvStatus ClipLine( - Rect imgRect, - Point pt1, - Point pt2, - ffi.Pointer rval, + void BackgroundSubtractorKNN_Close( + ffi.Pointer self, ) { - return _ClipLine( - imgRect, - pt1, - pt2, - rval, + return _BackgroundSubtractorKNN_Close( + self, ); } - late final _ClipLinePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Rect, Point, Point, ffi.Pointer)>>('ClipLine'); - late final _ClipLine = _ClipLinePtr.asFunction< - CvStatus Function(Rect, Point, Point, ffi.Pointer)>(); + late final _BackgroundSubtractorKNN_ClosePtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer)>>( + 'BackgroundSubtractorKNN_Close'); + late final _BackgroundSubtractorKNN_Close = _BackgroundSubtractorKNN_ClosePtr + .asFunction)>(); - CvStatus ColorChange( - Mat src, - Mat mask, - Mat dst, - double red_mul, - double green_mul, - double blue_mul, + CvStatus BackgroundSubtractorKNN_Create( + ffi.Pointer rval, ) { - return _ColorChange( - src, - mask, - dst, - red_mul, - green_mul, - blue_mul, + return _BackgroundSubtractorKNN_Create( + rval, ); } - late final _ColorChangePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, ffi.Float, ffi.Float, ffi.Float)>>('ColorChange'); - late final _ColorChange = _ColorChangePtr.asFunction< - CvStatus Function(Mat, Mat, Mat, double, double, double)>(); + late final _BackgroundSubtractorKNN_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'BackgroundSubtractorKNN_Create'); + late final _BackgroundSubtractorKNN_Create = + _BackgroundSubtractorKNN_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus CompareHist( - Mat hist1, - Mat hist2, - int method, - ffi.Pointer rval, + CvStatus BackgroundSubtractorKNN_CreateWithParams( + int history, + double dist2Threshold, + bool detectShadows, + ffi.Pointer rval, ) { - return _CompareHist( - hist1, - hist2, - method, + return _BackgroundSubtractorKNN_CreateWithParams( + history, + dist2Threshold, + detectShadows, rval, ); } - late final _CompareHistPtr = _lookup< - ffi.NativeFunction< + late final _BackgroundSubtractorKNN_CreateWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Int, ffi.Double, ffi.Bool, + ffi.Pointer)>>( + 'BackgroundSubtractorKNN_CreateWithParams'); + late final _BackgroundSubtractorKNN_CreateWithParams = + _BackgroundSubtractorKNN_CreateWithParamsPtr.asFunction< CvStatus Function( - Mat, Mat, ffi.Int, ffi.Pointer)>>('CompareHist'); - late final _CompareHist = _CompareHistPtr.asFunction< - CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); + int, double, bool, ffi.Pointer)>(); - CvStatus ConnectedComponents( + CvStatus BackgroundSubtractorMOG2_Apply( + BackgroundSubtractorMOG2 self, Mat src, Mat dst, - int connectivity, - int ltype, - int ccltype, - ffi.Pointer rval, ) { - return _ConnectedComponents( + return _BackgroundSubtractorMOG2_Apply( + self, src, dst, - connectivity, - ltype, - ccltype, - rval, ); } - late final _ConnectedComponentsPtr = _lookup< + late final _BackgroundSubtractorMOG2_ApplyPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('ConnectedComponents'); - late final _ConnectedComponents = _ConnectedComponentsPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, int, ffi.Pointer)>(); + CvStatus Function(BackgroundSubtractorMOG2, Mat, + Mat)>>('BackgroundSubtractorMOG2_Apply'); + late final _BackgroundSubtractorMOG2_Apply = + _BackgroundSubtractorMOG2_ApplyPtr.asFunction< + CvStatus Function(BackgroundSubtractorMOG2, Mat, Mat)>(); - CvStatus ConnectedComponentsWithStats( - Mat src, - Mat labels, - Mat stats, - Mat centroids, - int connectivity, - int ltype, - int ccltype, - ffi.Pointer rval, + void BackgroundSubtractorMOG2_Close( + ffi.Pointer self, ) { - return _ConnectedComponentsWithStats( - src, - labels, - stats, - centroids, - connectivity, - ltype, - ccltype, - rval, - ); - } - - late final _ConnectedComponentsWithStatsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('ConnectedComponentsWithStats'); - late final _ConnectedComponentsWithStats = - _ConnectedComponentsWithStatsPtr.asFunction< - CvStatus Function( - Mat, Mat, Mat, Mat, int, int, int, ffi.Pointer)>(); - - CvStatus ContourArea( - VecPoint pts, - ffi.Pointer rval, - ) { - return _ContourArea( - pts, - rval, + return _BackgroundSubtractorMOG2_Close( + self, ); } - late final _ContourAreaPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint, ffi.Pointer)>>('ContourArea'); - late final _ContourArea = _ContourAreaPtr.asFunction< - CvStatus Function(VecPoint, ffi.Pointer)>(); + late final _BackgroundSubtractorMOG2_ClosePtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer)>>( + 'BackgroundSubtractorMOG2_Close'); + late final _BackgroundSubtractorMOG2_Close = + _BackgroundSubtractorMOG2_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus ConvexHull( - VecPoint points, - Mat hull, - bool clockwise, - bool returnPoints, + CvStatus BackgroundSubtractorMOG2_Create( + ffi.Pointer rval, ) { - return _ConvexHull( - points, - hull, - clockwise, - returnPoints, + return _BackgroundSubtractorMOG2_Create( + rval, ); } - late final _ConvexHullPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint, Mat, ffi.Bool, ffi.Bool)>>('ConvexHull'); - late final _ConvexHull = - _ConvexHullPtr.asFunction(); + late final _BackgroundSubtractorMOG2_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'BackgroundSubtractorMOG2_Create'); + late final _BackgroundSubtractorMOG2_Create = + _BackgroundSubtractorMOG2_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus ConvexityDefects( - VecPoint points, - Mat hull, - Mat result, + CvStatus BackgroundSubtractorMOG2_CreateWithParams( + int history, + double varThreshold, + bool detectShadows, + ffi.Pointer rval, ) { - return _ConvexityDefects( - points, - hull, - result, + return _BackgroundSubtractorMOG2_CreateWithParams( + history, + varThreshold, + detectShadows, + rval, ); } - late final _ConvexityDefectsPtr = - _lookup>( - 'ConvexityDefects'); - late final _ConvexityDefects = - _ConvexityDefectsPtr.asFunction(); + late final _BackgroundSubtractorMOG2_CreateWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Int, ffi.Double, ffi.Bool, + ffi.Pointer)>>( + 'BackgroundSubtractorMOG2_CreateWithParams'); + late final _BackgroundSubtractorMOG2_CreateWithParams = + _BackgroundSubtractorMOG2_CreateWithParamsPtr.asFunction< + CvStatus Function( + int, double, bool, ffi.Pointer)>(); - CvStatus CornerSubPix( - Mat img, - VecPoint2f corners, - Size winSize, - Size zeroZone, - TermCriteria criteria, + CvStatus BilateralFilter( + Mat src, + Mat dst, + int d, + double sc, + double ss, ) { - return _CornerSubPix( - img, - corners, - winSize, - zeroZone, - criteria, + return _BilateralFilter( + src, + dst, + d, + sc, + ss, ); } - late final _CornerSubPixPtr = _lookup< + late final _BilateralFilterPtr = _lookup< ffi.NativeFunction< CvStatus Function( - Mat, VecPoint2f, Size, Size, TermCriteria)>>('CornerSubPix'); - late final _CornerSubPix = _CornerSubPixPtr.asFunction< - CvStatus Function(Mat, VecPoint2f, Size, Size, TermCriteria)>(); + Mat, Mat, ffi.Int, ffi.Double, ffi.Double)>>('BilateralFilter'); + late final _BilateralFilter = _BilateralFilterPtr.asFunction< + CvStatus Function(Mat, Mat, int, double, double)>(); - CvStatus CvtColor( - Mat src, - Mat dst, - int code, + void BlockMeanHash_Close( + ffi.Pointer self, ) { - return _CvtColor( - src, - dst, - code, + return _BlockMeanHash_Close( + self, ); } - late final _CvtColorPtr = - _lookup>( - 'CvtColor'); - late final _CvtColor = - _CvtColorPtr.asFunction(); + late final _BlockMeanHash_ClosePtr = _lookup< + ffi.NativeFunction)>>( + 'BlockMeanHash_Close'); + late final _BlockMeanHash_Close = _BlockMeanHash_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus DetailEnhance( - Mat src, - Mat dst, - double sigma_s, - double sigma_r, + CvStatus BlockMeanHash_Compare( + BlockMeanHash self, + Mat hashOne, + Mat hashTwo, + ffi.Pointer rval, ) { - return _DetailEnhance( - src, - dst, - sigma_s, - sigma_r, + return _BlockMeanHash_Compare( + self, + hashOne, + hashTwo, + rval, ); } - late final _DetailEnhancePtr = _lookup< + late final _BlockMeanHash_ComparePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Float, ffi.Float)>>('DetailEnhance'); - late final _DetailEnhance = _DetailEnhancePtr.asFunction< - CvStatus Function(Mat, Mat, double, double)>(); + CvStatus Function(BlockMeanHash, Mat, Mat, + ffi.Pointer)>>('BlockMeanHash_Compare'); + late final _BlockMeanHash_Compare = _BlockMeanHash_ComparePtr.asFunction< + CvStatus Function(BlockMeanHash, Mat, Mat, ffi.Pointer)>(); - CvStatus Dilate( - Mat src, - Mat dst, - Mat kernel, + CvStatus BlockMeanHash_Compute( + BlockMeanHash self, + Mat inputArr, + Mat outputArr, ) { - return _Dilate( - src, - dst, - kernel, + return _BlockMeanHash_Compute( + self, + inputArr, + outputArr, ); } - late final _DilatePtr = - _lookup>('Dilate'); - late final _Dilate = - _DilatePtr.asFunction(); + late final _BlockMeanHash_ComputePtr = + _lookup>( + 'BlockMeanHash_Compute'); + late final _BlockMeanHash_Compute = _BlockMeanHash_ComputePtr.asFunction< + CvStatus Function(BlockMeanHash, Mat, Mat)>(); - CvStatus DilateWithParams( - Mat src, - Mat dst, - Mat kernel, - Point anchor, - int iterations, - int borderType, - Scalar borderValue, + CvStatus BlockMeanHash_Create( + int mode, + ffi.Pointer rval, ) { - return _DilateWithParams( - src, - dst, - kernel, - anchor, - iterations, - borderType, - borderValue, + return _BlockMeanHash_Create( + mode, + rval, ); } - late final _DilateWithParamsPtr = _lookup< + late final _BlockMeanHash_CreatePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, Point, ffi.Int, ffi.Int, - Scalar)>>('DilateWithParams'); - late final _DilateWithParams = _DilateWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Point, int, int, Scalar)>(); + CvStatus Function( + ffi.Int, ffi.Pointer)>>('BlockMeanHash_Create'); + late final _BlockMeanHash_Create = _BlockMeanHash_CreatePtr.asFunction< + CvStatus Function(int, ffi.Pointer)>(); - CvStatus DistanceTransform( - Mat src, - Mat dst, - Mat labels, - int distanceType, - int maskSize, - int labelType, + CvStatus BlockMeanHash_GetMean( + BlockMeanHash self, + ffi.Pointer> rval, + ffi.Pointer length, ) { - return _DistanceTransform( - src, - dst, - labels, - distanceType, - maskSize, - labelType, + return _BlockMeanHash_GetMean( + self, + rval, + length, ); } - late final _DistanceTransformPtr = _lookup< + late final _BlockMeanHash_GetMeanPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, ffi.Int, ffi.Int, ffi.Int)>>('DistanceTransform'); - late final _DistanceTransform = _DistanceTransformPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, int, int, int)>(); + CvStatus Function(BlockMeanHash, ffi.Pointer>, + ffi.Pointer)>>('BlockMeanHash_GetMean'); + late final _BlockMeanHash_GetMean = _BlockMeanHash_GetMeanPtr.asFunction< + CvStatus Function(BlockMeanHash, ffi.Pointer>, + ffi.Pointer)>(); - CvStatus DrawChessboardCorners( - Mat image, - Size patternSize, - Mat corners, - bool patternWasFound, + CvStatus BlockMeanHash_SetMode( + BlockMeanHash self, + int mode, ) { - return _DrawChessboardCorners( - image, - patternSize, - corners, - patternWasFound, + return _BlockMeanHash_SetMode( + self, + mode, ); } - late final _DrawChessboardCornersPtr = - _lookup>( - 'DrawChessboardCorners'); - late final _DrawChessboardCorners = _DrawChessboardCornersPtr.asFunction< - CvStatus Function(Mat, Size, Mat, bool)>(); + late final _BlockMeanHash_SetModePtr = + _lookup>( + 'BlockMeanHash_SetMode'); + late final _BlockMeanHash_SetMode = _BlockMeanHash_SetModePtr.asFunction< + CvStatus Function(BlockMeanHash, int)>(); - CvStatus DrawContours( + CvStatus Blur( Mat src, - VecVecPoint contours, - int contourIdx, - Scalar color, - int thickness, + Mat dst, + Size ps, ) { - return _DrawContours( + return _Blur( src, - contours, - contourIdx, - color, - thickness, + dst, + ps, ); } - late final _DrawContoursPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, VecVecPoint, ffi.Int, Scalar, ffi.Int)>>('DrawContours'); - late final _DrawContours = _DrawContoursPtr.asFunction< - CvStatus Function(Mat, VecVecPoint, int, Scalar, int)>(); + late final _BlurPtr = + _lookup>('Blur'); + late final _Blur = _BlurPtr.asFunction(); - CvStatus DrawContoursWithParams( - Mat src, - VecVecPoint contours, - int contourIdx, - Scalar color, - int thickness, - int lineType, - Mat hierarchy, - int maxLevel, - Point offset, + CvStatus Boost_Clear( + Boost self, ) { - return _DrawContoursWithParams( - src, - contours, - contourIdx, - color, - thickness, - lineType, - hierarchy, - maxLevel, - offset, + return _Boost_Clear( + self, ); } - late final _DrawContoursWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, VecVecPoint, ffi.Int, Scalar, ffi.Int, ffi.Int, - Mat, ffi.Int, Point)>>('DrawContoursWithParams'); - late final _DrawContoursWithParams = _DrawContoursWithParamsPtr.asFunction< - CvStatus Function( - Mat, VecVecPoint, int, Scalar, int, int, Mat, int, Point)>(); + late final _Boost_ClearPtr = + _lookup>('Boost_Clear'); + late final _Boost_Clear = + _Boost_ClearPtr.asFunction(); - CvStatus DrawKeyPoints( - Mat src, - VecKeyPoint kp, - Mat dst, - Scalar color, - int flags, + void Boost_Close( + ffi.Pointer self, ) { - return _DrawKeyPoints( - src, - kp, - dst, - color, - flags, + return _Boost_Close( + self, ); } - late final _DrawKeyPointsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, VecKeyPoint, Mat, Scalar, ffi.Int)>>('DrawKeyPoints'); - late final _DrawKeyPoints = _DrawKeyPointsPtr.asFunction< - CvStatus Function(Mat, VecKeyPoint, Mat, Scalar, int)>(); + late final _Boost_ClosePtr = + _lookup)>>( + 'Boost_Close'); + late final _Boost_Close = + _Boost_ClosePtr.asFunction)>(); - CvStatus DrawMatches( - Mat img1, - VecKeyPoint kp1, - Mat img2, - VecKeyPoint kp2, - VecDMatch matches1to2, - Mat outImg, - Scalar matchesColor, - Scalar pointColor, - VecChar matchesMask, - int flags, + CvStatus Boost_Create( + ffi.Pointer rval, ) { - return _DrawMatches( - img1, - kp1, - img2, - kp2, - matches1to2, - outImg, - matchesColor, - pointColor, - matchesMask, - flags, + return _Boost_Create( + rval, ); } - late final _DrawMatchesPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, VecKeyPoint, Mat, VecKeyPoint, VecDMatch, Mat, - Scalar, Scalar, VecChar, ffi.Int)>>('DrawMatches'); - late final _DrawMatches = _DrawMatchesPtr.asFunction< - CvStatus Function(Mat, VecKeyPoint, Mat, VecKeyPoint, VecDMatch, Mat, - Scalar, Scalar, VecChar, int)>(); + late final _Boost_CreatePtr = + _lookup)>>( + 'Boost_Create'); + late final _Boost_Create = + _Boost_CreatePtr.asFunction)>(); - CvStatus EdgePreservingFilter( - Mat src, - Mat dst, - int filter, - double sigma_s, - double sigma_r, + CvStatus Boost_Get( + PtrBoost self, + ffi.Pointer rval, ) { - return _EdgePreservingFilter( - src, - dst, - filter, - sigma_s, - sigma_r, + return _Boost_Get( + self, + rval, ); } - late final _EdgePreservingFilterPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Float, - ffi.Float)>>('EdgePreservingFilter'); - late final _EdgePreservingFilter = _EdgePreservingFilterPtr.asFunction< - CvStatus Function(Mat, Mat, int, double, double)>(); + late final _Boost_GetPtr = _lookup< + ffi.NativeFunction)>>( + 'Boost_Get'); + late final _Boost_Get = _Boost_GetPtr.asFunction< + CvStatus Function(PtrBoost, ffi.Pointer)>(); - CvStatus Ellipse( - Mat img, - Point center, - Point axes, - double angle, - double startAngle, - double endAngle, - Scalar color, - int thickness, + CvStatus Boost_GetBoostType( + Boost self, + ffi.Pointer rval, ) { - return _Ellipse( - img, - center, - axes, - angle, - startAngle, - endAngle, - color, - thickness, + return _Boost_GetBoostType( + self, + rval, ); } - late final _EllipsePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Point, Point, ffi.Double, ffi.Double, - ffi.Double, Scalar, ffi.Int)>>('Ellipse'); - late final _Ellipse = _EllipsePtr.asFunction< - CvStatus Function( - Mat, Point, Point, double, double, double, Scalar, int)>(); + late final _Boost_GetBoostTypePtr = _lookup< + ffi.NativeFunction)>>( + 'Boost_GetBoostType'); + late final _Boost_GetBoostType = _Boost_GetBoostTypePtr.asFunction< + CvStatus Function(Boost, ffi.Pointer)>(); - CvStatus EllipseWithParams( - Mat img, - Point center, - Point axes, - double angle, - double startAngle, - double endAngle, - Scalar color, - int thickness, - int lineType, - int shift, + CvStatus Boost_GetWeakCount( + Boost self, + ffi.Pointer rval, ) { - return _EllipseWithParams( - img, - center, - axes, - angle, - startAngle, - endAngle, - color, - thickness, - lineType, - shift, + return _Boost_GetWeakCount( + self, + rval, ); } - late final _EllipseWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, - Point, - Point, - ffi.Double, - ffi.Double, - ffi.Double, - Scalar, - ffi.Int, - ffi.Int, - ffi.Int)>>('EllipseWithParams'); - late final _EllipseWithParams = _EllipseWithParamsPtr.asFunction< - CvStatus Function( - Mat, Point, Point, double, double, double, Scalar, int, int, int)>(); + late final _Boost_GetWeakCountPtr = _lookup< + ffi.NativeFunction)>>( + 'Boost_GetWeakCount'); + late final _Boost_GetWeakCount = _Boost_GetWeakCountPtr.asFunction< + CvStatus Function(Boost, ffi.Pointer)>(); - CvStatus EqualizeHist( - Mat src, - Mat dst, + CvStatus Boost_GetWeightTrimRate( + Boost self, + ffi.Pointer rval, ) { - return _EqualizeHist( - src, - dst, + return _Boost_GetWeightTrimRate( + self, + rval, ); } - late final _EqualizeHistPtr = - _lookup>('EqualizeHist'); - late final _EqualizeHist = - _EqualizeHistPtr.asFunction(); + late final _Boost_GetWeightTrimRatePtr = _lookup< + ffi + .NativeFunction)>>( + 'Boost_GetWeightTrimRate'); + late final _Boost_GetWeightTrimRate = _Boost_GetWeightTrimRatePtr.asFunction< + CvStatus Function(Boost, ffi.Pointer)>(); - CvStatus Erode( - Mat src, - Mat dst, - Mat kernel, + CvStatus Boost_Load( + Boost self, + ffi.Pointer filepath, ) { - return _Erode( - src, - dst, - kernel, + return _Boost_Load( + self, + filepath, ); } - late final _ErodePtr = - _lookup>('Erode'); - late final _Erode = _ErodePtr.asFunction(); + late final _Boost_LoadPtr = _lookup< + ffi.NativeFunction)>>( + 'Boost_Load'); + late final _Boost_Load = _Boost_LoadPtr.asFunction< + CvStatus Function(Boost, ffi.Pointer)>(); - CvStatus ErodeWithParams( - Mat src, - Mat dst, - Mat kernel, - Point anchor, - int iterations, - int borderType, - Scalar borderValue, + CvStatus Boost_LoadFromString( + Boost self, + ffi.Pointer strModel, + ffi.Pointer objname, ) { - return _ErodeWithParams( - src, - dst, - kernel, - anchor, - iterations, - borderType, - borderValue, + return _Boost_LoadFromString( + self, + strModel, + objname, ); } - late final _ErodeWithParamsPtr = _lookup< + late final _Boost_LoadFromStringPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, Point, ffi.Int, ffi.Int, - Scalar)>>('ErodeWithParams'); - late final _ErodeWithParams = _ErodeWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Point, int, int, Scalar)>(); + CvStatus Function(Boost, ffi.Pointer, + ffi.Pointer)>>('Boost_LoadFromString'); + late final _Boost_LoadFromString = _Boost_LoadFromStringPtr.asFunction< + CvStatus Function(Boost, ffi.Pointer, ffi.Pointer)>(); - CvStatus EstimateAffine2D( - VecPoint2f from, - VecPoint2f to, - ffi.Pointer rval, + CvStatus Boost_Predict( + Boost self, + Mat samples, + Mat results, + int flags, + ffi.Pointer rval, ) { - return _EstimateAffine2D( - from, - to, + return _Boost_Predict( + self, + samples, + results, + flags, rval, ); } - late final _EstimateAffine2DPtr = _lookup< + late final _Boost_PredictPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - VecPoint2f, VecPoint2f, ffi.Pointer)>>('EstimateAffine2D'); - late final _EstimateAffine2D = _EstimateAffine2DPtr.asFunction< - CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer)>(); + CvStatus Function(Boost, Mat, Mat, ffi.Int, + ffi.Pointer)>>('Boost_Predict'); + late final _Boost_Predict = _Boost_PredictPtr.asFunction< + CvStatus Function(Boost, Mat, Mat, int, ffi.Pointer)>(); - CvStatus EstimateAffine2DWithParams( - VecPoint2f from, - VecPoint2f to, - Mat inliers, - int method, - double ransacReprojThreshold, - int maxIters, - double confidence, - int refineIters, - ffi.Pointer rval, + CvStatus Boost_Save( + Boost self, + ffi.Pointer filename, ) { - return _EstimateAffine2DWithParams( - from, - to, - inliers, - method, - ransacReprojThreshold, - maxIters, - confidence, - refineIters, - rval, + return _Boost_Save( + self, + filename, ); } - late final _EstimateAffine2DWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - VecPoint2f, - VecPoint2f, - Mat, - ffi.Int, - ffi.Double, - ffi.Size, - ffi.Double, - ffi.Size, - ffi.Pointer)>>('EstimateAffine2DWithParams'); - late final _EstimateAffine2DWithParams = - _EstimateAffine2DWithParamsPtr.asFunction< - CvStatus Function(VecPoint2f, VecPoint2f, Mat, int, double, int, - double, int, ffi.Pointer)>(); + late final _Boost_SavePtr = _lookup< + ffi.NativeFunction)>>( + 'Boost_Save'); + late final _Boost_Save = _Boost_SavePtr.asFunction< + CvStatus Function(Boost, ffi.Pointer)>(); - CvStatus EstimateAffinePartial2D( - VecPoint2f from, - VecPoint2f to, - ffi.Pointer rval, + CvStatus Boost_SetBoostType( + Boost self, + int val, ) { - return _EstimateAffinePartial2D( - from, - to, - rval, + return _Boost_SetBoostType( + self, + val, ); } - late final _EstimateAffinePartial2DPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint2f, VecPoint2f, - ffi.Pointer)>>('EstimateAffinePartial2D'); - late final _EstimateAffinePartial2D = _EstimateAffinePartial2DPtr.asFunction< - CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer)>(); + late final _Boost_SetBoostTypePtr = + _lookup>( + 'Boost_SetBoostType'); + late final _Boost_SetBoostType = + _Boost_SetBoostTypePtr.asFunction(); - CvStatus EstimateAffinePartial2DWithParams( - VecPoint2f from, - VecPoint2f to, - Mat inliers, - int method, - double ransacReprojThreshold, - int maxIters, - double confidence, - int refineIters, - ffi.Pointer rval, + CvStatus Boost_SetWeakCount( + Boost self, + int val, ) { - return _EstimateAffinePartial2DWithParams( - from, - to, - inliers, - method, - ransacReprojThreshold, - maxIters, - confidence, - refineIters, - rval, + return _Boost_SetWeakCount( + self, + val, ); } - late final _EstimateAffinePartial2DWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - VecPoint2f, - VecPoint2f, - Mat, - ffi.Int, - ffi.Double, - ffi.Size, - ffi.Double, - ffi.Size, - ffi.Pointer)>>('EstimateAffinePartial2DWithParams'); - late final _EstimateAffinePartial2DWithParams = - _EstimateAffinePartial2DWithParamsPtr.asFunction< - CvStatus Function(VecPoint2f, VecPoint2f, Mat, int, double, int, - double, int, ffi.Pointer)>(); + late final _Boost_SetWeakCountPtr = + _lookup>( + 'Boost_SetWeakCount'); + late final _Boost_SetWeakCount = + _Boost_SetWeakCountPtr.asFunction(); - CvStatus Eye( - int rows, - int cols, - int type, - ffi.Pointer rval, + CvStatus Boost_SetWeightTrimRate( + Boost self, + double val, ) { - return _Eye( - rows, - cols, - type, - rval, + return _Boost_SetWeightTrimRate( + self, + val, ); } - late final _EyePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ffi.Int, ffi.Int, ffi.Int, ffi.Pointer)>>('Eye'); - late final _Eye = - _EyePtr.asFunction)>(); + late final _Boost_SetWeightTrimRatePtr = + _lookup>( + 'Boost_SetWeightTrimRate'); + late final _Boost_SetWeightTrimRate = _Boost_SetWeightTrimRatePtr.asFunction< + CvStatus Function(Boost, double)>(); - void FastFeatureDetector_Close( - ffi.Pointer f, + CvStatus Boost_Train( + Boost self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, ) { - return _FastFeatureDetector_Close( - f, + return _Boost_Train( + self, + trainData, + flags, + rval, ); } - late final _FastFeatureDetector_ClosePtr = _lookup< - ffi - .NativeFunction)>>( - 'FastFeatureDetector_Close'); - late final _FastFeatureDetector_Close = _FastFeatureDetector_ClosePtr - .asFunction)>(); + late final _Boost_TrainPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Boost, PtrTrainData, ffi.Int, + ffi.Pointer)>>('Boost_Train'); + late final _Boost_Train = _Boost_TrainPtr.asFunction< + CvStatus Function(Boost, PtrTrainData, int, ffi.Pointer)>(); - CvStatus FastFeatureDetector_Create( - ffi.Pointer rval, + CvStatus Boost_Train_1( + Boost self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _FastFeatureDetector_Create( + return _Boost_Train_1( + self, + samples, + layout, + responses, rval, ); } - late final _FastFeatureDetector_CreatePtr = _lookup< - ffi - .NativeFunction)>>( - 'FastFeatureDetector_Create'); - late final _FastFeatureDetector_Create = _FastFeatureDetector_CreatePtr - .asFunction)>(); + late final _Boost_Train_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Boost, Mat, ffi.Int, Mat, + ffi.Pointer)>>('Boost_Train_1'); + late final _Boost_Train_1 = _Boost_Train_1Ptr.asFunction< + CvStatus Function(Boost, Mat, int, Mat, ffi.Pointer)>(); - CvStatus FastFeatureDetector_CreateWithParams( - int threshold, - bool nonmaxSuppression, - int type, - ffi.Pointer rval, + CvStatus BoundingRect( + VecPoint pts, + ffi.Pointer rval, ) { - return _FastFeatureDetector_CreateWithParams( - threshold, - nonmaxSuppression, - type, + return _BoundingRect( + pts, rval, ); } - late final _FastFeatureDetector_CreateWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Bool, ffi.Int, - ffi.Pointer)>>( - 'FastFeatureDetector_CreateWithParams'); - late final _FastFeatureDetector_CreateWithParams = - _FastFeatureDetector_CreateWithParamsPtr.asFunction< - CvStatus Function( - int, bool, int, ffi.Pointer)>(); + late final _BoundingRectPtr = _lookup< + ffi.NativeFunction)>>( + 'BoundingRect'); + late final _BoundingRect = _BoundingRectPtr.asFunction< + CvStatus Function(VecPoint, ffi.Pointer)>(); - CvStatus FastFeatureDetector_Detect( - FastFeatureDetector f, + CvStatus BoxFilter( Mat src, - ffi.Pointer rval, + Mat dst, + int ddepth, + Size ps, ) { - return _FastFeatureDetector_Detect( - f, + return _BoxFilter( src, - rval, + dst, + ddepth, + ps, ); } - late final _FastFeatureDetector_DetectPtr = _lookup< + late final _BoxFilterPtr = + _lookup>( + 'BoxFilter'); + late final _BoxFilter = + _BoxFilterPtr.asFunction(); + + CvStatus BoxPoints( + RotatedRect rect, + ffi.Pointer boxPts, + ) { + return _BoxPoints( + rect, + boxPts, + ); + } + + late final _BoxPointsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(FastFeatureDetector, Mat, - ffi.Pointer)>>('FastFeatureDetector_Detect'); - late final _FastFeatureDetector_Detect = - _FastFeatureDetector_DetectPtr.asFunction< CvStatus Function( - FastFeatureDetector, Mat, ffi.Pointer)>(); + RotatedRect, ffi.Pointer)>>('BoxPoints'); + late final _BoxPoints = _BoxPointsPtr.asFunction< + CvStatus Function(RotatedRect, ffi.Pointer)>(); - CvStatus FastNlMeansDenoising( + CvStatus CLAHE_Apply( + CLAHE c, Mat src, Mat dst, ) { - return _FastNlMeansDenoising( + return _CLAHE_Apply( + c, src, dst, ); } - late final _FastNlMeansDenoisingPtr = - _lookup>( - 'FastNlMeansDenoising'); - late final _FastNlMeansDenoising = - _FastNlMeansDenoisingPtr.asFunction(); + late final _CLAHE_ApplyPtr = + _lookup>( + 'CLAHE_Apply'); + late final _CLAHE_Apply = + _CLAHE_ApplyPtr.asFunction(); - CvStatus FastNlMeansDenoisingColored( - Mat src, - Mat dst, + void CLAHE_Close( + ffi.Pointer c, ) { - return _FastNlMeansDenoisingColored( - src, - dst, + return _CLAHE_Close( + c, ); } - late final _FastNlMeansDenoisingColoredPtr = - _lookup>( - 'FastNlMeansDenoisingColored'); - late final _FastNlMeansDenoisingColored = - _FastNlMeansDenoisingColoredPtr.asFunction(); + late final _CLAHE_ClosePtr = + _lookup)>>( + 'CLAHE_Close'); + late final _CLAHE_Close = + _CLAHE_ClosePtr.asFunction)>(); - CvStatus FastNlMeansDenoisingColoredMulti( - VecMat src, - Mat dst, - int imgToDenoiseIndex, - int temporalWindowSize, + CvStatus CLAHE_CollectGarbage( + CLAHE c, ) { - return _FastNlMeansDenoisingColoredMulti( - src, - dst, - imgToDenoiseIndex, - temporalWindowSize, + return _CLAHE_CollectGarbage( + c, ); } - late final _FastNlMeansDenoisingColoredMultiPtr = _lookup< - ffi.NativeFunction>( - 'FastNlMeansDenoisingColoredMulti'); - late final _FastNlMeansDenoisingColoredMulti = - _FastNlMeansDenoisingColoredMultiPtr.asFunction< - CvStatus Function(VecMat, Mat, int, int)>(); + late final _CLAHE_CollectGarbagePtr = + _lookup>( + 'CLAHE_CollectGarbage'); + late final _CLAHE_CollectGarbage = + _CLAHE_CollectGarbagePtr.asFunction(); - CvStatus FastNlMeansDenoisingColoredMultiWithParams( - VecMat src, - Mat dst, - int imgToDenoiseIndex, - int temporalWindowSize, - double h, - double hColor, - int templateWindowSize, - int searchWindowSize, + CvStatus CLAHE_Create( + ffi.Pointer rval, ) { - return _FastNlMeansDenoisingColoredMultiWithParams( - src, - dst, - imgToDenoiseIndex, - temporalWindowSize, - h, - hColor, - templateWindowSize, - searchWindowSize, + return _CLAHE_Create( + rval, ); } - late final _FastNlMeansDenoisingColoredMultiWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecMat, Mat, ffi.Int, ffi.Int, ffi.Float, ffi.Float, - ffi.Int, ffi.Int)>>('FastNlMeansDenoisingColoredMultiWithParams'); - late final _FastNlMeansDenoisingColoredMultiWithParams = - _FastNlMeansDenoisingColoredMultiWithParamsPtr.asFunction< - CvStatus Function(VecMat, Mat, int, int, double, double, int, int)>(); + late final _CLAHE_CreatePtr = + _lookup)>>( + 'CLAHE_Create'); + late final _CLAHE_Create = + _CLAHE_CreatePtr.asFunction)>(); - CvStatus FastNlMeansDenoisingColoredWithParams( - Mat src, - Mat dst, - double h, - double hColor, - int templateWindowSize, - int searchWindowSize, + CvStatus CLAHE_CreateWithParams( + double clipLimit, + Size tileGridSize, + ffi.Pointer rval, ) { - return _FastNlMeansDenoisingColoredWithParams( - src, - dst, - h, - hColor, - templateWindowSize, - searchWindowSize, + return _CLAHE_CreateWithParams( + clipLimit, + tileGridSize, + rval, ); } - late final _FastNlMeansDenoisingColoredWithParamsPtr = _lookup< + late final _CLAHE_CreateWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Float, ffi.Float, ffi.Int, - ffi.Int)>>('FastNlMeansDenoisingColoredWithParams'); - late final _FastNlMeansDenoisingColoredWithParams = - _FastNlMeansDenoisingColoredWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, double, double, int, int)>(); + CvStatus Function( + ffi.Double, Size, ffi.Pointer)>>('CLAHE_CreateWithParams'); + late final _CLAHE_CreateWithParams = _CLAHE_CreateWithParamsPtr.asFunction< + CvStatus Function(double, Size, ffi.Pointer)>(); - CvStatus FastNlMeansDenoisingWithParams( - Mat src, - Mat dst, - double h, - int templateWindowSize, - int searchWindowSize, + CvStatus CLAHE_GetClipLimit( + CLAHE c, + ffi.Pointer rval, ) { - return _FastNlMeansDenoisingWithParams( - src, - dst, - h, - templateWindowSize, - searchWindowSize, + return _CLAHE_GetClipLimit( + c, + rval, ); } - late final _FastNlMeansDenoisingWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Float, ffi.Int, - ffi.Int)>>('FastNlMeansDenoisingWithParams'); - late final _FastNlMeansDenoisingWithParams = - _FastNlMeansDenoisingWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, double, int, int)>(); + late final _CLAHE_GetClipLimitPtr = _lookup< + ffi + .NativeFunction)>>( + 'CLAHE_GetClipLimit'); + late final _CLAHE_GetClipLimit = _CLAHE_GetClipLimitPtr.asFunction< + CvStatus Function(CLAHE, ffi.Pointer)>(); - CvStatus FillPoly( - Mat img, - VecVecPoint points, - Scalar color, + CvStatus CLAHE_GetTilesGridSize( + CLAHE c, + ffi.Pointer rval, ) { - return _FillPoly( - img, - points, - color, + return _CLAHE_GetTilesGridSize( + c, + rval, ); } - late final _FillPolyPtr = - _lookup>( - 'FillPoly'); - late final _FillPoly = - _FillPolyPtr.asFunction(); + late final _CLAHE_GetTilesGridSizePtr = + _lookup)>>( + 'CLAHE_GetTilesGridSize'); + late final _CLAHE_GetTilesGridSize = _CLAHE_GetTilesGridSizePtr.asFunction< + CvStatus Function(CLAHE, ffi.Pointer)>(); - CvStatus FillPolyWithParams( - Mat img, - VecVecPoint points, - Scalar color, - int lineType, - int shift, - Point offset, + CvStatus CLAHE_SetClipLimit( + CLAHE c, + double clipLimit, ) { - return _FillPolyWithParams( - img, - points, - color, - lineType, - shift, - offset, + return _CLAHE_SetClipLimit( + c, + clipLimit, ); } - late final _FillPolyWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, VecVecPoint, Scalar, ffi.Int, ffi.Int, - Point)>>('FillPolyWithParams'); - late final _FillPolyWithParams = _FillPolyWithParamsPtr.asFunction< - CvStatus Function(Mat, VecVecPoint, Scalar, int, int, Point)>(); + late final _CLAHE_SetClipLimitPtr = + _lookup>( + 'CLAHE_SetClipLimit'); + late final _CLAHE_SetClipLimit = + _CLAHE_SetClipLimitPtr.asFunction(); - CvStatus Filter2D( - Mat src, - Mat dst, - int ddepth, - Mat kernel, - Point anchor, - double delta, - int borderType, + CvStatus CLAHE_SetTilesGridSize( + CLAHE c, + Size size, ) { - return _Filter2D( - src, - dst, - ddepth, - kernel, - anchor, - delta, - borderType, + return _CLAHE_SetTilesGridSize( + c, + size, ); } - late final _Filter2DPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Int, Mat, Point, ffi.Double, ffi.Int)>>('Filter2D'); - late final _Filter2D = _Filter2DPtr.asFunction< - CvStatus Function(Mat, Mat, int, Mat, Point, double, int)>(); + late final _CLAHE_SetTilesGridSizePtr = + _lookup>( + 'CLAHE_SetTilesGridSize'); + late final _CLAHE_SetTilesGridSize = + _CLAHE_SetTilesGridSizePtr.asFunction(); - CvStatus FindChessboardCorners( - Mat image, - Size patternSize, - Mat corners, - int flags, - ffi.Pointer rval, + CvStatus CalcBackProject( + VecMat mats, + VecInt chans, + Mat hist, + Mat backProject, + VecFloat rng, + bool uniform, ) { - return _FindChessboardCorners( - image, - patternSize, - corners, - flags, - rval, + return _CalcBackProject( + mats, + chans, + hist, + backProject, + rng, + uniform, ); } - late final _FindChessboardCornersPtr = _lookup< + late final _CalcBackProjectPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Size, Mat, ffi.Int, - ffi.Pointer)>>('FindChessboardCorners'); - late final _FindChessboardCorners = _FindChessboardCornersPtr.asFunction< - CvStatus Function(Mat, Size, Mat, int, ffi.Pointer)>(); + CvStatus Function(VecMat, VecInt, Mat, Mat, VecFloat, + ffi.Bool)>>('CalcBackProject'); + late final _CalcBackProject = _CalcBackProjectPtr.asFunction< + CvStatus Function(VecMat, VecInt, Mat, Mat, VecFloat, bool)>(); - CvStatus FindChessboardCornersSB( - Mat image, - Size patternSize, - Mat corners, - int flags, - ffi.Pointer rval, + CvStatus CalcHist( + VecMat mats, + VecInt chans, + Mat mask, + Mat hist, + VecInt sz, + VecFloat rng, + bool acc, ) { - return _FindChessboardCornersSB( - image, - patternSize, - corners, - flags, - rval, + return _CalcHist( + mats, + chans, + mask, + hist, + sz, + rng, + acc, ); } - late final _FindChessboardCornersSBPtr = _lookup< + late final _CalcHistPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Size, Mat, ffi.Int, - ffi.Pointer)>>('FindChessboardCornersSB'); - late final _FindChessboardCornersSB = _FindChessboardCornersSBPtr.asFunction< - CvStatus Function(Mat, Size, Mat, int, ffi.Pointer)>(); + CvStatus Function(VecMat, VecInt, Mat, Mat, VecInt, VecFloat, + ffi.Bool)>>('CalcHist'); + late final _CalcHist = _CalcHistPtr.asFunction< + CvStatus Function(VecMat, VecInt, Mat, Mat, VecInt, VecFloat, bool)>(); - CvStatus FindChessboardCornersSBWithMeta( - Mat image, - Size patternSize, - Mat corners, + CvStatus CalcOpticalFlowFarneback( + Mat prevImg, + Mat nextImg, + Mat flow, + double pyrScale, + int levels, + int winsize, + int iterations, + int polyN, + double polySigma, int flags, - Mat meta, - ffi.Pointer rval, ) { - return _FindChessboardCornersSBWithMeta( - image, - patternSize, - corners, + return _CalcOpticalFlowFarneback( + prevImg, + nextImg, + flow, + pyrScale, + levels, + winsize, + iterations, + polyN, + polySigma, flags, - meta, - rval, ); } - late final _FindChessboardCornersSBWithMetaPtr = _lookup< + late final _CalcOpticalFlowFarnebackPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Size, Mat, ffi.Int, Mat, - ffi.Pointer)>>('FindChessboardCornersSBWithMeta'); - late final _FindChessboardCornersSBWithMeta = - _FindChessboardCornersSBWithMetaPtr.asFunction< - CvStatus Function(Mat, Size, Mat, int, Mat, ffi.Pointer)>(); + CvStatus Function( + Mat, + Mat, + Mat, + ffi.Double, + ffi.Int, + ffi.Int, + ffi.Int, + ffi.Int, + ffi.Double, + ffi.Int)>>('CalcOpticalFlowFarneback'); + late final _CalcOpticalFlowFarneback = + _CalcOpticalFlowFarnebackPtr.asFunction< + CvStatus Function( + Mat, Mat, Mat, double, int, int, int, int, double, int)>(); - CvStatus FindContours( - Mat src, - Mat hierarchy, - int mode, - int method, - ffi.Pointer rval, + CvStatus CalcOpticalFlowPyrLK( + Mat prevImg, + Mat nextImg, + VecPoint2f prevPts, + VecPoint2f nextPts, + VecUChar status, + VecFloat err, ) { - return _FindContours( - src, - hierarchy, - mode, - method, - rval, + return _CalcOpticalFlowPyrLK( + prevImg, + nextImg, + prevPts, + nextPts, + status, + err, ); } - late final _FindContoursPtr = _lookup< + late final _CalcOpticalFlowPyrLKPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, - ffi.Pointer)>>('FindContours'); - late final _FindContours = _FindContoursPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, ffi.Pointer)>(); + CvStatus Function(Mat, Mat, VecPoint2f, VecPoint2f, VecUChar, + VecFloat)>>('CalcOpticalFlowPyrLK'); + late final _CalcOpticalFlowPyrLK = _CalcOpticalFlowPyrLKPtr.asFunction< + CvStatus Function( + Mat, Mat, VecPoint2f, VecPoint2f, VecUChar, VecFloat)>(); - CvStatus FindHomography( - Mat src, - Mat dst, - int method, - double ransacReprojThreshold, - Mat mask, - int maxIters, - double confidence, - ffi.Pointer rval, + CvStatus CalcOpticalFlowPyrLKWithParams( + Mat prevImg, + Mat nextImg, + VecPoint2f prevPts, + VecPoint2f nextPts, + VecUChar status, + VecFloat err, + Size winSize, + int maxLevel, + TermCriteria criteria, + int flags, + double minEigThreshold, ) { - return _FindHomography( - src, - dst, - method, - ransacReprojThreshold, - mask, - maxIters, - confidence, - rval, + return _CalcOpticalFlowPyrLKWithParams( + prevImg, + nextImg, + prevPts, + nextPts, + status, + err, + winSize, + maxLevel, + criteria, + flags, + minEigThreshold, ); } - late final _FindHomographyPtr = _lookup< + late final _CalcOpticalFlowPyrLKWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Double, Mat, ffi.Int, - ffi.Double, ffi.Pointer)>>('FindHomography'); - late final _FindHomography = _FindHomographyPtr.asFunction< - CvStatus Function( - Mat, Mat, int, double, Mat, int, double, ffi.Pointer)>(); + CvStatus Function( + Mat, + Mat, + VecPoint2f, + VecPoint2f, + VecUChar, + VecFloat, + Size, + ffi.Int, + TermCriteria, + ffi.Int, + ffi.Double)>>('CalcOpticalFlowPyrLKWithParams'); + late final _CalcOpticalFlowPyrLKWithParams = + _CalcOpticalFlowPyrLKWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, VecPoint2f, VecPoint2f, VecUChar, + VecFloat, Size, int, TermCriteria, int, double)>(); - CvStatus FindTransformECC( - Mat templateImage, - Mat inputImage, - Mat warpMatrix, - int motionType, + CvStatus CalibrateCamera( + VecVecPoint3f objectPoints, + VecVecPoint2f imagePoints, + Size imageSize, + Mat cameraMatrix, + Mat distCoeffs, + Mat rvecs, + Mat tvecs, + int flag, TermCriteria criteria, - Mat inputMask, - int gaussFiltSize, ffi.Pointer rval, ) { - return _FindTransformECC( - templateImage, - inputImage, - warpMatrix, - motionType, + return _CalibrateCamera( + objectPoints, + imagePoints, + imageSize, + cameraMatrix, + distCoeffs, + rvecs, + tvecs, + flag, criteria, - inputMask, - gaussFiltSize, rval, ); } - late final _FindTransformECCPtr = _lookup< + late final _CalibrateCameraPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, ffi.Int, TermCriteria, Mat, ffi.Int, - ffi.Pointer)>>('FindTransformECC'); - late final _FindTransformECC = _FindTransformECCPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, int, TermCriteria, Mat, int, - ffi.Pointer)>(); - - CvStatus Fisheye_EstimateNewCameraMatrixForUndistortRectify( - Mat k, - Mat d, - Size imgSize, - Mat r, - Mat p, - double balance, - Size newSize, - double fovScale, - ) { - return _Fisheye_EstimateNewCameraMatrixForUndistortRectify( - k, - d, - imgSize, - r, - p, - balance, - newSize, - fovScale, - ); - } - - late final _Fisheye_EstimateNewCameraMatrixForUndistortRectifyPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Size, Mat, Mat, ffi.Double, Size, ffi.Double)>>( - 'Fisheye_EstimateNewCameraMatrixForUndistortRectify'); - late final _Fisheye_EstimateNewCameraMatrixForUndistortRectify = - _Fisheye_EstimateNewCameraMatrixForUndistortRectifyPtr.asFunction< - CvStatus Function(Mat, Mat, Size, Mat, Mat, double, Size, double)>(); + CvStatus Function( + VecVecPoint3f, + VecVecPoint2f, + Size, + Mat, + Mat, + Mat, + Mat, + ffi.Int, + TermCriteria, + ffi.Pointer)>>('CalibrateCamera'); + late final _CalibrateCamera = _CalibrateCameraPtr.asFunction< + CvStatus Function(VecVecPoint3f, VecVecPoint2f, Size, Mat, Mat, Mat, Mat, + int, TermCriteria, ffi.Pointer)>(); - CvStatus Fisheye_UndistortImage( - Mat distorted, - Mat undistorted, - Mat k, - Mat d, + CvStatus Canny( + Mat src, + Mat edges, + double t1, + double t2, + int apertureSize, + bool l2gradient, ) { - return _Fisheye_UndistortImage( - distorted, - undistorted, - k, - d, + return _Canny( + src, + edges, + t1, + t2, + apertureSize, + l2gradient, ); } - late final _Fisheye_UndistortImagePtr = - _lookup>( - 'Fisheye_UndistortImage'); - late final _Fisheye_UndistortImage = _Fisheye_UndistortImagePtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat)>(); + late final _CannyPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, ffi.Double, ffi.Double, ffi.Int, ffi.Bool)>>('Canny'); + late final _Canny = _CannyPtr.asFunction< + CvStatus Function(Mat, Mat, double, double, int, bool)>(); - CvStatus Fisheye_UndistortImageWithParams( - Mat distorted, - Mat undistorted, - Mat k, - Mat d, - Mat knew, - Size size, + void CascadeClassifier_Close( + ffi.Pointer cs, ) { - return _Fisheye_UndistortImageWithParams( - distorted, - undistorted, - k, - d, - knew, - size, + return _CascadeClassifier_Close( + cs, ); } - late final _Fisheye_UndistortImageWithParamsPtr = _lookup< - ffi.NativeFunction>( - 'Fisheye_UndistortImageWithParams'); - late final _Fisheye_UndistortImageWithParams = - _Fisheye_UndistortImageWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat, Mat, Size)>(); + late final _CascadeClassifier_ClosePtr = _lookup< + ffi + .NativeFunction)>>( + 'CascadeClassifier_Close'); + late final _CascadeClassifier_Close = _CascadeClassifier_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus Fisheye_UndistortPoints( - Mat distorted, - Mat undistorted, - Mat k, - Mat d, - Mat R, - Mat P, + CvStatus CascadeClassifier_DetectMultiScale( + CascadeClassifier cs, + Mat img, + ffi.Pointer rval, ) { - return _Fisheye_UndistortPoints( - distorted, - undistorted, - k, - d, - R, - P, + return _CascadeClassifier_DetectMultiScale( + cs, + img, + rval, ); } - late final _Fisheye_UndistortPointsPtr = _lookup< - ffi.NativeFunction>( - 'Fisheye_UndistortPoints'); - late final _Fisheye_UndistortPoints = _Fisheye_UndistortPointsPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat, Mat, Mat)>(); + late final _CascadeClassifier_DetectMultiScalePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(CascadeClassifier, Mat, + ffi.Pointer)>>('CascadeClassifier_DetectMultiScale'); + late final _CascadeClassifier_DetectMultiScale = + _CascadeClassifier_DetectMultiScalePtr.asFunction< + CvStatus Function(CascadeClassifier, Mat, ffi.Pointer)>(); - CvStatus FitEllipse( - VecPoint pts, - ffi.Pointer rval, + CvStatus CascadeClassifier_DetectMultiScaleWithParams( + CascadeClassifier cs, + Mat img, + double scale, + int minNeighbors, + int flags, + Size minSize, + Size maxSize, + ffi.Pointer rval, ) { - return _FitEllipse( - pts, + return _CascadeClassifier_DetectMultiScaleWithParams( + cs, + img, + scale, + minNeighbors, + flags, + minSize, + maxSize, rval, ); } - late final _FitEllipsePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint, ffi.Pointer)>>('FitEllipse'); - late final _FitEllipse = _FitEllipsePtr.asFunction< - CvStatus Function(VecPoint, ffi.Pointer)>(); + late final _CascadeClassifier_DetectMultiScaleWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(CascadeClassifier, Mat, ffi.Double, ffi.Int, + ffi.Int, Size, Size, ffi.Pointer)>>( + 'CascadeClassifier_DetectMultiScaleWithParams'); + late final _CascadeClassifier_DetectMultiScaleWithParams = + _CascadeClassifier_DetectMultiScaleWithParamsPtr.asFunction< + CvStatus Function(CascadeClassifier, Mat, double, int, int, Size, + Size, ffi.Pointer)>(); - CvStatus FitLine( - VecPoint pts, - Mat line, - int distType, - double param, - double reps, - double aeps, + CvStatus CascadeClassifier_Load( + CascadeClassifier cs, + ffi.Pointer name, + ffi.Pointer rval, ) { - return _FitLine( - pts, - line, - distType, - param, - reps, - aeps, + return _CascadeClassifier_Load( + cs, + name, + rval, ); } - late final _FitLinePtr = _lookup< + late final _CascadeClassifier_LoadPtr = _lookup< ffi.NativeFunction< - CvStatus Function(VecPoint, Mat, ffi.Int, ffi.Double, ffi.Double, - ffi.Double)>>('FitLine'); - late final _FitLine = _FitLinePtr.asFunction< - CvStatus Function(VecPoint, Mat, int, double, double, double)>(); + CvStatus Function(CascadeClassifier, ffi.Pointer, + ffi.Pointer)>>('CascadeClassifier_Load'); + late final _CascadeClassifier_Load = _CascadeClassifier_LoadPtr.asFunction< + CvStatus Function( + CascadeClassifier, ffi.Pointer, ffi.Pointer)>(); - void FlannBasedMatcher_Close( - ffi.Pointer f, + CvStatus CascadeClassifier_New( + ffi.Pointer rval, ) { - return _FlannBasedMatcher_Close( - f, + return _CascadeClassifier_New( + rval, ); } - late final _FlannBasedMatcher_ClosePtr = _lookup< + late final _CascadeClassifier_NewPtr = _lookup< ffi - .NativeFunction)>>( - 'FlannBasedMatcher_Close'); - late final _FlannBasedMatcher_Close = _FlannBasedMatcher_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + .NativeFunction)>>( + 'CascadeClassifier_New'); + late final _CascadeClassifier_New = _CascadeClassifier_NewPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus FlannBasedMatcher_Create( - ffi.Pointer rval, + CvStatus Circle( + Mat img, + Point center, + int radius, + Scalar color, + int thickness, ) { - return _FlannBasedMatcher_Create( - rval, + return _Circle( + img, + center, + radius, + color, + thickness, ); } - late final _FlannBasedMatcher_CreatePtr = _lookup< - ffi - .NativeFunction)>>( - 'FlannBasedMatcher_Create'); - late final _FlannBasedMatcher_Create = _FlannBasedMatcher_CreatePtr - .asFunction)>(); + late final _CirclePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Point, ffi.Int, Scalar, ffi.Int)>>('Circle'); + late final _Circle = + _CirclePtr.asFunction(); - CvStatus FlannBasedMatcher_KnnMatch( - FlannBasedMatcher f, - Mat query, - Mat train, - int k, - ffi.Pointer rval, + CvStatus CircleWithParams( + Mat img, + Point center, + int radius, + Scalar color, + int thickness, + int lineType, + int shift, ) { - return _FlannBasedMatcher_KnnMatch( - f, - query, - train, - k, - rval, + return _CircleWithParams( + img, + center, + radius, + color, + thickness, + lineType, + shift, ); } - late final _FlannBasedMatcher_KnnMatchPtr = _lookup< + late final _CircleWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(FlannBasedMatcher, Mat, Mat, ffi.Int, - ffi.Pointer)>>('FlannBasedMatcher_KnnMatch'); - late final _FlannBasedMatcher_KnnMatch = - _FlannBasedMatcher_KnnMatchPtr.asFunction< - CvStatus Function( - FlannBasedMatcher, Mat, Mat, int, ffi.Pointer)>(); - - void GFTTDetector_Close( - ffi.Pointer a, - ) { - return _GFTTDetector_Close( - a, - ); - } - - late final _GFTTDetector_ClosePtr = - _lookup)>>( - 'GFTTDetector_Close'); - late final _GFTTDetector_Close = _GFTTDetector_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + CvStatus Function(Mat, Point, ffi.Int, Scalar, ffi.Int, ffi.Int, + ffi.Int)>>('CircleWithParams'); + late final _CircleWithParams = _CircleWithParamsPtr.asFunction< + CvStatus Function(Mat, Point, int, Scalar, int, int, int)>(); - CvStatus GFTTDetector_Create( - ffi.Pointer rval, + CvStatus ClipLine( + Rect imgRect, + Point pt1, + Point pt2, + ffi.Pointer rval, ) { - return _GFTTDetector_Create( + return _ClipLine( + imgRect, + pt1, + pt2, rval, ); } - late final _GFTTDetector_CreatePtr = - _lookup)>>( - 'GFTTDetector_Create'); - late final _GFTTDetector_Create = _GFTTDetector_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ClipLinePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Rect, Point, Point, ffi.Pointer)>>('ClipLine'); + late final _ClipLine = _ClipLinePtr.asFunction< + CvStatus Function(Rect, Point, Point, ffi.Pointer)>(); - CvStatus GFTTDetector_Detect( - GFTTDetector a, + CvStatus ColorChange( Mat src, - ffi.Pointer rval, + Mat mask, + Mat dst, + double red_mul, + double green_mul, + double blue_mul, ) { - return _GFTTDetector_Detect( - a, + return _ColorChange( src, - rval, + mask, + dst, + red_mul, + green_mul, + blue_mul, ); } - late final _GFTTDetector_DetectPtr = _lookup< + late final _ColorChangePtr = _lookup< ffi.NativeFunction< - CvStatus Function(GFTTDetector, Mat, - ffi.Pointer)>>('GFTTDetector_Detect'); - late final _GFTTDetector_Detect = _GFTTDetector_DetectPtr.asFunction< - CvStatus Function(GFTTDetector, Mat, ffi.Pointer)>(); + CvStatus Function( + Mat, Mat, Mat, ffi.Float, ffi.Float, ffi.Float)>>('ColorChange'); + late final _ColorChange = _ColorChangePtr.asFunction< + CvStatus Function(Mat, Mat, Mat, double, double, double)>(); - CvStatus GaussianBlur( - Mat src, - Mat dst, - Size ps, - double sX, - double sY, - int bt, + CvStatus CompareHist( + Mat hist1, + Mat hist2, + int method, + ffi.Pointer rval, ) { - return _GaussianBlur( - src, - dst, - ps, - sX, - sY, - bt, + return _CompareHist( + hist1, + hist2, + method, + rval, ); } - late final _GaussianBlurPtr = _lookup< + late final _CompareHistPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, Size, ffi.Double, ffi.Double, - ffi.Int)>>('GaussianBlur'); - late final _GaussianBlur = _GaussianBlurPtr.asFunction< - CvStatus Function(Mat, Mat, Size, double, double, int)>(); + CvStatus Function( + Mat, Mat, ffi.Int, ffi.Pointer)>>('CompareHist'); + late final _CompareHist = _CompareHistPtr.asFunction< + CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); - CvStatus GetAffineTransform( - VecPoint src, - VecPoint dst, - ffi.Pointer rval, + CvStatus ConnectedComponents( + Mat src, + Mat dst, + int connectivity, + int ltype, + int ccltype, + ffi.Pointer rval, ) { - return _GetAffineTransform( + return _ConnectedComponents( src, dst, + connectivity, + ltype, + ccltype, rval, ); } - late final _GetAffineTransformPtr = _lookup< + late final _ConnectedComponentsPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - VecPoint, VecPoint, ffi.Pointer)>>('GetAffineTransform'); - late final _GetAffineTransform = _GetAffineTransformPtr.asFunction< - CvStatus Function(VecPoint, VecPoint, ffi.Pointer)>(); + CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('ConnectedComponents'); + late final _ConnectedComponents = _ConnectedComponentsPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, int, ffi.Pointer)>(); - CvStatus GetAffineTransform2f( - VecPoint2f src, - VecPoint2f dst, - ffi.Pointer rval, + CvStatus ConnectedComponentsWithStats( + Mat src, + Mat labels, + Mat stats, + Mat centroids, + int connectivity, + int ltype, + int ccltype, + ffi.Pointer rval, ) { - return _GetAffineTransform2f( + return _ConnectedComponentsWithStats( src, - dst, + labels, + stats, + centroids, + connectivity, + ltype, + ccltype, rval, ); } - late final _GetAffineTransform2fPtr = _lookup< + late final _ConnectedComponentsWithStatsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(VecPoint2f, VecPoint2f, - ffi.Pointer)>>('GetAffineTransform2f'); - late final _GetAffineTransform2f = _GetAffineTransform2fPtr.asFunction< - CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer)>(); + CvStatus Function(Mat, Mat, Mat, Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('ConnectedComponentsWithStats'); + late final _ConnectedComponentsWithStats = + _ConnectedComponentsWithStatsPtr.asFunction< + CvStatus Function( + Mat, Mat, Mat, Mat, int, int, int, ffi.Pointer)>(); - CvStatus GetCVTickCount( - ffi.Pointer rval, + CvStatus ContourArea( + VecPoint pts, + ffi.Pointer rval, ) { - return _GetCVTickCount( + return _ContourArea( + pts, rval, ); } - late final _GetCVTickCountPtr = - _lookup)>>( - 'GetCVTickCount'); - late final _GetCVTickCount = _GetCVTickCountPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ContourAreaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint, ffi.Pointer)>>('ContourArea'); + late final _ContourArea = _ContourAreaPtr.asFunction< + CvStatus Function(VecPoint, ffi.Pointer)>(); - CvStatus GetGaussianKernel( - int ksize, - double sigma, - int ktype, - ffi.Pointer rval, + CvStatus ConvexHull( + VecPoint points, + Mat hull, + bool clockwise, + bool returnPoints, ) { - return _GetGaussianKernel( - ksize, - sigma, - ktype, - rval, + return _ConvexHull( + points, + hull, + clockwise, + returnPoints, ); } - late final _GetGaussianKernelPtr = _lookup< + late final _ConvexHullPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Double, ffi.Int, - ffi.Pointer)>>('GetGaussianKernel'); - late final _GetGaussianKernel = _GetGaussianKernelPtr.asFunction< - CvStatus Function(int, double, int, ffi.Pointer)>(); + CvStatus Function(VecPoint, Mat, ffi.Bool, ffi.Bool)>>('ConvexHull'); + late final _ConvexHull = + _ConvexHullPtr.asFunction(); - CvStatus GetNumThreads( - ffi.Pointer rval, + CvStatus ConvexityDefects( + VecPoint points, + Mat hull, + Mat result, ) { - return _GetNumThreads( - rval, + return _ConvexityDefects( + points, + hull, + result, ); } - late final _GetNumThreadsPtr = - _lookup)>>( - 'GetNumThreads'); - late final _GetNumThreads = - _GetNumThreadsPtr.asFunction)>(); + late final _ConvexityDefectsPtr = + _lookup>( + 'ConvexityDefects'); + late final _ConvexityDefects = + _ConvexityDefectsPtr.asFunction(); - CvStatus GetOptimalNewCameraMatrixWithParams( - Mat cameraMatrix, - Mat distCoeffs, - Size size, - double alpha, - Size newImgSize, - ffi.Pointer validPixROI, - bool centerPrincipalPoint, - ffi.Pointer rval, + CvStatus CornerSubPix( + Mat img, + VecPoint2f corners, + Size winSize, + Size zeroZone, + TermCriteria criteria, ) { - return _GetOptimalNewCameraMatrixWithParams( - cameraMatrix, - distCoeffs, - size, - alpha, - newImgSize, - validPixROI, - centerPrincipalPoint, - rval, + return _CornerSubPix( + img, + corners, + winSize, + zeroZone, + criteria, ); } - late final _GetOptimalNewCameraMatrixWithParamsPtr = _lookup< + late final _CornerSubPixPtr = _lookup< ffi.NativeFunction< CvStatus Function( - Mat, - Mat, - Size, - ffi.Double, - Size, - ffi.Pointer, - ffi.Bool, - ffi.Pointer)>>('GetOptimalNewCameraMatrixWithParams'); - late final _GetOptimalNewCameraMatrixWithParams = - _GetOptimalNewCameraMatrixWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, Size, double, Size, ffi.Pointer, - bool, ffi.Pointer)>(); + Mat, VecPoint2f, Size, Size, TermCriteria)>>('CornerSubPix'); + late final _CornerSubPix = _CornerSubPixPtr.asFunction< + CvStatus Function(Mat, VecPoint2f, Size, Size, TermCriteria)>(); - CvStatus GetPerspectiveTransform( - VecPoint src, - VecPoint dst, - ffi.Pointer rval, - int solveMethod, + CvStatus CvtColor( + Mat src, + Mat dst, + int code, ) { - return _GetPerspectiveTransform( + return _CvtColor( src, dst, + code, + ); + } + + late final _CvtColorPtr = + _lookup>( + 'CvtColor'); + late final _CvtColor = + _CvtColorPtr.asFunction(); + + CvStatus DTrees_Clear( + DTrees self, + ) { + return _DTrees_Clear( + self, + ); + } + + late final _DTrees_ClearPtr = + _lookup>('DTrees_Clear'); + late final _DTrees_Clear = + _DTrees_ClearPtr.asFunction(); + + void DTrees_Close( + ffi.Pointer self, + ) { + return _DTrees_Close( + self, + ); + } + + late final _DTrees_ClosePtr = + _lookup)>>( + 'DTrees_Close'); + late final _DTrees_Close = + _DTrees_ClosePtr.asFunction)>(); + + CvStatus DTrees_Create( + ffi.Pointer rval, + ) { + return _DTrees_Create( rval, - solveMethod, ); } - late final _GetPerspectiveTransformPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint, VecPoint, ffi.Pointer, - ffi.Int)>>('GetPerspectiveTransform'); - late final _GetPerspectiveTransform = _GetPerspectiveTransformPtr.asFunction< - CvStatus Function(VecPoint, VecPoint, ffi.Pointer, int)>(); + late final _DTrees_CreatePtr = + _lookup)>>( + 'DTrees_Create'); + late final _DTrees_Create = + _DTrees_CreatePtr.asFunction)>(); - CvStatus GetPerspectiveTransform2f( - VecPoint2f src, - VecPoint2f dst, - ffi.Pointer rval, - int solveMethod, + CvStatus DTrees_Get( + PtrDTrees self, + ffi.Pointer rval, ) { - return _GetPerspectiveTransform2f( - src, - dst, + return _DTrees_Get( + self, rval, - solveMethod, ); } - late final _GetPerspectiveTransform2fPtr = _lookup< + late final _DTrees_GetPtr = _lookup< ffi.NativeFunction< - CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer, - ffi.Int)>>('GetPerspectiveTransform2f'); - late final _GetPerspectiveTransform2f = - _GetPerspectiveTransform2fPtr.asFunction< - CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer, int)>(); + CvStatus Function(PtrDTrees, ffi.Pointer)>>('DTrees_Get'); + late final _DTrees_Get = _DTrees_GetPtr.asFunction< + CvStatus Function(PtrDTrees, ffi.Pointer)>(); - CvStatus GetRectSubPix( - Mat src, - Size patchSize, - Point2f center, - Mat dst, + CvStatus DTrees_GetCVFolds( + DTrees self, + ffi.Pointer rval, ) { - return _GetRectSubPix( - src, - patchSize, - center, - dst, + return _DTrees_GetCVFolds( + self, + rval, ); } - late final _GetRectSubPixPtr = - _lookup>( - 'GetRectSubPix'); - late final _GetRectSubPix = _GetRectSubPixPtr.asFunction< - CvStatus Function(Mat, Size, Point2f, Mat)>(); + late final _DTrees_GetCVFoldsPtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetCVFolds'); + late final _DTrees_GetCVFolds = _DTrees_GetCVFoldsPtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); - CvStatus GetRotationMatrix2D( - Point2f center, - double angle, - double scale, - ffi.Pointer rval, + CvStatus DTrees_GetMaxCategories( + DTrees self, + ffi.Pointer rval, ) { - return _GetRotationMatrix2D( - center, - angle, - scale, + return _DTrees_GetMaxCategories( + self, rval, ); } - late final _GetRotationMatrix2DPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Point2f, ffi.Double, ffi.Double, - ffi.Pointer)>>('GetRotationMatrix2D'); - late final _GetRotationMatrix2D = _GetRotationMatrix2DPtr.asFunction< - CvStatus Function(Point2f, double, double, ffi.Pointer)>(); + late final _DTrees_GetMaxCategoriesPtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetMaxCategories'); + late final _DTrees_GetMaxCategories = _DTrees_GetMaxCategoriesPtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); - CvStatus GetStructuringElement( - int shape, - Size ksize, - ffi.Pointer rval, + CvStatus DTrees_GetMaxDepth( + DTrees self, + ffi.Pointer rval, ) { - return _GetStructuringElement( - shape, - ksize, + return _DTrees_GetMaxDepth( + self, rval, ); } - late final _GetStructuringElementPtr = _lookup< - ffi - .NativeFunction)>>( - 'GetStructuringElement'); - late final _GetStructuringElement = _GetStructuringElementPtr.asFunction< - CvStatus Function(int, Size, ffi.Pointer)>(); + late final _DTrees_GetMaxDepthPtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetMaxDepth'); + late final _DTrees_GetMaxDepth = _DTrees_GetMaxDepthPtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); - CvStatus GetTextSizeWithBaseline( - ffi.Pointer text, - int fontFace, - double fontScale, - int thickness, - ffi.Pointer baseline, - ffi.Pointer rval, + CvStatus DTrees_GetMinSampleCount( + DTrees self, + ffi.Pointer rval, ) { - return _GetTextSizeWithBaseline( - text, - fontFace, - fontScale, - thickness, - baseline, + return _DTrees_GetMinSampleCount( + self, rval, ); } - late final _GetTextSizeWithBaselinePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ffi.Pointer, - ffi.Int, - ffi.Double, - ffi.Int, - ffi.Pointer, - ffi.Pointer)>>('GetTextSizeWithBaseline'); - late final _GetTextSizeWithBaseline = _GetTextSizeWithBaselinePtr.asFunction< - CvStatus Function(ffi.Pointer, int, double, int, - ffi.Pointer, ffi.Pointer)>(); + late final _DTrees_GetMinSampleCountPtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetMinSampleCount'); + late final _DTrees_GetMinSampleCount = _DTrees_GetMinSampleCountPtr + .asFunction)>(); - CvStatus GetTickFrequency( - ffi.Pointer rval, + CvStatus DTrees_GetPriors( + DTrees self, + ffi.Pointer rval, ) { - return _GetTickFrequency( + return _DTrees_GetPriors( + self, rval, ); } - late final _GetTickFrequencyPtr = - _lookup)>>( - 'GetTickFrequency'); - late final _GetTickFrequency = _GetTickFrequencyPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _DTrees_GetPriorsPtr = + _lookup)>>( + 'DTrees_GetPriors'); + late final _DTrees_GetPriors = _DTrees_GetPriorsPtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); - CvStatus GoodFeaturesToTrack( - Mat img, - VecPoint2f corners, - int maxCorners, - double quality, - double minDist, - Mat mask, - int blockSize, - bool useHarrisDetector, - double k, + CvStatus DTrees_GetRegressionAccuracy( + DTrees self, + ffi.Pointer rval, ) { - return _GoodFeaturesToTrack( - img, - corners, - maxCorners, - quality, - minDist, - mask, - blockSize, - useHarrisDetector, - k, + return _DTrees_GetRegressionAccuracy( + self, + rval, ); } - late final _GoodFeaturesToTrackPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, VecPoint2f, ffi.Int, ffi.Double, ffi.Double, - Mat, ffi.Int, ffi.Bool, ffi.Double)>>('GoodFeaturesToTrack'); - late final _GoodFeaturesToTrack = _GoodFeaturesToTrackPtr.asFunction< - CvStatus Function( - Mat, VecPoint2f, int, double, double, Mat, int, bool, double)>(); + late final _DTrees_GetRegressionAccuracyPtr = _lookup< + ffi + .NativeFunction)>>( + 'DTrees_GetRegressionAccuracy'); + late final _DTrees_GetRegressionAccuracy = _DTrees_GetRegressionAccuracyPtr + .asFunction)>(); - CvStatus GoodFeaturesToTrackWithGradient( - Mat img, - VecPoint2f corners, - int maxCorners, - double quality, - double minDist, - Mat mask, - int blockSize, - int gradientSize, - bool useHarrisDetector, - double k, + CvStatus DTrees_GetTruncatePrunedTree( + DTrees self, + ffi.Pointer rval, ) { - return _GoodFeaturesToTrackWithGradient( - img, - corners, - maxCorners, - quality, - minDist, - mask, - blockSize, - gradientSize, - useHarrisDetector, - k, + return _DTrees_GetTruncatePrunedTree( + self, + rval, ); } - late final _GoodFeaturesToTrackWithGradientPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, - VecPoint2f, - ffi.Int, - ffi.Double, - ffi.Double, - Mat, - ffi.Int, - ffi.Int, - ffi.Bool, - ffi.Double)>>('GoodFeaturesToTrackWithGradient'); - late final _GoodFeaturesToTrackWithGradient = - _GoodFeaturesToTrackWithGradientPtr.asFunction< - CvStatus Function(Mat, VecPoint2f, int, double, double, Mat, int, int, - bool, double)>(); + late final _DTrees_GetTruncatePrunedTreePtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetTruncatePrunedTree'); + late final _DTrees_GetTruncatePrunedTree = _DTrees_GetTruncatePrunedTreePtr + .asFunction)>(); - CvStatus GrabCut( - Mat img, - Mat mask, - Rect rect, - Mat bgdModel, - Mat fgdModel, - int iterCount, - int mode, + CvStatus DTrees_GetUse1SERule( + DTrees self, + ffi.Pointer rval, ) { - return _GrabCut( - img, - mask, - rect, - bgdModel, - fgdModel, - iterCount, - mode, + return _DTrees_GetUse1SERule( + self, + rval, ); } - late final _GrabCutPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Rect, Mat, Mat, ffi.Int, ffi.Int)>>('GrabCut'); - late final _GrabCut = _GrabCutPtr.asFunction< - CvStatus Function(Mat, Mat, Rect, Mat, Mat, int, int)>(); + late final _DTrees_GetUse1SERulePtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetUse1SERule'); + late final _DTrees_GetUse1SERule = _DTrees_GetUse1SERulePtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); - CvStatus GroupRectangles( - VecRect rects, - int groupThreshold, - double eps, + CvStatus DTrees_GetUseSurrogates( + DTrees self, + ffi.Pointer rval, ) { - return _GroupRectangles( - rects, - groupThreshold, - eps, + return _DTrees_GetUseSurrogates( + self, + rval, ); } - late final _GroupRectanglesPtr = _lookup< - ffi.NativeFunction>( - 'GroupRectangles'); - late final _GroupRectangles = - _GroupRectanglesPtr.asFunction(); + late final _DTrees_GetUseSurrogatesPtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetUseSurrogates'); + late final _DTrees_GetUseSurrogates = _DTrees_GetUseSurrogatesPtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); - void HOGDescriptor_Close( - ffi.Pointer hog, + CvStatus DTrees_Load( + DTrees self, + ffi.Pointer filepath, ) { - return _HOGDescriptor_Close( - hog, + return _DTrees_Load( + self, + filepath, ); } - late final _HOGDescriptor_ClosePtr = _lookup< - ffi.NativeFunction)>>( - 'HOGDescriptor_Close'); - late final _HOGDescriptor_Close = _HOGDescriptor_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _DTrees_LoadPtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_Load'); + late final _DTrees_Load = _DTrees_LoadPtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); - CvStatus HOGDescriptor_DetectMultiScale( - HOGDescriptor hog, - Mat img, - ffi.Pointer rval, + CvStatus DTrees_LoadFromString( + DTrees self, + ffi.Pointer strModel, + ffi.Pointer objname, ) { - return _HOGDescriptor_DetectMultiScale( - hog, - img, - rval, + return _DTrees_LoadFromString( + self, + strModel, + objname, ); } - late final _HOGDescriptor_DetectMultiScalePtr = _lookup< + late final _DTrees_LoadFromStringPtr = _lookup< ffi.NativeFunction< - CvStatus Function(HOGDescriptor, Mat, - ffi.Pointer)>>('HOGDescriptor_DetectMultiScale'); - late final _HOGDescriptor_DetectMultiScale = - _HOGDescriptor_DetectMultiScalePtr.asFunction< - CvStatus Function(HOGDescriptor, Mat, ffi.Pointer)>(); + CvStatus Function(DTrees, ffi.Pointer, + ffi.Pointer)>>('DTrees_LoadFromString'); + late final _DTrees_LoadFromString = _DTrees_LoadFromStringPtr.asFunction< + CvStatus Function( + DTrees, ffi.Pointer, ffi.Pointer)>(); - CvStatus HOGDescriptor_DetectMultiScaleWithParams( - HOGDescriptor hog, - Mat img, - double hitThresh, - Size winStride, - Size padding, - double scale, - double finalThreshold, - bool useMeanshiftGrouping, - ffi.Pointer rval, + CvStatus DTrees_Predict( + DTrees self, + Mat samples, + Mat results, + int flags, + ffi.Pointer rval, ) { - return _HOGDescriptor_DetectMultiScaleWithParams( - hog, - img, - hitThresh, - winStride, - padding, - scale, - finalThreshold, - useMeanshiftGrouping, + return _DTrees_Predict( + self, + samples, + results, + flags, rval, ); } - late final _HOGDescriptor_DetectMultiScaleWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(HOGDescriptor, Mat, ffi.Double, Size, Size, - ffi.Double, ffi.Double, ffi.Bool, ffi.Pointer)>>( - 'HOGDescriptor_DetectMultiScaleWithParams'); - late final _HOGDescriptor_DetectMultiScaleWithParams = - _HOGDescriptor_DetectMultiScaleWithParamsPtr.asFunction< - CvStatus Function(HOGDescriptor, Mat, double, Size, Size, double, - double, bool, ffi.Pointer)>(); + late final _DTrees_PredictPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(DTrees, Mat, Mat, ffi.Int, + ffi.Pointer)>>('DTrees_Predict'); + late final _DTrees_Predict = _DTrees_PredictPtr.asFunction< + CvStatus Function(DTrees, Mat, Mat, int, ffi.Pointer)>(); - CvStatus HOGDescriptor_Load( - HOGDescriptor hog, - ffi.Pointer name, - ffi.Pointer rval, + CvStatus DTrees_Save( + DTrees self, + ffi.Pointer filename, ) { - return _HOGDescriptor_Load( - hog, - name, - rval, + return _DTrees_Save( + self, + filename, ); } - late final _HOGDescriptor_LoadPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(HOGDescriptor, ffi.Pointer, - ffi.Pointer)>>('HOGDescriptor_Load'); - late final _HOGDescriptor_Load = _HOGDescriptor_LoadPtr.asFunction< - CvStatus Function( - HOGDescriptor, ffi.Pointer, ffi.Pointer)>(); + late final _DTrees_SavePtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_Save'); + late final _DTrees_Save = _DTrees_SavePtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); - CvStatus HOGDescriptor_New( - ffi.Pointer rval, + CvStatus DTrees_SetCVFolds( + DTrees self, + int val, ) { - return _HOGDescriptor_New( - rval, + return _DTrees_SetCVFolds( + self, + val, ); } - late final _HOGDescriptor_NewPtr = _lookup< - ffi.NativeFunction)>>( - 'HOGDescriptor_New'); - late final _HOGDescriptor_New = _HOGDescriptor_NewPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _DTrees_SetCVFoldsPtr = + _lookup>( + 'DTrees_SetCVFolds'); + late final _DTrees_SetCVFolds = + _DTrees_SetCVFoldsPtr.asFunction(); - CvStatus HOGDescriptor_SetSVMDetector( - HOGDescriptor hog, - VecFloat det, + CvStatus DTrees_SetMaxCategories( + DTrees self, + int val, ) { - return _HOGDescriptor_SetSVMDetector( - hog, - det, + return _DTrees_SetMaxCategories( + self, + val, ); } - late final _HOGDescriptor_SetSVMDetectorPtr = - _lookup>( - 'HOGDescriptor_SetSVMDetector'); - late final _HOGDescriptor_SetSVMDetector = _HOGDescriptor_SetSVMDetectorPtr - .asFunction(); + late final _DTrees_SetMaxCategoriesPtr = + _lookup>( + 'DTrees_SetMaxCategories'); + late final _DTrees_SetMaxCategories = + _DTrees_SetMaxCategoriesPtr.asFunction(); - CvStatus HOG_GetDefaultPeopleDetector( - ffi.Pointer rval, + CvStatus DTrees_SetMaxDepth( + DTrees self, + int val, ) { - return _HOG_GetDefaultPeopleDetector( - rval, + return _DTrees_SetMaxDepth( + self, + val, ); } - late final _HOG_GetDefaultPeopleDetectorPtr = - _lookup)>>( - 'HOG_GetDefaultPeopleDetector'); - late final _HOG_GetDefaultPeopleDetector = _HOG_GetDefaultPeopleDetectorPtr - .asFunction)>(); + late final _DTrees_SetMaxDepthPtr = + _lookup>( + 'DTrees_SetMaxDepth'); + late final _DTrees_SetMaxDepth = + _DTrees_SetMaxDepthPtr.asFunction(); - CvStatus HoughCircles( - Mat src, - Mat circles, - int method, - double dp, - double minDist, + CvStatus DTrees_SetMinSampleCount( + DTrees self, + int val, ) { - return _HoughCircles( - src, - circles, - method, - dp, - minDist, + return _DTrees_SetMinSampleCount( + self, + val, ); } - late final _HoughCirclesPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Int, ffi.Double, ffi.Double)>>('HoughCircles'); - late final _HoughCircles = _HoughCirclesPtr.asFunction< - CvStatus Function(Mat, Mat, int, double, double)>(); + late final _DTrees_SetMinSampleCountPtr = + _lookup>( + 'DTrees_SetMinSampleCount'); + late final _DTrees_SetMinSampleCount = + _DTrees_SetMinSampleCountPtr.asFunction(); - CvStatus HoughCirclesWithParams( - Mat src, - Mat circles, - int method, - double dp, - double minDist, - double param1, - double param2, - int minRadius, - int maxRadius, + CvStatus DTrees_SetPriors( + DTrees self, + Mat val, ) { - return _HoughCirclesWithParams( - src, - circles, - method, - dp, - minDist, - param1, - param2, - minRadius, - maxRadius, + return _DTrees_SetPriors( + self, + val, ); } - late final _HoughCirclesWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, - Mat, - ffi.Int, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Int, - ffi.Int)>>('HoughCirclesWithParams'); - late final _HoughCirclesWithParams = _HoughCirclesWithParamsPtr.asFunction< - CvStatus Function( - Mat, Mat, int, double, double, double, double, int, int)>(); + late final _DTrees_SetPriorsPtr = + _lookup>( + 'DTrees_SetPriors'); + late final _DTrees_SetPriors = + _DTrees_SetPriorsPtr.asFunction(); - CvStatus HoughLines( - Mat src, - Mat lines, - double rho, - double theta, - int threshold, - double srn, - double stn, - double min_theta, - double max_theta, + CvStatus DTrees_SetRegressionAccuracy( + DTrees self, + double val, ) { - return _HoughLines( - src, - lines, - rho, - theta, - threshold, - srn, - stn, - min_theta, - max_theta, + return _DTrees_SetRegressionAccuracy( + self, + val, ); } - late final _HoughLinesPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Double, ffi.Double, ffi.Int, - ffi.Double, ffi.Double, ffi.Double, ffi.Double)>>('HoughLines'); - late final _HoughLines = _HoughLinesPtr.asFunction< - CvStatus Function( - Mat, Mat, double, double, int, double, double, double, double)>(); - - CvStatus HoughLinesP( - Mat src, - Mat lines, - double rho, - double theta, - int threshold, - ) { - return _HoughLinesP( - src, - lines, - rho, - theta, - threshold, - ); - } - - late final _HoughLinesPPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Double, ffi.Double, ffi.Int)>>('HoughLinesP'); - late final _HoughLinesP = _HoughLinesPPtr.asFunction< - CvStatus Function(Mat, Mat, double, double, int)>(); + late final _DTrees_SetRegressionAccuracyPtr = + _lookup>( + 'DTrees_SetRegressionAccuracy'); + late final _DTrees_SetRegressionAccuracy = _DTrees_SetRegressionAccuracyPtr + .asFunction(); - CvStatus HoughLinesPWithParams( - Mat src, - Mat lines, - double rho, - double theta, - int threshold, - double minLineLength, - double maxLineGap, + CvStatus DTrees_SetTruncatePrunedTree( + DTrees self, + bool val, ) { - return _HoughLinesPWithParams( - src, - lines, - rho, - theta, - threshold, - minLineLength, - maxLineGap, + return _DTrees_SetTruncatePrunedTree( + self, + val, ); } - late final _HoughLinesPWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Double, ffi.Double, ffi.Int, - ffi.Double, ffi.Double)>>('HoughLinesPWithParams'); - late final _HoughLinesPWithParams = _HoughLinesPWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, double, double, int, double, double)>(); + late final _DTrees_SetTruncatePrunedTreePtr = + _lookup>( + 'DTrees_SetTruncatePrunedTree'); + late final _DTrees_SetTruncatePrunedTree = _DTrees_SetTruncatePrunedTreePtr + .asFunction(); - CvStatus HoughLinesPointSet( - Mat points, - Mat lines, - int lines_max, - int threshold, - double min_rho, - double max_rho, - double rho_step, - double min_theta, - double max_theta, - double theta_step, + CvStatus DTrees_SetUse1SERule( + DTrees self, + bool val, ) { - return _HoughLinesPointSet( - points, - lines, - lines_max, - threshold, - min_rho, - max_rho, - rho_step, - min_theta, - max_theta, - theta_step, + return _DTrees_SetUse1SERule( + self, + val, ); } - late final _HoughLinesPointSetPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, - Mat, - ffi.Int, - ffi.Int, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double)>>('HoughLinesPointSet'); - late final _HoughLinesPointSet = _HoughLinesPointSetPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, double, double, double, double, - double, double)>(); + late final _DTrees_SetUse1SERulePtr = + _lookup>( + 'DTrees_SetUse1SERule'); + late final _DTrees_SetUse1SERule = + _DTrees_SetUse1SERulePtr.asFunction(); - CvStatus IlluminationChange( - Mat src, - Mat mask, - Mat dst, - double alpha, - double beta, + CvStatus DTrees_SetUseSurrogates( + DTrees self, + bool val, ) { - return _IlluminationChange( - src, - mask, - dst, - alpha, - beta, + return _DTrees_SetUseSurrogates( + self, + val, ); } - late final _IlluminationChangePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, ffi.Float, ffi.Float)>>('IlluminationChange'); - late final _IlluminationChange = _IlluminationChangePtr.asFunction< - CvStatus Function(Mat, Mat, Mat, double, double)>(); + late final _DTrees_SetUseSurrogatesPtr = + _lookup>( + 'DTrees_SetUseSurrogates'); + late final _DTrees_SetUseSurrogates = + _DTrees_SetUseSurrogatesPtr.asFunction(); - CvStatus Image_IMDecode( - VecUChar buf, + CvStatus DTrees_Train( + DTrees self, + PtrTrainData trainData, int flags, - ffi.Pointer rval, + ffi.Pointer rval, ) { - return _Image_IMDecode( - buf, + return _DTrees_Train( + self, + trainData, flags, rval, ); } - late final _Image_IMDecodePtr = _lookup< + late final _DTrees_TrainPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - VecUChar, ffi.Int, ffi.Pointer)>>('Image_IMDecode'); - late final _Image_IMDecode = _Image_IMDecodePtr.asFunction< - CvStatus Function(VecUChar, int, ffi.Pointer)>(); + CvStatus Function(DTrees, PtrTrainData, ffi.Int, + ffi.Pointer)>>('DTrees_Train'); + late final _DTrees_Train = _DTrees_TrainPtr.asFunction< + CvStatus Function(DTrees, PtrTrainData, int, ffi.Pointer)>(); - CvStatus Image_IMEncode( - ffi.Pointer fileExt, - Mat img, - ffi.Pointer rval, + CvStatus DTrees_Train_1( + DTrees self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _Image_IMEncode( - fileExt, - img, + return _DTrees_Train_1( + self, + samples, + layout, + responses, rval, ); } - late final _Image_IMEncodePtr = _lookup< + late final _DTrees_Train_1Ptr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, Mat, - ffi.Pointer)>>('Image_IMEncode'); - late final _Image_IMEncode = _Image_IMEncodePtr.asFunction< - CvStatus Function(ffi.Pointer, Mat, ffi.Pointer)>(); + CvStatus Function(DTrees, Mat, ffi.Int, Mat, + ffi.Pointer)>>('DTrees_Train_1'); + late final _DTrees_Train_1 = _DTrees_Train_1Ptr.asFunction< + CvStatus Function(DTrees, Mat, int, Mat, ffi.Pointer)>(); - CvStatus Image_IMEncode_WithParams( - ffi.Pointer fileExt, - Mat img, - VecInt params, - ffi.Pointer rval, + CvStatus DetailEnhance( + Mat src, + Mat dst, + double sigma_s, + double sigma_r, ) { - return _Image_IMEncode_WithParams( - fileExt, - img, - params, - rval, + return _DetailEnhance( + src, + dst, + sigma_s, + sigma_r, ); } - late final _Image_IMEncode_WithParamsPtr = _lookup< + late final _DetailEnhancePtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, Mat, VecInt, - ffi.Pointer)>>('Image_IMEncode_WithParams'); - late final _Image_IMEncode_WithParams = - _Image_IMEncode_WithParamsPtr.asFunction< - CvStatus Function( - ffi.Pointer, Mat, VecInt, ffi.Pointer)>(); + CvStatus Function(Mat, Mat, ffi.Float, ffi.Float)>>('DetailEnhance'); + late final _DetailEnhance = _DetailEnhancePtr.asFunction< + CvStatus Function(Mat, Mat, double, double)>(); - CvStatus Image_IMRead( - ffi.Pointer filename, - int flags, - ffi.Pointer rval, + CvStatus Dilate( + Mat src, + Mat dst, + Mat kernel, ) { - return _Image_IMRead( - filename, - flags, - rval, + return _Dilate( + src, + dst, + kernel, ); } - late final _Image_IMReadPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Int, - ffi.Pointer)>>('Image_IMRead'); - late final _Image_IMRead = _Image_IMReadPtr.asFunction< - CvStatus Function(ffi.Pointer, int, ffi.Pointer)>(); + late final _DilatePtr = + _lookup>('Dilate'); + late final _Dilate = + _DilatePtr.asFunction(); - CvStatus Image_IMWrite( - ffi.Pointer filename, - Mat img, - ffi.Pointer rval, + CvStatus DilateWithParams( + Mat src, + Mat dst, + Mat kernel, + Point anchor, + int iterations, + int borderType, + Scalar borderValue, ) { - return _Image_IMWrite( - filename, - img, - rval, + return _DilateWithParams( + src, + dst, + kernel, + anchor, + iterations, + borderType, + borderValue, ); } - late final _Image_IMWritePtr = _lookup< + late final _DilateWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, Mat, - ffi.Pointer)>>('Image_IMWrite'); - late final _Image_IMWrite = _Image_IMWritePtr.asFunction< - CvStatus Function(ffi.Pointer, Mat, ffi.Pointer)>(); + CvStatus Function(Mat, Mat, Mat, Point, ffi.Int, ffi.Int, + Scalar)>>('DilateWithParams'); + late final _DilateWithParams = _DilateWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Point, int, int, Scalar)>(); - CvStatus Image_IMWrite_WithParams( - ffi.Pointer filename, - Mat img, - VecInt params, - ffi.Pointer rval, + CvStatus DistanceTransform( + Mat src, + Mat dst, + Mat labels, + int distanceType, + int maskSize, + int labelType, ) { - return _Image_IMWrite_WithParams( - filename, - img, - params, - rval, + return _DistanceTransform( + src, + dst, + labels, + distanceType, + maskSize, + labelType, ); } - late final _Image_IMWrite_WithParamsPtr = _lookup< + late final _DistanceTransformPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, Mat, VecInt, - ffi.Pointer)>>('Image_IMWrite_WithParams'); - late final _Image_IMWrite_WithParams = - _Image_IMWrite_WithParamsPtr.asFunction< CvStatus Function( - ffi.Pointer, Mat, VecInt, ffi.Pointer)>(); + Mat, Mat, Mat, ffi.Int, ffi.Int, ffi.Int)>>('DistanceTransform'); + late final _DistanceTransform = _DistanceTransformPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, int, int, int)>(); - CvStatus InitUndistortRectifyMap( - Mat cameraMatrix, - Mat distCoeffs, - Mat r, - Mat newCameraMatrix, - Size size, - int m1type, - Mat map1, - Mat map2, + CvStatus DrawChessboardCorners( + Mat image, + Size patternSize, + Mat corners, + bool patternWasFound, ) { - return _InitUndistortRectifyMap( - cameraMatrix, - distCoeffs, - r, - newCameraMatrix, - size, - m1type, - map1, - map2, + return _DrawChessboardCorners( + image, + patternSize, + corners, + patternWasFound, ); } - late final _InitUndistortRectifyMapPtr = _lookup< + late final _DrawChessboardCornersPtr = + _lookup>( + 'DrawChessboardCorners'); + late final _DrawChessboardCorners = _DrawChessboardCornersPtr.asFunction< + CvStatus Function(Mat, Size, Mat, bool)>(); + + CvStatus DrawContours( + Mat src, + VecVecPoint contours, + int contourIdx, + Scalar color, + int thickness, + ) { + return _DrawContours( + src, + contours, + contourIdx, + color, + thickness, + ); + } + + late final _DrawContoursPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, Mat, Size, ffi.Int, Mat, - Mat)>>('InitUndistortRectifyMap'); - late final _InitUndistortRectifyMap = _InitUndistortRectifyMapPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat, Size, int, Mat, Mat)>(); + CvStatus Function( + Mat, VecVecPoint, ffi.Int, Scalar, ffi.Int)>>('DrawContours'); + late final _DrawContours = _DrawContoursPtr.asFunction< + CvStatus Function(Mat, VecVecPoint, int, Scalar, int)>(); - CvStatus Integral( + CvStatus DrawContoursWithParams( Mat src, - Mat sum, - Mat sqsum, - Mat tilted, - int sdepth, - int sqdepth, + VecVecPoint contours, + int contourIdx, + Scalar color, + int thickness, + int lineType, + Mat hierarchy, + int maxLevel, + Point offset, ) { - return _Integral( + return _DrawContoursWithParams( src, - sum, - sqsum, - tilted, - sdepth, - sqdepth, + contours, + contourIdx, + color, + thickness, + lineType, + hierarchy, + maxLevel, + offset, ); } - late final _IntegralPtr = _lookup< + late final _DrawContoursWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, Mat, ffi.Int, ffi.Int)>>('Integral'); - late final _Integral = _IntegralPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat, int, int)>(); + CvStatus Function(Mat, VecVecPoint, ffi.Int, Scalar, ffi.Int, ffi.Int, + Mat, ffi.Int, Point)>>('DrawContoursWithParams'); + late final _DrawContoursWithParams = _DrawContoursWithParamsPtr.asFunction< + CvStatus Function( + Mat, VecVecPoint, int, Scalar, int, int, Mat, int, Point)>(); - CvStatus InvertAffineTransform( + CvStatus DrawKeyPoints( Mat src, + VecKeyPoint kp, Mat dst, + Scalar color, + int flags, ) { - return _InvertAffineTransform( + return _DrawKeyPoints( src, + kp, dst, + color, + flags, ); } - late final _InvertAffineTransformPtr = - _lookup>( - 'InvertAffineTransform'); - late final _InvertAffineTransform = - _InvertAffineTransformPtr.asFunction(); + late final _DrawKeyPointsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, VecKeyPoint, Mat, Scalar, ffi.Int)>>('DrawKeyPoints'); + late final _DrawKeyPoints = _DrawKeyPointsPtr.asFunction< + CvStatus Function(Mat, VecKeyPoint, Mat, Scalar, int)>(); - void KAZE_Close( - ffi.Pointer a, + CvStatus DrawMatches( + Mat img1, + VecKeyPoint kp1, + Mat img2, + VecKeyPoint kp2, + VecDMatch matches1to2, + Mat outImg, + Scalar matchesColor, + Scalar pointColor, + VecChar matchesMask, + int flags, ) { - return _KAZE_Close( - a, + return _DrawMatches( + img1, + kp1, + img2, + kp2, + matches1to2, + outImg, + matchesColor, + pointColor, + matchesMask, + flags, ); } - late final _KAZE_ClosePtr = - _lookup)>>( - 'KAZE_Close'); - late final _KAZE_Close = - _KAZE_ClosePtr.asFunction)>(); + late final _DrawMatchesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, VecKeyPoint, Mat, VecKeyPoint, VecDMatch, Mat, + Scalar, Scalar, VecChar, ffi.Int)>>('DrawMatches'); + late final _DrawMatches = _DrawMatchesPtr.asFunction< + CvStatus Function(Mat, VecKeyPoint, Mat, VecKeyPoint, VecDMatch, Mat, + Scalar, Scalar, VecChar, int)>(); - CvStatus KAZE_Create( - ffi.Pointer rval, + CvStatus EM_Clear( + EM self, ) { - return _KAZE_Create( - rval, + return _EM_Clear( + self, ); } - late final _KAZE_CreatePtr = - _lookup)>>( - 'KAZE_Create'); - late final _KAZE_Create = - _KAZE_CreatePtr.asFunction)>(); + late final _EM_ClearPtr = + _lookup>('EM_Clear'); + late final _EM_Clear = _EM_ClearPtr.asFunction(); - CvStatus KAZE_Detect( - KAZE a, - Mat src, - ffi.Pointer rval, + void EM_Close( + ffi.Pointer self, ) { - return _KAZE_Detect( - a, - src, - rval, + return _EM_Close( + self, ); } - late final _KAZE_DetectPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - KAZE, Mat, ffi.Pointer)>>('KAZE_Detect'); - late final _KAZE_Detect = _KAZE_DetectPtr.asFunction< - CvStatus Function(KAZE, Mat, ffi.Pointer)>(); + late final _EM_ClosePtr = + _lookup)>>( + 'EM_Close'); + late final _EM_Close = + _EM_ClosePtr.asFunction)>(); - CvStatus KAZE_DetectAndCompute( - KAZE a, - Mat src, - Mat mask, - Mat desc, - ffi.Pointer rval, + CvStatus EM_Create( + ffi.Pointer rval, ) { - return _KAZE_DetectAndCompute( - a, - src, - mask, - desc, + return _EM_Create( rval, ); } - late final _KAZE_DetectAndComputePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(KAZE, Mat, Mat, Mat, - ffi.Pointer)>>('KAZE_DetectAndCompute'); - late final _KAZE_DetectAndCompute = _KAZE_DetectAndComputePtr.asFunction< - CvStatus Function(KAZE, Mat, Mat, Mat, ffi.Pointer)>(); + late final _EM_CreatePtr = + _lookup)>>( + 'EM_Create'); + late final _EM_Create = + _EM_CreatePtr.asFunction)>(); - CvStatus KMeans( - Mat data, - int k, - Mat bestLabels, - TermCriteria criteria, - int attempts, - int flags, - Mat centers, - ffi.Pointer rval, + CvStatus EM_Get( + PtrEM self, + ffi.Pointer rval, ) { - return _KMeans( - data, - k, - bestLabels, - criteria, - attempts, - flags, - centers, + return _EM_Get( + self, rval, ); } - late final _KMeansPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, Mat, TermCriteria, ffi.Int, ffi.Int, - Mat, ffi.Pointer)>>('KMeans'); - late final _KMeans = _KMeansPtr.asFunction< - CvStatus Function(Mat, int, Mat, TermCriteria, int, int, Mat, - ffi.Pointer)>(); + late final _EM_GetPtr = + _lookup)>>( + 'EM_Get'); + late final _EM_Get = + _EM_GetPtr.asFunction)>(); - CvStatus KMeansPoints( - VecPoint2f pts, - int k, - Mat bestLabels, - TermCriteria criteria, - int attempts, - int flags, - Mat centers, - ffi.Pointer rval, + CvStatus EM_GetClustersNumber( + EM self, + ffi.Pointer rval, ) { - return _KMeansPoints( - pts, - k, - bestLabels, - criteria, - attempts, - flags, - centers, + return _EM_GetClustersNumber( + self, rval, ); } - late final _KMeansPointsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint2f, ffi.Int, Mat, TermCriteria, ffi.Int, - ffi.Int, Mat, ffi.Pointer)>>('KMeansPoints'); - late final _KMeansPoints = _KMeansPointsPtr.asFunction< - CvStatus Function(VecPoint2f, int, Mat, TermCriteria, int, int, Mat, - ffi.Pointer)>(); - - void KalmanFilter_Close( - ffi.Pointer self, - ) { - return _KalmanFilter_Close( - self, - ); - } - - late final _KalmanFilter_ClosePtr = - _lookup)>>( - 'KalmanFilter_Close'); - late final _KalmanFilter_Close = _KalmanFilter_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _EM_GetClustersNumberPtr = + _lookup)>>( + 'EM_GetClustersNumber'); + late final _EM_GetClustersNumber = _EM_GetClustersNumberPtr.asFunction< + CvStatus Function(EM, ffi.Pointer)>(); - CvStatus KalmanFilter_Correct( - KalmanFilter self, - Mat measurement, - ffi.Pointer rval, + CvStatus EM_GetCovarianceMatrixType( + EM self, + ffi.Pointer rval, ) { - return _KalmanFilter_Correct( + return _EM_GetCovarianceMatrixType( self, - measurement, rval, ); } - late final _KalmanFilter_CorrectPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - KalmanFilter, Mat, ffi.Pointer)>>('KalmanFilter_Correct'); - late final _KalmanFilter_Correct = _KalmanFilter_CorrectPtr.asFunction< - CvStatus Function(KalmanFilter, Mat, ffi.Pointer)>(); + late final _EM_GetCovarianceMatrixTypePtr = + _lookup)>>( + 'EM_GetCovarianceMatrixType'); + late final _EM_GetCovarianceMatrixType = _EM_GetCovarianceMatrixTypePtr + .asFunction)>(); - CvStatus KalmanFilter_GetControlMatrix( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EM_GetTermCriteria( + EM self, + ffi.Pointer rval, ) { - return _KalmanFilter_GetControlMatrix( + return _EM_GetTermCriteria( self, rval, ); } - late final _KalmanFilter_GetControlMatrixPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetControlMatrix'); - late final _KalmanFilter_GetControlMatrix = _KalmanFilter_GetControlMatrixPtr - .asFunction)>(); + late final _EM_GetTermCriteriaPtr = _lookup< + ffi.NativeFunction)>>( + 'EM_GetTermCriteria'); + late final _EM_GetTermCriteria = _EM_GetTermCriteriaPtr.asFunction< + CvStatus Function(EM, ffi.Pointer)>(); - CvStatus KalmanFilter_GetErrorCovPost( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EM_Load( + EM self, + ffi.Pointer filepath, ) { - return _KalmanFilter_GetErrorCovPost( + return _EM_Load( self, - rval, + filepath, ); } - late final _KalmanFilter_GetErrorCovPostPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetErrorCovPost'); - late final _KalmanFilter_GetErrorCovPost = _KalmanFilter_GetErrorCovPostPtr - .asFunction)>(); + late final _EM_LoadPtr = + _lookup)>>( + 'EM_Load'); + late final _EM_Load = + _EM_LoadPtr.asFunction)>(); - CvStatus KalmanFilter_GetErrorCovPre( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EM_LoadFromString( + EM self, + ffi.Pointer strModel, + ffi.Pointer objname, ) { - return _KalmanFilter_GetErrorCovPre( + return _EM_LoadFromString( self, - rval, + strModel, + objname, ); } - late final _KalmanFilter_GetErrorCovPrePtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetErrorCovPre'); - late final _KalmanFilter_GetErrorCovPre = _KalmanFilter_GetErrorCovPrePtr - .asFunction)>(); + late final _EM_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(EM, ffi.Pointer, + ffi.Pointer)>>('EM_LoadFromString'); + late final _EM_LoadFromString = _EM_LoadFromStringPtr.asFunction< + CvStatus Function(EM, ffi.Pointer, ffi.Pointer)>(); - CvStatus KalmanFilter_GetGain( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EM_Predict( + EM self, + Mat samples, + Mat results, + int flags, + ffi.Pointer rval, ) { - return _KalmanFilter_GetGain( + return _EM_Predict( self, + samples, + results, + flags, rval, ); } - late final _KalmanFilter_GetGainPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetGain'); - late final _KalmanFilter_GetGain = _KalmanFilter_GetGainPtr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); - - CvStatus KalmanFilter_GetMeasurementMatrix( - KalmanFilter self, - ffi.Pointer rval, + late final _EM_PredictPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + EM, Mat, Mat, ffi.Int, ffi.Pointer)>>('EM_Predict'); + late final _EM_Predict = _EM_PredictPtr.asFunction< + CvStatus Function(EM, Mat, Mat, int, ffi.Pointer)>(); + + CvStatus EM_Predict2( + EM self, + Mat sample, + Mat probs, + ffi.Pointer rval, ) { - return _KalmanFilter_GetMeasurementMatrix( + return _EM_Predict2( self, + sample, + probs, rval, ); } - late final _KalmanFilter_GetMeasurementMatrixPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetMeasurementMatrix'); - late final _KalmanFilter_GetMeasurementMatrix = - _KalmanFilter_GetMeasurementMatrixPtr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _EM_Predict2Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(EM, Mat, Mat, ffi.Pointer)>>('EM_Predict2'); + late final _EM_Predict2 = _EM_Predict2Ptr.asFunction< + CvStatus Function(EM, Mat, Mat, ffi.Pointer)>(); - CvStatus KalmanFilter_GetMeasurementNoiseCov( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EM_Save( + EM self, + ffi.Pointer filename, ) { - return _KalmanFilter_GetMeasurementNoiseCov( + return _EM_Save( self, - rval, + filename, ); } - late final _KalmanFilter_GetMeasurementNoiseCovPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetMeasurementNoiseCov'); - late final _KalmanFilter_GetMeasurementNoiseCov = - _KalmanFilter_GetMeasurementNoiseCovPtr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _EM_SavePtr = + _lookup)>>( + 'EM_Save'); + late final _EM_Save = + _EM_SavePtr.asFunction)>(); - CvStatus KalmanFilter_GetProcessNoiseCov( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EM_SetClustersNumber( + EM self, + int val, ) { - return _KalmanFilter_GetProcessNoiseCov( + return _EM_SetClustersNumber( self, - rval, + val, ); } - late final _KalmanFilter_GetProcessNoiseCovPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetProcessNoiseCov'); - late final _KalmanFilter_GetProcessNoiseCov = - _KalmanFilter_GetProcessNoiseCovPtr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _EM_SetClustersNumberPtr = + _lookup>( + 'EM_SetClustersNumber'); + late final _EM_SetClustersNumber = + _EM_SetClustersNumberPtr.asFunction(); - CvStatus KalmanFilter_GetStatePost( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EM_SetCovarianceMatrixType( + EM self, + int val, ) { - return _KalmanFilter_GetStatePost( + return _EM_SetCovarianceMatrixType( self, - rval, + val, ); } - late final _KalmanFilter_GetStatePostPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetStatePost'); - late final _KalmanFilter_GetStatePost = _KalmanFilter_GetStatePostPtr - .asFunction)>(); + late final _EM_SetCovarianceMatrixTypePtr = + _lookup>( + 'EM_SetCovarianceMatrixType'); + late final _EM_SetCovarianceMatrixType = + _EM_SetCovarianceMatrixTypePtr.asFunction(); - CvStatus KalmanFilter_GetStatePre( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EM_SetTermCriteria( + EM self, + TermCriteria val, ) { - return _KalmanFilter_GetStatePre( + return _EM_SetTermCriteria( self, - rval, + val, ); } - late final _KalmanFilter_GetStatePrePtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetStatePre'); - late final _KalmanFilter_GetStatePre = _KalmanFilter_GetStatePrePtr - .asFunction)>(); + late final _EM_SetTermCriteriaPtr = + _lookup>( + 'EM_SetTermCriteria'); + late final _EM_SetTermCriteria = + _EM_SetTermCriteriaPtr.asFunction(); - CvStatus KalmanFilter_GetTemp1( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EM_TrainE( + EM self, + Mat samples, + Mat means0, + Mat covs0, + Mat weights0, + Mat logLikelihoods, + Mat labels, + Mat probs, + ffi.Pointer rval, ) { - return _KalmanFilter_GetTemp1( + return _EM_TrainE( self, + samples, + means0, + covs0, + weights0, + logLikelihoods, + labels, + probs, rval, ); } - late final _KalmanFilter_GetTemp1Ptr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetTemp1'); - late final _KalmanFilter_GetTemp1 = _KalmanFilter_GetTemp1Ptr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _EM_TrainEPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(EM, Mat, Mat, Mat, Mat, Mat, Mat, Mat, + ffi.Pointer)>>('EM_TrainE'); + late final _EM_TrainE = _EM_TrainEPtr.asFunction< + CvStatus Function( + EM, Mat, Mat, Mat, Mat, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus KalmanFilter_GetTemp2( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EM_TrainEM( + EM self, + Mat samples, + Mat logLikelihoods, + Mat labels, + Mat probs, + ffi.Pointer rval, ) { - return _KalmanFilter_GetTemp2( + return _EM_TrainEM( self, + samples, + logLikelihoods, + labels, + probs, rval, ); } - late final _KalmanFilter_GetTemp2Ptr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetTemp2'); - late final _KalmanFilter_GetTemp2 = _KalmanFilter_GetTemp2Ptr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _EM_TrainEMPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + EM, Mat, Mat, Mat, Mat, ffi.Pointer)>>('EM_TrainEM'); + late final _EM_TrainEM = _EM_TrainEMPtr.asFunction< + CvStatus Function(EM, Mat, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus KalmanFilter_GetTemp3( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EM_TrainM( + EM self, + Mat samples, + Mat probs0, + Mat logLikelihoods, + Mat labels, + Mat probs, + ffi.Pointer rval, ) { - return _KalmanFilter_GetTemp3( + return _EM_TrainM( self, + samples, + probs0, + logLikelihoods, + labels, + probs, rval, ); } - late final _KalmanFilter_GetTemp3Ptr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetTemp3'); - late final _KalmanFilter_GetTemp3 = _KalmanFilter_GetTemp3Ptr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _EM_TrainMPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(EM, Mat, Mat, Mat, Mat, Mat, + ffi.Pointer)>>('EM_TrainM'); + late final _EM_TrainM = _EM_TrainMPtr.asFunction< + CvStatus Function(EM, Mat, Mat, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus KalmanFilter_GetTemp4( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EdgePreservingFilter( + Mat src, + Mat dst, + int filter, + double sigma_s, + double sigma_r, ) { - return _KalmanFilter_GetTemp4( - self, - rval, + return _EdgePreservingFilter( + src, + dst, + filter, + sigma_s, + sigma_r, ); } - late final _KalmanFilter_GetTemp4Ptr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetTemp4'); - late final _KalmanFilter_GetTemp4 = _KalmanFilter_GetTemp4Ptr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _EdgePreservingFilterPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, ffi.Float, + ffi.Float)>>('EdgePreservingFilter'); + late final _EdgePreservingFilter = _EdgePreservingFilterPtr.asFunction< + CvStatus Function(Mat, Mat, int, double, double)>(); - CvStatus KalmanFilter_GetTemp5( - KalmanFilter self, - ffi.Pointer rval, + CvStatus Ellipse( + Mat img, + Point center, + Point axes, + double angle, + double startAngle, + double endAngle, + Scalar color, + int thickness, ) { - return _KalmanFilter_GetTemp5( - self, - rval, + return _Ellipse( + img, + center, + axes, + angle, + startAngle, + endAngle, + color, + thickness, ); } - late final _KalmanFilter_GetTemp5Ptr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetTemp5'); - late final _KalmanFilter_GetTemp5 = _KalmanFilter_GetTemp5Ptr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _EllipsePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Point, Point, ffi.Double, ffi.Double, + ffi.Double, Scalar, ffi.Int)>>('Ellipse'); + late final _Ellipse = _EllipsePtr.asFunction< + CvStatus Function( + Mat, Point, Point, double, double, double, Scalar, int)>(); - CvStatus KalmanFilter_GetTransitionMatrix( - KalmanFilter self, - ffi.Pointer rval, + CvStatus EllipseWithParams( + Mat img, + Point center, + Point axes, + double angle, + double startAngle, + double endAngle, + Scalar color, + int thickness, + int lineType, + int shift, ) { - return _KalmanFilter_GetTransitionMatrix( - self, - rval, + return _EllipseWithParams( + img, + center, + axes, + angle, + startAngle, + endAngle, + color, + thickness, + lineType, + shift, ); } - late final _KalmanFilter_GetTransitionMatrixPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetTransitionMatrix'); - late final _KalmanFilter_GetTransitionMatrix = - _KalmanFilter_GetTransitionMatrixPtr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _EllipseWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + Point, + Point, + ffi.Double, + ffi.Double, + ffi.Double, + Scalar, + ffi.Int, + ffi.Int, + ffi.Int)>>('EllipseWithParams'); + late final _EllipseWithParams = _EllipseWithParamsPtr.asFunction< + CvStatus Function( + Mat, Point, Point, double, double, double, Scalar, int, int, int)>(); - CvStatus KalmanFilter_Init( - KalmanFilter self, - int dynamParams, - int measureParams, + CvStatus EqualizeHist( + Mat src, + Mat dst, ) { - return _KalmanFilter_Init( - self, - dynamParams, - measureParams, + return _EqualizeHist( + src, + dst, ); } - late final _KalmanFilter_InitPtr = _lookup< - ffi - .NativeFunction>( - 'KalmanFilter_Init'); - late final _KalmanFilter_Init = _KalmanFilter_InitPtr.asFunction< - CvStatus Function(KalmanFilter, int, int)>(); + late final _EqualizeHistPtr = + _lookup>('EqualizeHist'); + late final _EqualizeHist = + _EqualizeHistPtr.asFunction(); - CvStatus KalmanFilter_InitWithParams( - KalmanFilter self, - int dynamParams, - int measureParams, - int controlParams, - int type, + CvStatus Erode( + Mat src, + Mat dst, + Mat kernel, ) { - return _KalmanFilter_InitWithParams( - self, - dynamParams, - measureParams, - controlParams, - type, + return _Erode( + src, + dst, + kernel, ); } - late final _KalmanFilter_InitWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(KalmanFilter, ffi.Int, ffi.Int, ffi.Int, - ffi.Int)>>('KalmanFilter_InitWithParams'); - late final _KalmanFilter_InitWithParams = _KalmanFilter_InitWithParamsPtr - .asFunction(); + late final _ErodePtr = + _lookup>('Erode'); + late final _Erode = _ErodePtr.asFunction(); - CvStatus KalmanFilter_New( - int dynamParams, - int measureParams, - int controlParams, - int type, - ffi.Pointer rval, + CvStatus ErodeWithParams( + Mat src, + Mat dst, + Mat kernel, + Point anchor, + int iterations, + int borderType, + Scalar borderValue, ) { - return _KalmanFilter_New( - dynamParams, - measureParams, - controlParams, - type, - rval, + return _ErodeWithParams( + src, + dst, + kernel, + anchor, + iterations, + borderType, + borderValue, ); } - late final _KalmanFilter_NewPtr = _lookup< + late final _ErodeWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('KalmanFilter_New'); - late final _KalmanFilter_New = _KalmanFilter_NewPtr.asFunction< - CvStatus Function(int, int, int, int, ffi.Pointer)>(); + CvStatus Function(Mat, Mat, Mat, Point, ffi.Int, ffi.Int, + Scalar)>>('ErodeWithParams'); + late final _ErodeWithParams = _ErodeWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Point, int, int, Scalar)>(); - CvStatus KalmanFilter_Predict( - KalmanFilter self, + CvStatus EstimateAffine2D( + VecPoint2f from, + VecPoint2f to, ffi.Pointer rval, ) { - return _KalmanFilter_Predict( - self, + return _EstimateAffine2D( + from, + to, rval, ); } - late final _KalmanFilter_PredictPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_Predict'); - late final _KalmanFilter_Predict = _KalmanFilter_PredictPtr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _EstimateAffine2DPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + VecPoint2f, VecPoint2f, ffi.Pointer)>>('EstimateAffine2D'); + late final _EstimateAffine2D = _EstimateAffine2DPtr.asFunction< + CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer)>(); - CvStatus KalmanFilter_PredictWithParams( - KalmanFilter self, - Mat control, + CvStatus EstimateAffine2DWithParams( + VecPoint2f from, + VecPoint2f to, + Mat inliers, + int method, + double ransacReprojThreshold, + int maxIters, + double confidence, + int refineIters, ffi.Pointer rval, ) { - return _KalmanFilter_PredictWithParams( - self, - control, + return _EstimateAffine2DWithParams( + from, + to, + inliers, + method, + ransacReprojThreshold, + maxIters, + confidence, + refineIters, rval, ); } - late final _KalmanFilter_PredictWithParamsPtr = _lookup< + late final _EstimateAffine2DWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(KalmanFilter, Mat, - ffi.Pointer)>>('KalmanFilter_PredictWithParams'); - late final _KalmanFilter_PredictWithParams = - _KalmanFilter_PredictWithParamsPtr.asFunction< - CvStatus Function(KalmanFilter, Mat, ffi.Pointer)>(); + CvStatus Function( + VecPoint2f, + VecPoint2f, + Mat, + ffi.Int, + ffi.Double, + ffi.Size, + ffi.Double, + ffi.Size, + ffi.Pointer)>>('EstimateAffine2DWithParams'); + late final _EstimateAffine2DWithParams = + _EstimateAffine2DWithParamsPtr.asFunction< + CvStatus Function(VecPoint2f, VecPoint2f, Mat, int, double, int, + double, int, ffi.Pointer)>(); - CvStatus KalmanFilter_SetControlMatrix( - KalmanFilter self, - Mat controlMatrix, + CvStatus EstimateAffinePartial2D( + VecPoint2f from, + VecPoint2f to, + ffi.Pointer rval, ) { - return _KalmanFilter_SetControlMatrix( - self, - controlMatrix, + return _EstimateAffinePartial2D( + from, + to, + rval, ); } - late final _KalmanFilter_SetControlMatrixPtr = - _lookup>( - 'KalmanFilter_SetControlMatrix'); - late final _KalmanFilter_SetControlMatrix = _KalmanFilter_SetControlMatrixPtr - .asFunction(); - - CvStatus KalmanFilter_SetErrorCovPost( - KalmanFilter self, - Mat errorCovPost, - ) { - return _KalmanFilter_SetErrorCovPost( - self, - errorCovPost, - ); - } + late final _EstimateAffinePartial2DPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint2f, VecPoint2f, + ffi.Pointer)>>('EstimateAffinePartial2D'); + late final _EstimateAffinePartial2D = _EstimateAffinePartial2DPtr.asFunction< + CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer)>(); - late final _KalmanFilter_SetErrorCovPostPtr = - _lookup>( - 'KalmanFilter_SetErrorCovPost'); - late final _KalmanFilter_SetErrorCovPost = _KalmanFilter_SetErrorCovPostPtr - .asFunction(); - - CvStatus KalmanFilter_SetErrorCovPre( - KalmanFilter self, - Mat errorCovPre, - ) { - return _KalmanFilter_SetErrorCovPre( - self, - errorCovPre, - ); - } - - late final _KalmanFilter_SetErrorCovPrePtr = - _lookup>( - 'KalmanFilter_SetErrorCovPre'); - late final _KalmanFilter_SetErrorCovPre = _KalmanFilter_SetErrorCovPrePtr - .asFunction(); - - CvStatus KalmanFilter_SetGain( - KalmanFilter self, - Mat gain, + CvStatus EstimateAffinePartial2DWithParams( + VecPoint2f from, + VecPoint2f to, + Mat inliers, + int method, + double ransacReprojThreshold, + int maxIters, + double confidence, + int refineIters, + ffi.Pointer rval, ) { - return _KalmanFilter_SetGain( - self, - gain, + return _EstimateAffinePartial2DWithParams( + from, + to, + inliers, + method, + ransacReprojThreshold, + maxIters, + confidence, + refineIters, + rval, ); } - late final _KalmanFilter_SetGainPtr = - _lookup>( - 'KalmanFilter_SetGain'); - late final _KalmanFilter_SetGain = _KalmanFilter_SetGainPtr.asFunction< - CvStatus Function(KalmanFilter, Mat)>(); + late final _EstimateAffinePartial2DWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + VecPoint2f, + VecPoint2f, + Mat, + ffi.Int, + ffi.Double, + ffi.Size, + ffi.Double, + ffi.Size, + ffi.Pointer)>>('EstimateAffinePartial2DWithParams'); + late final _EstimateAffinePartial2DWithParams = + _EstimateAffinePartial2DWithParamsPtr.asFunction< + CvStatus Function(VecPoint2f, VecPoint2f, Mat, int, double, int, + double, int, ffi.Pointer)>(); - CvStatus KalmanFilter_SetMeasurementMatrix( - KalmanFilter self, - Mat measurementMatrix, + CvStatus Eye( + int rows, + int cols, + int type, + ffi.Pointer rval, ) { - return _KalmanFilter_SetMeasurementMatrix( - self, - measurementMatrix, + return _Eye( + rows, + cols, + type, + rval, ); } - late final _KalmanFilter_SetMeasurementMatrixPtr = - _lookup>( - 'KalmanFilter_SetMeasurementMatrix'); - late final _KalmanFilter_SetMeasurementMatrix = - _KalmanFilter_SetMeasurementMatrixPtr.asFunction< - CvStatus Function(KalmanFilter, Mat)>(); + late final _EyePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ffi.Int, ffi.Int, ffi.Int, ffi.Pointer)>>('Eye'); + late final _Eye = + _EyePtr.asFunction)>(); - CvStatus KalmanFilter_SetMeasurementNoiseCov( - KalmanFilter self, - Mat measurementNoiseCov, + void FastFeatureDetector_Close( + ffi.Pointer f, ) { - return _KalmanFilter_SetMeasurementNoiseCov( - self, - measurementNoiseCov, + return _FastFeatureDetector_Close( + f, ); } - late final _KalmanFilter_SetMeasurementNoiseCovPtr = - _lookup>( - 'KalmanFilter_SetMeasurementNoiseCov'); - late final _KalmanFilter_SetMeasurementNoiseCov = - _KalmanFilter_SetMeasurementNoiseCovPtr.asFunction< - CvStatus Function(KalmanFilter, Mat)>(); + late final _FastFeatureDetector_ClosePtr = _lookup< + ffi + .NativeFunction)>>( + 'FastFeatureDetector_Close'); + late final _FastFeatureDetector_Close = _FastFeatureDetector_ClosePtr + .asFunction)>(); - CvStatus KalmanFilter_SetProcessNoiseCov( - KalmanFilter self, - Mat processNoiseCov, + CvStatus FastFeatureDetector_Create( + ffi.Pointer rval, ) { - return _KalmanFilter_SetProcessNoiseCov( - self, - processNoiseCov, + return _FastFeatureDetector_Create( + rval, ); } - late final _KalmanFilter_SetProcessNoiseCovPtr = - _lookup>( - 'KalmanFilter_SetProcessNoiseCov'); - late final _KalmanFilter_SetProcessNoiseCov = - _KalmanFilter_SetProcessNoiseCovPtr.asFunction< - CvStatus Function(KalmanFilter, Mat)>(); + late final _FastFeatureDetector_CreatePtr = _lookup< + ffi + .NativeFunction)>>( + 'FastFeatureDetector_Create'); + late final _FastFeatureDetector_Create = _FastFeatureDetector_CreatePtr + .asFunction)>(); - CvStatus KalmanFilter_SetStatePost( - KalmanFilter self, - Mat statePost, + CvStatus FastFeatureDetector_CreateWithParams( + int threshold, + bool nonmaxSuppression, + int type, + ffi.Pointer rval, ) { - return _KalmanFilter_SetStatePost( - self, - statePost, + return _FastFeatureDetector_CreateWithParams( + threshold, + nonmaxSuppression, + type, + rval, ); } - late final _KalmanFilter_SetStatePostPtr = - _lookup>( - 'KalmanFilter_SetStatePost'); - late final _KalmanFilter_SetStatePost = _KalmanFilter_SetStatePostPtr - .asFunction(); + late final _FastFeatureDetector_CreateWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Int, ffi.Bool, ffi.Int, + ffi.Pointer)>>( + 'FastFeatureDetector_CreateWithParams'); + late final _FastFeatureDetector_CreateWithParams = + _FastFeatureDetector_CreateWithParamsPtr.asFunction< + CvStatus Function( + int, bool, int, ffi.Pointer)>(); - CvStatus KalmanFilter_SetStatePre( - KalmanFilter self, - Mat statePre, + CvStatus FastFeatureDetector_Detect( + FastFeatureDetector f, + Mat src, + ffi.Pointer rval, ) { - return _KalmanFilter_SetStatePre( - self, - statePre, + return _FastFeatureDetector_Detect( + f, + src, + rval, ); } - late final _KalmanFilter_SetStatePrePtr = - _lookup>( - 'KalmanFilter_SetStatePre'); - late final _KalmanFilter_SetStatePre = _KalmanFilter_SetStatePrePtr - .asFunction(); + late final _FastFeatureDetector_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(FastFeatureDetector, Mat, + ffi.Pointer)>>('FastFeatureDetector_Detect'); + late final _FastFeatureDetector_Detect = + _FastFeatureDetector_DetectPtr.asFunction< + CvStatus Function( + FastFeatureDetector, Mat, ffi.Pointer)>(); - CvStatus KalmanFilter_SetTransitionMatrix( - KalmanFilter self, - Mat transitionMatrix, + CvStatus FastNlMeansDenoising( + Mat src, + Mat dst, ) { - return _KalmanFilter_SetTransitionMatrix( - self, - transitionMatrix, + return _FastNlMeansDenoising( + src, + dst, ); } - late final _KalmanFilter_SetTransitionMatrixPtr = - _lookup>( - 'KalmanFilter_SetTransitionMatrix'); - late final _KalmanFilter_SetTransitionMatrix = - _KalmanFilter_SetTransitionMatrixPtr.asFunction< - CvStatus Function(KalmanFilter, Mat)>(); + late final _FastNlMeansDenoisingPtr = + _lookup>( + 'FastNlMeansDenoising'); + late final _FastNlMeansDenoising = + _FastNlMeansDenoisingPtr.asFunction(); - CvStatus LUT( + CvStatus FastNlMeansDenoisingColored( Mat src, - Mat lut, Mat dst, ) { - return _LUT( + return _FastNlMeansDenoisingColored( src, - lut, dst, ); } - late final _LUTPtr = - _lookup>('LUT'); - late final _LUT = _LUTPtr.asFunction(); + late final _FastNlMeansDenoisingColoredPtr = + _lookup>( + 'FastNlMeansDenoisingColored'); + late final _FastNlMeansDenoisingColored = + _FastNlMeansDenoisingColoredPtr.asFunction(); - CvStatus Laplacian( - Mat src, + CvStatus FastNlMeansDenoisingColoredMulti( + VecMat src, Mat dst, - int dDepth, - int kSize, - double scale, - double delta, - int borderType, + int imgToDenoiseIndex, + int temporalWindowSize, ) { - return _Laplacian( + return _FastNlMeansDenoisingColoredMulti( src, dst, - dDepth, - kSize, - scale, - delta, - borderType, + imgToDenoiseIndex, + temporalWindowSize, ); } - late final _LaplacianPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Double, ffi.Double, - ffi.Int)>>('Laplacian'); - late final _Laplacian = _LaplacianPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, double, double, int)>(); - - void Layer_Close( - ffi.Pointer layer, - ) { - return _Layer_Close( - layer, - ); - } - - late final _Layer_ClosePtr = - _lookup)>>( - 'Layer_Close'); - late final _Layer_Close = - _Layer_ClosePtr.asFunction)>(); + late final _FastNlMeansDenoisingColoredMultiPtr = _lookup< + ffi.NativeFunction>( + 'FastNlMeansDenoisingColoredMulti'); + late final _FastNlMeansDenoisingColoredMulti = + _FastNlMeansDenoisingColoredMultiPtr.asFunction< + CvStatus Function(VecMat, Mat, int, int)>(); - CvStatus Layer_GetName( - Layer layer, - ffi.Pointer rval, + CvStatus FastNlMeansDenoisingColoredMultiWithParams( + VecMat src, + Mat dst, + int imgToDenoiseIndex, + int temporalWindowSize, + double h, + double hColor, + int templateWindowSize, + int searchWindowSize, ) { - return _Layer_GetName( - layer, - rval, + return _FastNlMeansDenoisingColoredMultiWithParams( + src, + dst, + imgToDenoiseIndex, + temporalWindowSize, + h, + hColor, + templateWindowSize, + searchWindowSize, ); } - late final _Layer_GetNamePtr = _lookup< - ffi.NativeFunction)>>( - 'Layer_GetName'); - late final _Layer_GetName = _Layer_GetNamePtr.asFunction< - CvStatus Function(Layer, ffi.Pointer)>(); + late final _FastNlMeansDenoisingColoredMultiWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecMat, Mat, ffi.Int, ffi.Int, ffi.Float, ffi.Float, + ffi.Int, ffi.Int)>>('FastNlMeansDenoisingColoredMultiWithParams'); + late final _FastNlMeansDenoisingColoredMultiWithParams = + _FastNlMeansDenoisingColoredMultiWithParamsPtr.asFunction< + CvStatus Function(VecMat, Mat, int, int, double, double, int, int)>(); - CvStatus Layer_GetType( - Layer layer, - ffi.Pointer rval, + CvStatus FastNlMeansDenoisingColoredWithParams( + Mat src, + Mat dst, + double h, + double hColor, + int templateWindowSize, + int searchWindowSize, ) { - return _Layer_GetType( - layer, - rval, + return _FastNlMeansDenoisingColoredWithParams( + src, + dst, + h, + hColor, + templateWindowSize, + searchWindowSize, ); } - late final _Layer_GetTypePtr = _lookup< - ffi.NativeFunction)>>( - 'Layer_GetType'); - late final _Layer_GetType = _Layer_GetTypePtr.asFunction< - CvStatus Function(Layer, ffi.Pointer)>(); + late final _FastNlMeansDenoisingColoredWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Float, ffi.Float, ffi.Int, + ffi.Int)>>('FastNlMeansDenoisingColoredWithParams'); + late final _FastNlMeansDenoisingColoredWithParams = + _FastNlMeansDenoisingColoredWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, double, double, int, int)>(); - CvStatus Layer_InputNameToIndex( - Layer layer, - ffi.Pointer name, - ffi.Pointer rval, + CvStatus FastNlMeansDenoisingWithParams( + Mat src, + Mat dst, + double h, + int templateWindowSize, + int searchWindowSize, ) { - return _Layer_InputNameToIndex( - layer, - name, - rval, + return _FastNlMeansDenoisingWithParams( + src, + dst, + h, + templateWindowSize, + searchWindowSize, ); } - late final _Layer_InputNameToIndexPtr = _lookup< + late final _FastNlMeansDenoisingWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Layer, ffi.Pointer, - ffi.Pointer)>>('Layer_InputNameToIndex'); - late final _Layer_InputNameToIndex = _Layer_InputNameToIndexPtr.asFunction< - CvStatus Function(Layer, ffi.Pointer, ffi.Pointer)>(); + CvStatus Function(Mat, Mat, ffi.Float, ffi.Int, + ffi.Int)>>('FastNlMeansDenoisingWithParams'); + late final _FastNlMeansDenoisingWithParams = + _FastNlMeansDenoisingWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, double, int, int)>(); - CvStatus Layer_OutputNameToIndex( - Layer layer, - ffi.Pointer name, - ffi.Pointer rval, + CvStatus FillPoly( + Mat img, + VecVecPoint points, + Scalar color, ) { - return _Layer_OutputNameToIndex( - layer, - name, - rval, + return _FillPoly( + img, + points, + color, ); } - late final _Layer_OutputNameToIndexPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Layer, ffi.Pointer, - ffi.Pointer)>>('Layer_OutputNameToIndex'); - late final _Layer_OutputNameToIndex = _Layer_OutputNameToIndexPtr.asFunction< - CvStatus Function(Layer, ffi.Pointer, ffi.Pointer)>(); + late final _FillPolyPtr = + _lookup>( + 'FillPoly'); + late final _FillPoly = + _FillPolyPtr.asFunction(); - CvStatus Line( + CvStatus FillPolyWithParams( Mat img, - Point pt1, - Point pt2, + VecVecPoint points, Scalar color, - int thickness, int lineType, int shift, + Point offset, ) { - return _Line( + return _FillPolyWithParams( img, - pt1, - pt2, + points, color, - thickness, lineType, shift, + offset, ); } - late final _LinePtr = _lookup< + late final _FillPolyWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, Point, Point, Scalar, ffi.Int, ffi.Int, ffi.Int)>>('Line'); - late final _Line = _LinePtr.asFunction< - CvStatus Function(Mat, Point, Point, Scalar, int, int, int)>(); + CvStatus Function(Mat, VecVecPoint, Scalar, ffi.Int, ffi.Int, + Point)>>('FillPolyWithParams'); + late final _FillPolyWithParams = _FillPolyWithParamsPtr.asFunction< + CvStatus Function(Mat, VecVecPoint, Scalar, int, int, Point)>(); - CvStatus LinearPolar( + CvStatus Filter2D( Mat src, Mat dst, - Point2f center, - double maxRadius, - int flags, + int ddepth, + Mat kernel, + Point anchor, + double delta, + int borderType, ) { - return _LinearPolar( + return _Filter2D( src, dst, - center, - maxRadius, - flags, + ddepth, + kernel, + anchor, + delta, + borderType, ); } - late final _LinearPolarPtr = _lookup< + late final _Filter2DPtr = _lookup< ffi.NativeFunction< CvStatus Function( - Mat, Mat, Point2f, ffi.Double, ffi.Int)>>('LinearPolar'); - late final _LinearPolar = _LinearPolarPtr.asFunction< - CvStatus Function(Mat, Mat, Point2f, double, int)>(); + Mat, Mat, ffi.Int, Mat, Point, ffi.Double, ffi.Int)>>('Filter2D'); + late final _Filter2D = _Filter2DPtr.asFunction< + CvStatus Function(Mat, Mat, int, Mat, Point, double, int)>(); - CvStatus LogPolar( - Mat src, - Mat dst, - Point2f center, - double m, + CvStatus FindChessboardCorners( + Mat image, + Size patternSize, + Mat corners, int flags, + ffi.Pointer rval, ) { - return _LogPolar( - src, - dst, - center, - m, + return _FindChessboardCorners( + image, + patternSize, + corners, flags, + rval, ); } - late final _LogPolarPtr = _lookup< + late final _FindChessboardCornersPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Point2f, ffi.Double, ffi.Int)>>('LogPolar'); - late final _LogPolar = _LogPolarPtr.asFunction< - CvStatus Function(Mat, Mat, Point2f, double, int)>(); + CvStatus Function(Mat, Size, Mat, ffi.Int, + ffi.Pointer)>>('FindChessboardCorners'); + late final _FindChessboardCorners = _FindChessboardCornersPtr.asFunction< + CvStatus Function(Mat, Size, Mat, int, ffi.Pointer)>(); - void MSER_Close( - ffi.Pointer a, + CvStatus FindChessboardCornersSB( + Mat image, + Size patternSize, + Mat corners, + int flags, + ffi.Pointer rval, ) { - return _MSER_Close( - a, + return _FindChessboardCornersSB( + image, + patternSize, + corners, + flags, + rval, ); } - late final _MSER_ClosePtr = - _lookup)>>( - 'MSER_Close'); - late final _MSER_Close = - _MSER_ClosePtr.asFunction)>(); - - CvStatus MSER_Create( - ffi.Pointer rval, + late final _FindChessboardCornersSBPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Size, Mat, ffi.Int, + ffi.Pointer)>>('FindChessboardCornersSB'); + late final _FindChessboardCornersSB = _FindChessboardCornersSBPtr.asFunction< + CvStatus Function(Mat, Size, Mat, int, ffi.Pointer)>(); + + CvStatus FindChessboardCornersSBWithMeta( + Mat image, + Size patternSize, + Mat corners, + int flags, + Mat meta, + ffi.Pointer rval, ) { - return _MSER_Create( + return _FindChessboardCornersSBWithMeta( + image, + patternSize, + corners, + flags, + meta, rval, ); } - late final _MSER_CreatePtr = - _lookup)>>( - 'MSER_Create'); - late final _MSER_Create = - _MSER_CreatePtr.asFunction)>(); + late final _FindChessboardCornersSBWithMetaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Size, Mat, ffi.Int, Mat, + ffi.Pointer)>>('FindChessboardCornersSBWithMeta'); + late final _FindChessboardCornersSBWithMeta = + _FindChessboardCornersSBWithMetaPtr.asFunction< + CvStatus Function(Mat, Size, Mat, int, Mat, ffi.Pointer)>(); - CvStatus MSER_Detect( - MSER a, + CvStatus FindContours( Mat src, - ffi.Pointer rval, + Mat hierarchy, + int mode, + int method, + ffi.Pointer rval, ) { - return _MSER_Detect( - a, + return _FindContours( src, + hierarchy, + mode, + method, rval, ); } - late final _MSER_DetectPtr = _lookup< + late final _FindContoursPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - MSER, Mat, ffi.Pointer)>>('MSER_Detect'); - late final _MSER_Detect = _MSER_DetectPtr.asFunction< - CvStatus Function(MSER, Mat, ffi.Pointer)>(); + CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, + ffi.Pointer)>>('FindContours'); + late final _FindContours = _FindContoursPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, ffi.Pointer)>(); - CvStatus Mat_AbsDiff( - Mat src1, - Mat src2, + CvStatus FindHomography( + Mat src, Mat dst, + int method, + double ransacReprojThreshold, + Mat mask, + int maxIters, + double confidence, + ffi.Pointer rval, ) { - return _Mat_AbsDiff( - src1, - src2, + return _FindHomography( + src, dst, + method, + ransacReprojThreshold, + mask, + maxIters, + confidence, + rval, ); } - late final _Mat_AbsDiffPtr = - _lookup>( - 'Mat_AbsDiff'); - late final _Mat_AbsDiff = - _Mat_AbsDiffPtr.asFunction(); + late final _FindHomographyPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, ffi.Double, Mat, ffi.Int, + ffi.Double, ffi.Pointer)>>('FindHomography'); + late final _FindHomography = _FindHomographyPtr.asFunction< + CvStatus Function( + Mat, Mat, int, double, Mat, int, double, ffi.Pointer)>(); - CvStatus Mat_Accumulate( - Mat src, - Mat dst, + CvStatus FindTransformECC( + Mat templateImage, + Mat inputImage, + Mat warpMatrix, + int motionType, + TermCriteria criteria, + Mat inputMask, + int gaussFiltSize, + ffi.Pointer rval, ) { - return _Mat_Accumulate( - src, - dst, + return _FindTransformECC( + templateImage, + inputImage, + warpMatrix, + motionType, + criteria, + inputMask, + gaussFiltSize, + rval, ); } - late final _Mat_AccumulatePtr = - _lookup>( - 'Mat_Accumulate'); - late final _Mat_Accumulate = - _Mat_AccumulatePtr.asFunction(); + late final _FindTransformECCPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, Mat, ffi.Int, TermCriteria, Mat, ffi.Int, + ffi.Pointer)>>('FindTransformECC'); + late final _FindTransformECC = _FindTransformECCPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, int, TermCriteria, Mat, int, + ffi.Pointer)>(); - CvStatus Mat_AccumulateProduct( - Mat src1, - Mat src2, - Mat dst, + CvStatus Fisheye_EstimateNewCameraMatrixForUndistortRectify( + Mat k, + Mat d, + Size imgSize, + Mat r, + Mat p, + double balance, + Size newSize, + double fovScale, ) { - return _Mat_AccumulateProduct( - src1, - src2, - dst, + return _Fisheye_EstimateNewCameraMatrixForUndistortRectify( + k, + d, + imgSize, + r, + p, + balance, + newSize, + fovScale, ); } - late final _Mat_AccumulateProductPtr = - _lookup>( - 'Mat_AccumulateProduct'); - late final _Mat_AccumulateProduct = - _Mat_AccumulateProductPtr.asFunction(); + late final _Fisheye_EstimateNewCameraMatrixForUndistortRectifyPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Size, Mat, Mat, ffi.Double, Size, ffi.Double)>>( + 'Fisheye_EstimateNewCameraMatrixForUndistortRectify'); + late final _Fisheye_EstimateNewCameraMatrixForUndistortRectify = + _Fisheye_EstimateNewCameraMatrixForUndistortRectifyPtr.asFunction< + CvStatus Function(Mat, Mat, Size, Mat, Mat, double, Size, double)>(); - CvStatus Mat_AccumulateProductWithMask( - Mat src1, - Mat src2, - Mat dst, - Mat mask, + CvStatus Fisheye_UndistortImage( + Mat distorted, + Mat undistorted, + Mat k, + Mat d, ) { - return _Mat_AccumulateProductWithMask( - src1, - src2, - dst, - mask, + return _Fisheye_UndistortImage( + distorted, + undistorted, + k, + d, ); } - late final _Mat_AccumulateProductWithMaskPtr = + late final _Fisheye_UndistortImagePtr = _lookup>( - 'Mat_AccumulateProductWithMask'); - late final _Mat_AccumulateProductWithMask = _Mat_AccumulateProductWithMaskPtr - .asFunction(); + 'Fisheye_UndistortImage'); + late final _Fisheye_UndistortImage = _Fisheye_UndistortImagePtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat)>(); - CvStatus Mat_AccumulateSquare( - Mat src, - Mat dst, + CvStatus Fisheye_UndistortImageWithParams( + Mat distorted, + Mat undistorted, + Mat k, + Mat d, + Mat knew, + Size size, ) { - return _Mat_AccumulateSquare( - src, - dst, + return _Fisheye_UndistortImageWithParams( + distorted, + undistorted, + k, + d, + knew, + size, ); } - late final _Mat_AccumulateSquarePtr = - _lookup>( - 'Mat_AccumulateSquare'); - late final _Mat_AccumulateSquare = - _Mat_AccumulateSquarePtr.asFunction(); + late final _Fisheye_UndistortImageWithParamsPtr = _lookup< + ffi.NativeFunction>( + 'Fisheye_UndistortImageWithParams'); + late final _Fisheye_UndistortImageWithParams = + _Fisheye_UndistortImageWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat, Mat, Size)>(); - CvStatus Mat_AccumulateSquareWithMask( - Mat src, - Mat dst, - Mat mask, + CvStatus Fisheye_UndistortPoints( + Mat distorted, + Mat undistorted, + Mat k, + Mat d, + Mat R, + Mat P, ) { - return _Mat_AccumulateSquareWithMask( - src, - dst, - mask, + return _Fisheye_UndistortPoints( + distorted, + undistorted, + k, + d, + R, + P, ); } - late final _Mat_AccumulateSquareWithMaskPtr = - _lookup>( - 'Mat_AccumulateSquareWithMask'); - late final _Mat_AccumulateSquareWithMask = _Mat_AccumulateSquareWithMaskPtr - .asFunction(); - - CvStatus Mat_AccumulateWithMask( - Mat src, - Mat dst, - Mat mask, + late final _Fisheye_UndistortPointsPtr = _lookup< + ffi.NativeFunction>( + 'Fisheye_UndistortPoints'); + late final _Fisheye_UndistortPoints = _Fisheye_UndistortPointsPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat, Mat, Mat)>(); + + CvStatus FitEllipse( + VecPoint pts, + ffi.Pointer rval, ) { - return _Mat_AccumulateWithMask( - src, - dst, - mask, + return _FitEllipse( + pts, + rval, ); } - late final _Mat_AccumulateWithMaskPtr = - _lookup>( - 'Mat_AccumulateWithMask'); - late final _Mat_AccumulateWithMask = - _Mat_AccumulateWithMaskPtr.asFunction(); + late final _FitEllipsePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint, ffi.Pointer)>>('FitEllipse'); + late final _FitEllipse = _FitEllipsePtr.asFunction< + CvStatus Function(VecPoint, ffi.Pointer)>(); - CvStatus Mat_AccumulatedWeighted( - Mat src, - Mat dst, - double alpha, + CvStatus FitLine( + VecPoint pts, + Mat line, + int distType, + double param, + double reps, + double aeps, ) { - return _Mat_AccumulatedWeighted( - src, - dst, - alpha, + return _FitLine( + pts, + line, + distType, + param, + reps, + aeps, ); } - late final _Mat_AccumulatedWeightedPtr = - _lookup>( - 'Mat_AccumulatedWeighted'); - late final _Mat_AccumulatedWeighted = _Mat_AccumulatedWeightedPtr.asFunction< - CvStatus Function(Mat, Mat, double)>(); + late final _FitLinePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint, Mat, ffi.Int, ffi.Double, ffi.Double, + ffi.Double)>>('FitLine'); + late final _FitLine = _FitLinePtr.asFunction< + CvStatus Function(VecPoint, Mat, int, double, double, double)>(); - CvStatus Mat_AccumulatedWeightedWithMask( - Mat src, - Mat dst, - double alpha, - Mat mask, + void FlannBasedMatcher_Close( + ffi.Pointer f, ) { - return _Mat_AccumulatedWeightedWithMask( - src, - dst, - alpha, - mask, + return _FlannBasedMatcher_Close( + f, ); } - late final _Mat_AccumulatedWeightedWithMaskPtr = - _lookup>( - 'Mat_AccumulatedWeightedWithMask'); - late final _Mat_AccumulatedWeightedWithMask = - _Mat_AccumulatedWeightedWithMaskPtr.asFunction< - CvStatus Function(Mat, Mat, double, Mat)>(); + late final _FlannBasedMatcher_ClosePtr = _lookup< + ffi + .NativeFunction)>>( + 'FlannBasedMatcher_Close'); + late final _FlannBasedMatcher_Close = _FlannBasedMatcher_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus Mat_Add( - Mat src1, - Mat src2, - Mat dst, + CvStatus FlannBasedMatcher_Create( + ffi.Pointer rval, ) { - return _Mat_Add( - src1, - src2, - dst, + return _FlannBasedMatcher_Create( + rval, ); } - late final _Mat_AddPtr = - _lookup>('Mat_Add'); - late final _Mat_Add = - _Mat_AddPtr.asFunction(); + late final _FlannBasedMatcher_CreatePtr = _lookup< + ffi + .NativeFunction)>>( + 'FlannBasedMatcher_Create'); + late final _FlannBasedMatcher_Create = _FlannBasedMatcher_CreatePtr + .asFunction)>(); - CvStatus Mat_AddF64( - Mat m, - double val, + CvStatus FlannBasedMatcher_KnnMatch( + FlannBasedMatcher f, + Mat query, + Mat train, + int k, + ffi.Pointer rval, ) { - return _Mat_AddF64( - m, - val, + return _FlannBasedMatcher_KnnMatch( + f, + query, + train, + k, + rval, ); } - late final _Mat_AddF64Ptr = - _lookup>( - 'Mat_AddF64'); - late final _Mat_AddF64 = - _Mat_AddF64Ptr.asFunction(); + late final _FlannBasedMatcher_KnnMatchPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(FlannBasedMatcher, Mat, Mat, ffi.Int, + ffi.Pointer)>>('FlannBasedMatcher_KnnMatch'); + late final _FlannBasedMatcher_KnnMatch = + _FlannBasedMatcher_KnnMatchPtr.asFunction< + CvStatus Function( + FlannBasedMatcher, Mat, Mat, int, ffi.Pointer)>(); - CvStatus Mat_AddFloat( - Mat m, - double val, + void GFTTDetector_Close( + ffi.Pointer a, ) { - return _Mat_AddFloat( - m, - val, + return _GFTTDetector_Close( + a, ); } - late final _Mat_AddFloatPtr = - _lookup>( - 'Mat_AddFloat'); - late final _Mat_AddFloat = - _Mat_AddFloatPtr.asFunction(); + late final _GFTTDetector_ClosePtr = + _lookup)>>( + 'GFTTDetector_Close'); + late final _GFTTDetector_Close = _GFTTDetector_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus Mat_AddI32( - Mat m, - int val, + CvStatus GFTTDetector_Create( + ffi.Pointer rval, ) { - return _Mat_AddI32( - m, - val, + return _GFTTDetector_Create( + rval, ); } - late final _Mat_AddI32Ptr = - _lookup>( - 'Mat_AddI32'); - late final _Mat_AddI32 = - _Mat_AddI32Ptr.asFunction(); + late final _GFTTDetector_CreatePtr = + _lookup)>>( + 'GFTTDetector_Create'); + late final _GFTTDetector_Create = _GFTTDetector_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus Mat_AddSChar( - Mat m, - int val, + CvStatus GFTTDetector_Detect( + GFTTDetector a, + Mat src, + ffi.Pointer rval, ) { - return _Mat_AddSChar( - m, - val, + return _GFTTDetector_Detect( + a, + src, + rval, ); } - late final _Mat_AddSCharPtr = - _lookup>( - 'Mat_AddSChar'); - late final _Mat_AddSChar = - _Mat_AddSCharPtr.asFunction(); + late final _GFTTDetector_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(GFTTDetector, Mat, + ffi.Pointer)>>('GFTTDetector_Detect'); + late final _GFTTDetector_Detect = _GFTTDetector_DetectPtr.asFunction< + CvStatus Function(GFTTDetector, Mat, ffi.Pointer)>(); - CvStatus Mat_AddUChar( - Mat m, - int val, + CvStatus GaussianBlur( + Mat src, + Mat dst, + Size ps, + double sX, + double sY, + int bt, ) { - return _Mat_AddUChar( - m, - val, + return _GaussianBlur( + src, + dst, + ps, + sX, + sY, + bt, ); } - late final _Mat_AddUCharPtr = - _lookup>( - 'Mat_AddUChar'); - late final _Mat_AddUChar = - _Mat_AddUCharPtr.asFunction(); + late final _GaussianBlurPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, Size, ffi.Double, ffi.Double, + ffi.Int)>>('GaussianBlur'); + late final _GaussianBlur = _GaussianBlurPtr.asFunction< + CvStatus Function(Mat, Mat, Size, double, double, int)>(); - CvStatus Mat_AddWeighted( - Mat src1, - double alpha, - Mat src2, - double beta, - double gamma, - Mat dst, + CvStatus GetAffineTransform( + VecPoint src, + VecPoint dst, + ffi.Pointer rval, ) { - return _Mat_AddWeighted( - src1, - alpha, - src2, - beta, - gamma, + return _GetAffineTransform( + src, dst, + rval, ); } - late final _Mat_AddWeightedPtr = _lookup< + late final _GetAffineTransformPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Double, Mat, ffi.Double, ffi.Double, - Mat)>>('Mat_AddWeighted'); - late final _Mat_AddWeighted = _Mat_AddWeightedPtr.asFunction< - CvStatus Function(Mat, double, Mat, double, double, Mat)>(); + CvStatus Function( + VecPoint, VecPoint, ffi.Pointer)>>('GetAffineTransform'); + late final _GetAffineTransform = _GetAffineTransformPtr.asFunction< + CvStatus Function(VecPoint, VecPoint, ffi.Pointer)>(); - CvStatus Mat_BatchDistance( - Mat src1, - Mat src2, - Mat dist, - int dtype, - Mat nidx, - int normType, - int K, - Mat mask, - int update, - bool crosscheck, + CvStatus GetAffineTransform2f( + VecPoint2f src, + VecPoint2f dst, + ffi.Pointer rval, ) { - return _Mat_BatchDistance( - src1, - src2, - dist, - dtype, - nidx, - normType, - K, - mask, - update, - crosscheck, + return _GetAffineTransform2f( + src, + dst, + rval, ); } - late final _Mat_BatchDistancePtr = _lookup< + late final _GetAffineTransform2fPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, ffi.Int, Mat, ffi.Int, ffi.Int, Mat, - ffi.Int, ffi.Bool)>>('Mat_BatchDistance'); - late final _Mat_BatchDistance = _Mat_BatchDistancePtr.asFunction< - CvStatus Function(Mat, Mat, Mat, int, Mat, int, int, Mat, int, bool)>(); + CvStatus Function(VecPoint2f, VecPoint2f, + ffi.Pointer)>>('GetAffineTransform2f'); + late final _GetAffineTransform2f = _GetAffineTransform2fPtr.asFunction< + CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer)>(); - CvStatus Mat_BitwiseAnd( - Mat src1, - Mat src2, - Mat dst, + CvStatus GetCVTickCount( + ffi.Pointer rval, ) { - return _Mat_BitwiseAnd( - src1, - src2, - dst, + return _GetCVTickCount( + rval, ); } - late final _Mat_BitwiseAndPtr = - _lookup>( - 'Mat_BitwiseAnd'); - late final _Mat_BitwiseAnd = - _Mat_BitwiseAndPtr.asFunction(); + late final _GetCVTickCountPtr = + _lookup)>>( + 'GetCVTickCount'); + late final _GetCVTickCount = _GetCVTickCountPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus Mat_BitwiseAndWithMask( - Mat src1, - Mat src2, - Mat dst, - Mat mask, + CvStatus GetGaussianKernel( + int ksize, + double sigma, + int ktype, + ffi.Pointer rval, ) { - return _Mat_BitwiseAndWithMask( - src1, - src2, - dst, - mask, + return _GetGaussianKernel( + ksize, + sigma, + ktype, + rval, ); } - late final _Mat_BitwiseAndWithMaskPtr = - _lookup>( - 'Mat_BitwiseAndWithMask'); - late final _Mat_BitwiseAndWithMask = _Mat_BitwiseAndWithMaskPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat)>(); + late final _GetGaussianKernelPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Int, ffi.Double, ffi.Int, + ffi.Pointer)>>('GetGaussianKernel'); + late final _GetGaussianKernel = _GetGaussianKernelPtr.asFunction< + CvStatus Function(int, double, int, ffi.Pointer)>(); - CvStatus Mat_BitwiseNot( - Mat src1, - Mat dst, + CvStatus GetNumThreads( + ffi.Pointer rval, ) { - return _Mat_BitwiseNot( - src1, - dst, + return _GetNumThreads( + rval, ); } - late final _Mat_BitwiseNotPtr = - _lookup>( - 'Mat_BitwiseNot'); - late final _Mat_BitwiseNot = - _Mat_BitwiseNotPtr.asFunction(); + late final _GetNumThreadsPtr = + _lookup)>>( + 'GetNumThreads'); + late final _GetNumThreads = + _GetNumThreadsPtr.asFunction)>(); - CvStatus Mat_BitwiseNotWithMask( - Mat src1, - Mat dst, - Mat mask, + CvStatus GetOptimalNewCameraMatrixWithParams( + Mat cameraMatrix, + Mat distCoeffs, + Size size, + double alpha, + Size newImgSize, + ffi.Pointer validPixROI, + bool centerPrincipalPoint, + ffi.Pointer rval, ) { - return _Mat_BitwiseNotWithMask( - src1, - dst, - mask, + return _GetOptimalNewCameraMatrixWithParams( + cameraMatrix, + distCoeffs, + size, + alpha, + newImgSize, + validPixROI, + centerPrincipalPoint, + rval, ); } - late final _Mat_BitwiseNotWithMaskPtr = - _lookup>( - 'Mat_BitwiseNotWithMask'); - late final _Mat_BitwiseNotWithMask = - _Mat_BitwiseNotWithMaskPtr.asFunction(); + late final _GetOptimalNewCameraMatrixWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + Mat, + Size, + ffi.Double, + Size, + ffi.Pointer, + ffi.Bool, + ffi.Pointer)>>('GetOptimalNewCameraMatrixWithParams'); + late final _GetOptimalNewCameraMatrixWithParams = + _GetOptimalNewCameraMatrixWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, Size, double, Size, ffi.Pointer, + bool, ffi.Pointer)>(); - CvStatus Mat_BitwiseOr( - Mat src1, - Mat src2, - Mat dst, + CvStatus GetPerspectiveTransform( + VecPoint src, + VecPoint dst, + ffi.Pointer rval, + int solveMethod, ) { - return _Mat_BitwiseOr( - src1, - src2, + return _GetPerspectiveTransform( + src, dst, + rval, + solveMethod, ); } - late final _Mat_BitwiseOrPtr = - _lookup>( - 'Mat_BitwiseOr'); - late final _Mat_BitwiseOr = - _Mat_BitwiseOrPtr.asFunction(); + late final _GetPerspectiveTransformPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint, VecPoint, ffi.Pointer, + ffi.Int)>>('GetPerspectiveTransform'); + late final _GetPerspectiveTransform = _GetPerspectiveTransformPtr.asFunction< + CvStatus Function(VecPoint, VecPoint, ffi.Pointer, int)>(); - CvStatus Mat_BitwiseOrWithMask( - Mat src1, - Mat src2, - Mat dst, - Mat mask, + CvStatus GetPerspectiveTransform2f( + VecPoint2f src, + VecPoint2f dst, + ffi.Pointer rval, + int solveMethod, ) { - return _Mat_BitwiseOrWithMask( - src1, - src2, + return _GetPerspectiveTransform2f( + src, dst, - mask, + rval, + solveMethod, ); } - late final _Mat_BitwiseOrWithMaskPtr = - _lookup>( - 'Mat_BitwiseOrWithMask'); - late final _Mat_BitwiseOrWithMask = _Mat_BitwiseOrWithMaskPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat)>(); + late final _GetPerspectiveTransform2fPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer, + ffi.Int)>>('GetPerspectiveTransform2f'); + late final _GetPerspectiveTransform2f = + _GetPerspectiveTransform2fPtr.asFunction< + CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer, int)>(); - CvStatus Mat_BitwiseXor( - Mat src1, - Mat src2, + CvStatus GetRectSubPix( + Mat src, + Size patchSize, + Point2f center, Mat dst, ) { - return _Mat_BitwiseXor( - src1, - src2, + return _GetRectSubPix( + src, + patchSize, + center, dst, ); } - late final _Mat_BitwiseXorPtr = - _lookup>( - 'Mat_BitwiseXor'); - late final _Mat_BitwiseXor = - _Mat_BitwiseXorPtr.asFunction(); + late final _GetRectSubPixPtr = + _lookup>( + 'GetRectSubPix'); + late final _GetRectSubPix = _GetRectSubPixPtr.asFunction< + CvStatus Function(Mat, Size, Point2f, Mat)>(); - CvStatus Mat_BitwiseXorWithMask( - Mat src1, - Mat src2, - Mat dst, - Mat mask, - ) { - return _Mat_BitwiseXorWithMask( - src1, - src2, - dst, - mask, - ); - } - - late final _Mat_BitwiseXorWithMaskPtr = - _lookup>( - 'Mat_BitwiseXorWithMask'); - late final _Mat_BitwiseXorWithMask = _Mat_BitwiseXorWithMaskPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat)>(); - - CvStatus Mat_BorderInterpolate( - int p, - int len, - int borderType, - ffi.Pointer rval, + CvStatus GetRotationMatrix2D( + Point2f center, + double angle, + double scale, + ffi.Pointer rval, ) { - return _Mat_BorderInterpolate( - p, - len, - borderType, + return _GetRotationMatrix2D( + center, + angle, + scale, rval, ); } - late final _Mat_BorderInterpolatePtr = _lookup< + late final _GetRotationMatrix2DPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('Mat_BorderInterpolate'); - late final _Mat_BorderInterpolate = _Mat_BorderInterpolatePtr.asFunction< - CvStatus Function(int, int, int, ffi.Pointer)>(); + CvStatus Function(Point2f, ffi.Double, ffi.Double, + ffi.Pointer)>>('GetRotationMatrix2D'); + late final _GetRotationMatrix2D = _GetRotationMatrix2DPtr.asFunction< + CvStatus Function(Point2f, double, double, ffi.Pointer)>(); - CvStatus Mat_CalcCovarMatrix( - Mat samples, - Mat covar, - Mat mean, - int flags, - int ctype, + CvStatus GetStructuringElement( + int shape, + Size ksize, + ffi.Pointer rval, ) { - return _Mat_CalcCovarMatrix( - samples, - covar, - mean, - flags, - ctype, + return _GetStructuringElement( + shape, + ksize, + rval, ); } - late final _Mat_CalcCovarMatrixPtr = _lookup< + late final _GetStructuringElementPtr = _lookup< ffi - .NativeFunction>( - 'Mat_CalcCovarMatrix'); - late final _Mat_CalcCovarMatrix = _Mat_CalcCovarMatrixPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, int, int)>(); + .NativeFunction)>>( + 'GetStructuringElement'); + late final _GetStructuringElement = _GetStructuringElementPtr.asFunction< + CvStatus Function(int, Size, ffi.Pointer)>(); - CvStatus Mat_CartToPolar( - Mat x, - Mat y, - Mat magnitude, - Mat angle, - bool angleInDegrees, + CvStatus GetTextSizeWithBaseline( + ffi.Pointer text, + int fontFace, + double fontScale, + int thickness, + ffi.Pointer baseline, + ffi.Pointer rval, ) { - return _Mat_CartToPolar( - x, - y, - magnitude, - angle, - angleInDegrees, + return _GetTextSizeWithBaseline( + text, + fontFace, + fontScale, + thickness, + baseline, + rval, ); } - late final _Mat_CartToPolarPtr = _lookup< - ffi.NativeFunction>( - 'Mat_CartToPolar'); - late final _Mat_CartToPolar = _Mat_CartToPolarPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat, bool)>(); + late final _GetTextSizeWithBaselinePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ffi.Pointer, + ffi.Int, + ffi.Double, + ffi.Int, + ffi.Pointer, + ffi.Pointer)>>('GetTextSizeWithBaseline'); + late final _GetTextSizeWithBaseline = _GetTextSizeWithBaselinePtr.asFunction< + CvStatus Function(ffi.Pointer, int, double, int, + ffi.Pointer, ffi.Pointer)>(); - CvStatus Mat_Channels( - Mat m, - ffi.Pointer rval, + CvStatus GetTickFrequency( + ffi.Pointer rval, ) { - return _Mat_Channels( - m, + return _GetTickFrequency( rval, ); } - late final _Mat_ChannelsPtr = - _lookup)>>( - 'Mat_Channels'); - late final _Mat_Channels = _Mat_ChannelsPtr.asFunction< - CvStatus Function(Mat, ffi.Pointer)>(); + late final _GetTickFrequencyPtr = + _lookup)>>( + 'GetTickFrequency'); + late final _GetTickFrequency = _GetTickFrequencyPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus Mat_CheckRange( - Mat m, - bool quiet, - ffi.Pointer pos, - double minVal, - double maxVal, - ffi.Pointer rval, + CvStatus GoodFeaturesToTrack( + Mat img, + VecPoint2f corners, + int maxCorners, + double quality, + double minDist, + Mat mask, + int blockSize, + bool useHarrisDetector, + double k, ) { - return _Mat_CheckRange( - m, - quiet, - pos, - minVal, - maxVal, - rval, + return _GoodFeaturesToTrack( + img, + corners, + maxCorners, + quality, + minDist, + mask, + blockSize, + useHarrisDetector, + k, ); } - late final _Mat_CheckRangePtr = _lookup< + late final _GoodFeaturesToTrackPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Bool, ffi.Pointer, ffi.Double, - ffi.Double, ffi.Pointer)>>('Mat_CheckRange'); - late final _Mat_CheckRange = _Mat_CheckRangePtr.asFunction< - CvStatus Function(Mat, bool, ffi.Pointer, double, double, - ffi.Pointer)>(); + CvStatus Function(Mat, VecPoint2f, ffi.Int, ffi.Double, ffi.Double, + Mat, ffi.Int, ffi.Bool, ffi.Double)>>('GoodFeaturesToTrack'); + late final _GoodFeaturesToTrack = _GoodFeaturesToTrackPtr.asFunction< + CvStatus Function( + Mat, VecPoint2f, int, double, double, Mat, int, bool, double)>(); - CvStatus Mat_Clone( - Mat m, - ffi.Pointer rval, + CvStatus GoodFeaturesToTrackWithGradient( + Mat img, + VecPoint2f corners, + int maxCorners, + double quality, + double minDist, + Mat mask, + int blockSize, + int gradientSize, + bool useHarrisDetector, + double k, ) { - return _Mat_Clone( - m, - rval, + return _GoodFeaturesToTrackWithGradient( + img, + corners, + maxCorners, + quality, + minDist, + mask, + blockSize, + gradientSize, + useHarrisDetector, + k, ); } - late final _Mat_ClonePtr = - _lookup)>>( - 'Mat_Clone'); - late final _Mat_Clone = - _Mat_ClonePtr.asFunction)>(); + late final _GoodFeaturesToTrackWithGradientPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + VecPoint2f, + ffi.Int, + ffi.Double, + ffi.Double, + Mat, + ffi.Int, + ffi.Int, + ffi.Bool, + ffi.Double)>>('GoodFeaturesToTrackWithGradient'); + late final _GoodFeaturesToTrackWithGradient = + _GoodFeaturesToTrackWithGradientPtr.asFunction< + CvStatus Function(Mat, VecPoint2f, int, double, double, Mat, int, int, + bool, double)>(); - void Mat_Close( - ffi.Pointer m, + CvStatus GrabCut( + Mat img, + Mat mask, + Rect rect, + Mat bgdModel, + Mat fgdModel, + int iterCount, + int mode, ) { - return _Mat_Close( - m, + return _GrabCut( + img, + mask, + rect, + bgdModel, + fgdModel, + iterCount, + mode, ); } - late final _Mat_ClosePtr = - _lookup)>>( - 'Mat_Close'); - late final _Mat_Close = - _Mat_ClosePtr.asFunction)>(); - - void Mat_CloseVoid( - ffi.Pointer m, + late final _GrabCutPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Rect, Mat, Mat, ffi.Int, ffi.Int)>>('GrabCut'); + late final _GrabCut = _GrabCutPtr.asFunction< + CvStatus Function(Mat, Mat, Rect, Mat, Mat, int, int)>(); + + CvStatus GroupRectangles( + VecRect rects, + int groupThreshold, + double eps, ) { - return _Mat_CloseVoid( - m, + return _GroupRectangles( + rects, + groupThreshold, + eps, ); } - late final _Mat_CloseVoidPtr = - _lookup)>>( - 'Mat_CloseVoid'); - late final _Mat_CloseVoid = - _Mat_CloseVoidPtr.asFunction)>(); + late final _GroupRectanglesPtr = _lookup< + ffi.NativeFunction>( + 'GroupRectangles'); + late final _GroupRectangles = + _GroupRectanglesPtr.asFunction(); - CvStatus Mat_Cols( - Mat m, - ffi.Pointer rval, + void HOGDescriptor_Close( + ffi.Pointer hog, ) { - return _Mat_Cols( - m, - rval, + return _HOGDescriptor_Close( + hog, ); } - late final _Mat_ColsPtr = - _lookup)>>( - 'Mat_Cols'); - late final _Mat_Cols = - _Mat_ColsPtr.asFunction)>(); + late final _HOGDescriptor_ClosePtr = _lookup< + ffi.NativeFunction)>>( + 'HOGDescriptor_Close'); + late final _HOGDescriptor_Close = _HOGDescriptor_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus Mat_Compare( - Mat src1, - Mat src2, - Mat dst, - int ct, + CvStatus HOGDescriptor_DetectMultiScale( + HOGDescriptor hog, + Mat img, + ffi.Pointer rval, ) { - return _Mat_Compare( - src1, - src2, - dst, - ct, + return _HOGDescriptor_DetectMultiScale( + hog, + img, + rval, ); } - late final _Mat_ComparePtr = - _lookup>( - 'Mat_Compare'); - late final _Mat_Compare = - _Mat_ComparePtr.asFunction(); + late final _HOGDescriptor_DetectMultiScalePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(HOGDescriptor, Mat, + ffi.Pointer)>>('HOGDescriptor_DetectMultiScale'); + late final _HOGDescriptor_DetectMultiScale = + _HOGDescriptor_DetectMultiScalePtr.asFunction< + CvStatus Function(HOGDescriptor, Mat, ffi.Pointer)>(); - CvStatus Mat_CompleteSymm( - Mat m, - bool lowerToUpper, + CvStatus HOGDescriptor_DetectMultiScaleWithParams( + HOGDescriptor hog, + Mat img, + double hitThresh, + Size winStride, + Size padding, + double scale, + double finalThreshold, + bool useMeanshiftGrouping, + ffi.Pointer rval, ) { - return _Mat_CompleteSymm( - m, - lowerToUpper, + return _HOGDescriptor_DetectMultiScaleWithParams( + hog, + img, + hitThresh, + winStride, + padding, + scale, + finalThreshold, + useMeanshiftGrouping, + rval, ); } - late final _Mat_CompleteSymmPtr = - _lookup>( - 'Mat_CompleteSymm'); - late final _Mat_CompleteSymm = - _Mat_CompleteSymmPtr.asFunction(); + late final _HOGDescriptor_DetectMultiScaleWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(HOGDescriptor, Mat, ffi.Double, Size, Size, + ffi.Double, ffi.Double, ffi.Bool, ffi.Pointer)>>( + 'HOGDescriptor_DetectMultiScaleWithParams'); + late final _HOGDescriptor_DetectMultiScaleWithParams = + _HOGDescriptor_DetectMultiScaleWithParamsPtr.asFunction< + CvStatus Function(HOGDescriptor, Mat, double, Size, Size, double, + double, bool, ffi.Pointer)>(); - CvStatus Mat_ConvertFp16( - Mat m, - ffi.Pointer rval, + CvStatus HOGDescriptor_Load( + HOGDescriptor hog, + ffi.Pointer name, + ffi.Pointer rval, ) { - return _Mat_ConvertFp16( - m, + return _HOGDescriptor_Load( + hog, + name, rval, ); } - late final _Mat_ConvertFp16Ptr = - _lookup)>>( - 'Mat_ConvertFp16'); - late final _Mat_ConvertFp16 = _Mat_ConvertFp16Ptr.asFunction< - CvStatus Function(Mat, ffi.Pointer)>(); + late final _HOGDescriptor_LoadPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(HOGDescriptor, ffi.Pointer, + ffi.Pointer)>>('HOGDescriptor_Load'); + late final _HOGDescriptor_Load = _HOGDescriptor_LoadPtr.asFunction< + CvStatus Function( + HOGDescriptor, ffi.Pointer, ffi.Pointer)>(); - CvStatus Mat_ConvertScaleAbs( - Mat src, - Mat dst, - double alpha, - double beta, + CvStatus HOGDescriptor_New( + ffi.Pointer rval, ) { - return _Mat_ConvertScaleAbs( - src, - dst, - alpha, - beta, + return _HOGDescriptor_New( + rval, ); } - late final _Mat_ConvertScaleAbsPtr = _lookup< - ffi - .NativeFunction>( - 'Mat_ConvertScaleAbs'); - late final _Mat_ConvertScaleAbs = _Mat_ConvertScaleAbsPtr.asFunction< - CvStatus Function(Mat, Mat, double, double)>(); + late final _HOGDescriptor_NewPtr = _lookup< + ffi.NativeFunction)>>( + 'HOGDescriptor_New'); + late final _HOGDescriptor_New = _HOGDescriptor_NewPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus Mat_ConvertTo( - Mat m, - Mat dst, - int type, + CvStatus HOGDescriptor_SetSVMDetector( + HOGDescriptor hog, + VecFloat det, ) { - return _Mat_ConvertTo( - m, - dst, - type, + return _HOGDescriptor_SetSVMDetector( + hog, + det, ); } - late final _Mat_ConvertToPtr = - _lookup>( - 'Mat_ConvertTo'); - late final _Mat_ConvertTo = - _Mat_ConvertToPtr.asFunction(); + late final _HOGDescriptor_SetSVMDetectorPtr = + _lookup>( + 'HOGDescriptor_SetSVMDetector'); + late final _HOGDescriptor_SetSVMDetector = _HOGDescriptor_SetSVMDetectorPtr + .asFunction(); - CvStatus Mat_ConvertToWithParams( - Mat m, - Mat dst, - int type, - double alpha, - double beta, + CvStatus HOG_GetDefaultPeopleDetector( + ffi.Pointer rval, ) { - return _Mat_ConvertToWithParams( - m, - dst, - type, - alpha, - beta, + return _HOG_GetDefaultPeopleDetector( + rval, ); } - late final _Mat_ConvertToWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Float, - ffi.Float)>>('Mat_ConvertToWithParams'); - late final _Mat_ConvertToWithParams = _Mat_ConvertToWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, int, double, double)>(); + late final _HOG_GetDefaultPeopleDetectorPtr = + _lookup)>>( + 'HOG_GetDefaultPeopleDetector'); + late final _HOG_GetDefaultPeopleDetector = _HOG_GetDefaultPeopleDetectorPtr + .asFunction)>(); - CvStatus Mat_CopyMakeBorder( + CvStatus HoughCircles( Mat src, - Mat dst, - int top, - int bottom, - int left, - int right, - int borderType, - Scalar value, + Mat circles, + int method, + double dp, + double minDist, ) { - return _Mat_CopyMakeBorder( + return _HoughCircles( src, - dst, - top, - bottom, - left, - right, - borderType, - value, + circles, + method, + dp, + minDist, ); } - late final _Mat_CopyMakeBorderPtr = _lookup< + late final _HoughCirclesPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int, - ffi.Int, Scalar)>>('Mat_CopyMakeBorder'); - late final _Mat_CopyMakeBorder = _Mat_CopyMakeBorderPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, int, int, int, Scalar)>(); + CvStatus Function( + Mat, Mat, ffi.Int, ffi.Double, ffi.Double)>>('HoughCircles'); + late final _HoughCircles = _HoughCirclesPtr.asFunction< + CvStatus Function(Mat, Mat, int, double, double)>(); - CvStatus Mat_CopyTo( - Mat m, - Mat dst, + CvStatus HoughCirclesWithParams( + Mat src, + Mat circles, + int method, + double dp, + double minDist, + double param1, + double param2, + int minRadius, + int maxRadius, ) { - return _Mat_CopyTo( - m, - dst, + return _HoughCirclesWithParams( + src, + circles, + method, + dp, + minDist, + param1, + param2, + minRadius, + maxRadius, ); } - late final _Mat_CopyToPtr = - _lookup>('Mat_CopyTo'); - late final _Mat_CopyTo = - _Mat_CopyToPtr.asFunction(); + late final _HoughCirclesWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + Mat, + ffi.Int, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Int, + ffi.Int)>>('HoughCirclesWithParams'); + late final _HoughCirclesWithParams = _HoughCirclesWithParamsPtr.asFunction< + CvStatus Function( + Mat, Mat, int, double, double, double, double, int, int)>(); - CvStatus Mat_CopyToWithMask( - Mat m, - Mat dst, - Mat mask, + CvStatus HoughLines( + Mat src, + Mat lines, + double rho, + double theta, + int threshold, + double srn, + double stn, + double min_theta, + double max_theta, ) { - return _Mat_CopyToWithMask( - m, - dst, - mask, + return _HoughLines( + src, + lines, + rho, + theta, + threshold, + srn, + stn, + min_theta, + max_theta, ); } - late final _Mat_CopyToWithMaskPtr = - _lookup>( - 'Mat_CopyToWithMask'); - late final _Mat_CopyToWithMask = - _Mat_CopyToWithMaskPtr.asFunction(); + late final _HoughLinesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Double, ffi.Double, ffi.Int, + ffi.Double, ffi.Double, ffi.Double, ffi.Double)>>('HoughLines'); + late final _HoughLines = _HoughLinesPtr.asFunction< + CvStatus Function( + Mat, Mat, double, double, int, double, double, double, double)>(); - CvStatus Mat_CountNonZero( + CvStatus HoughLinesP( Mat src, - ffi.Pointer rval, + Mat lines, + double rho, + double theta, + int threshold, ) { - return _Mat_CountNonZero( + return _HoughLinesP( src, - rval, + lines, + rho, + theta, + threshold, ); } - late final _Mat_CountNonZeroPtr = - _lookup)>>( - 'Mat_CountNonZero'); - late final _Mat_CountNonZero = _Mat_CountNonZeroPtr.asFunction< - CvStatus Function(Mat, ffi.Pointer)>(); + late final _HoughLinesPPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, ffi.Double, ffi.Double, ffi.Int)>>('HoughLinesP'); + late final _HoughLinesP = _HoughLinesPPtr.asFunction< + CvStatus Function(Mat, Mat, double, double, int)>(); - CvStatus Mat_DCT( + CvStatus HoughLinesPWithParams( Mat src, - Mat dst, - int flags, + Mat lines, + double rho, + double theta, + int threshold, + double minLineLength, + double maxLineGap, ) { - return _Mat_DCT( + return _HoughLinesPWithParams( src, - dst, - flags, + lines, + rho, + theta, + threshold, + minLineLength, + maxLineGap, ); } - late final _Mat_DCTPtr = - _lookup>( - 'Mat_DCT'); - late final _Mat_DCT = - _Mat_DCTPtr.asFunction(); + late final _HoughLinesPWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Double, ffi.Double, ffi.Int, + ffi.Double, ffi.Double)>>('HoughLinesPWithParams'); + late final _HoughLinesPWithParams = _HoughLinesPWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, double, double, int, double, double)>(); - CvStatus Mat_DFT( - Mat m, + CvStatus HoughLinesPointSet( + Mat points, + Mat lines, + int lines_max, + int threshold, + double min_rho, + double max_rho, + double rho_step, + double min_theta, + double max_theta, + double theta_step, + ) { + return _HoughLinesPointSet( + points, + lines, + lines_max, + threshold, + min_rho, + max_rho, + rho_step, + min_theta, + max_theta, + theta_step, + ); + } + + late final _HoughLinesPointSetPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + Mat, + ffi.Int, + ffi.Int, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double)>>('HoughLinesPointSet'); + late final _HoughLinesPointSet = _HoughLinesPointSetPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, double, double, double, double, + double, double)>(); + + CvStatus IlluminationChange( + Mat src, + Mat mask, Mat dst, - int flags, + double alpha, + double beta, ) { - return _Mat_DFT( - m, + return _IlluminationChange( + src, + mask, dst, - flags, + alpha, + beta, ); } - late final _Mat_DFTPtr = - _lookup>( - 'Mat_DFT'); - late final _Mat_DFT = - _Mat_DFTPtr.asFunction(); + late final _IlluminationChangePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Mat, ffi.Float, ffi.Float)>>('IlluminationChange'); + late final _IlluminationChange = _IlluminationChangePtr.asFunction< + CvStatus Function(Mat, Mat, Mat, double, double)>(); - CvStatus Mat_Data( - Mat m, - ffi.Pointer rval, + CvStatus Image_IMDecode( + VecUChar buf, + int flags, + ffi.Pointer rval, ) { - return _Mat_Data( - m, + return _Image_IMDecode( + buf, + flags, rval, ); } - late final _Mat_DataPtr = _lookup< - ffi.NativeFunction)>>( - 'Mat_Data'); - late final _Mat_Data = - _Mat_DataPtr.asFunction)>(); + late final _Image_IMDecodePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + VecUChar, ffi.Int, ffi.Pointer)>>('Image_IMDecode'); + late final _Image_IMDecode = _Image_IMDecodePtr.asFunction< + CvStatus Function(VecUChar, int, ffi.Pointer)>(); - CvStatus Mat_DataPtr( - Mat m, - ffi.Pointer> data, - ffi.Pointer length, + CvStatus Image_IMEncode( + ffi.Pointer fileExt, + Mat img, + ffi.Pointer rval, ) { - return _Mat_DataPtr1( - m, - data, - length, + return _Image_IMEncode( + fileExt, + img, + rval, ); } - late final _Mat_DataPtrPtr = _lookup< + late final _Image_IMEncodePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Pointer>, - ffi.Pointer)>>('Mat_DataPtr'); - late final _Mat_DataPtr1 = _Mat_DataPtrPtr.asFunction< - CvStatus Function( - Mat, ffi.Pointer>, ffi.Pointer)>(); - - CvStatus Mat_Determinant( - Mat m, - ffi.Pointer rval, - ) { - return _Mat_Determinant( - m, - rval, - ); - } - - late final _Mat_DeterminantPtr = _lookup< - ffi.NativeFunction)>>( - 'Mat_Determinant'); - late final _Mat_Determinant = _Mat_DeterminantPtr.asFunction< - CvStatus Function(Mat, ffi.Pointer)>(); + CvStatus Function(ffi.Pointer, Mat, + ffi.Pointer)>>('Image_IMEncode'); + late final _Image_IMEncode = _Image_IMEncodePtr.asFunction< + CvStatus Function(ffi.Pointer, Mat, ffi.Pointer)>(); - CvStatus Mat_Divide( - Mat src1, - Mat src2, - Mat dst, + CvStatus Image_IMEncode_WithParams( + ffi.Pointer fileExt, + Mat img, + VecInt params, + ffi.Pointer rval, ) { - return _Mat_Divide( - src1, - src2, - dst, + return _Image_IMEncode_WithParams( + fileExt, + img, + params, + rval, ); } - late final _Mat_DividePtr = - _lookup>( - 'Mat_Divide'); - late final _Mat_Divide = - _Mat_DividePtr.asFunction(); + late final _Image_IMEncode_WithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, Mat, VecInt, + ffi.Pointer)>>('Image_IMEncode_WithParams'); + late final _Image_IMEncode_WithParams = + _Image_IMEncode_WithParamsPtr.asFunction< + CvStatus Function( + ffi.Pointer, Mat, VecInt, ffi.Pointer)>(); - CvStatus Mat_DivideF64( - Mat m, - double val, + CvStatus Image_IMRead( + ffi.Pointer filename, + int flags, + ffi.Pointer rval, ) { - return _Mat_DivideF64( - m, - val, + return _Image_IMRead( + filename, + flags, + rval, ); } - late final _Mat_DivideF64Ptr = - _lookup>( - 'Mat_DivideF64'); - late final _Mat_DivideF64 = - _Mat_DivideF64Ptr.asFunction(); + late final _Image_IMReadPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Int, + ffi.Pointer)>>('Image_IMRead'); + late final _Image_IMRead = _Image_IMReadPtr.asFunction< + CvStatus Function(ffi.Pointer, int, ffi.Pointer)>(); - CvStatus Mat_DivideFloat( - Mat m, - double val, + CvStatus Image_IMWrite( + ffi.Pointer filename, + Mat img, + ffi.Pointer rval, ) { - return _Mat_DivideFloat( - m, - val, + return _Image_IMWrite( + filename, + img, + rval, ); } - late final _Mat_DivideFloatPtr = - _lookup>( - 'Mat_DivideFloat'); - late final _Mat_DivideFloat = - _Mat_DivideFloatPtr.asFunction(); + late final _Image_IMWritePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, Mat, + ffi.Pointer)>>('Image_IMWrite'); + late final _Image_IMWrite = _Image_IMWritePtr.asFunction< + CvStatus Function(ffi.Pointer, Mat, ffi.Pointer)>(); - CvStatus Mat_DivideI32( - Mat m, - int val, + CvStatus Image_IMWrite_WithParams( + ffi.Pointer filename, + Mat img, + VecInt params, + ffi.Pointer rval, ) { - return _Mat_DivideI32( - m, - val, + return _Image_IMWrite_WithParams( + filename, + img, + params, + rval, ); } - late final _Mat_DivideI32Ptr = - _lookup>( - 'Mat_DivideI32'); - late final _Mat_DivideI32 = - _Mat_DivideI32Ptr.asFunction(); + late final _Image_IMWrite_WithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, Mat, VecInt, + ffi.Pointer)>>('Image_IMWrite_WithParams'); + late final _Image_IMWrite_WithParams = + _Image_IMWrite_WithParamsPtr.asFunction< + CvStatus Function( + ffi.Pointer, Mat, VecInt, ffi.Pointer)>(); - CvStatus Mat_DivideSChar( - Mat m, - int val, + CvStatus InitUndistortRectifyMap( + Mat cameraMatrix, + Mat distCoeffs, + Mat r, + Mat newCameraMatrix, + Size size, + int m1type, + Mat map1, + Mat map2, ) { - return _Mat_DivideSChar( - m, - val, + return _InitUndistortRectifyMap( + cameraMatrix, + distCoeffs, + r, + newCameraMatrix, + size, + m1type, + map1, + map2, ); } - late final _Mat_DivideSCharPtr = - _lookup>( - 'Mat_DivideSChar'); - late final _Mat_DivideSChar = - _Mat_DivideSCharPtr.asFunction(); + late final _InitUndistortRectifyMapPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, Mat, Mat, Size, ffi.Int, Mat, + Mat)>>('InitUndistortRectifyMap'); + late final _InitUndistortRectifyMap = _InitUndistortRectifyMapPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat, Size, int, Mat, Mat)>(); - CvStatus Mat_DivideUChar( - Mat m, - int val, + CvStatus Integral( + Mat src, + Mat sum, + Mat sqsum, + Mat tilted, + int sdepth, + int sqdepth, ) { - return _Mat_DivideUChar( - m, - val, + return _Integral( + src, + sum, + sqsum, + tilted, + sdepth, + sqdepth, ); } - late final _Mat_DivideUCharPtr = - _lookup>( - 'Mat_DivideUChar'); - late final _Mat_DivideUChar = - _Mat_DivideUCharPtr.asFunction(); + late final _IntegralPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, Mat, Mat, ffi.Int, ffi.Int)>>('Integral'); + late final _Integral = _IntegralPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat, int, int)>(); - CvStatus Mat_Eigen( + CvStatus InvertAffineTransform( Mat src, - Mat eigenvalues, - Mat eigenvectors, - ffi.Pointer rval, + Mat dst, ) { - return _Mat_Eigen( + return _InvertAffineTransform( src, - eigenvalues, - eigenvectors, - rval, + dst, ); } - late final _Mat_EigenPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, ffi.Pointer)>>('Mat_Eigen'); - late final _Mat_Eigen = _Mat_EigenPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, ffi.Pointer)>(); + late final _InvertAffineTransformPtr = + _lookup>( + 'InvertAffineTransform'); + late final _InvertAffineTransform = + _InvertAffineTransformPtr.asFunction(); - CvStatus Mat_EigenNonSymmetric( - Mat src, - Mat eigenvalues, - Mat eigenvectors, + void KAZE_Close( + ffi.Pointer a, ) { - return _Mat_EigenNonSymmetric( - src, - eigenvalues, - eigenvectors, + return _KAZE_Close( + a, ); } - late final _Mat_EigenNonSymmetricPtr = - _lookup>( - 'Mat_EigenNonSymmetric'); - late final _Mat_EigenNonSymmetric = - _Mat_EigenNonSymmetricPtr.asFunction(); + late final _KAZE_ClosePtr = + _lookup)>>( + 'KAZE_Close'); + late final _KAZE_Close = + _KAZE_ClosePtr.asFunction)>(); - CvStatus Mat_ElemSize( - Mat m, - ffi.Pointer rval, + CvStatus KAZE_Create( + ffi.Pointer rval, ) { - return _Mat_ElemSize( - m, + return _KAZE_Create( rval, ); } - late final _Mat_ElemSizePtr = - _lookup)>>( - 'Mat_ElemSize'); - late final _Mat_ElemSize = _Mat_ElemSizePtr.asFunction< - CvStatus Function(Mat, ffi.Pointer)>(); - - CvStatus Mat_Empty( - Mat m, - ffi.Pointer rval, + late final _KAZE_CreatePtr = + _lookup)>>( + 'KAZE_Create'); + late final _KAZE_Create = + _KAZE_CreatePtr.asFunction)>(); + + CvStatus KAZE_Detect( + KAZE a, + Mat src, + ffi.Pointer rval, ) { - return _Mat_Empty( - m, + return _KAZE_Detect( + a, + src, rval, ); } - late final _Mat_EmptyPtr = _lookup< - ffi.NativeFunction)>>( - 'Mat_Empty'); - late final _Mat_Empty = - _Mat_EmptyPtr.asFunction)>(); + late final _KAZE_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + KAZE, Mat, ffi.Pointer)>>('KAZE_Detect'); + late final _KAZE_Detect = _KAZE_DetectPtr.asFunction< + CvStatus Function(KAZE, Mat, ffi.Pointer)>(); - CvStatus Mat_Exp( + CvStatus KAZE_DetectAndCompute( + KAZE a, Mat src, - Mat dst, + Mat mask, + Mat desc, + ffi.Pointer rval, ) { - return _Mat_Exp( + return _KAZE_DetectAndCompute( + a, src, - dst, + mask, + desc, + rval, ); } - late final _Mat_ExpPtr = - _lookup>('Mat_Exp'); - late final _Mat_Exp = _Mat_ExpPtr.asFunction(); + late final _KAZE_DetectAndComputePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(KAZE, Mat, Mat, Mat, + ffi.Pointer)>>('KAZE_DetectAndCompute'); + late final _KAZE_DetectAndCompute = _KAZE_DetectAndComputePtr.asFunction< + CvStatus Function(KAZE, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus Mat_ExtractChannel( - Mat src, - Mat dst, - int coi, + CvStatus KMeans( + Mat data, + int k, + Mat bestLabels, + TermCriteria criteria, + int attempts, + int flags, + Mat centers, + ffi.Pointer rval, ) { - return _Mat_ExtractChannel( - src, - dst, - coi, + return _KMeans( + data, + k, + bestLabels, + criteria, + attempts, + flags, + centers, + rval, ); } - late final _Mat_ExtractChannelPtr = - _lookup>( - 'Mat_ExtractChannel'); - late final _Mat_ExtractChannel = - _Mat_ExtractChannelPtr.asFunction(); + late final _KMeansPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, Mat, TermCriteria, ffi.Int, ffi.Int, + Mat, ffi.Pointer)>>('KMeans'); + late final _KMeans = _KMeansPtr.asFunction< + CvStatus Function(Mat, int, Mat, TermCriteria, int, int, Mat, + ffi.Pointer)>(); - CvStatus Mat_FindNonZero( - Mat src, - Mat idx, + CvStatus KMeansPoints( + VecPoint2f pts, + int k, + Mat bestLabels, + TermCriteria criteria, + int attempts, + int flags, + Mat centers, + ffi.Pointer rval, ) { - return _Mat_FindNonZero( - src, - idx, + return _KMeansPoints( + pts, + k, + bestLabels, + criteria, + attempts, + flags, + centers, + rval, ); } - late final _Mat_FindNonZeroPtr = - _lookup>( - 'Mat_FindNonZero'); - late final _Mat_FindNonZero = - _Mat_FindNonZeroPtr.asFunction(); + late final _KMeansPointsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint2f, ffi.Int, Mat, TermCriteria, ffi.Int, + ffi.Int, Mat, ffi.Pointer)>>('KMeansPoints'); + late final _KMeansPoints = _KMeansPointsPtr.asFunction< + CvStatus Function(VecPoint2f, int, Mat, TermCriteria, int, int, Mat, + ffi.Pointer)>(); - CvStatus Mat_Flip( - Mat src, - Mat dst, - int flipCode, + CvStatus KNearest_Clear( + KNearest self, ) { - return _Mat_Flip( - src, - dst, - flipCode, + return _KNearest_Clear( + self, ); } - late final _Mat_FlipPtr = - _lookup>( - 'Mat_Flip'); - late final _Mat_Flip = - _Mat_FlipPtr.asFunction(); + late final _KNearest_ClearPtr = + _lookup>( + 'KNearest_Clear'); + late final _KNearest_Clear = + _KNearest_ClearPtr.asFunction(); - CvStatus Mat_FromCMat( - Mat m, - ffi.Pointer rval, + void KNearest_Close( + ffi.Pointer self, ) { - return _Mat_FromCMat( - m, - rval, + return _KNearest_Close( + self, ); } - late final _Mat_FromCMatPtr = - _lookup)>>( - 'Mat_FromCMat'); - late final _Mat_FromCMat = - _Mat_FromCMatPtr.asFunction)>(); + late final _KNearest_ClosePtr = + _lookup)>>( + 'KNearest_Close'); + late final _KNearest_Close = + _KNearest_ClosePtr.asFunction)>(); - CvStatus Mat_FromPtr( - Mat m, - int rows, - int cols, - int type, - int prows, - int pcols, - ffi.Pointer rval, + CvStatus KNearest_Create( + ffi.Pointer rval, ) { - return _Mat_FromPtr( - m, - rows, - cols, - type, - prows, - pcols, + return _KNearest_Create( rval, ); } - late final _Mat_FromPtrPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('Mat_FromPtr'); - late final _Mat_FromPtr = _Mat_FromPtrPtr.asFunction< - CvStatus Function(Mat, int, int, int, int, int, ffi.Pointer)>(); + late final _KNearest_CreatePtr = + _lookup)>>( + 'KNearest_Create'); + late final _KNearest_Create = _KNearest_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus Mat_Gemm( - Mat src1, - Mat src2, - double alpha, - Mat src3, - double beta, - Mat dst, - int flags, + CvStatus KNearest_FindNearest( + KNearest self, + Mat samples, + int k, + Mat results, + Mat neighborResponses, + Mat dist, + ffi.Pointer rval, ) { - return _Mat_Gemm( - src1, - src2, - alpha, - src3, - beta, - dst, - flags, + return _KNearest_FindNearest( + self, + samples, + k, + results, + neighborResponses, + dist, + rval, ); } - late final _Mat_GemmPtr = _lookup< + late final _KNearest_FindNearestPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Double, Mat, ffi.Double, Mat, - ffi.Int)>>('Mat_Gemm'); - late final _Mat_Gemm = _Mat_GemmPtr.asFunction< - CvStatus Function(Mat, Mat, double, Mat, double, Mat, int)>(); + CvStatus Function(KNearest, Mat, ffi.Int, Mat, Mat, Mat, + ffi.Pointer)>>('KNearest_FindNearest'); + late final _KNearest_FindNearest = _KNearest_FindNearestPtr.asFunction< + CvStatus Function( + KNearest, Mat, int, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus Mat_GetDouble( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KNearest_Get( + PtrKNearest self, + ffi.Pointer rval, ) { - return _Mat_GetDouble( - m, - row, - col, + return _KNearest_Get( + self, rval, ); } - late final _Mat_GetDoublePtr = _lookup< + late final _KNearest_GetPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, - ffi.Pointer)>>('Mat_GetDouble'); - late final _Mat_GetDouble = _Mat_GetDoublePtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + CvStatus Function( + PtrKNearest, ffi.Pointer)>>('KNearest_Get'); + late final _KNearest_Get = _KNearest_GetPtr.asFunction< + CvStatus Function(PtrKNearest, ffi.Pointer)>(); - CvStatus Mat_GetDouble3( - Mat m, - int x, - int y, - int z, - ffi.Pointer rval, + CvStatus KNearest_GetAlgorithmType( + KNearest self, + ffi.Pointer rval, ) { - return _Mat_GetDouble3( - m, - x, - y, - z, + return _KNearest_GetAlgorithmType( + self, rval, ); } - late final _Mat_GetDouble3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('Mat_GetDouble3'); - late final _Mat_GetDouble3 = _Mat_GetDouble3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + late final _KNearest_GetAlgorithmTypePtr = _lookup< + ffi + .NativeFunction)>>( + 'KNearest_GetAlgorithmType'); + late final _KNearest_GetAlgorithmType = _KNearest_GetAlgorithmTypePtr + .asFunction)>(); - CvStatus Mat_GetFloat( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KNearest_GetDefaultK( + KNearest self, + ffi.Pointer rval, ) { - return _Mat_GetFloat( - m, - row, - col, + return _KNearest_GetDefaultK( + self, rval, ); } - late final _Mat_GetFloatPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetFloat'); - late final _Mat_GetFloat = _Mat_GetFloatPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KNearest_GetDefaultKPtr = _lookup< + ffi + .NativeFunction)>>( + 'KNearest_GetDefaultK'); + late final _KNearest_GetDefaultK = _KNearest_GetDefaultKPtr.asFunction< + CvStatus Function(KNearest, ffi.Pointer)>(); - CvStatus Mat_GetFloat3( - Mat m, - int x, - int y, - int z, - ffi.Pointer rval, + CvStatus KNearest_GetEmax( + KNearest self, + ffi.Pointer rval, ) { - return _Mat_GetFloat3( - m, - x, - y, - z, + return _KNearest_GetEmax( + self, rval, ); } - late final _Mat_GetFloat3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('Mat_GetFloat3'); - late final _Mat_GetFloat3 = _Mat_GetFloat3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + late final _KNearest_GetEmaxPtr = _lookup< + ffi + .NativeFunction)>>( + 'KNearest_GetEmax'); + late final _KNearest_GetEmax = _KNearest_GetEmaxPtr.asFunction< + CvStatus Function(KNearest, ffi.Pointer)>(); - CvStatus Mat_GetInt( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KNearest_GetIsClassifier( + KNearest self, + ffi.Pointer rval, ) { - return _Mat_GetInt( - m, - row, - col, + return _KNearest_GetIsClassifier( + self, rval, ); } - late final _Mat_GetIntPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetInt'); - late final _Mat_GetInt = _Mat_GetIntPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KNearest_GetIsClassifierPtr = _lookup< + ffi + .NativeFunction)>>( + 'KNearest_GetIsClassifier'); + late final _KNearest_GetIsClassifier = _KNearest_GetIsClassifierPtr + .asFunction)>(); - CvStatus Mat_GetInt3( - Mat m, - int x, - int y, - int z, - ffi.Pointer rval, + CvStatus KNearest_Load( + KNearest self, + ffi.Pointer filepath, ) { - return _Mat_GetInt3( - m, - x, - y, - z, - rval, + return _KNearest_Load( + self, + filepath, ); } - late final _Mat_GetInt3Ptr = _lookup< + late final _KNearest_LoadPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('Mat_GetInt3'); - late final _Mat_GetInt3 = _Mat_GetInt3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + CvStatus Function(KNearest, ffi.Pointer)>>('KNearest_Load'); + late final _KNearest_Load = _KNearest_LoadPtr.asFunction< + CvStatus Function(KNearest, ffi.Pointer)>(); - CvStatus Mat_GetOptimalDFTSize( - int vecsize, - ffi.Pointer rval, + CvStatus KNearest_LoadFromString( + KNearest self, + ffi.Pointer strModel, + ffi.Pointer objname, ) { - return _Mat_GetOptimalDFTSize( - vecsize, - rval, + return _KNearest_LoadFromString( + self, + strModel, + objname, ); } - late final _Mat_GetOptimalDFTSizePtr = _lookup< - ffi.NativeFunction)>>( - 'Mat_GetOptimalDFTSize'); - late final _Mat_GetOptimalDFTSize = _Mat_GetOptimalDFTSizePtr.asFunction< - CvStatus Function(int, ffi.Pointer)>(); + late final _KNearest_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(KNearest, ffi.Pointer, + ffi.Pointer)>>('KNearest_LoadFromString'); + late final _KNearest_LoadFromString = _KNearest_LoadFromStringPtr.asFunction< + CvStatus Function( + KNearest, ffi.Pointer, ffi.Pointer)>(); - CvStatus Mat_GetSChar( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KNearest_Save( + KNearest self, + ffi.Pointer filename, ) { - return _Mat_GetSChar( - m, - row, - col, - rval, + return _KNearest_Save( + self, + filename, ); } - late final _Mat_GetSCharPtr = _lookup< + late final _KNearest_SavePtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetSChar'); - late final _Mat_GetSChar = _Mat_GetSCharPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + CvStatus Function(KNearest, ffi.Pointer)>>('KNearest_Save'); + late final _KNearest_Save = _KNearest_SavePtr.asFunction< + CvStatus Function(KNearest, ffi.Pointer)>(); - CvStatus Mat_GetSChar3( - Mat m, - int x, - int y, - int z, - ffi.Pointer rval, + CvStatus KNearest_SetAlgorithmType( + KNearest self, + int val, ) { - return _Mat_GetSChar3( - m, - x, - y, - z, - rval, + return _KNearest_SetAlgorithmType( + self, + val, ); } - late final _Mat_GetSChar3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('Mat_GetSChar3'); - late final _Mat_GetSChar3 = _Mat_GetSChar3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + late final _KNearest_SetAlgorithmTypePtr = + _lookup>( + 'KNearest_SetAlgorithmType'); + late final _KNearest_SetAlgorithmType = _KNearest_SetAlgorithmTypePtr + .asFunction(); - CvStatus Mat_GetShort( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KNearest_SetDefaultK( + KNearest self, + int val, ) { - return _Mat_GetShort( - m, - row, - col, - rval, + return _KNearest_SetDefaultK( + self, + val, ); } - late final _Mat_GetShortPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetShort'); - late final _Mat_GetShort = _Mat_GetShortPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KNearest_SetDefaultKPtr = + _lookup>( + 'KNearest_SetDefaultK'); + late final _KNearest_SetDefaultK = + _KNearest_SetDefaultKPtr.asFunction(); - CvStatus Mat_GetShort3( - Mat m, - int x, - int y, - int z, - ffi.Pointer rval, + CvStatus KNearest_SetEmax( + KNearest self, + int val, ) { - return _Mat_GetShort3( - m, - x, - y, - z, - rval, + return _KNearest_SetEmax( + self, + val, ); } - late final _Mat_GetShort3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('Mat_GetShort3'); - late final _Mat_GetShort3 = _Mat_GetShort3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + late final _KNearest_SetEmaxPtr = + _lookup>( + 'KNearest_SetEmax'); + late final _KNearest_SetEmax = + _KNearest_SetEmaxPtr.asFunction(); - CvStatus Mat_GetUChar( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KNearest_SetIsClassifier( + KNearest self, + bool val, ) { - return _Mat_GetUChar( - m, - row, - col, - rval, + return _KNearest_SetIsClassifier( + self, + val, ); } - late final _Mat_GetUCharPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetUChar'); - late final _Mat_GetUChar = _Mat_GetUCharPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KNearest_SetIsClassifierPtr = + _lookup>( + 'KNearest_SetIsClassifier'); + late final _KNearest_SetIsClassifier = _KNearest_SetIsClassifierPtr + .asFunction(); - CvStatus Mat_GetUChar3( - Mat m, - int x, - int y, - int z, - ffi.Pointer rval, + CvStatus KNearest_Train( + KNearest self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, ) { - return _Mat_GetUChar3( - m, - x, - y, - z, + return _KNearest_Train( + self, + trainData, + flags, rval, ); } - late final _Mat_GetUChar3Ptr = _lookup< + late final _KNearest_TrainPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('Mat_GetUChar3'); - late final _Mat_GetUChar3 = _Mat_GetUChar3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + CvStatus Function(KNearest, PtrTrainData, ffi.Int, + ffi.Pointer)>>('KNearest_Train'); + late final _KNearest_Train = _KNearest_TrainPtr.asFunction< + CvStatus Function(KNearest, PtrTrainData, int, ffi.Pointer)>(); - CvStatus Mat_GetUShort( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KNearest_Train_1( + KNearest self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _Mat_GetUShort( - m, - row, - col, + return _KNearest_Train_1( + self, + samples, + layout, + responses, rval, ); } - late final _Mat_GetUShortPtr = _lookup< + late final _KNearest_Train_1Ptr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, - ffi.Pointer)>>('Mat_GetUShort'); - late final _Mat_GetUShort = _Mat_GetUShortPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + CvStatus Function(KNearest, Mat, ffi.Int, Mat, + ffi.Pointer)>>('KNearest_Train_1'); + late final _KNearest_Train_1 = _KNearest_Train_1Ptr.asFunction< + CvStatus Function(KNearest, Mat, int, Mat, ffi.Pointer)>(); - CvStatus Mat_GetUShort3( - Mat m, - int x, - int y, - int z, - ffi.Pointer rval, + void KalmanFilter_Close( + ffi.Pointer self, ) { - return _Mat_GetUShort3( - m, - x, - y, - z, - rval, + return _KalmanFilter_Close( + self, ); } - late final _Mat_GetUShort3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('Mat_GetUShort3'); - late final _Mat_GetUShort3 = _Mat_GetUShort3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + late final _KalmanFilter_ClosePtr = + _lookup)>>( + 'KalmanFilter_Close'); + late final _KalmanFilter_Close = _KalmanFilter_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus Mat_GetVec2b( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_Correct( + KalmanFilter self, + Mat measurement, + ffi.Pointer rval, ) { - return _Mat_GetVec2b( - m, - row, - col, + return _KalmanFilter_Correct( + self, + measurement, rval, ); } - late final _Mat_GetVec2bPtr = _lookup< + late final _KalmanFilter_CorrectPtr = _lookup< ffi.NativeFunction< CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec2b'); - late final _Mat_GetVec2b = _Mat_GetVec2bPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + KalmanFilter, Mat, ffi.Pointer)>>('KalmanFilter_Correct'); + late final _KalmanFilter_Correct = _KalmanFilter_CorrectPtr.asFunction< + CvStatus Function(KalmanFilter, Mat, ffi.Pointer)>(); - CvStatus Mat_GetVec2d( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetControlMatrix( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec2d( - m, - row, - col, + return _KalmanFilter_GetControlMatrix( + self, rval, ); } - late final _Mat_GetVec2dPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec2d'); - late final _Mat_GetVec2d = _Mat_GetVec2dPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetControlMatrixPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetControlMatrix'); + late final _KalmanFilter_GetControlMatrix = _KalmanFilter_GetControlMatrixPtr + .asFunction)>(); - CvStatus Mat_GetVec2f( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetErrorCovPost( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec2f( - m, - row, - col, + return _KalmanFilter_GetErrorCovPost( + self, rval, ); } - late final _Mat_GetVec2fPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec2f'); - late final _Mat_GetVec2f = _Mat_GetVec2fPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetErrorCovPostPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetErrorCovPost'); + late final _KalmanFilter_GetErrorCovPost = _KalmanFilter_GetErrorCovPostPtr + .asFunction)>(); - CvStatus Mat_GetVec2i( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetErrorCovPre( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec2i( - m, - row, - col, + return _KalmanFilter_GetErrorCovPre( + self, rval, ); } - late final _Mat_GetVec2iPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec2i'); - late final _Mat_GetVec2i = _Mat_GetVec2iPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetErrorCovPrePtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetErrorCovPre'); + late final _KalmanFilter_GetErrorCovPre = _KalmanFilter_GetErrorCovPrePtr + .asFunction)>(); - CvStatus Mat_GetVec2s( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetGain( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec2s( - m, - row, - col, + return _KalmanFilter_GetGain( + self, rval, ); } - late final _Mat_GetVec2sPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec2s'); - late final _Mat_GetVec2s = _Mat_GetVec2sPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetGainPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetGain'); + late final _KalmanFilter_GetGain = _KalmanFilter_GetGainPtr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Mat_GetVec2w( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetMeasurementMatrix( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec2w( - m, - row, - col, + return _KalmanFilter_GetMeasurementMatrix( + self, rval, ); } - late final _Mat_GetVec2wPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec2w'); - late final _Mat_GetVec2w = _Mat_GetVec2wPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetMeasurementMatrixPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetMeasurementMatrix'); + late final _KalmanFilter_GetMeasurementMatrix = + _KalmanFilter_GetMeasurementMatrixPtr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Mat_GetVec3b( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetMeasurementNoiseCov( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec3b( - m, - row, - col, + return _KalmanFilter_GetMeasurementNoiseCov( + self, rval, ); } - late final _Mat_GetVec3bPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec3b'); - late final _Mat_GetVec3b = _Mat_GetVec3bPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetMeasurementNoiseCovPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetMeasurementNoiseCov'); + late final _KalmanFilter_GetMeasurementNoiseCov = + _KalmanFilter_GetMeasurementNoiseCovPtr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Mat_GetVec3d( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetProcessNoiseCov( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec3d( - m, - row, - col, + return _KalmanFilter_GetProcessNoiseCov( + self, rval, ); } - late final _Mat_GetVec3dPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec3d'); - late final _Mat_GetVec3d = _Mat_GetVec3dPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetProcessNoiseCovPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetProcessNoiseCov'); + late final _KalmanFilter_GetProcessNoiseCov = + _KalmanFilter_GetProcessNoiseCovPtr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Mat_GetVec3f( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetStatePost( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec3f( - m, - row, - col, + return _KalmanFilter_GetStatePost( + self, rval, ); } - late final _Mat_GetVec3fPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec3f'); - late final _Mat_GetVec3f = _Mat_GetVec3fPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetStatePostPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetStatePost'); + late final _KalmanFilter_GetStatePost = _KalmanFilter_GetStatePostPtr + .asFunction)>(); - CvStatus Mat_GetVec3i( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetStatePre( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec3i( - m, - row, - col, + return _KalmanFilter_GetStatePre( + self, rval, ); } - late final _Mat_GetVec3iPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec3i'); - late final _Mat_GetVec3i = _Mat_GetVec3iPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetStatePrePtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetStatePre'); + late final _KalmanFilter_GetStatePre = _KalmanFilter_GetStatePrePtr + .asFunction)>(); - CvStatus Mat_GetVec3s( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetTemp1( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec3s( - m, - row, - col, + return _KalmanFilter_GetTemp1( + self, rval, ); } - late final _Mat_GetVec3sPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec3s'); - late final _Mat_GetVec3s = _Mat_GetVec3sPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetTemp1Ptr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetTemp1'); + late final _KalmanFilter_GetTemp1 = _KalmanFilter_GetTemp1Ptr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Mat_GetVec3w( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetTemp2( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec3w( - m, - row, - col, + return _KalmanFilter_GetTemp2( + self, rval, ); } - late final _Mat_GetVec3wPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec3w'); - late final _Mat_GetVec3w = _Mat_GetVec3wPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetTemp2Ptr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetTemp2'); + late final _KalmanFilter_GetTemp2 = _KalmanFilter_GetTemp2Ptr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Mat_GetVec4b( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetTemp3( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec4b( - m, - row, - col, + return _KalmanFilter_GetTemp3( + self, rval, ); } - late final _Mat_GetVec4bPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec4b'); - late final _Mat_GetVec4b = _Mat_GetVec4bPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetTemp3Ptr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetTemp3'); + late final _KalmanFilter_GetTemp3 = _KalmanFilter_GetTemp3Ptr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Mat_GetVec4d( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetTemp4( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec4d( - m, - row, - col, + return _KalmanFilter_GetTemp4( + self, rval, ); } - late final _Mat_GetVec4dPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec4d'); - late final _Mat_GetVec4d = _Mat_GetVec4dPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetTemp4Ptr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetTemp4'); + late final _KalmanFilter_GetTemp4 = _KalmanFilter_GetTemp4Ptr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Mat_GetVec4f( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetTemp5( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec4f( - m, - row, - col, + return _KalmanFilter_GetTemp5( + self, rval, ); } - late final _Mat_GetVec4fPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec4f'); - late final _Mat_GetVec4f = _Mat_GetVec4fPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetTemp5Ptr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetTemp5'); + late final _KalmanFilter_GetTemp5 = _KalmanFilter_GetTemp5Ptr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Mat_GetVec4i( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_GetTransitionMatrix( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec4i( - m, - row, - col, + return _KalmanFilter_GetTransitionMatrix( + self, rval, ); } - late final _Mat_GetVec4iPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec4i'); - late final _Mat_GetVec4i = _Mat_GetVec4iPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_GetTransitionMatrixPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetTransitionMatrix'); + late final _KalmanFilter_GetTransitionMatrix = + _KalmanFilter_GetTransitionMatrixPtr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Mat_GetVec4s( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_Init( + KalmanFilter self, + int dynamParams, + int measureParams, ) { - return _Mat_GetVec4s( - m, - row, - col, - rval, + return _KalmanFilter_Init( + self, + dynamParams, + measureParams, ); } - late final _Mat_GetVec4sPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec4s'); - late final _Mat_GetVec4s = _Mat_GetVec4sPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_InitPtr = _lookup< + ffi + .NativeFunction>( + 'KalmanFilter_Init'); + late final _KalmanFilter_Init = _KalmanFilter_InitPtr.asFunction< + CvStatus Function(KalmanFilter, int, int)>(); - CvStatus Mat_GetVec4w( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_InitWithParams( + KalmanFilter self, + int dynamParams, + int measureParams, + int controlParams, + int type, ) { - return _Mat_GetVec4w( - m, - row, - col, - rval, + return _KalmanFilter_InitWithParams( + self, + dynamParams, + measureParams, + controlParams, + type, ); } - late final _Mat_GetVec4wPtr = _lookup< + late final _KalmanFilter_InitWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec4w'); - late final _Mat_GetVec4w = _Mat_GetVec4wPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + CvStatus Function(KalmanFilter, ffi.Int, ffi.Int, ffi.Int, + ffi.Int)>>('KalmanFilter_InitWithParams'); + late final _KalmanFilter_InitWithParams = _KalmanFilter_InitWithParamsPtr + .asFunction(); - CvStatus Mat_GetVec6d( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_New( + int dynamParams, + int measureParams, + int controlParams, + int type, + ffi.Pointer rval, ) { - return _Mat_GetVec6d( - m, - row, - col, + return _KalmanFilter_New( + dynamParams, + measureParams, + controlParams, + type, rval, ); } - late final _Mat_GetVec6dPtr = _lookup< + late final _KalmanFilter_NewPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec6d'); - late final _Mat_GetVec6d = _Mat_GetVec6dPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + CvStatus Function(ffi.Int, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('KalmanFilter_New'); + late final _KalmanFilter_New = _KalmanFilter_NewPtr.asFunction< + CvStatus Function(int, int, int, int, ffi.Pointer)>(); - CvStatus Mat_GetVec6f( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_Predict( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Mat_GetVec6f( - m, - row, - col, + return _KalmanFilter_Predict( + self, rval, ); } - late final _Mat_GetVec6fPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec6f'); - late final _Mat_GetVec6f = _Mat_GetVec6fPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_PredictPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_Predict'); + late final _KalmanFilter_Predict = _KalmanFilter_PredictPtr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Mat_GetVec6i( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_PredictWithParams( + KalmanFilter self, + Mat control, + ffi.Pointer rval, ) { - return _Mat_GetVec6i( - m, - row, - col, + return _KalmanFilter_PredictWithParams( + self, + control, rval, ); } - late final _Mat_GetVec6iPtr = _lookup< + late final _KalmanFilter_PredictWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec6i'); - late final _Mat_GetVec6i = _Mat_GetVec6iPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + CvStatus Function(KalmanFilter, Mat, + ffi.Pointer)>>('KalmanFilter_PredictWithParams'); + late final _KalmanFilter_PredictWithParams = + _KalmanFilter_PredictWithParamsPtr.asFunction< + CvStatus Function(KalmanFilter, Mat, ffi.Pointer)>(); - CvStatus Mat_GetVec8i( - Mat m, - int row, - int col, - ffi.Pointer rval, + CvStatus KalmanFilter_SetControlMatrix( + KalmanFilter self, + Mat controlMatrix, ) { - return _Mat_GetVec8i( - m, - row, - col, - rval, + return _KalmanFilter_SetControlMatrix( + self, + controlMatrix, ); } - late final _Mat_GetVec8iPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec8i'); - late final _Mat_GetVec8i = _Mat_GetVec8iPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _KalmanFilter_SetControlMatrixPtr = + _lookup>( + 'KalmanFilter_SetControlMatrix'); + late final _KalmanFilter_SetControlMatrix = _KalmanFilter_SetControlMatrixPtr + .asFunction(); - CvStatus Mat_Hconcat( - Mat src1, - Mat src2, - Mat dst, + CvStatus KalmanFilter_SetErrorCovPost( + KalmanFilter self, + Mat errorCovPost, ) { - return _Mat_Hconcat( - src1, - src2, - dst, + return _KalmanFilter_SetErrorCovPost( + self, + errorCovPost, ); } - late final _Mat_HconcatPtr = - _lookup>( - 'Mat_Hconcat'); - late final _Mat_Hconcat = - _Mat_HconcatPtr.asFunction(); + late final _KalmanFilter_SetErrorCovPostPtr = + _lookup>( + 'KalmanFilter_SetErrorCovPost'); + late final _KalmanFilter_SetErrorCovPost = _KalmanFilter_SetErrorCovPostPtr + .asFunction(); - CvStatus Mat_Idct( - Mat src, - Mat dst, - int flags, + CvStatus KalmanFilter_SetErrorCovPre( + KalmanFilter self, + Mat errorCovPre, ) { - return _Mat_Idct( - src, - dst, - flags, + return _KalmanFilter_SetErrorCovPre( + self, + errorCovPre, ); } - late final _Mat_IdctPtr = - _lookup>( - 'Mat_Idct'); - late final _Mat_Idct = - _Mat_IdctPtr.asFunction(); + late final _KalmanFilter_SetErrorCovPrePtr = + _lookup>( + 'KalmanFilter_SetErrorCovPre'); + late final _KalmanFilter_SetErrorCovPre = _KalmanFilter_SetErrorCovPrePtr + .asFunction(); - CvStatus Mat_Idft( - Mat src, - Mat dst, - int flags, - int nonzeroRows, + CvStatus KalmanFilter_SetGain( + KalmanFilter self, + Mat gain, ) { - return _Mat_Idft( - src, - dst, - flags, - nonzeroRows, + return _KalmanFilter_SetGain( + self, + gain, ); } - late final _Mat_IdftPtr = _lookup< - ffi.NativeFunction>( - 'Mat_Idft'); - late final _Mat_Idft = - _Mat_IdftPtr.asFunction(); + late final _KalmanFilter_SetGainPtr = + _lookup>( + 'KalmanFilter_SetGain'); + late final _KalmanFilter_SetGain = _KalmanFilter_SetGainPtr.asFunction< + CvStatus Function(KalmanFilter, Mat)>(); - CvStatus Mat_InRange( - Mat src, - Mat lowerb, - Mat upperb, - Mat dst, + CvStatus KalmanFilter_SetMeasurementMatrix( + KalmanFilter self, + Mat measurementMatrix, ) { - return _Mat_InRange( - src, - lowerb, - upperb, - dst, + return _KalmanFilter_SetMeasurementMatrix( + self, + measurementMatrix, ); } - late final _Mat_InRangePtr = - _lookup>( - 'Mat_InRange'); - late final _Mat_InRange = - _Mat_InRangePtr.asFunction(); + late final _KalmanFilter_SetMeasurementMatrixPtr = + _lookup>( + 'KalmanFilter_SetMeasurementMatrix'); + late final _KalmanFilter_SetMeasurementMatrix = + _KalmanFilter_SetMeasurementMatrixPtr.asFunction< + CvStatus Function(KalmanFilter, Mat)>(); - CvStatus Mat_InRangeWithScalar( - Mat src, - Scalar lowerb, - Scalar upperb, - Mat dst, + CvStatus KalmanFilter_SetMeasurementNoiseCov( + KalmanFilter self, + Mat measurementNoiseCov, ) { - return _Mat_InRangeWithScalar( - src, - lowerb, - upperb, - dst, + return _KalmanFilter_SetMeasurementNoiseCov( + self, + measurementNoiseCov, ); } - late final _Mat_InRangeWithScalarPtr = - _lookup>( - 'Mat_InRangeWithScalar'); - late final _Mat_InRangeWithScalar = _Mat_InRangeWithScalarPtr.asFunction< - CvStatus Function(Mat, Scalar, Scalar, Mat)>(); + late final _KalmanFilter_SetMeasurementNoiseCovPtr = + _lookup>( + 'KalmanFilter_SetMeasurementNoiseCov'); + late final _KalmanFilter_SetMeasurementNoiseCov = + _KalmanFilter_SetMeasurementNoiseCovPtr.asFunction< + CvStatus Function(KalmanFilter, Mat)>(); - CvStatus Mat_InsertChannel( - Mat src, - Mat dst, - int coi, + CvStatus KalmanFilter_SetProcessNoiseCov( + KalmanFilter self, + Mat processNoiseCov, ) { - return _Mat_InsertChannel( - src, - dst, - coi, + return _KalmanFilter_SetProcessNoiseCov( + self, + processNoiseCov, ); } - late final _Mat_InsertChannelPtr = - _lookup>( - 'Mat_InsertChannel'); - late final _Mat_InsertChannel = - _Mat_InsertChannelPtr.asFunction(); + late final _KalmanFilter_SetProcessNoiseCovPtr = + _lookup>( + 'KalmanFilter_SetProcessNoiseCov'); + late final _KalmanFilter_SetProcessNoiseCov = + _KalmanFilter_SetProcessNoiseCovPtr.asFunction< + CvStatus Function(KalmanFilter, Mat)>(); - CvStatus Mat_Invert( - Mat src, - Mat dst, - int flags, - ffi.Pointer rval, + CvStatus KalmanFilter_SetStatePost( + KalmanFilter self, + Mat statePost, ) { - return _Mat_Invert( - src, - dst, - flags, - rval, + return _KalmanFilter_SetStatePost( + self, + statePost, ); } - late final _Mat_InvertPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Int, ffi.Pointer)>>('Mat_Invert'); - late final _Mat_Invert = _Mat_InvertPtr.asFunction< - CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); + late final _KalmanFilter_SetStatePostPtr = + _lookup>( + 'KalmanFilter_SetStatePost'); + late final _KalmanFilter_SetStatePost = _KalmanFilter_SetStatePostPtr + .asFunction(); - CvStatus Mat_IsContinuous( - Mat m, - ffi.Pointer rval, + CvStatus KalmanFilter_SetStatePre( + KalmanFilter self, + Mat statePre, ) { - return _Mat_IsContinuous( - m, - rval, + return _KalmanFilter_SetStatePre( + self, + statePre, ); } - late final _Mat_IsContinuousPtr = _lookup< - ffi.NativeFunction)>>( - 'Mat_IsContinuous'); - late final _Mat_IsContinuous = _Mat_IsContinuousPtr.asFunction< - CvStatus Function(Mat, ffi.Pointer)>(); + late final _KalmanFilter_SetStatePrePtr = + _lookup>( + 'KalmanFilter_SetStatePre'); + late final _KalmanFilter_SetStatePre = _KalmanFilter_SetStatePrePtr + .asFunction(); - CvStatus Mat_Log( + CvStatus KalmanFilter_SetTransitionMatrix( + KalmanFilter self, + Mat transitionMatrix, + ) { + return _KalmanFilter_SetTransitionMatrix( + self, + transitionMatrix, + ); + } + + late final _KalmanFilter_SetTransitionMatrixPtr = + _lookup>( + 'KalmanFilter_SetTransitionMatrix'); + late final _KalmanFilter_SetTransitionMatrix = + _KalmanFilter_SetTransitionMatrixPtr.asFunction< + CvStatus Function(KalmanFilter, Mat)>(); + + CvStatus LUT( Mat src, + Mat lut, Mat dst, ) { - return _Mat_Log( + return _LUT( src, + lut, dst, ); } - late final _Mat_LogPtr = - _lookup>('Mat_Log'); - late final _Mat_Log = _Mat_LogPtr.asFunction(); + late final _LUTPtr = + _lookup>('LUT'); + late final _LUT = _LUTPtr.asFunction(); - CvStatus Mat_Magnitude( - Mat x, - Mat y, - Mat magnitude, + CvStatus Laplacian( + Mat src, + Mat dst, + int dDepth, + int kSize, + double scale, + double delta, + int borderType, ) { - return _Mat_Magnitude( - x, - y, - magnitude, + return _Laplacian( + src, + dst, + dDepth, + kSize, + scale, + delta, + borderType, ); } - late final _Mat_MagnitudePtr = - _lookup>( - 'Mat_Magnitude'); - late final _Mat_Magnitude = - _Mat_MagnitudePtr.asFunction(); + late final _LaplacianPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Double, ffi.Double, + ffi.Int)>>('Laplacian'); + late final _Laplacian = _LaplacianPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, double, double, int)>(); - CvStatus Mat_Max( - Mat src1, - Mat src2, - Mat dst, + void Layer_Close( + ffi.Pointer layer, ) { - return _Mat_Max( - src1, - src2, - dst, + return _Layer_Close( + layer, ); } - late final _Mat_MaxPtr = - _lookup>('Mat_Max'); - late final _Mat_Max = - _Mat_MaxPtr.asFunction(); + late final _Layer_ClosePtr = + _lookup)>>( + 'Layer_Close'); + late final _Layer_Close = + _Layer_ClosePtr.asFunction)>(); - CvStatus Mat_Mean( - Mat m, - ffi.Pointer rval, + CvStatus Layer_GetName( + Layer layer, + ffi.Pointer rval, ) { - return _Mat_Mean( - m, + return _Layer_GetName( + layer, rval, ); } - late final _Mat_MeanPtr = - _lookup)>>( - 'Mat_Mean'); - late final _Mat_Mean = - _Mat_MeanPtr.asFunction)>(); + late final _Layer_GetNamePtr = _lookup< + ffi.NativeFunction)>>( + 'Layer_GetName'); + late final _Layer_GetName = _Layer_GetNamePtr.asFunction< + CvStatus Function(Layer, ffi.Pointer)>(); - CvStatus Mat_MeanStdDev( - Mat src, - ffi.Pointer dstMean, - ffi.Pointer dstStdDev, + CvStatus Layer_GetType( + Layer layer, + ffi.Pointer rval, ) { - return _Mat_MeanStdDev( - src, - dstMean, - dstStdDev, + return _Layer_GetType( + layer, + rval, ); } - late final _Mat_MeanStdDevPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Pointer, - ffi.Pointer)>>('Mat_MeanStdDev'); - late final _Mat_MeanStdDev = _Mat_MeanStdDevPtr.asFunction< - CvStatus Function(Mat, ffi.Pointer, ffi.Pointer)>(); + late final _Layer_GetTypePtr = _lookup< + ffi.NativeFunction)>>( + 'Layer_GetType'); + late final _Layer_GetType = _Layer_GetTypePtr.asFunction< + CvStatus Function(Layer, ffi.Pointer)>(); - CvStatus Mat_MeanStdDevWithMask( - Mat src, - ffi.Pointer dstMean, - ffi.Pointer dstStdDev, - Mat mask, + CvStatus Layer_InputNameToIndex( + Layer layer, + ffi.Pointer name, + ffi.Pointer rval, ) { - return _Mat_MeanStdDevWithMask( - src, - dstMean, - dstStdDev, - mask, + return _Layer_InputNameToIndex( + layer, + name, + rval, ); } - late final _Mat_MeanStdDevWithMaskPtr = _lookup< + late final _Layer_InputNameToIndexPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Pointer, ffi.Pointer, - Mat)>>('Mat_MeanStdDevWithMask'); - late final _Mat_MeanStdDevWithMask = _Mat_MeanStdDevWithMaskPtr.asFunction< - CvStatus Function(Mat, ffi.Pointer, ffi.Pointer, Mat)>(); + CvStatus Function(Layer, ffi.Pointer, + ffi.Pointer)>>('Layer_InputNameToIndex'); + late final _Layer_InputNameToIndex = _Layer_InputNameToIndexPtr.asFunction< + CvStatus Function(Layer, ffi.Pointer, ffi.Pointer)>(); - CvStatus Mat_MeanWithMask( - Mat m, - Mat mask, - ffi.Pointer rval, + CvStatus Layer_OutputNameToIndex( + Layer layer, + ffi.Pointer name, + ffi.Pointer rval, ) { - return _Mat_MeanWithMask( - m, - mask, + return _Layer_OutputNameToIndex( + layer, + name, rval, ); } - late final _Mat_MeanWithMaskPtr = _lookup< - ffi.NativeFunction)>>( - 'Mat_MeanWithMask'); - late final _Mat_MeanWithMask = _Mat_MeanWithMaskPtr.asFunction< - CvStatus Function(Mat, Mat, ffi.Pointer)>(); + late final _Layer_OutputNameToIndexPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Layer, ffi.Pointer, + ffi.Pointer)>>('Layer_OutputNameToIndex'); + late final _Layer_OutputNameToIndex = _Layer_OutputNameToIndexPtr.asFunction< + CvStatus Function(Layer, ffi.Pointer, ffi.Pointer)>(); - CvStatus Mat_Merge( - VecMat mats, - Mat dst, + CvStatus Line( + Mat img, + Point pt1, + Point pt2, + Scalar color, + int thickness, + int lineType, + int shift, ) { - return _Mat_Merge( - mats, - dst, + return _Line( + img, + pt1, + pt2, + color, + thickness, + lineType, + shift, ); } - late final _Mat_MergePtr = - _lookup>('Mat_Merge'); - late final _Mat_Merge = - _Mat_MergePtr.asFunction(); + late final _LinePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Point, Point, Scalar, ffi.Int, ffi.Int, ffi.Int)>>('Line'); + late final _Line = _LinePtr.asFunction< + CvStatus Function(Mat, Point, Point, Scalar, int, int, int)>(); - CvStatus Mat_Min( - Mat src1, - Mat src2, + CvStatus LinearPolar( + Mat src, Mat dst, + Point2f center, + double maxRadius, + int flags, ) { - return _Mat_Min( - src1, - src2, + return _LinearPolar( + src, dst, + center, + maxRadius, + flags, ); } - late final _Mat_MinPtr = - _lookup>('Mat_Min'); - late final _Mat_Min = - _Mat_MinPtr.asFunction(); - - CvStatus Mat_MinMaxIdx( - Mat m, - ffi.Pointer minVal, - ffi.Pointer maxVal, - ffi.Pointer minIdx, - ffi.Pointer maxIdx, - ) { - return _Mat_MinMaxIdx( - m, - minVal, - maxVal, - minIdx, - maxIdx, - ); - } - - late final _Mat_MinMaxIdxPtr = _lookup< + late final _LinearPolarPtr = _lookup< ffi.NativeFunction< CvStatus Function( - Mat, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>('Mat_MinMaxIdx'); - late final _Mat_MinMaxIdx = _Mat_MinMaxIdxPtr.asFunction< - CvStatus Function(Mat, ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>(); + Mat, Mat, Point2f, ffi.Double, ffi.Int)>>('LinearPolar'); + late final _LinearPolar = _LinearPolarPtr.asFunction< + CvStatus Function(Mat, Mat, Point2f, double, int)>(); - CvStatus Mat_MinMaxLoc( - Mat m, - ffi.Pointer minVal, - ffi.Pointer maxVal, - ffi.Pointer minLoc, - ffi.Pointer maxLoc, + CvStatus LogPolar( + Mat src, + Mat dst, + Point2f center, + double m, + int flags, ) { - return _Mat_MinMaxLoc( + return _LogPolar( + src, + dst, + center, m, - minVal, - maxVal, - minLoc, - maxLoc, + flags, ); } - late final _Mat_MinMaxLocPtr = _lookup< + late final _LogPolarPtr = _lookup< ffi.NativeFunction< CvStatus Function( - Mat, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>('Mat_MinMaxLoc'); - late final _Mat_MinMaxLoc = _Mat_MinMaxLocPtr.asFunction< - CvStatus Function(Mat, ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>(); + Mat, Mat, Point2f, ffi.Double, ffi.Int)>>('LogPolar'); + late final _LogPolar = _LogPolarPtr.asFunction< + CvStatus Function(Mat, Mat, Point2f, double, int)>(); - CvStatus Mat_MixChannels( - VecMat src, - VecMat dst, - VecInt fromTo, + CvStatus LogisticRegression_Clear( + LogisticRegression self, ) { - return _Mat_MixChannels( - src, - dst, - fromTo, + return _LogisticRegression_Clear( + self, ); } - late final _Mat_MixChannelsPtr = - _lookup>( - 'Mat_MixChannels'); - late final _Mat_MixChannels = _Mat_MixChannelsPtr.asFunction< - CvStatus Function(VecMat, VecMat, VecInt)>(); + late final _LogisticRegression_ClearPtr = + _lookup>( + 'LogisticRegression_Clear'); + late final _LogisticRegression_Clear = _LogisticRegression_ClearPtr + .asFunction(); - CvStatus Mat_MulSpectrums( - Mat a, - Mat b, - Mat c, - int flags, + void LogisticRegression_Close( + ffi.Pointer self, ) { - return _Mat_MulSpectrums( - a, - b, - c, - flags, + return _LogisticRegression_Close( + self, ); } - late final _Mat_MulSpectrumsPtr = - _lookup>( - 'Mat_MulSpectrums'); - late final _Mat_MulSpectrums = - _Mat_MulSpectrumsPtr.asFunction(); + late final _LogisticRegression_ClosePtr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer)>>('LogisticRegression_Close'); + late final _LogisticRegression_Close = _LogisticRegression_ClosePtr + .asFunction)>(); - CvStatus Mat_Multiply( - Mat src1, - Mat src2, - Mat dst, + CvStatus LogisticRegression_Create( + ffi.Pointer rval, ) { - return _Mat_Multiply( - src1, - src2, - dst, + return _LogisticRegression_Create( + rval, ); } - late final _Mat_MultiplyPtr = - _lookup>( - 'Mat_Multiply'); - late final _Mat_Multiply = - _Mat_MultiplyPtr.asFunction(); + late final _LogisticRegression_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'LogisticRegression_Create'); + late final _LogisticRegression_Create = _LogisticRegression_CreatePtr + .asFunction)>(); - CvStatus Mat_MultiplyF64( - Mat m, - double val, + CvStatus LogisticRegression_Get( + PtrLogisticRegression self, + ffi.Pointer rval, ) { - return _Mat_MultiplyF64( - m, - val, + return _LogisticRegression_Get( + self, + rval, ); } - late final _Mat_MultiplyF64Ptr = - _lookup>( - 'Mat_MultiplyF64'); - late final _Mat_MultiplyF64 = - _Mat_MultiplyF64Ptr.asFunction(); + late final _LogisticRegression_GetPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrLogisticRegression, + ffi.Pointer)>>('LogisticRegression_Get'); + late final _LogisticRegression_Get = _LogisticRegression_GetPtr.asFunction< + CvStatus Function( + PtrLogisticRegression, ffi.Pointer)>(); - CvStatus Mat_MultiplyFloat( - Mat m, - double val, + CvStatus LogisticRegression_GetIterations( + LogisticRegression self, + ffi.Pointer rval, ) { - return _Mat_MultiplyFloat( - m, - val, + return _LogisticRegression_GetIterations( + self, + rval, ); } - late final _Mat_MultiplyFloatPtr = - _lookup>( - 'Mat_MultiplyFloat'); - late final _Mat_MultiplyFloat = - _Mat_MultiplyFloatPtr.asFunction(); + late final _LogisticRegression_GetIterationsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_GetIterations'); + late final _LogisticRegression_GetIterations = + _LogisticRegression_GetIterationsPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus Mat_MultiplyI32( - Mat m, - int val, + CvStatus LogisticRegression_GetLearningRate( + LogisticRegression self, + ffi.Pointer rval, ) { - return _Mat_MultiplyI32( - m, - val, + return _LogisticRegression_GetLearningRate( + self, + rval, ); } - late final _Mat_MultiplyI32Ptr = - _lookup>( - 'Mat_MultiplyI32'); - late final _Mat_MultiplyI32 = - _Mat_MultiplyI32Ptr.asFunction(); + late final _LogisticRegression_GetLearningRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_GetLearningRate'); + late final _LogisticRegression_GetLearningRate = + _LogisticRegression_GetLearningRatePtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus Mat_MultiplyMatrix( - Mat x, - Mat y, + CvStatus LogisticRegression_GetLearntThetas( + LogisticRegression self, ffi.Pointer rval, ) { - return _Mat_MultiplyMatrix( - x, - y, + return _LogisticRegression_GetLearntThetas( + self, rval, ); } - late final _Mat_MultiplyMatrixPtr = _lookup< - ffi.NativeFunction)>>( - 'Mat_MultiplyMatrix'); - late final _Mat_MultiplyMatrix = _Mat_MultiplyMatrixPtr.asFunction< - CvStatus Function(Mat, Mat, ffi.Pointer)>(); + late final _LogisticRegression_GetLearntThetasPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_GetLearntThetas'); + late final _LogisticRegression_GetLearntThetas = + _LogisticRegression_GetLearntThetasPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus Mat_MultiplySChar( - Mat m, - int val, + CvStatus LogisticRegression_GetMiniBatchSize( + LogisticRegression self, + ffi.Pointer rval, ) { - return _Mat_MultiplySChar( - m, - val, + return _LogisticRegression_GetMiniBatchSize( + self, + rval, ); } - late final _Mat_MultiplySCharPtr = - _lookup>( - 'Mat_MultiplySChar'); - late final _Mat_MultiplySChar = - _Mat_MultiplySCharPtr.asFunction(); + late final _LogisticRegression_GetMiniBatchSizePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_GetMiniBatchSize'); + late final _LogisticRegression_GetMiniBatchSize = + _LogisticRegression_GetMiniBatchSizePtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus Mat_MultiplyUChar( - Mat m, - int val, + CvStatus LogisticRegression_GetRegularization( + LogisticRegression self, + ffi.Pointer rval, ) { - return _Mat_MultiplyUChar( - m, - val, + return _LogisticRegression_GetRegularization( + self, + rval, ); } - late final _Mat_MultiplyUCharPtr = - _lookup>( - 'Mat_MultiplyUChar'); - late final _Mat_MultiplyUChar = - _Mat_MultiplyUCharPtr.asFunction(); + late final _LogisticRegression_GetRegularizationPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_GetRegularization'); + late final _LogisticRegression_GetRegularization = + _LogisticRegression_GetRegularizationPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus Mat_MultiplyWithParams( - Mat src1, - Mat src2, - Mat dst, - double scale, - int dtype, + CvStatus LogisticRegression_GetTermCriteria( + LogisticRegression self, + ffi.Pointer rval, ) { - return _Mat_MultiplyWithParams( - src1, - src2, - dst, - scale, - dtype, + return _LogisticRegression_GetTermCriteria( + self, + rval, ); } - late final _Mat_MultiplyWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, ffi.Double, ffi.Int)>>('Mat_MultiplyWithParams'); - late final _Mat_MultiplyWithParams = _Mat_MultiplyWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, double, int)>(); - - /// @brief Create empty Mat - /// - /// ALL return values with a type of `Pointer of Struct`, - /// e.g., Mat, the internal pointer (Mat.ptr) MUST be NULL - /// otherwise the memory of mat.ptr pointed to will NOT be freed correctly. - /// Mat* mat = (Mat*)malloc(sizeof(Mat)); - /// CvStatus status = Mat_New(mat); - /// Mat_Close(mat); - /// - /// @param rval Mat* - /// @return CvStatus - CvStatus Mat_New( - ffi.Pointer rval, + late final _LogisticRegression_GetTermCriteriaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + LogisticRegression, ffi.Pointer)>>( + 'LogisticRegression_GetTermCriteria'); + late final _LogisticRegression_GetTermCriteria = + _LogisticRegression_GetTermCriteriaPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); + + CvStatus LogisticRegression_GetTrainMethod( + LogisticRegression self, + ffi.Pointer rval, ) { - return _Mat_New( + return _LogisticRegression_GetTrainMethod( + self, rval, ); } - late final _Mat_NewPtr = - _lookup)>>( - 'Mat_New'); - late final _Mat_New = - _Mat_NewPtr.asFunction)>(); + late final _LogisticRegression_GetTrainMethodPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_GetTrainMethod'); + late final _LogisticRegression_GetTrainMethod = + _LogisticRegression_GetTrainMethodPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus Mat_NewFromBytes( - int rows, - int cols, - int type, - ffi.Pointer buf, - int step, - ffi.Pointer rval, + CvStatus LogisticRegression_Load( + LogisticRegression self, + ffi.Pointer filepath, ) { - return _Mat_NewFromBytes( - rows, - cols, - type, - buf, - step, - rval, + return _LogisticRegression_Load( + self, + filepath, ); } - late final _Mat_NewFromBytesPtr = _lookup< + late final _LogisticRegression_LoadPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Int, ffi.Int, ffi.Pointer, - ffi.Int, ffi.Pointer)>>('Mat_NewFromBytes'); - late final _Mat_NewFromBytes = _Mat_NewFromBytesPtr.asFunction< - CvStatus Function( - int, int, int, ffi.Pointer, int, ffi.Pointer)>(); + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_Load'); + late final _LogisticRegression_Load = _LogisticRegression_LoadPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus Mat_NewFromScalar( - Scalar ar, - int type, - ffi.Pointer rval, + CvStatus LogisticRegression_LoadFromString( + LogisticRegression self, + ffi.Pointer strModel, + ffi.Pointer objname, ) { - return _Mat_NewFromScalar( - ar, - type, - rval, + return _LogisticRegression_LoadFromString( + self, + strModel, + objname, ); } - late final _Mat_NewFromScalarPtr = _lookup< + late final _LogisticRegression_LoadFromStringPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Scalar, ffi.Int, ffi.Pointer)>>('Mat_NewFromScalar'); - late final _Mat_NewFromScalar = _Mat_NewFromScalarPtr.asFunction< - CvStatus Function(Scalar, int, ffi.Pointer)>(); + CvStatus Function(LogisticRegression, ffi.Pointer, + ffi.Pointer)>>('LogisticRegression_LoadFromString'); + late final _LogisticRegression_LoadFromString = + _LogisticRegression_LoadFromStringPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer, + ffi.Pointer)>(); - CvStatus Mat_NewFromVecPoint( - VecPoint vec, - ffi.Pointer rval, + CvStatus LogisticRegression_Predict( + LogisticRegression self, + Mat samples, + Mat results, + int flags, + ffi.Pointer rval, ) { - return _Mat_NewFromVecPoint( - vec, + return _LogisticRegression_Predict( + self, + samples, + results, + flags, rval, ); } - late final _Mat_NewFromVecPointPtr = _lookup< - ffi.NativeFunction)>>( - 'Mat_NewFromVecPoint'); - late final _Mat_NewFromVecPoint = _Mat_NewFromVecPointPtr.asFunction< - CvStatus Function(VecPoint, ffi.Pointer)>(); + late final _LogisticRegression_PredictPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, Mat, Mat, ffi.Int, + ffi.Pointer)>>('LogisticRegression_Predict'); + late final _LogisticRegression_Predict = + _LogisticRegression_PredictPtr.asFunction< + CvStatus Function( + LogisticRegression, Mat, Mat, int, ffi.Pointer)>(); - CvStatus Mat_NewFromVecPoint2f( - VecPoint2f vec, - ffi.Pointer rval, + CvStatus LogisticRegression_Save( + LogisticRegression self, + ffi.Pointer filename, ) { - return _Mat_NewFromVecPoint2f( - vec, - rval, + return _LogisticRegression_Save( + self, + filename, ); } - late final _Mat_NewFromVecPoint2fPtr = _lookup< - ffi.NativeFunction)>>( - 'Mat_NewFromVecPoint2f'); - late final _Mat_NewFromVecPoint2f = _Mat_NewFromVecPoint2fPtr.asFunction< - CvStatus Function(VecPoint2f, ffi.Pointer)>(); + late final _LogisticRegression_SavePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_Save'); + late final _LogisticRegression_Save = _LogisticRegression_SavePtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus Mat_NewFromVecPoint3f( - VecPoint3f vec, - ffi.Pointer rval, + CvStatus LogisticRegression_SetIterations( + LogisticRegression self, + int val, ) { - return _Mat_NewFromVecPoint3f( - vec, - rval, + return _LogisticRegression_SetIterations( + self, + val, ); } - late final _Mat_NewFromVecPoint3fPtr = _lookup< - ffi.NativeFunction)>>( - 'Mat_NewFromVecPoint3f'); - late final _Mat_NewFromVecPoint3f = _Mat_NewFromVecPoint3fPtr.asFunction< - CvStatus Function(VecPoint3f, ffi.Pointer)>(); + late final _LogisticRegression_SetIterationsPtr = _lookup< + ffi.NativeFunction>( + 'LogisticRegression_SetIterations'); + late final _LogisticRegression_SetIterations = + _LogisticRegression_SetIterationsPtr.asFunction< + CvStatus Function(LogisticRegression, int)>(); - CvStatus Mat_NewWithSize( - int rows, - int cols, - int type, - ffi.Pointer rval, + CvStatus LogisticRegression_SetLearningRate( + LogisticRegression self, + double val, ) { - return _Mat_NewWithSize( - rows, - cols, - type, - rval, + return _LogisticRegression_SetLearningRate( + self, + val, ); } - late final _Mat_NewWithSizePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ffi.Int, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_NewWithSize'); - late final _Mat_NewWithSize = _Mat_NewWithSizePtr.asFunction< - CvStatus Function(int, int, int, ffi.Pointer)>(); + late final _LogisticRegression_SetLearningRatePtr = _lookup< + ffi + .NativeFunction>( + 'LogisticRegression_SetLearningRate'); + late final _LogisticRegression_SetLearningRate = + _LogisticRegression_SetLearningRatePtr.asFunction< + CvStatus Function(LogisticRegression, double)>(); + + CvStatus LogisticRegression_SetMiniBatchSize( + LogisticRegression self, + int val, + ) { + return _LogisticRegression_SetMiniBatchSize( + self, + val, + ); + } - CvStatus Mat_NewWithSizeFromScalar( - Scalar ar, - int rows, - int cols, - int type, - ffi.Pointer rval, + late final _LogisticRegression_SetMiniBatchSizePtr = _lookup< + ffi.NativeFunction>( + 'LogisticRegression_SetMiniBatchSize'); + late final _LogisticRegression_SetMiniBatchSize = + _LogisticRegression_SetMiniBatchSizePtr.asFunction< + CvStatus Function(LogisticRegression, int)>(); + + CvStatus LogisticRegression_SetRegularization( + LogisticRegression self, + int val, ) { - return _Mat_NewWithSizeFromScalar( - ar, - rows, - cols, - type, - rval, + return _LogisticRegression_SetRegularization( + self, + val, ); } - late final _Mat_NewWithSizeFromScalarPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Scalar, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('Mat_NewWithSizeFromScalar'); - late final _Mat_NewWithSizeFromScalar = _Mat_NewWithSizeFromScalarPtr - .asFunction)>(); + late final _LogisticRegression_SetRegularizationPtr = _lookup< + ffi.NativeFunction>( + 'LogisticRegression_SetRegularization'); + late final _LogisticRegression_SetRegularization = + _LogisticRegression_SetRegularizationPtr.asFunction< + CvStatus Function(LogisticRegression, int)>(); - CvStatus Mat_NewWithSizes( - VecInt sizes, - int type, - ffi.Pointer rval, + CvStatus LogisticRegression_SetTermCriteria( + LogisticRegression self, + TermCriteria val, ) { - return _Mat_NewWithSizes( - sizes, - type, + return _LogisticRegression_SetTermCriteria( + self, + val, + ); + } + + late final _LogisticRegression_SetTermCriteriaPtr = _lookup< + ffi + .NativeFunction>( + 'LogisticRegression_SetTermCriteria'); + late final _LogisticRegression_SetTermCriteria = + _LogisticRegression_SetTermCriteriaPtr.asFunction< + CvStatus Function(LogisticRegression, TermCriteria)>(); + + CvStatus LogisticRegression_SetTrainMethod( + LogisticRegression self, + int val, + ) { + return _LogisticRegression_SetTrainMethod( + self, + val, + ); + } + + late final _LogisticRegression_SetTrainMethodPtr = _lookup< + ffi.NativeFunction>( + 'LogisticRegression_SetTrainMethod'); + late final _LogisticRegression_SetTrainMethod = + _LogisticRegression_SetTrainMethodPtr.asFunction< + CvStatus Function(LogisticRegression, int)>(); + + CvStatus LogisticRegression_Train( + LogisticRegression self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, + ) { + return _LogisticRegression_Train( + self, + trainData, + flags, rval, ); } - late final _Mat_NewWithSizesPtr = _lookup< + late final _LogisticRegression_TrainPtr = _lookup< ffi.NativeFunction< + CvStatus Function(LogisticRegression, PtrTrainData, ffi.Int, + ffi.Pointer)>>('LogisticRegression_Train'); + late final _LogisticRegression_Train = + _LogisticRegression_TrainPtr.asFunction< CvStatus Function( - VecInt, ffi.Int, ffi.Pointer)>>('Mat_NewWithSizes'); - late final _Mat_NewWithSizes = _Mat_NewWithSizesPtr.asFunction< - CvStatus Function(VecInt, int, ffi.Pointer)>(); + LogisticRegression, PtrTrainData, int, ffi.Pointer)>(); - CvStatus Mat_NewWithSizesFromBytes( - VecInt sizes, - int type, - VecChar buf, - ffi.Pointer rval, + CvStatus LogisticRegression_Train_1( + LogisticRegression self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _Mat_NewWithSizesFromBytes( - sizes, - type, - buf, + return _LogisticRegression_Train_1( + self, + samples, + layout, + responses, rval, ); } - late final _Mat_NewWithSizesFromBytesPtr = _lookup< + late final _LogisticRegression_Train_1Ptr = _lookup< ffi.NativeFunction< - CvStatus Function(VecInt, ffi.Int, VecChar, - ffi.Pointer)>>('Mat_NewWithSizesFromBytes'); - late final _Mat_NewWithSizesFromBytes = _Mat_NewWithSizesFromBytesPtr - .asFunction)>(); + CvStatus Function(LogisticRegression, Mat, ffi.Int, Mat, + ffi.Pointer)>>('LogisticRegression_Train_1'); + late final _LogisticRegression_Train_1 = + _LogisticRegression_Train_1Ptr.asFunction< + CvStatus Function( + LogisticRegression, Mat, int, Mat, ffi.Pointer)>(); - CvStatus Mat_NewWithSizesFromScalar( - VecInt sizes, - int type, - Scalar ar, - ffi.Pointer rval, + void MSER_Close( + ffi.Pointer a, ) { - return _Mat_NewWithSizesFromScalar( - sizes, - type, - ar, - rval, + return _MSER_Close( + a, ); } - late final _Mat_NewWithSizesFromScalarPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecInt, ffi.Int, Scalar, - ffi.Pointer)>>('Mat_NewWithSizesFromScalar'); - late final _Mat_NewWithSizesFromScalar = _Mat_NewWithSizesFromScalarPtr - .asFunction)>(); + late final _MSER_ClosePtr = + _lookup)>>( + 'MSER_Close'); + late final _MSER_Close = + _MSER_ClosePtr.asFunction)>(); - CvStatus Mat_Normalize( - Mat src, - Mat dst, - double alpha, - double beta, - int typ, + CvStatus MSER_Create( + ffi.Pointer rval, ) { - return _Mat_Normalize( - src, - dst, - alpha, - beta, - typ, + return _MSER_Create( + rval, ); } - late final _Mat_NormalizePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Double, ffi.Double, ffi.Int)>>('Mat_Normalize'); - late final _Mat_Normalize = _Mat_NormalizePtr.asFunction< - CvStatus Function(Mat, Mat, double, double, int)>(); + late final _MSER_CreatePtr = + _lookup)>>( + 'MSER_Create'); + late final _MSER_Create = + _MSER_CreatePtr.asFunction)>(); - CvStatus Mat_PCACompute( + CvStatus MSER_Detect( + MSER a, Mat src, - Mat mean, - Mat eigenvectors, - Mat eigenvalues, - int maxComponents, + ffi.Pointer rval, ) { - return _Mat_PCACompute( + return _MSER_Detect( + a, src, - mean, - eigenvectors, - eigenvalues, - maxComponents, + rval, ); } - late final _Mat_PCAComputePtr = _lookup< - ffi.NativeFunction>( - 'Mat_PCACompute'); - late final _Mat_PCACompute = _Mat_PCAComputePtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat, int)>(); + late final _MSER_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + MSER, Mat, ffi.Pointer)>>('MSER_Detect'); + late final _MSER_Detect = _MSER_DetectPtr.asFunction< + CvStatus Function(MSER, Mat, ffi.Pointer)>(); - CvStatus Mat_PatchNaNs( - Mat m, - double val, + CvStatus Mat_AbsDiff( + Mat src1, + Mat src2, + Mat dst, ) { - return _Mat_PatchNaNs( - m, - val, + return _Mat_AbsDiff( + src1, + src2, + dst, ); } - late final _Mat_PatchNaNsPtr = - _lookup>( - 'Mat_PatchNaNs'); - late final _Mat_PatchNaNs = - _Mat_PatchNaNsPtr.asFunction(); + late final _Mat_AbsDiffPtr = + _lookup>( + 'Mat_AbsDiff'); + late final _Mat_AbsDiff = + _Mat_AbsDiffPtr.asFunction(); - CvStatus Mat_PerspectiveTransform( + CvStatus Mat_Accumulate( Mat src, Mat dst, - Mat tm, ) { - return _Mat_PerspectiveTransform( + return _Mat_Accumulate( src, dst, - tm, ); } - late final _Mat_PerspectiveTransformPtr = + late final _Mat_AccumulatePtr = + _lookup>( + 'Mat_Accumulate'); + late final _Mat_Accumulate = + _Mat_AccumulatePtr.asFunction(); + + CvStatus Mat_AccumulateProduct( + Mat src1, + Mat src2, + Mat dst, + ) { + return _Mat_AccumulateProduct( + src1, + src2, + dst, + ); + } + + late final _Mat_AccumulateProductPtr = _lookup>( - 'Mat_PerspectiveTransform'); - late final _Mat_PerspectiveTransform = _Mat_PerspectiveTransformPtr - .asFunction(); + 'Mat_AccumulateProduct'); + late final _Mat_AccumulateProduct = + _Mat_AccumulateProductPtr.asFunction(); - CvStatus Mat_Phase( - Mat x, - Mat y, - Mat angle, - bool angleInDegrees, + CvStatus Mat_AccumulateProductWithMask( + Mat src1, + Mat src2, + Mat dst, + Mat mask, ) { - return _Mat_Phase( - x, - y, - angle, - angleInDegrees, + return _Mat_AccumulateProductWithMask( + src1, + src2, + dst, + mask, ); } - late final _Mat_PhasePtr = - _lookup>( - 'Mat_Phase'); - late final _Mat_Phase = - _Mat_PhasePtr.asFunction(); + late final _Mat_AccumulateProductWithMaskPtr = + _lookup>( + 'Mat_AccumulateProductWithMask'); + late final _Mat_AccumulateProductWithMask = _Mat_AccumulateProductWithMaskPtr + .asFunction(); - CvStatus Mat_PolarToCart( - Mat magnitude, - Mat degree, - Mat x, - Mat y, - bool angleInDegrees, + CvStatus Mat_AccumulateSquare( + Mat src, + Mat dst, ) { - return _Mat_PolarToCart( - magnitude, - degree, - x, - y, - angleInDegrees, + return _Mat_AccumulateSquare( + src, + dst, ); } - late final _Mat_PolarToCartPtr = _lookup< - ffi.NativeFunction>( - 'Mat_PolarToCart'); - late final _Mat_PolarToCart = _Mat_PolarToCartPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat, bool)>(); + late final _Mat_AccumulateSquarePtr = + _lookup>( + 'Mat_AccumulateSquare'); + late final _Mat_AccumulateSquare = + _Mat_AccumulateSquarePtr.asFunction(); - CvStatus Mat_Pow( + CvStatus Mat_AccumulateSquareWithMask( Mat src, - double power, Mat dst, + Mat mask, ) { - return _Mat_Pow( + return _Mat_AccumulateSquareWithMask( src, - power, dst, + mask, ); } - late final _Mat_PowPtr = - _lookup>( - 'Mat_Pow'); - late final _Mat_Pow = - _Mat_PowPtr.asFunction(); + late final _Mat_AccumulateSquareWithMaskPtr = + _lookup>( + 'Mat_AccumulateSquareWithMask'); + late final _Mat_AccumulateSquareWithMask = _Mat_AccumulateSquareWithMaskPtr + .asFunction(); - CvStatus Mat_Ptr_f32_1( - Mat m, - int i, - ffi.Pointer> rval, + CvStatus Mat_AccumulateWithMask( + Mat src, + Mat dst, + Mat mask, ) { - return _Mat_Ptr_f32_1( - m, - i, - rval, + return _Mat_AccumulateWithMask( + src, + dst, + mask, ); } - late final _Mat_Ptr_f32_1Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_f32_1'); - late final _Mat_Ptr_f32_1 = _Mat_Ptr_f32_1Ptr.asFunction< - CvStatus Function(Mat, int, ffi.Pointer>)>(); + late final _Mat_AccumulateWithMaskPtr = + _lookup>( + 'Mat_AccumulateWithMask'); + late final _Mat_AccumulateWithMask = + _Mat_AccumulateWithMaskPtr.asFunction(); - CvStatus Mat_Ptr_f32_2( - Mat m, - int i, - int j, - ffi.Pointer> rval, + CvStatus Mat_AccumulatedWeighted( + Mat src, + Mat dst, + double alpha, ) { - return _Mat_Ptr_f32_2( - m, - i, - j, - rval, + return _Mat_AccumulatedWeighted( + src, + dst, + alpha, ); } - late final _Mat_Ptr_f32_2Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_f32_2'); - late final _Mat_Ptr_f32_2 = _Mat_Ptr_f32_2Ptr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + late final _Mat_AccumulatedWeightedPtr = + _lookup>( + 'Mat_AccumulatedWeighted'); + late final _Mat_AccumulatedWeighted = _Mat_AccumulatedWeightedPtr.asFunction< + CvStatus Function(Mat, Mat, double)>(); - CvStatus Mat_Ptr_f32_3( - Mat m, - int i, - int j, - int k, - ffi.Pointer> rval, + CvStatus Mat_AccumulatedWeightedWithMask( + Mat src, + Mat dst, + double alpha, + Mat mask, ) { - return _Mat_Ptr_f32_3( - m, - i, - j, - k, - rval, + return _Mat_AccumulatedWeightedWithMask( + src, + dst, + alpha, + mask, ); } - late final _Mat_Ptr_f32_3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_f32_3'); - late final _Mat_Ptr_f32_3 = _Mat_Ptr_f32_3Ptr.asFunction< - CvStatus Function( - Mat, int, int, int, ffi.Pointer>)>(); + late final _Mat_AccumulatedWeightedWithMaskPtr = + _lookup>( + 'Mat_AccumulatedWeightedWithMask'); + late final _Mat_AccumulatedWeightedWithMask = + _Mat_AccumulatedWeightedWithMaskPtr.asFunction< + CvStatus Function(Mat, Mat, double, Mat)>(); - CvStatus Mat_Ptr_f64_1( - Mat m, - int i, - ffi.Pointer> rval, + CvStatus Mat_Add( + Mat src1, + Mat src2, + Mat dst, ) { - return _Mat_Ptr_f64_1( - m, - i, - rval, + return _Mat_Add( + src1, + src2, + dst, ); } - late final _Mat_Ptr_f64_1Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_f64_1'); - late final _Mat_Ptr_f64_1 = _Mat_Ptr_f64_1Ptr.asFunction< - CvStatus Function(Mat, int, ffi.Pointer>)>(); + late final _Mat_AddPtr = + _lookup>('Mat_Add'); + late final _Mat_Add = + _Mat_AddPtr.asFunction(); - CvStatus Mat_Ptr_f64_2( + CvStatus Mat_AddF64( Mat m, - int i, - int j, - ffi.Pointer> rval, + double val, ) { - return _Mat_Ptr_f64_2( + return _Mat_AddF64( m, - i, - j, - rval, + val, ); } - late final _Mat_Ptr_f64_2Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_f64_2'); - late final _Mat_Ptr_f64_2 = _Mat_Ptr_f64_2Ptr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + late final _Mat_AddF64Ptr = + _lookup>( + 'Mat_AddF64'); + late final _Mat_AddF64 = + _Mat_AddF64Ptr.asFunction(); - CvStatus Mat_Ptr_f64_3( + CvStatus Mat_AddFloat( Mat m, - int i, - int j, - int k, - ffi.Pointer> rval, + double val, ) { - return _Mat_Ptr_f64_3( + return _Mat_AddFloat( m, - i, - j, - k, - rval, + val, ); } - late final _Mat_Ptr_f64_3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_f64_3'); - late final _Mat_Ptr_f64_3 = _Mat_Ptr_f64_3Ptr.asFunction< - CvStatus Function( - Mat, int, int, int, ffi.Pointer>)>(); + late final _Mat_AddFloatPtr = + _lookup>( + 'Mat_AddFloat'); + late final _Mat_AddFloat = + _Mat_AddFloatPtr.asFunction(); - CvStatus Mat_Ptr_i16_1( + CvStatus Mat_AddI32( Mat m, - int i, - ffi.Pointer> rval, + int val, ) { - return _Mat_Ptr_i16_1( + return _Mat_AddI32( m, - i, - rval, + val, ); } - late final _Mat_Ptr_i16_1Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_i16_1'); - late final _Mat_Ptr_i16_1 = _Mat_Ptr_i16_1Ptr.asFunction< - CvStatus Function(Mat, int, ffi.Pointer>)>(); + late final _Mat_AddI32Ptr = + _lookup>( + 'Mat_AddI32'); + late final _Mat_AddI32 = + _Mat_AddI32Ptr.asFunction(); - CvStatus Mat_Ptr_i16_2( + CvStatus Mat_AddSChar( Mat m, - int i, - int j, - ffi.Pointer> rval, + int val, ) { - return _Mat_Ptr_i16_2( + return _Mat_AddSChar( m, - i, - j, - rval, + val, ); } - late final _Mat_Ptr_i16_2Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_i16_2'); - late final _Mat_Ptr_i16_2 = _Mat_Ptr_i16_2Ptr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + late final _Mat_AddSCharPtr = + _lookup>( + 'Mat_AddSChar'); + late final _Mat_AddSChar = + _Mat_AddSCharPtr.asFunction(); - CvStatus Mat_Ptr_i16_3( + CvStatus Mat_AddUChar( Mat m, - int i, - int j, - int k, - ffi.Pointer> rval, + int val, ) { - return _Mat_Ptr_i16_3( + return _Mat_AddUChar( m, - i, - j, - k, - rval, + val, ); } - late final _Mat_Ptr_i16_3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_i16_3'); - late final _Mat_Ptr_i16_3 = _Mat_Ptr_i16_3Ptr.asFunction< - CvStatus Function( - Mat, int, int, int, ffi.Pointer>)>(); + late final _Mat_AddUCharPtr = + _lookup>( + 'Mat_AddUChar'); + late final _Mat_AddUChar = + _Mat_AddUCharPtr.asFunction(); - CvStatus Mat_Ptr_i32_1( - Mat m, - int i, - ffi.Pointer> rval, + CvStatus Mat_AddWeighted( + Mat src1, + double alpha, + Mat src2, + double beta, + double gamma, + Mat dst, ) { - return _Mat_Ptr_i32_1( - m, - i, - rval, + return _Mat_AddWeighted( + src1, + alpha, + src2, + beta, + gamma, + dst, ); } - late final _Mat_Ptr_i32_1Ptr = _lookup< + late final _Mat_AddWeightedPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_i32_1'); - late final _Mat_Ptr_i32_1 = _Mat_Ptr_i32_1Ptr.asFunction< - CvStatus Function(Mat, int, ffi.Pointer>)>(); + CvStatus Function(Mat, ffi.Double, Mat, ffi.Double, ffi.Double, + Mat)>>('Mat_AddWeighted'); + late final _Mat_AddWeighted = _Mat_AddWeightedPtr.asFunction< + CvStatus Function(Mat, double, Mat, double, double, Mat)>(); - CvStatus Mat_Ptr_i32_2( - Mat m, - int i, - int j, - ffi.Pointer> rval, + CvStatus Mat_BatchDistance( + Mat src1, + Mat src2, + Mat dist, + int dtype, + Mat nidx, + int normType, + int K, + Mat mask, + int update, + bool crosscheck, ) { - return _Mat_Ptr_i32_2( - m, - i, - j, - rval, + return _Mat_BatchDistance( + src1, + src2, + dist, + dtype, + nidx, + normType, + K, + mask, + update, + crosscheck, ); } - late final _Mat_Ptr_i32_2Ptr = _lookup< + late final _Mat_BatchDistancePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_i32_2'); - late final _Mat_Ptr_i32_2 = _Mat_Ptr_i32_2Ptr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + CvStatus Function(Mat, Mat, Mat, ffi.Int, Mat, ffi.Int, ffi.Int, Mat, + ffi.Int, ffi.Bool)>>('Mat_BatchDistance'); + late final _Mat_BatchDistance = _Mat_BatchDistancePtr.asFunction< + CvStatus Function(Mat, Mat, Mat, int, Mat, int, int, Mat, int, bool)>(); - CvStatus Mat_Ptr_i32_3( - Mat m, - int i, - int j, - int k, - ffi.Pointer> rval, + CvStatus Mat_BitwiseAnd( + Mat src1, + Mat src2, + Mat dst, ) { - return _Mat_Ptr_i32_3( - m, - i, - j, - k, - rval, + return _Mat_BitwiseAnd( + src1, + src2, + dst, ); } - late final _Mat_Ptr_i32_3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_i32_3'); - late final _Mat_Ptr_i32_3 = _Mat_Ptr_i32_3Ptr.asFunction< - CvStatus Function( - Mat, int, int, int, ffi.Pointer>)>(); + late final _Mat_BitwiseAndPtr = + _lookup>( + 'Mat_BitwiseAnd'); + late final _Mat_BitwiseAnd = + _Mat_BitwiseAndPtr.asFunction(); - CvStatus Mat_Ptr_i8_1( - Mat m, - int i, - ffi.Pointer> rval, + CvStatus Mat_BitwiseAndWithMask( + Mat src1, + Mat src2, + Mat dst, + Mat mask, ) { - return _Mat_Ptr_i8_1( - m, - i, - rval, + return _Mat_BitwiseAndWithMask( + src1, + src2, + dst, + mask, ); } - late final _Mat_Ptr_i8_1Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_i8_1'); - late final _Mat_Ptr_i8_1 = _Mat_Ptr_i8_1Ptr.asFunction< - CvStatus Function(Mat, int, ffi.Pointer>)>(); + late final _Mat_BitwiseAndWithMaskPtr = + _lookup>( + 'Mat_BitwiseAndWithMask'); + late final _Mat_BitwiseAndWithMask = _Mat_BitwiseAndWithMaskPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat)>(); - CvStatus Mat_Ptr_i8_2( - Mat m, - int i, - int j, - ffi.Pointer> rval, + CvStatus Mat_BitwiseNot( + Mat src1, + Mat dst, ) { - return _Mat_Ptr_i8_2( - m, - i, - j, - rval, + return _Mat_BitwiseNot( + src1, + dst, ); } - late final _Mat_Ptr_i8_2Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_i8_2'); - late final _Mat_Ptr_i8_2 = _Mat_Ptr_i8_2Ptr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + late final _Mat_BitwiseNotPtr = + _lookup>( + 'Mat_BitwiseNot'); + late final _Mat_BitwiseNot = + _Mat_BitwiseNotPtr.asFunction(); - CvStatus Mat_Ptr_i8_3( - Mat m, - int i, - int j, - int k, - ffi.Pointer> rval, + CvStatus Mat_BitwiseNotWithMask( + Mat src1, + Mat dst, + Mat mask, ) { - return _Mat_Ptr_i8_3( - m, - i, - j, - k, - rval, + return _Mat_BitwiseNotWithMask( + src1, + dst, + mask, ); } - late final _Mat_Ptr_i8_3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_i8_3'); - late final _Mat_Ptr_i8_3 = _Mat_Ptr_i8_3Ptr.asFunction< - CvStatus Function( - Mat, int, int, int, ffi.Pointer>)>(); + late final _Mat_BitwiseNotWithMaskPtr = + _lookup>( + 'Mat_BitwiseNotWithMask'); + late final _Mat_BitwiseNotWithMask = + _Mat_BitwiseNotWithMaskPtr.asFunction(); - CvStatus Mat_Ptr_u16_1( - Mat m, - int i, - ffi.Pointer> rval, + CvStatus Mat_BitwiseOr( + Mat src1, + Mat src2, + Mat dst, ) { - return _Mat_Ptr_u16_1( - m, - i, - rval, + return _Mat_BitwiseOr( + src1, + src2, + dst, ); } - late final _Mat_Ptr_u16_1Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_u16_1'); - late final _Mat_Ptr_u16_1 = _Mat_Ptr_u16_1Ptr.asFunction< - CvStatus Function(Mat, int, ffi.Pointer>)>(); + late final _Mat_BitwiseOrPtr = + _lookup>( + 'Mat_BitwiseOr'); + late final _Mat_BitwiseOr = + _Mat_BitwiseOrPtr.asFunction(); - CvStatus Mat_Ptr_u16_2( - Mat m, - int i, - int j, - ffi.Pointer> rval, + CvStatus Mat_BitwiseOrWithMask( + Mat src1, + Mat src2, + Mat dst, + Mat mask, ) { - return _Mat_Ptr_u16_2( - m, - i, - j, - rval, + return _Mat_BitwiseOrWithMask( + src1, + src2, + dst, + mask, ); } - late final _Mat_Ptr_u16_2Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_u16_2'); - late final _Mat_Ptr_u16_2 = _Mat_Ptr_u16_2Ptr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + late final _Mat_BitwiseOrWithMaskPtr = + _lookup>( + 'Mat_BitwiseOrWithMask'); + late final _Mat_BitwiseOrWithMask = _Mat_BitwiseOrWithMaskPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat)>(); - CvStatus Mat_Ptr_u16_3( - Mat m, - int i, - int j, - int k, - ffi.Pointer> rval, + CvStatus Mat_BitwiseXor( + Mat src1, + Mat src2, + Mat dst, ) { - return _Mat_Ptr_u16_3( - m, - i, - j, - k, - rval, + return _Mat_BitwiseXor( + src1, + src2, + dst, ); } - late final _Mat_Ptr_u16_3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_u16_3'); - late final _Mat_Ptr_u16_3 = _Mat_Ptr_u16_3Ptr.asFunction< - CvStatus Function( - Mat, int, int, int, ffi.Pointer>)>(); + late final _Mat_BitwiseXorPtr = + _lookup>( + 'Mat_BitwiseXor'); + late final _Mat_BitwiseXor = + _Mat_BitwiseXorPtr.asFunction(); - CvStatus Mat_Ptr_u8_1( - Mat m, - int i, - ffi.Pointer> rval, + CvStatus Mat_BitwiseXorWithMask( + Mat src1, + Mat src2, + Mat dst, + Mat mask, ) { - return _Mat_Ptr_u8_1( - m, - i, - rval, + return _Mat_BitwiseXorWithMask( + src1, + src2, + dst, + mask, ); } - late final _Mat_Ptr_u8_1Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Pointer>)>>('Mat_Ptr_u8_1'); - late final _Mat_Ptr_u8_1 = _Mat_Ptr_u8_1Ptr.asFunction< - CvStatus Function(Mat, int, ffi.Pointer>)>(); + late final _Mat_BitwiseXorWithMaskPtr = + _lookup>( + 'Mat_BitwiseXorWithMask'); + late final _Mat_BitwiseXorWithMask = _Mat_BitwiseXorWithMaskPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat)>(); - CvStatus Mat_Ptr_u8_2( - Mat m, - int i, - int j, - ffi.Pointer> rval, + CvStatus Mat_BorderInterpolate( + int p, + int len, + int borderType, + ffi.Pointer rval, ) { - return _Mat_Ptr_u8_2( - m, - i, - j, + return _Mat_BorderInterpolate( + p, + len, + borderType, rval, ); } - late final _Mat_Ptr_u8_2Ptr = _lookup< + late final _Mat_BorderInterpolatePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_u8_2'); - late final _Mat_Ptr_u8_2 = _Mat_Ptr_u8_2Ptr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + CvStatus Function(ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('Mat_BorderInterpolate'); + late final _Mat_BorderInterpolate = _Mat_BorderInterpolatePtr.asFunction< + CvStatus Function(int, int, int, ffi.Pointer)>(); - CvStatus Mat_Ptr_u8_3( - Mat m, - int i, - int j, - int k, - ffi.Pointer> rval, + CvStatus Mat_CalcCovarMatrix( + Mat samples, + Mat covar, + Mat mean, + int flags, + int ctype, ) { - return _Mat_Ptr_u8_3( - m, - i, - j, - k, - rval, + return _Mat_CalcCovarMatrix( + samples, + covar, + mean, + flags, + ctype, ); } - late final _Mat_Ptr_u8_3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer>)>>('Mat_Ptr_u8_3'); - late final _Mat_Ptr_u8_3 = _Mat_Ptr_u8_3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, ffi.Pointer>)>(); + late final _Mat_CalcCovarMatrixPtr = _lookup< + ffi + .NativeFunction>( + 'Mat_CalcCovarMatrix'); + late final _Mat_CalcCovarMatrix = _Mat_CalcCovarMatrixPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, int, int)>(); - CvStatus Mat_Reduce( - Mat src, - Mat dst, - int dim, - int rType, - int dType, + CvStatus Mat_CartToPolar( + Mat x, + Mat y, + Mat magnitude, + Mat angle, + bool angleInDegrees, ) { - return _Mat_Reduce( - src, - dst, - dim, - rType, - dType, + return _Mat_CartToPolar( + x, + y, + magnitude, + angle, + angleInDegrees, ); } - late final _Mat_ReducePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Int, ffi.Int, ffi.Int)>>('Mat_Reduce'); - late final _Mat_Reduce = - _Mat_ReducePtr.asFunction(); + late final _Mat_CartToPolarPtr = _lookup< + ffi.NativeFunction>( + 'Mat_CartToPolar'); + late final _Mat_CartToPolar = _Mat_CartToPolarPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat, bool)>(); - CvStatus Mat_ReduceArgMax( - Mat src, - Mat dst, - int axis, - bool lastIndex, + CvStatus Mat_Channels( + Mat m, + ffi.Pointer rval, ) { - return _Mat_ReduceArgMax( - src, - dst, - axis, - lastIndex, + return _Mat_Channels( + m, + rval, ); } - late final _Mat_ReduceArgMaxPtr = _lookup< - ffi.NativeFunction>( - 'Mat_ReduceArgMax'); - late final _Mat_ReduceArgMax = - _Mat_ReduceArgMaxPtr.asFunction(); + late final _Mat_ChannelsPtr = + _lookup)>>( + 'Mat_Channels'); + late final _Mat_Channels = _Mat_ChannelsPtr.asFunction< + CvStatus Function(Mat, ffi.Pointer)>(); - CvStatus Mat_ReduceArgMin( - Mat src, - Mat dst, - int axis, - bool lastIndex, + CvStatus Mat_CheckRange( + Mat m, + bool quiet, + ffi.Pointer pos, + double minVal, + double maxVal, + ffi.Pointer rval, ) { - return _Mat_ReduceArgMin( - src, - dst, - axis, - lastIndex, + return _Mat_CheckRange( + m, + quiet, + pos, + minVal, + maxVal, + rval, ); } - late final _Mat_ReduceArgMinPtr = _lookup< - ffi.NativeFunction>( - 'Mat_ReduceArgMin'); - late final _Mat_ReduceArgMin = - _Mat_ReduceArgMinPtr.asFunction(); + late final _Mat_CheckRangePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Bool, ffi.Pointer, ffi.Double, + ffi.Double, ffi.Pointer)>>('Mat_CheckRange'); + late final _Mat_CheckRange = _Mat_CheckRangePtr.asFunction< + CvStatus Function(Mat, bool, ffi.Pointer, double, double, + ffi.Pointer)>(); - CvStatus Mat_Region( + CvStatus Mat_Clone( Mat m, - Rect r, ffi.Pointer rval, ) { - return _Mat_Region( + return _Mat_Clone( m, - r, rval, ); } - late final _Mat_RegionPtr = _lookup< - ffi.NativeFunction)>>( - 'Mat_Region'); - late final _Mat_Region = _Mat_RegionPtr.asFunction< - CvStatus Function(Mat, Rect, ffi.Pointer)>(); + late final _Mat_ClonePtr = + _lookup)>>( + 'Mat_Clone'); + late final _Mat_Clone = + _Mat_ClonePtr.asFunction)>(); - CvStatus Mat_Release( + void Mat_Close( ffi.Pointer m, ) { - return _Mat_Release( + return _Mat_Close( m, ); } - late final _Mat_ReleasePtr = - _lookup)>>( - 'Mat_Release'); - late final _Mat_Release = - _Mat_ReleasePtr.asFunction)>(); - - CvStatus Mat_Repeat( - Mat src, - int nY, - int nX, - Mat dst, - ) { - return _Mat_Repeat( - src, - nY, - nX, - dst, - ); - } - - late final _Mat_RepeatPtr = _lookup< - ffi.NativeFunction>( - 'Mat_Repeat'); - late final _Mat_Repeat = - _Mat_RepeatPtr.asFunction(); + late final _Mat_ClosePtr = + _lookup)>>( + 'Mat_Close'); + late final _Mat_Close = + _Mat_ClosePtr.asFunction)>(); - CvStatus Mat_Reshape( - Mat m, - int cn, - int rows, - ffi.Pointer rval, + void Mat_CloseVoid( + ffi.Pointer m, ) { - return _Mat_Reshape( + return _Mat_CloseVoid( m, - cn, - rows, - rval, ); } - late final _Mat_ReshapePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_Reshape'); - late final _Mat_Reshape = _Mat_ReshapePtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _Mat_CloseVoidPtr = + _lookup)>>( + 'Mat_CloseVoid'); + late final _Mat_CloseVoid = + _Mat_CloseVoidPtr.asFunction)>(); - CvStatus Mat_Rows( + CvStatus Mat_Cols( Mat m, ffi.Pointer rval, ) { - return _Mat_Rows( + return _Mat_Cols( m, rval, ); } - late final _Mat_RowsPtr = + late final _Mat_ColsPtr = _lookup)>>( - 'Mat_Rows'); - late final _Mat_Rows = - _Mat_RowsPtr.asFunction)>(); + 'Mat_Cols'); + late final _Mat_Cols = + _Mat_ColsPtr.asFunction)>(); - CvStatus Mat_ScaleAdd( + CvStatus Mat_Compare( Mat src1, - double alpha, Mat src2, Mat dst, + int ct, ) { - return _Mat_ScaleAdd( + return _Mat_Compare( src1, - alpha, src2, dst, + ct, ); } - late final _Mat_ScaleAddPtr = - _lookup>( - 'Mat_ScaleAdd'); - late final _Mat_ScaleAdd = - _Mat_ScaleAddPtr.asFunction(); + late final _Mat_ComparePtr = + _lookup>( + 'Mat_Compare'); + late final _Mat_Compare = + _Mat_ComparePtr.asFunction(); - CvStatus Mat_SetDouble( + CvStatus Mat_CompleteSymm( Mat m, - int row, - int col, - double val, + bool lowerToUpper, ) { - return _Mat_SetDouble( + return _Mat_CompleteSymm( m, - row, - col, - val, + lowerToUpper, ); } - late final _Mat_SetDoublePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Double)>>('Mat_SetDouble'); - late final _Mat_SetDouble = - _Mat_SetDoublePtr.asFunction(); + late final _Mat_CompleteSymmPtr = + _lookup>( + 'Mat_CompleteSymm'); + late final _Mat_CompleteSymm = + _Mat_CompleteSymmPtr.asFunction(); - CvStatus Mat_SetDouble3( + CvStatus Mat_ConvertFp16( Mat m, - int x, - int y, - int z, - double val, + ffi.Pointer rval, ) { - return _Mat_SetDouble3( + return _Mat_ConvertFp16( m, - x, - y, - z, - val, + rval, ); } - late final _Mat_SetDouble3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Double)>>('Mat_SetDouble3'); - late final _Mat_SetDouble3 = _Mat_SetDouble3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, double)>(); + late final _Mat_ConvertFp16Ptr = + _lookup)>>( + 'Mat_ConvertFp16'); + late final _Mat_ConvertFp16 = _Mat_ConvertFp16Ptr.asFunction< + CvStatus Function(Mat, ffi.Pointer)>(); - CvStatus Mat_SetFloat( - Mat m, - int row, - int col, - double val, + CvStatus Mat_ConvertScaleAbs( + Mat src, + Mat dst, + double alpha, + double beta, ) { - return _Mat_SetFloat( - m, - row, - col, - val, + return _Mat_ConvertScaleAbs( + src, + dst, + alpha, + beta, ); } - late final _Mat_SetFloatPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Float)>>('Mat_SetFloat'); - late final _Mat_SetFloat = - _Mat_SetFloatPtr.asFunction(); + late final _Mat_ConvertScaleAbsPtr = _lookup< + ffi + .NativeFunction>( + 'Mat_ConvertScaleAbs'); + late final _Mat_ConvertScaleAbs = _Mat_ConvertScaleAbsPtr.asFunction< + CvStatus Function(Mat, Mat, double, double)>(); - CvStatus Mat_SetFloat3( + CvStatus Mat_ConvertTo( Mat m, - int x, - int y, - int z, - double val, + Mat dst, + int type, ) { - return _Mat_SetFloat3( + return _Mat_ConvertTo( m, - x, - y, - z, - val, + dst, + type, ); } - late final _Mat_SetFloat3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Float)>>('Mat_SetFloat3'); - late final _Mat_SetFloat3 = _Mat_SetFloat3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, double)>(); + late final _Mat_ConvertToPtr = + _lookup>( + 'Mat_ConvertTo'); + late final _Mat_ConvertTo = + _Mat_ConvertToPtr.asFunction(); - CvStatus Mat_SetIdentity( - Mat src, - double scalar, - ) { - return _Mat_SetIdentity( - src, - scalar, + CvStatus Mat_ConvertToWithParams( + Mat m, + Mat dst, + int type, + double alpha, + double beta, + ) { + return _Mat_ConvertToWithParams( + m, + dst, + type, + alpha, + beta, ); } - late final _Mat_SetIdentityPtr = - _lookup>( - 'Mat_SetIdentity'); - late final _Mat_SetIdentity = - _Mat_SetIdentityPtr.asFunction(); + late final _Mat_ConvertToWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, ffi.Float, + ffi.Float)>>('Mat_ConvertToWithParams'); + late final _Mat_ConvertToWithParams = _Mat_ConvertToWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, int, double, double)>(); - CvStatus Mat_SetInt( - Mat m, - int row, - int col, - int val, + CvStatus Mat_CopyMakeBorder( + Mat src, + Mat dst, + int top, + int bottom, + int left, + int right, + int borderType, + Scalar value, ) { - return _Mat_SetInt( - m, - row, - col, - val, + return _Mat_CopyMakeBorder( + src, + dst, + top, + bottom, + left, + right, + borderType, + value, ); } - late final _Mat_SetIntPtr = _lookup< + late final _Mat_CopyMakeBorderPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int32)>>('Mat_SetInt'); - late final _Mat_SetInt = - _Mat_SetIntPtr.asFunction(); + CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int, + ffi.Int, Scalar)>>('Mat_CopyMakeBorder'); + late final _Mat_CopyMakeBorder = _Mat_CopyMakeBorderPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, int, int, int, Scalar)>(); - CvStatus Mat_SetInt3( + CvStatus Mat_CopyTo( Mat m, - int x, - int y, - int z, - int val, + Mat dst, ) { - return _Mat_SetInt3( + return _Mat_CopyTo( m, - x, - y, - z, - val, + dst, ); } - late final _Mat_SetInt3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int32)>>('Mat_SetInt3'); - late final _Mat_SetInt3 = - _Mat_SetInt3Ptr.asFunction(); + late final _Mat_CopyToPtr = + _lookup>('Mat_CopyTo'); + late final _Mat_CopyTo = + _Mat_CopyToPtr.asFunction(); - CvStatus Mat_SetSChar( + CvStatus Mat_CopyToWithMask( Mat m, - int row, - int col, - int val, + Mat dst, + Mat mask, ) { - return _Mat_SetSChar( + return _Mat_CopyToWithMask( m, - row, - col, - val, + dst, + mask, ); } - late final _Mat_SetSCharPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int8)>>('Mat_SetSChar'); - late final _Mat_SetSChar = - _Mat_SetSCharPtr.asFunction(); + late final _Mat_CopyToWithMaskPtr = + _lookup>( + 'Mat_CopyToWithMask'); + late final _Mat_CopyToWithMask = + _Mat_CopyToWithMaskPtr.asFunction(); - CvStatus Mat_SetSChar3( - Mat m, - int x, - int y, - int z, - int val, + CvStatus Mat_CountNonZero( + Mat src, + ffi.Pointer rval, ) { - return _Mat_SetSChar3( - m, - x, - y, - z, - val, + return _Mat_CountNonZero( + src, + rval, ); } - late final _Mat_SetSChar3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int8)>>('Mat_SetSChar3'); - late final _Mat_SetSChar3 = _Mat_SetSChar3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, int)>(); + late final _Mat_CountNonZeroPtr = + _lookup)>>( + 'Mat_CountNonZero'); + late final _Mat_CountNonZero = _Mat_CountNonZeroPtr.asFunction< + CvStatus Function(Mat, ffi.Pointer)>(); - CvStatus Mat_SetShort( - Mat m, - int row, - int col, - int val, + CvStatus Mat_DCT( + Mat src, + Mat dst, + int flags, ) { - return _Mat_SetShort( - m, - row, - col, - val, + return _Mat_DCT( + src, + dst, + flags, ); } - late final _Mat_SetShortPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int16)>>('Mat_SetShort'); - late final _Mat_SetShort = - _Mat_SetShortPtr.asFunction(); + late final _Mat_DCTPtr = + _lookup>( + 'Mat_DCT'); + late final _Mat_DCT = + _Mat_DCTPtr.asFunction(); - CvStatus Mat_SetShort3( + CvStatus Mat_DFT( Mat m, - int x, - int y, - int z, - int val, + Mat dst, + int flags, ) { - return _Mat_SetShort3( + return _Mat_DFT( m, - x, - y, - z, - val, + dst, + flags, ); } - late final _Mat_SetShort3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int16)>>('Mat_SetShort3'); - late final _Mat_SetShort3 = _Mat_SetShort3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, int)>(); + late final _Mat_DFTPtr = + _lookup>( + 'Mat_DFT'); + late final _Mat_DFT = + _Mat_DFTPtr.asFunction(); - CvStatus Mat_SetTo( + CvStatus Mat_Data( Mat m, - Scalar value, + ffi.Pointer rval, ) { - return _Mat_SetTo( + return _Mat_Data( m, - value, + rval, ); } - late final _Mat_SetToPtr = - _lookup>('Mat_SetTo'); - late final _Mat_SetTo = - _Mat_SetToPtr.asFunction(); + late final _Mat_DataPtr = _lookup< + ffi.NativeFunction)>>( + 'Mat_Data'); + late final _Mat_Data = + _Mat_DataPtr.asFunction)>(); - CvStatus Mat_SetUChar( + CvStatus Mat_DataPtr( Mat m, - int row, - int col, - int val, + ffi.Pointer> data, + ffi.Pointer length, ) { - return _Mat_SetUChar( + return _Mat_DataPtr1( m, - row, - col, - val, + data, + length, ); } - late final _Mat_SetUCharPtr = _lookup< + late final _Mat_DataPtrPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Uint8)>>('Mat_SetUChar'); - late final _Mat_SetUChar = - _Mat_SetUCharPtr.asFunction(); + CvStatus Function(Mat, ffi.Pointer>, + ffi.Pointer)>>('Mat_DataPtr'); + late final _Mat_DataPtr1 = _Mat_DataPtrPtr.asFunction< + CvStatus Function( + Mat, ffi.Pointer>, ffi.Pointer)>(); - CvStatus Mat_SetUChar3( + CvStatus Mat_Determinant( Mat m, - int x, - int y, - int z, - int val, + ffi.Pointer rval, ) { - return _Mat_SetUChar3( + return _Mat_Determinant( m, - x, - y, - z, - val, + rval, ); } - late final _Mat_SetUChar3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Uint8)>>('Mat_SetUChar3'); - late final _Mat_SetUChar3 = _Mat_SetUChar3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, int)>(); + late final _Mat_DeterminantPtr = _lookup< + ffi.NativeFunction)>>( + 'Mat_Determinant'); + late final _Mat_Determinant = _Mat_DeterminantPtr.asFunction< + CvStatus Function(Mat, ffi.Pointer)>(); - CvStatus Mat_SetUShort( - Mat m, - int row, - int col, - int val, + CvStatus Mat_Divide( + Mat src1, + Mat src2, + Mat dst, ) { - return _Mat_SetUShort( - m, - row, - col, - val, + return _Mat_Divide( + src1, + src2, + dst, ); } - late final _Mat_SetUShortPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Uint16)>>('Mat_SetUShort'); - late final _Mat_SetUShort = - _Mat_SetUShortPtr.asFunction(); + late final _Mat_DividePtr = + _lookup>( + 'Mat_Divide'); + late final _Mat_Divide = + _Mat_DividePtr.asFunction(); - CvStatus Mat_SetUShort3( + CvStatus Mat_DivideF64( Mat m, - int x, - int y, - int z, - int val, + double val, ) { - return _Mat_SetUShort3( + return _Mat_DivideF64( m, - x, - y, - z, val, ); } - late final _Mat_SetUShort3Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Uint16)>>('Mat_SetUShort3'); - late final _Mat_SetUShort3 = _Mat_SetUShort3Ptr.asFunction< - CvStatus Function(Mat, int, int, int, int)>(); + late final _Mat_DivideF64Ptr = + _lookup>( + 'Mat_DivideF64'); + late final _Mat_DivideF64 = + _Mat_DivideF64Ptr.asFunction(); - CvStatus Mat_SetVec2b( + CvStatus Mat_DivideFloat( Mat m, - int row, - int col, - Vec2b val, + double val, ) { - return _Mat_SetVec2b( + return _Mat_DivideFloat( m, - row, - col, val, ); } - late final _Mat_SetVec2bPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec2b'); - late final _Mat_SetVec2b = - _Mat_SetVec2bPtr.asFunction(); + late final _Mat_DivideFloatPtr = + _lookup>( + 'Mat_DivideFloat'); + late final _Mat_DivideFloat = + _Mat_DivideFloatPtr.asFunction(); - CvStatus Mat_SetVec2d( + CvStatus Mat_DivideI32( Mat m, - int row, - int col, - Vec2d val, + int val, ) { - return _Mat_SetVec2d( + return _Mat_DivideI32( m, - row, - col, val, ); } - late final _Mat_SetVec2dPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec2d'); - late final _Mat_SetVec2d = - _Mat_SetVec2dPtr.asFunction(); + late final _Mat_DivideI32Ptr = + _lookup>( + 'Mat_DivideI32'); + late final _Mat_DivideI32 = + _Mat_DivideI32Ptr.asFunction(); - CvStatus Mat_SetVec2f( + CvStatus Mat_DivideSChar( Mat m, - int row, - int col, - Vec2f val, + int val, ) { - return _Mat_SetVec2f( + return _Mat_DivideSChar( m, - row, - col, val, ); } - late final _Mat_SetVec2fPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec2f'); - late final _Mat_SetVec2f = - _Mat_SetVec2fPtr.asFunction(); + late final _Mat_DivideSCharPtr = + _lookup>( + 'Mat_DivideSChar'); + late final _Mat_DivideSChar = + _Mat_DivideSCharPtr.asFunction(); - CvStatus Mat_SetVec2i( + CvStatus Mat_DivideUChar( Mat m, - int row, - int col, - Vec2i val, + int val, ) { - return _Mat_SetVec2i( + return _Mat_DivideUChar( m, - row, - col, val, ); } - late final _Mat_SetVec2iPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec2i'); - late final _Mat_SetVec2i = - _Mat_SetVec2iPtr.asFunction(); + late final _Mat_DivideUCharPtr = + _lookup>( + 'Mat_DivideUChar'); + late final _Mat_DivideUChar = + _Mat_DivideUCharPtr.asFunction(); - CvStatus Mat_SetVec2s( + CvStatus Mat_Eigen( + Mat src, + Mat eigenvalues, + Mat eigenvectors, + ffi.Pointer rval, + ) { + return _Mat_Eigen( + src, + eigenvalues, + eigenvectors, + rval, + ); + } + + late final _Mat_EigenPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Mat, ffi.Pointer)>>('Mat_Eigen'); + late final _Mat_Eigen = _Mat_EigenPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, ffi.Pointer)>(); + + CvStatus Mat_EigenNonSymmetric( + Mat src, + Mat eigenvalues, + Mat eigenvectors, + ) { + return _Mat_EigenNonSymmetric( + src, + eigenvalues, + eigenvectors, + ); + } + + late final _Mat_EigenNonSymmetricPtr = + _lookup>( + 'Mat_EigenNonSymmetric'); + late final _Mat_EigenNonSymmetric = + _Mat_EigenNonSymmetricPtr.asFunction(); + + CvStatus Mat_ElemSize( Mat m, - int row, - int col, - Vec2s val, + ffi.Pointer rval, ) { - return _Mat_SetVec2s( + return _Mat_ElemSize( m, - row, - col, - val, + rval, ); } - late final _Mat_SetVec2sPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec2s'); - late final _Mat_SetVec2s = - _Mat_SetVec2sPtr.asFunction(); + late final _Mat_ElemSizePtr = + _lookup)>>( + 'Mat_ElemSize'); + late final _Mat_ElemSize = _Mat_ElemSizePtr.asFunction< + CvStatus Function(Mat, ffi.Pointer)>(); - CvStatus Mat_SetVec2w( + CvStatus Mat_Empty( Mat m, - int row, - int col, - Vec2w val, + ffi.Pointer rval, ) { - return _Mat_SetVec2w( + return _Mat_Empty( m, - row, - col, - val, + rval, ); } - late final _Mat_SetVec2wPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec2w'); - late final _Mat_SetVec2w = - _Mat_SetVec2wPtr.asFunction(); + late final _Mat_EmptyPtr = _lookup< + ffi.NativeFunction)>>( + 'Mat_Empty'); + late final _Mat_Empty = + _Mat_EmptyPtr.asFunction)>(); - CvStatus Mat_SetVec3b( - Mat m, - int row, - int col, - Vec3b val, + CvStatus Mat_Exp( + Mat src, + Mat dst, + ) { + return _Mat_Exp( + src, + dst, + ); + } + + late final _Mat_ExpPtr = + _lookup>('Mat_Exp'); + late final _Mat_Exp = _Mat_ExpPtr.asFunction(); + + CvStatus Mat_ExtractChannel( + Mat src, + Mat dst, + int coi, + ) { + return _Mat_ExtractChannel( + src, + dst, + coi, + ); + } + + late final _Mat_ExtractChannelPtr = + _lookup>( + 'Mat_ExtractChannel'); + late final _Mat_ExtractChannel = + _Mat_ExtractChannelPtr.asFunction(); + + CvStatus Mat_FindNonZero( + Mat src, + Mat idx, + ) { + return _Mat_FindNonZero( + src, + idx, + ); + } + + late final _Mat_FindNonZeroPtr = + _lookup>( + 'Mat_FindNonZero'); + late final _Mat_FindNonZero = + _Mat_FindNonZeroPtr.asFunction(); + + CvStatus Mat_Flip( + Mat src, + Mat dst, + int flipCode, + ) { + return _Mat_Flip( + src, + dst, + flipCode, + ); + } + + late final _Mat_FlipPtr = + _lookup>( + 'Mat_Flip'); + late final _Mat_Flip = + _Mat_FlipPtr.asFunction(); + + CvStatus Mat_FromCMat( + Mat m, + ffi.Pointer rval, + ) { + return _Mat_FromCMat( + m, + rval, + ); + } + + late final _Mat_FromCMatPtr = + _lookup)>>( + 'Mat_FromCMat'); + late final _Mat_FromCMat = + _Mat_FromCMatPtr.asFunction)>(); + + CvStatus Mat_FromPtr( + Mat m, + int rows, + int cols, + int type, + int prows, + int pcols, + ffi.Pointer rval, + ) { + return _Mat_FromPtr( + m, + rows, + cols, + type, + prows, + pcols, + rval, + ); + } + + late final _Mat_FromPtrPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('Mat_FromPtr'); + late final _Mat_FromPtr = _Mat_FromPtrPtr.asFunction< + CvStatus Function(Mat, int, int, int, int, int, ffi.Pointer)>(); + + CvStatus Mat_Gemm( + Mat src1, + Mat src2, + double alpha, + Mat src3, + double beta, + Mat dst, + int flags, + ) { + return _Mat_Gemm( + src1, + src2, + alpha, + src3, + beta, + dst, + flags, + ); + } + + late final _Mat_GemmPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Double, Mat, ffi.Double, Mat, + ffi.Int)>>('Mat_Gemm'); + late final _Mat_Gemm = _Mat_GemmPtr.asFunction< + CvStatus Function(Mat, Mat, double, Mat, double, Mat, int)>(); + + CvStatus Mat_GetDouble( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetDouble( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetDoublePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, + ffi.Pointer)>>('Mat_GetDouble'); + late final _Mat_GetDouble = _Mat_GetDoublePtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetDouble3( + Mat m, + int x, + int y, + int z, + ffi.Pointer rval, + ) { + return _Mat_GetDouble3( + m, + x, + y, + z, + rval, + ); + } + + late final _Mat_GetDouble3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('Mat_GetDouble3'); + late final _Mat_GetDouble3 = _Mat_GetDouble3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetFloat( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetFloat( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetFloatPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetFloat'); + late final _Mat_GetFloat = _Mat_GetFloatPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetFloat3( + Mat m, + int x, + int y, + int z, + ffi.Pointer rval, + ) { + return _Mat_GetFloat3( + m, + x, + y, + z, + rval, + ); + } + + late final _Mat_GetFloat3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('Mat_GetFloat3'); + late final _Mat_GetFloat3 = _Mat_GetFloat3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetInt( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetInt( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetIntPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetInt'); + late final _Mat_GetInt = _Mat_GetIntPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetInt3( + Mat m, + int x, + int y, + int z, + ffi.Pointer rval, + ) { + return _Mat_GetInt3( + m, + x, + y, + z, + rval, + ); + } + + late final _Mat_GetInt3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('Mat_GetInt3'); + late final _Mat_GetInt3 = _Mat_GetInt3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetOptimalDFTSize( + int vecsize, + ffi.Pointer rval, + ) { + return _Mat_GetOptimalDFTSize( + vecsize, + rval, + ); + } + + late final _Mat_GetOptimalDFTSizePtr = _lookup< + ffi.NativeFunction)>>( + 'Mat_GetOptimalDFTSize'); + late final _Mat_GetOptimalDFTSize = _Mat_GetOptimalDFTSizePtr.asFunction< + CvStatus Function(int, ffi.Pointer)>(); + + CvStatus Mat_GetSChar( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetSChar( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetSCharPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetSChar'); + late final _Mat_GetSChar = _Mat_GetSCharPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetSChar3( + Mat m, + int x, + int y, + int z, + ffi.Pointer rval, + ) { + return _Mat_GetSChar3( + m, + x, + y, + z, + rval, + ); + } + + late final _Mat_GetSChar3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('Mat_GetSChar3'); + late final _Mat_GetSChar3 = _Mat_GetSChar3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetShort( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetShort( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetShortPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetShort'); + late final _Mat_GetShort = _Mat_GetShortPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetShort3( + Mat m, + int x, + int y, + int z, + ffi.Pointer rval, + ) { + return _Mat_GetShort3( + m, + x, + y, + z, + rval, + ); + } + + late final _Mat_GetShort3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('Mat_GetShort3'); + late final _Mat_GetShort3 = _Mat_GetShort3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetUChar( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetUChar( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetUCharPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetUChar'); + late final _Mat_GetUChar = _Mat_GetUCharPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetUChar3( + Mat m, + int x, + int y, + int z, + ffi.Pointer rval, + ) { + return _Mat_GetUChar3( + m, + x, + y, + z, + rval, + ); + } + + late final _Mat_GetUChar3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('Mat_GetUChar3'); + late final _Mat_GetUChar3 = _Mat_GetUChar3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetUShort( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetUShort( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetUShortPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, + ffi.Pointer)>>('Mat_GetUShort'); + late final _Mat_GetUShort = _Mat_GetUShortPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetUShort3( + Mat m, + int x, + int y, + int z, + ffi.Pointer rval, + ) { + return _Mat_GetUShort3( + m, + x, + y, + z, + rval, + ); + } + + late final _Mat_GetUShort3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('Mat_GetUShort3'); + late final _Mat_GetUShort3 = _Mat_GetUShort3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec2b( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec2b( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec2bPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec2b'); + late final _Mat_GetVec2b = _Mat_GetVec2bPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec2d( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec2d( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec2dPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec2d'); + late final _Mat_GetVec2d = _Mat_GetVec2dPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec2f( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec2f( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec2fPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec2f'); + late final _Mat_GetVec2f = _Mat_GetVec2fPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec2i( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec2i( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec2iPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec2i'); + late final _Mat_GetVec2i = _Mat_GetVec2iPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec2s( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec2s( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec2sPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec2s'); + late final _Mat_GetVec2s = _Mat_GetVec2sPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec2w( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec2w( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec2wPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec2w'); + late final _Mat_GetVec2w = _Mat_GetVec2wPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec3b( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec3b( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec3bPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec3b'); + late final _Mat_GetVec3b = _Mat_GetVec3bPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec3d( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec3d( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec3dPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec3d'); + late final _Mat_GetVec3d = _Mat_GetVec3dPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec3f( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec3f( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec3fPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec3f'); + late final _Mat_GetVec3f = _Mat_GetVec3fPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec3i( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec3i( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec3iPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec3i'); + late final _Mat_GetVec3i = _Mat_GetVec3iPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec3s( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec3s( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec3sPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec3s'); + late final _Mat_GetVec3s = _Mat_GetVec3sPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec3w( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec3w( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec3wPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec3w'); + late final _Mat_GetVec3w = _Mat_GetVec3wPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec4b( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec4b( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec4bPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec4b'); + late final _Mat_GetVec4b = _Mat_GetVec4bPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec4d( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec4d( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec4dPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec4d'); + late final _Mat_GetVec4d = _Mat_GetVec4dPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec4f( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec4f( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec4fPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec4f'); + late final _Mat_GetVec4f = _Mat_GetVec4fPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec4i( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec4i( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec4iPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec4i'); + late final _Mat_GetVec4i = _Mat_GetVec4iPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec4s( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec4s( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec4sPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec4s'); + late final _Mat_GetVec4s = _Mat_GetVec4sPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec4w( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec4w( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec4wPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec4w'); + late final _Mat_GetVec4w = _Mat_GetVec4wPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec6d( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec6d( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec6dPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec6d'); + late final _Mat_GetVec6d = _Mat_GetVec6dPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec6f( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec6f( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec6fPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec6f'); + late final _Mat_GetVec6f = _Mat_GetVec6fPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec6i( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec6i( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec6iPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec6i'); + late final _Mat_GetVec6i = _Mat_GetVec6iPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_GetVec8i( + Mat m, + int row, + int col, + ffi.Pointer rval, + ) { + return _Mat_GetVec8i( + m, + row, + col, + rval, + ); + } + + late final _Mat_GetVec8iPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_GetVec8i'); + late final _Mat_GetVec8i = _Mat_GetVec8iPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_Hconcat( + Mat src1, + Mat src2, + Mat dst, + ) { + return _Mat_Hconcat( + src1, + src2, + dst, + ); + } + + late final _Mat_HconcatPtr = + _lookup>( + 'Mat_Hconcat'); + late final _Mat_Hconcat = + _Mat_HconcatPtr.asFunction(); + + CvStatus Mat_Idct( + Mat src, + Mat dst, + int flags, + ) { + return _Mat_Idct( + src, + dst, + flags, + ); + } + + late final _Mat_IdctPtr = + _lookup>( + 'Mat_Idct'); + late final _Mat_Idct = + _Mat_IdctPtr.asFunction(); + + CvStatus Mat_Idft( + Mat src, + Mat dst, + int flags, + int nonzeroRows, + ) { + return _Mat_Idft( + src, + dst, + flags, + nonzeroRows, + ); + } + + late final _Mat_IdftPtr = _lookup< + ffi.NativeFunction>( + 'Mat_Idft'); + late final _Mat_Idft = + _Mat_IdftPtr.asFunction(); + + CvStatus Mat_InRange( + Mat src, + Mat lowerb, + Mat upperb, + Mat dst, + ) { + return _Mat_InRange( + src, + lowerb, + upperb, + dst, + ); + } + + late final _Mat_InRangePtr = + _lookup>( + 'Mat_InRange'); + late final _Mat_InRange = + _Mat_InRangePtr.asFunction(); + + CvStatus Mat_InRangeWithScalar( + Mat src, + Scalar lowerb, + Scalar upperb, + Mat dst, + ) { + return _Mat_InRangeWithScalar( + src, + lowerb, + upperb, + dst, + ); + } + + late final _Mat_InRangeWithScalarPtr = + _lookup>( + 'Mat_InRangeWithScalar'); + late final _Mat_InRangeWithScalar = _Mat_InRangeWithScalarPtr.asFunction< + CvStatus Function(Mat, Scalar, Scalar, Mat)>(); + + CvStatus Mat_InsertChannel( + Mat src, + Mat dst, + int coi, + ) { + return _Mat_InsertChannel( + src, + dst, + coi, + ); + } + + late final _Mat_InsertChannelPtr = + _lookup>( + 'Mat_InsertChannel'); + late final _Mat_InsertChannel = + _Mat_InsertChannelPtr.asFunction(); + + CvStatus Mat_Invert( + Mat src, + Mat dst, + int flags, + ffi.Pointer rval, + ) { + return _Mat_Invert( + src, + dst, + flags, + rval, + ); + } + + late final _Mat_InvertPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, ffi.Int, ffi.Pointer)>>('Mat_Invert'); + late final _Mat_Invert = _Mat_InvertPtr.asFunction< + CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); + + CvStatus Mat_IsContinuous( + Mat m, + ffi.Pointer rval, + ) { + return _Mat_IsContinuous( + m, + rval, + ); + } + + late final _Mat_IsContinuousPtr = _lookup< + ffi.NativeFunction)>>( + 'Mat_IsContinuous'); + late final _Mat_IsContinuous = _Mat_IsContinuousPtr.asFunction< + CvStatus Function(Mat, ffi.Pointer)>(); + + CvStatus Mat_Log( + Mat src, + Mat dst, + ) { + return _Mat_Log( + src, + dst, + ); + } + + late final _Mat_LogPtr = + _lookup>('Mat_Log'); + late final _Mat_Log = _Mat_LogPtr.asFunction(); + + CvStatus Mat_Magnitude( + Mat x, + Mat y, + Mat magnitude, + ) { + return _Mat_Magnitude( + x, + y, + magnitude, + ); + } + + late final _Mat_MagnitudePtr = + _lookup>( + 'Mat_Magnitude'); + late final _Mat_Magnitude = + _Mat_MagnitudePtr.asFunction(); + + CvStatus Mat_Max( + Mat src1, + Mat src2, + Mat dst, + ) { + return _Mat_Max( + src1, + src2, + dst, + ); + } + + late final _Mat_MaxPtr = + _lookup>('Mat_Max'); + late final _Mat_Max = + _Mat_MaxPtr.asFunction(); + + CvStatus Mat_Mean( + Mat m, + ffi.Pointer rval, + ) { + return _Mat_Mean( + m, + rval, + ); + } + + late final _Mat_MeanPtr = + _lookup)>>( + 'Mat_Mean'); + late final _Mat_Mean = + _Mat_MeanPtr.asFunction)>(); + + CvStatus Mat_MeanStdDev( + Mat src, + ffi.Pointer dstMean, + ffi.Pointer dstStdDev, + ) { + return _Mat_MeanStdDev( + src, + dstMean, + dstStdDev, + ); + } + + late final _Mat_MeanStdDevPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Pointer, + ffi.Pointer)>>('Mat_MeanStdDev'); + late final _Mat_MeanStdDev = _Mat_MeanStdDevPtr.asFunction< + CvStatus Function(Mat, ffi.Pointer, ffi.Pointer)>(); + + CvStatus Mat_MeanStdDevWithMask( + Mat src, + ffi.Pointer dstMean, + ffi.Pointer dstStdDev, + Mat mask, + ) { + return _Mat_MeanStdDevWithMask( + src, + dstMean, + dstStdDev, + mask, + ); + } + + late final _Mat_MeanStdDevWithMaskPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Pointer, ffi.Pointer, + Mat)>>('Mat_MeanStdDevWithMask'); + late final _Mat_MeanStdDevWithMask = _Mat_MeanStdDevWithMaskPtr.asFunction< + CvStatus Function(Mat, ffi.Pointer, ffi.Pointer, Mat)>(); + + CvStatus Mat_MeanWithMask( + Mat m, + Mat mask, + ffi.Pointer rval, + ) { + return _Mat_MeanWithMask( + m, + mask, + rval, + ); + } + + late final _Mat_MeanWithMaskPtr = _lookup< + ffi.NativeFunction)>>( + 'Mat_MeanWithMask'); + late final _Mat_MeanWithMask = _Mat_MeanWithMaskPtr.asFunction< + CvStatus Function(Mat, Mat, ffi.Pointer)>(); + + CvStatus Mat_Merge( + VecMat mats, + Mat dst, + ) { + return _Mat_Merge( + mats, + dst, + ); + } + + late final _Mat_MergePtr = + _lookup>('Mat_Merge'); + late final _Mat_Merge = + _Mat_MergePtr.asFunction(); + + CvStatus Mat_Min( + Mat src1, + Mat src2, + Mat dst, + ) { + return _Mat_Min( + src1, + src2, + dst, + ); + } + + late final _Mat_MinPtr = + _lookup>('Mat_Min'); + late final _Mat_Min = + _Mat_MinPtr.asFunction(); + + CvStatus Mat_MinMaxIdx( + Mat m, + ffi.Pointer minVal, + ffi.Pointer maxVal, + ffi.Pointer minIdx, + ffi.Pointer maxIdx, + ) { + return _Mat_MinMaxIdx( + m, + minVal, + maxVal, + minIdx, + maxIdx, + ); + } + + late final _Mat_MinMaxIdxPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('Mat_MinMaxIdx'); + late final _Mat_MinMaxIdx = _Mat_MinMaxIdxPtr.asFunction< + CvStatus Function(Mat, ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + CvStatus Mat_MinMaxLoc( + Mat m, + ffi.Pointer minVal, + ffi.Pointer maxVal, + ffi.Pointer minLoc, + ffi.Pointer maxLoc, + ) { + return _Mat_MinMaxLoc( + m, + minVal, + maxVal, + minLoc, + maxLoc, + ); + } + + late final _Mat_MinMaxLocPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('Mat_MinMaxLoc'); + late final _Mat_MinMaxLoc = _Mat_MinMaxLocPtr.asFunction< + CvStatus Function(Mat, ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + CvStatus Mat_MixChannels( + VecMat src, + VecMat dst, + VecInt fromTo, + ) { + return _Mat_MixChannels( + src, + dst, + fromTo, + ); + } + + late final _Mat_MixChannelsPtr = + _lookup>( + 'Mat_MixChannels'); + late final _Mat_MixChannels = _Mat_MixChannelsPtr.asFunction< + CvStatus Function(VecMat, VecMat, VecInt)>(); + + CvStatus Mat_MulSpectrums( + Mat a, + Mat b, + Mat c, + int flags, + ) { + return _Mat_MulSpectrums( + a, + b, + c, + flags, + ); + } + + late final _Mat_MulSpectrumsPtr = + _lookup>( + 'Mat_MulSpectrums'); + late final _Mat_MulSpectrums = + _Mat_MulSpectrumsPtr.asFunction(); + + CvStatus Mat_Multiply( + Mat src1, + Mat src2, + Mat dst, + ) { + return _Mat_Multiply( + src1, + src2, + dst, + ); + } + + late final _Mat_MultiplyPtr = + _lookup>( + 'Mat_Multiply'); + late final _Mat_Multiply = + _Mat_MultiplyPtr.asFunction(); + + CvStatus Mat_MultiplyF64( + Mat m, + double val, + ) { + return _Mat_MultiplyF64( + m, + val, + ); + } + + late final _Mat_MultiplyF64Ptr = + _lookup>( + 'Mat_MultiplyF64'); + late final _Mat_MultiplyF64 = + _Mat_MultiplyF64Ptr.asFunction(); + + CvStatus Mat_MultiplyFloat( + Mat m, + double val, + ) { + return _Mat_MultiplyFloat( + m, + val, + ); + } + + late final _Mat_MultiplyFloatPtr = + _lookup>( + 'Mat_MultiplyFloat'); + late final _Mat_MultiplyFloat = + _Mat_MultiplyFloatPtr.asFunction(); + + CvStatus Mat_MultiplyI32( + Mat m, + int val, + ) { + return _Mat_MultiplyI32( + m, + val, + ); + } + + late final _Mat_MultiplyI32Ptr = + _lookup>( + 'Mat_MultiplyI32'); + late final _Mat_MultiplyI32 = + _Mat_MultiplyI32Ptr.asFunction(); + + CvStatus Mat_MultiplyMatrix( + Mat x, + Mat y, + ffi.Pointer rval, + ) { + return _Mat_MultiplyMatrix( + x, + y, + rval, + ); + } + + late final _Mat_MultiplyMatrixPtr = _lookup< + ffi.NativeFunction)>>( + 'Mat_MultiplyMatrix'); + late final _Mat_MultiplyMatrix = _Mat_MultiplyMatrixPtr.asFunction< + CvStatus Function(Mat, Mat, ffi.Pointer)>(); + + CvStatus Mat_MultiplySChar( + Mat m, + int val, + ) { + return _Mat_MultiplySChar( + m, + val, + ); + } + + late final _Mat_MultiplySCharPtr = + _lookup>( + 'Mat_MultiplySChar'); + late final _Mat_MultiplySChar = + _Mat_MultiplySCharPtr.asFunction(); + + CvStatus Mat_MultiplyUChar( + Mat m, + int val, + ) { + return _Mat_MultiplyUChar( + m, + val, + ); + } + + late final _Mat_MultiplyUCharPtr = + _lookup>( + 'Mat_MultiplyUChar'); + late final _Mat_MultiplyUChar = + _Mat_MultiplyUCharPtr.asFunction(); + + CvStatus Mat_MultiplyWithParams( + Mat src1, + Mat src2, + Mat dst, + double scale, + int dtype, + ) { + return _Mat_MultiplyWithParams( + src1, + src2, + dst, + scale, + dtype, + ); + } + + late final _Mat_MultiplyWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Mat, ffi.Double, ffi.Int)>>('Mat_MultiplyWithParams'); + late final _Mat_MultiplyWithParams = _Mat_MultiplyWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, double, int)>(); + + /// @brief Create empty Mat + /// + /// ALL return values with a type of `Pointer of Struct`, + /// e.g., Mat, the internal pointer (Mat.ptr) MUST be NULL + /// otherwise the memory of mat.ptr pointed to will NOT be freed correctly. + /// Mat* mat = (Mat*)malloc(sizeof(Mat)); + /// CvStatus status = Mat_New(mat); + /// Mat_Close(mat); + /// + /// @param rval Mat* + /// @return CvStatus + CvStatus Mat_New( + ffi.Pointer rval, + ) { + return _Mat_New( + rval, + ); + } + + late final _Mat_NewPtr = + _lookup)>>( + 'Mat_New'); + late final _Mat_New = + _Mat_NewPtr.asFunction)>(); + + CvStatus Mat_NewFromBytes( + int rows, + int cols, + int type, + ffi.Pointer buf, + int step, + ffi.Pointer rval, + ) { + return _Mat_NewFromBytes( + rows, + cols, + type, + buf, + step, + rval, + ); + } + + late final _Mat_NewFromBytesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Int, ffi.Int, ffi.Int, ffi.Pointer, + ffi.Int, ffi.Pointer)>>('Mat_NewFromBytes'); + late final _Mat_NewFromBytes = _Mat_NewFromBytesPtr.asFunction< + CvStatus Function( + int, int, int, ffi.Pointer, int, ffi.Pointer)>(); + + CvStatus Mat_NewFromScalar( + Scalar ar, + int type, + ffi.Pointer rval, + ) { + return _Mat_NewFromScalar( + ar, + type, + rval, + ); + } + + late final _Mat_NewFromScalarPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Scalar, ffi.Int, ffi.Pointer)>>('Mat_NewFromScalar'); + late final _Mat_NewFromScalar = _Mat_NewFromScalarPtr.asFunction< + CvStatus Function(Scalar, int, ffi.Pointer)>(); + + CvStatus Mat_NewFromVecPoint( + VecPoint vec, + ffi.Pointer rval, + ) { + return _Mat_NewFromVecPoint( + vec, + rval, + ); + } + + late final _Mat_NewFromVecPointPtr = _lookup< + ffi.NativeFunction)>>( + 'Mat_NewFromVecPoint'); + late final _Mat_NewFromVecPoint = _Mat_NewFromVecPointPtr.asFunction< + CvStatus Function(VecPoint, ffi.Pointer)>(); + + CvStatus Mat_NewFromVecPoint2f( + VecPoint2f vec, + ffi.Pointer rval, + ) { + return _Mat_NewFromVecPoint2f( + vec, + rval, + ); + } + + late final _Mat_NewFromVecPoint2fPtr = _lookup< + ffi.NativeFunction)>>( + 'Mat_NewFromVecPoint2f'); + late final _Mat_NewFromVecPoint2f = _Mat_NewFromVecPoint2fPtr.asFunction< + CvStatus Function(VecPoint2f, ffi.Pointer)>(); + + CvStatus Mat_NewFromVecPoint3f( + VecPoint3f vec, + ffi.Pointer rval, + ) { + return _Mat_NewFromVecPoint3f( + vec, + rval, + ); + } + + late final _Mat_NewFromVecPoint3fPtr = _lookup< + ffi.NativeFunction)>>( + 'Mat_NewFromVecPoint3f'); + late final _Mat_NewFromVecPoint3f = _Mat_NewFromVecPoint3fPtr.asFunction< + CvStatus Function(VecPoint3f, ffi.Pointer)>(); + + CvStatus Mat_NewWithSize( + int rows, + int cols, + int type, + ffi.Pointer rval, + ) { + return _Mat_NewWithSize( + rows, + cols, + type, + rval, + ); + } + + late final _Mat_NewWithSizePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ffi.Int, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_NewWithSize'); + late final _Mat_NewWithSize = _Mat_NewWithSizePtr.asFunction< + CvStatus Function(int, int, int, ffi.Pointer)>(); + + CvStatus Mat_NewWithSizeFromScalar( + Scalar ar, + int rows, + int cols, + int type, + ffi.Pointer rval, + ) { + return _Mat_NewWithSizeFromScalar( + ar, + rows, + cols, + type, + rval, + ); + } + + late final _Mat_NewWithSizeFromScalarPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Scalar, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('Mat_NewWithSizeFromScalar'); + late final _Mat_NewWithSizeFromScalar = _Mat_NewWithSizeFromScalarPtr + .asFunction)>(); + + CvStatus Mat_NewWithSizes( + VecInt sizes, + int type, + ffi.Pointer rval, + ) { + return _Mat_NewWithSizes( + sizes, + type, + rval, + ); + } + + late final _Mat_NewWithSizesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + VecInt, ffi.Int, ffi.Pointer)>>('Mat_NewWithSizes'); + late final _Mat_NewWithSizes = _Mat_NewWithSizesPtr.asFunction< + CvStatus Function(VecInt, int, ffi.Pointer)>(); + + CvStatus Mat_NewWithSizesFromBytes( + VecInt sizes, + int type, + VecChar buf, + ffi.Pointer rval, + ) { + return _Mat_NewWithSizesFromBytes( + sizes, + type, + buf, + rval, + ); + } + + late final _Mat_NewWithSizesFromBytesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecInt, ffi.Int, VecChar, + ffi.Pointer)>>('Mat_NewWithSizesFromBytes'); + late final _Mat_NewWithSizesFromBytes = _Mat_NewWithSizesFromBytesPtr + .asFunction)>(); + + CvStatus Mat_NewWithSizesFromScalar( + VecInt sizes, + int type, + Scalar ar, + ffi.Pointer rval, + ) { + return _Mat_NewWithSizesFromScalar( + sizes, + type, + ar, + rval, + ); + } + + late final _Mat_NewWithSizesFromScalarPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecInt, ffi.Int, Scalar, + ffi.Pointer)>>('Mat_NewWithSizesFromScalar'); + late final _Mat_NewWithSizesFromScalar = _Mat_NewWithSizesFromScalarPtr + .asFunction)>(); + + CvStatus Mat_Normalize( + Mat src, + Mat dst, + double alpha, + double beta, + int typ, + ) { + return _Mat_Normalize( + src, + dst, + alpha, + beta, + typ, + ); + } + + late final _Mat_NormalizePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, ffi.Double, ffi.Double, ffi.Int)>>('Mat_Normalize'); + late final _Mat_Normalize = _Mat_NormalizePtr.asFunction< + CvStatus Function(Mat, Mat, double, double, int)>(); + + CvStatus Mat_PCACompute( + Mat src, + Mat mean, + Mat eigenvectors, + Mat eigenvalues, + int maxComponents, + ) { + return _Mat_PCACompute( + src, + mean, + eigenvectors, + eigenvalues, + maxComponents, + ); + } + + late final _Mat_PCAComputePtr = _lookup< + ffi.NativeFunction>( + 'Mat_PCACompute'); + late final _Mat_PCACompute = _Mat_PCAComputePtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat, int)>(); + + CvStatus Mat_PatchNaNs( + Mat m, + double val, + ) { + return _Mat_PatchNaNs( + m, + val, + ); + } + + late final _Mat_PatchNaNsPtr = + _lookup>( + 'Mat_PatchNaNs'); + late final _Mat_PatchNaNs = + _Mat_PatchNaNsPtr.asFunction(); + + CvStatus Mat_PerspectiveTransform( + Mat src, + Mat dst, + Mat tm, + ) { + return _Mat_PerspectiveTransform( + src, + dst, + tm, + ); + } + + late final _Mat_PerspectiveTransformPtr = + _lookup>( + 'Mat_PerspectiveTransform'); + late final _Mat_PerspectiveTransform = _Mat_PerspectiveTransformPtr + .asFunction(); + + CvStatus Mat_Phase( + Mat x, + Mat y, + Mat angle, + bool angleInDegrees, + ) { + return _Mat_Phase( + x, + y, + angle, + angleInDegrees, + ); + } + + late final _Mat_PhasePtr = + _lookup>( + 'Mat_Phase'); + late final _Mat_Phase = + _Mat_PhasePtr.asFunction(); + + CvStatus Mat_PolarToCart( + Mat magnitude, + Mat degree, + Mat x, + Mat y, + bool angleInDegrees, + ) { + return _Mat_PolarToCart( + magnitude, + degree, + x, + y, + angleInDegrees, + ); + } + + late final _Mat_PolarToCartPtr = _lookup< + ffi.NativeFunction>( + 'Mat_PolarToCart'); + late final _Mat_PolarToCart = _Mat_PolarToCartPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat, bool)>(); + + CvStatus Mat_Pow( + Mat src, + double power, + Mat dst, + ) { + return _Mat_Pow( + src, + power, + dst, + ); + } + + late final _Mat_PowPtr = + _lookup>( + 'Mat_Pow'); + late final _Mat_Pow = + _Mat_PowPtr.asFunction(); + + CvStatus Mat_Ptr_f32_1( + Mat m, + int i, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_f32_1( + m, + i, + rval, + ); + } + + late final _Mat_Ptr_f32_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_f32_1'); + late final _Mat_Ptr_f32_1 = _Mat_Ptr_f32_1Ptr.asFunction< + CvStatus Function(Mat, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_f32_2( + Mat m, + int i, + int j, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_f32_2( + m, + i, + j, + rval, + ); + } + + late final _Mat_Ptr_f32_2Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_f32_2'); + late final _Mat_Ptr_f32_2 = _Mat_Ptr_f32_2Ptr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_f32_3( + Mat m, + int i, + int j, + int k, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_f32_3( + m, + i, + j, + k, + rval, + ); + } + + late final _Mat_Ptr_f32_3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_f32_3'); + late final _Mat_Ptr_f32_3 = _Mat_Ptr_f32_3Ptr.asFunction< + CvStatus Function( + Mat, int, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_f64_1( + Mat m, + int i, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_f64_1( + m, + i, + rval, + ); + } + + late final _Mat_Ptr_f64_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_f64_1'); + late final _Mat_Ptr_f64_1 = _Mat_Ptr_f64_1Ptr.asFunction< + CvStatus Function(Mat, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_f64_2( + Mat m, + int i, + int j, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_f64_2( + m, + i, + j, + rval, + ); + } + + late final _Mat_Ptr_f64_2Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_f64_2'); + late final _Mat_Ptr_f64_2 = _Mat_Ptr_f64_2Ptr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_f64_3( + Mat m, + int i, + int j, + int k, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_f64_3( + m, + i, + j, + k, + rval, + ); + } + + late final _Mat_Ptr_f64_3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_f64_3'); + late final _Mat_Ptr_f64_3 = _Mat_Ptr_f64_3Ptr.asFunction< + CvStatus Function( + Mat, int, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_i16_1( + Mat m, + int i, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_i16_1( + m, + i, + rval, + ); + } + + late final _Mat_Ptr_i16_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_i16_1'); + late final _Mat_Ptr_i16_1 = _Mat_Ptr_i16_1Ptr.asFunction< + CvStatus Function(Mat, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_i16_2( + Mat m, + int i, + int j, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_i16_2( + m, + i, + j, + rval, + ); + } + + late final _Mat_Ptr_i16_2Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_i16_2'); + late final _Mat_Ptr_i16_2 = _Mat_Ptr_i16_2Ptr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_i16_3( + Mat m, + int i, + int j, + int k, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_i16_3( + m, + i, + j, + k, + rval, + ); + } + + late final _Mat_Ptr_i16_3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_i16_3'); + late final _Mat_Ptr_i16_3 = _Mat_Ptr_i16_3Ptr.asFunction< + CvStatus Function( + Mat, int, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_i32_1( + Mat m, + int i, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_i32_1( + m, + i, + rval, + ); + } + + late final _Mat_Ptr_i32_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_i32_1'); + late final _Mat_Ptr_i32_1 = _Mat_Ptr_i32_1Ptr.asFunction< + CvStatus Function(Mat, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_i32_2( + Mat m, + int i, + int j, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_i32_2( + m, + i, + j, + rval, + ); + } + + late final _Mat_Ptr_i32_2Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_i32_2'); + late final _Mat_Ptr_i32_2 = _Mat_Ptr_i32_2Ptr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_i32_3( + Mat m, + int i, + int j, + int k, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_i32_3( + m, + i, + j, + k, + rval, + ); + } + + late final _Mat_Ptr_i32_3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_i32_3'); + late final _Mat_Ptr_i32_3 = _Mat_Ptr_i32_3Ptr.asFunction< + CvStatus Function( + Mat, int, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_i8_1( + Mat m, + int i, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_i8_1( + m, + i, + rval, + ); + } + + late final _Mat_Ptr_i8_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_i8_1'); + late final _Mat_Ptr_i8_1 = _Mat_Ptr_i8_1Ptr.asFunction< + CvStatus Function(Mat, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_i8_2( + Mat m, + int i, + int j, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_i8_2( + m, + i, + j, + rval, + ); + } + + late final _Mat_Ptr_i8_2Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_i8_2'); + late final _Mat_Ptr_i8_2 = _Mat_Ptr_i8_2Ptr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_i8_3( + Mat m, + int i, + int j, + int k, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_i8_3( + m, + i, + j, + k, + rval, + ); + } + + late final _Mat_Ptr_i8_3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_i8_3'); + late final _Mat_Ptr_i8_3 = _Mat_Ptr_i8_3Ptr.asFunction< + CvStatus Function( + Mat, int, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_u16_1( + Mat m, + int i, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_u16_1( + m, + i, + rval, + ); + } + + late final _Mat_Ptr_u16_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_u16_1'); + late final _Mat_Ptr_u16_1 = _Mat_Ptr_u16_1Ptr.asFunction< + CvStatus Function(Mat, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_u16_2( + Mat m, + int i, + int j, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_u16_2( + m, + i, + j, + rval, + ); + } + + late final _Mat_Ptr_u16_2Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_u16_2'); + late final _Mat_Ptr_u16_2 = _Mat_Ptr_u16_2Ptr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_u16_3( + Mat m, + int i, + int j, + int k, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_u16_3( + m, + i, + j, + k, + rval, + ); + } + + late final _Mat_Ptr_u16_3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_u16_3'); + late final _Mat_Ptr_u16_3 = _Mat_Ptr_u16_3Ptr.asFunction< + CvStatus Function( + Mat, int, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_u8_1( + Mat m, + int i, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_u8_1( + m, + i, + rval, + ); + } + + late final _Mat_Ptr_u8_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Pointer>)>>('Mat_Ptr_u8_1'); + late final _Mat_Ptr_u8_1 = _Mat_Ptr_u8_1Ptr.asFunction< + CvStatus Function(Mat, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_u8_2( + Mat m, + int i, + int j, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_u8_2( + m, + i, + j, + rval, + ); + } + + late final _Mat_Ptr_u8_2Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_u8_2'); + late final _Mat_Ptr_u8_2 = _Mat_Ptr_u8_2Ptr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Ptr_u8_3( + Mat m, + int i, + int j, + int k, + ffi.Pointer> rval, + ) { + return _Mat_Ptr_u8_3( + m, + i, + j, + k, + rval, + ); + } + + late final _Mat_Ptr_u8_3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer>)>>('Mat_Ptr_u8_3'); + late final _Mat_Ptr_u8_3 = _Mat_Ptr_u8_3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, ffi.Pointer>)>(); + + CvStatus Mat_Reduce( + Mat src, + Mat dst, + int dim, + int rType, + int dType, + ) { + return _Mat_Reduce( + src, + dst, + dim, + rType, + dType, + ); + } + + late final _Mat_ReducePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, ffi.Int, ffi.Int, ffi.Int)>>('Mat_Reduce'); + late final _Mat_Reduce = + _Mat_ReducePtr.asFunction(); + + CvStatus Mat_ReduceArgMax( + Mat src, + Mat dst, + int axis, + bool lastIndex, + ) { + return _Mat_ReduceArgMax( + src, + dst, + axis, + lastIndex, + ); + } + + late final _Mat_ReduceArgMaxPtr = _lookup< + ffi.NativeFunction>( + 'Mat_ReduceArgMax'); + late final _Mat_ReduceArgMax = + _Mat_ReduceArgMaxPtr.asFunction(); + + CvStatus Mat_ReduceArgMin( + Mat src, + Mat dst, + int axis, + bool lastIndex, + ) { + return _Mat_ReduceArgMin( + src, + dst, + axis, + lastIndex, + ); + } + + late final _Mat_ReduceArgMinPtr = _lookup< + ffi.NativeFunction>( + 'Mat_ReduceArgMin'); + late final _Mat_ReduceArgMin = + _Mat_ReduceArgMinPtr.asFunction(); + + CvStatus Mat_Region( + Mat m, + Rect r, + ffi.Pointer rval, + ) { + return _Mat_Region( + m, + r, + rval, + ); + } + + late final _Mat_RegionPtr = _lookup< + ffi.NativeFunction)>>( + 'Mat_Region'); + late final _Mat_Region = _Mat_RegionPtr.asFunction< + CvStatus Function(Mat, Rect, ffi.Pointer)>(); + + CvStatus Mat_Release( + ffi.Pointer m, + ) { + return _Mat_Release( + m, + ); + } + + late final _Mat_ReleasePtr = + _lookup)>>( + 'Mat_Release'); + late final _Mat_Release = + _Mat_ReleasePtr.asFunction)>(); + + CvStatus Mat_Repeat( + Mat src, + int nY, + int nX, + Mat dst, + ) { + return _Mat_Repeat( + src, + nY, + nX, + dst, + ); + } + + late final _Mat_RepeatPtr = _lookup< + ffi.NativeFunction>( + 'Mat_Repeat'); + late final _Mat_Repeat = + _Mat_RepeatPtr.asFunction(); + + CvStatus Mat_Reshape( + Mat m, + int cn, + int rows, + ffi.Pointer rval, + ) { + return _Mat_Reshape( + m, + cn, + rows, + rval, + ); + } + + late final _Mat_ReshapePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_Reshape'); + late final _Mat_Reshape = _Mat_ReshapePtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_Rows( + Mat m, + ffi.Pointer rval, + ) { + return _Mat_Rows( + m, + rval, + ); + } + + late final _Mat_RowsPtr = + _lookup)>>( + 'Mat_Rows'); + late final _Mat_Rows = + _Mat_RowsPtr.asFunction)>(); + + CvStatus Mat_ScaleAdd( + Mat src1, + double alpha, + Mat src2, + Mat dst, + ) { + return _Mat_ScaleAdd( + src1, + alpha, + src2, + dst, + ); + } + + late final _Mat_ScaleAddPtr = + _lookup>( + 'Mat_ScaleAdd'); + late final _Mat_ScaleAdd = + _Mat_ScaleAddPtr.asFunction(); + + CvStatus Mat_SetDouble( + Mat m, + int row, + int col, + double val, + ) { + return _Mat_SetDouble( + m, + row, + col, + val, + ); + } + + late final _Mat_SetDoublePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Double)>>('Mat_SetDouble'); + late final _Mat_SetDouble = + _Mat_SetDoublePtr.asFunction(); + + CvStatus Mat_SetDouble3( + Mat m, + int x, + int y, + int z, + double val, + ) { + return _Mat_SetDouble3( + m, + x, + y, + z, + val, + ); + } + + late final _Mat_SetDouble3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Double)>>('Mat_SetDouble3'); + late final _Mat_SetDouble3 = _Mat_SetDouble3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, double)>(); + + CvStatus Mat_SetFloat( + Mat m, + int row, + int col, + double val, + ) { + return _Mat_SetFloat( + m, + row, + col, + val, + ); + } + + late final _Mat_SetFloatPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Float)>>('Mat_SetFloat'); + late final _Mat_SetFloat = + _Mat_SetFloatPtr.asFunction(); + + CvStatus Mat_SetFloat3( + Mat m, + int x, + int y, + int z, + double val, + ) { + return _Mat_SetFloat3( + m, + x, + y, + z, + val, + ); + } + + late final _Mat_SetFloat3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Float)>>('Mat_SetFloat3'); + late final _Mat_SetFloat3 = _Mat_SetFloat3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, double)>(); + + CvStatus Mat_SetIdentity( + Mat src, + double scalar, + ) { + return _Mat_SetIdentity( + src, + scalar, + ); + } + + late final _Mat_SetIdentityPtr = + _lookup>( + 'Mat_SetIdentity'); + late final _Mat_SetIdentity = + _Mat_SetIdentityPtr.asFunction(); + + CvStatus Mat_SetInt( + Mat m, + int row, + int col, + int val, + ) { + return _Mat_SetInt( + m, + row, + col, + val, + ); + } + + late final _Mat_SetIntPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int32)>>('Mat_SetInt'); + late final _Mat_SetInt = + _Mat_SetIntPtr.asFunction(); + + CvStatus Mat_SetInt3( + Mat m, + int x, + int y, + int z, + int val, + ) { + return _Mat_SetInt3( + m, + x, + y, + z, + val, + ); + } + + late final _Mat_SetInt3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int32)>>('Mat_SetInt3'); + late final _Mat_SetInt3 = + _Mat_SetInt3Ptr.asFunction(); + + CvStatus Mat_SetSChar( + Mat m, + int row, + int col, + int val, + ) { + return _Mat_SetSChar( + m, + row, + col, + val, + ); + } + + late final _Mat_SetSCharPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int8)>>('Mat_SetSChar'); + late final _Mat_SetSChar = + _Mat_SetSCharPtr.asFunction(); + + CvStatus Mat_SetSChar3( + Mat m, + int x, + int y, + int z, + int val, + ) { + return _Mat_SetSChar3( + m, + x, + y, + z, + val, + ); + } + + late final _Mat_SetSChar3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int8)>>('Mat_SetSChar3'); + late final _Mat_SetSChar3 = _Mat_SetSChar3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, int)>(); + + CvStatus Mat_SetShort( + Mat m, + int row, + int col, + int val, + ) { + return _Mat_SetShort( + m, + row, + col, + val, + ); + } + + late final _Mat_SetShortPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Int16)>>('Mat_SetShort'); + late final _Mat_SetShort = + _Mat_SetShortPtr.asFunction(); + + CvStatus Mat_SetShort3( + Mat m, + int x, + int y, + int z, + int val, + ) { + return _Mat_SetShort3( + m, + x, + y, + z, + val, + ); + } + + late final _Mat_SetShort3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int16)>>('Mat_SetShort3'); + late final _Mat_SetShort3 = _Mat_SetShort3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, int)>(); + + CvStatus Mat_SetTo( + Mat m, + Scalar value, + ) { + return _Mat_SetTo( + m, + value, + ); + } + + late final _Mat_SetToPtr = + _lookup>('Mat_SetTo'); + late final _Mat_SetTo = + _Mat_SetToPtr.asFunction(); + + CvStatus Mat_SetUChar( + Mat m, + int row, + int col, + int val, + ) { + return _Mat_SetUChar( + m, + row, + col, + val, + ); + } + + late final _Mat_SetUCharPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Int, ffi.Uint8)>>('Mat_SetUChar'); + late final _Mat_SetUChar = + _Mat_SetUCharPtr.asFunction(); + + CvStatus Mat_SetUChar3( + Mat m, + int x, + int y, + int z, + int val, + ) { + return _Mat_SetUChar3( + m, + x, + y, + z, + val, + ); + } + + late final _Mat_SetUChar3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Uint8)>>('Mat_SetUChar3'); + late final _Mat_SetUChar3 = _Mat_SetUChar3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, int)>(); + + CvStatus Mat_SetUShort( + Mat m, + int row, + int col, + int val, + ) { + return _Mat_SetUShort( + m, + row, + col, + val, + ); + } + + late final _Mat_SetUShortPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Uint16)>>('Mat_SetUShort'); + late final _Mat_SetUShort = + _Mat_SetUShortPtr.asFunction(); + + CvStatus Mat_SetUShort3( + Mat m, + int x, + int y, + int z, + int val, + ) { + return _Mat_SetUShort3( + m, + x, + y, + z, + val, + ); + } + + late final _Mat_SetUShort3Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Uint16)>>('Mat_SetUShort3'); + late final _Mat_SetUShort3 = _Mat_SetUShort3Ptr.asFunction< + CvStatus Function(Mat, int, int, int, int)>(); + + CvStatus Mat_SetVec2b( + Mat m, + int row, + int col, + Vec2b val, + ) { + return _Mat_SetVec2b( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec2bPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec2b'); + late final _Mat_SetVec2b = + _Mat_SetVec2bPtr.asFunction(); + + CvStatus Mat_SetVec2d( + Mat m, + int row, + int col, + Vec2d val, + ) { + return _Mat_SetVec2d( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec2dPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec2d'); + late final _Mat_SetVec2d = + _Mat_SetVec2dPtr.asFunction(); + + CvStatus Mat_SetVec2f( + Mat m, + int row, + int col, + Vec2f val, + ) { + return _Mat_SetVec2f( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec2fPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec2f'); + late final _Mat_SetVec2f = + _Mat_SetVec2fPtr.asFunction(); + + CvStatus Mat_SetVec2i( + Mat m, + int row, + int col, + Vec2i val, + ) { + return _Mat_SetVec2i( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec2iPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec2i'); + late final _Mat_SetVec2i = + _Mat_SetVec2iPtr.asFunction(); + + CvStatus Mat_SetVec2s( + Mat m, + int row, + int col, + Vec2s val, + ) { + return _Mat_SetVec2s( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec2sPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec2s'); + late final _Mat_SetVec2s = + _Mat_SetVec2sPtr.asFunction(); + + CvStatus Mat_SetVec2w( + Mat m, + int row, + int col, + Vec2w val, + ) { + return _Mat_SetVec2w( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec2wPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec2w'); + late final _Mat_SetVec2w = + _Mat_SetVec2wPtr.asFunction(); + + CvStatus Mat_SetVec3b( + Mat m, + int row, + int col, + Vec3b val, + ) { + return _Mat_SetVec3b( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec3bPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec3b'); + late final _Mat_SetVec3b = + _Mat_SetVec3bPtr.asFunction(); + + CvStatus Mat_SetVec3d( + Mat m, + int row, + int col, + Vec3d val, + ) { + return _Mat_SetVec3d( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec3dPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec3d'); + late final _Mat_SetVec3d = + _Mat_SetVec3dPtr.asFunction(); + + CvStatus Mat_SetVec3f( + Mat m, + int row, + int col, + Vec3f val, + ) { + return _Mat_SetVec3f( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec3fPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec3f'); + late final _Mat_SetVec3f = + _Mat_SetVec3fPtr.asFunction(); + + CvStatus Mat_SetVec3i( + Mat m, + int row, + int col, + Vec3i val, + ) { + return _Mat_SetVec3i( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec3iPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec3i'); + late final _Mat_SetVec3i = + _Mat_SetVec3iPtr.asFunction(); + + CvStatus Mat_SetVec3s( + Mat m, + int row, + int col, + Vec3s val, + ) { + return _Mat_SetVec3s( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec3sPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec3s'); + late final _Mat_SetVec3s = + _Mat_SetVec3sPtr.asFunction(); + + CvStatus Mat_SetVec3w( + Mat m, + int row, + int col, + Vec3w val, + ) { + return _Mat_SetVec3w( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec3wPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec3w'); + late final _Mat_SetVec3w = + _Mat_SetVec3wPtr.asFunction(); + + CvStatus Mat_SetVec4b( + Mat m, + int row, + int col, + Vec4b val, + ) { + return _Mat_SetVec4b( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec4bPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec4b'); + late final _Mat_SetVec4b = + _Mat_SetVec4bPtr.asFunction(); + + CvStatus Mat_SetVec4d( + Mat m, + int row, + int col, + Vec4d val, + ) { + return _Mat_SetVec4d( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec4dPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec4d'); + late final _Mat_SetVec4d = + _Mat_SetVec4dPtr.asFunction(); + + CvStatus Mat_SetVec4f( + Mat m, + int row, + int col, + Vec4f val, + ) { + return _Mat_SetVec4f( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec4fPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec4f'); + late final _Mat_SetVec4f = + _Mat_SetVec4fPtr.asFunction(); + + CvStatus Mat_SetVec4i( + Mat m, + int row, + int col, + Vec4i val, + ) { + return _Mat_SetVec4i( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec4iPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec4i'); + late final _Mat_SetVec4i = + _Mat_SetVec4iPtr.asFunction(); + + CvStatus Mat_SetVec4s( + Mat m, + int row, + int col, + Vec4s val, + ) { + return _Mat_SetVec4s( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec4sPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec4s'); + late final _Mat_SetVec4s = + _Mat_SetVec4sPtr.asFunction(); + + CvStatus Mat_SetVec4w( + Mat m, + int row, + int col, + Vec4w val, + ) { + return _Mat_SetVec4w( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec4wPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec4w'); + late final _Mat_SetVec4w = + _Mat_SetVec4wPtr.asFunction(); + + CvStatus Mat_SetVec6d( + Mat m, + int row, + int col, + Vec6d val, + ) { + return _Mat_SetVec6d( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec6dPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec6d'); + late final _Mat_SetVec6d = + _Mat_SetVec6dPtr.asFunction(); + + CvStatus Mat_SetVec6f( + Mat m, + int row, + int col, + Vec6f val, + ) { + return _Mat_SetVec6f( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec6fPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec6f'); + late final _Mat_SetVec6f = + _Mat_SetVec6fPtr.asFunction(); + + CvStatus Mat_SetVec6i( + Mat m, + int row, + int col, + Vec6i val, + ) { + return _Mat_SetVec6i( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec6iPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec6i'); + late final _Mat_SetVec6i = + _Mat_SetVec6iPtr.asFunction(); + + CvStatus Mat_SetVec8i( + Mat m, + int row, + int col, + Vec8i val, + ) { + return _Mat_SetVec8i( + m, + row, + col, + val, + ); + } + + late final _Mat_SetVec8iPtr = _lookup< + ffi.NativeFunction>( + 'Mat_SetVec8i'); + late final _Mat_SetVec8i = + _Mat_SetVec8iPtr.asFunction(); + + CvStatus Mat_Size( + Mat m, + ffi.Pointer rval, + ) { + return _Mat_Size( + m, + rval, + ); + } + + late final _Mat_SizePtr = + _lookup)>>( + 'Mat_Size'); + late final _Mat_Size = + _Mat_SizePtr.asFunction)>(); + + CvStatus Mat_Solve( + Mat src1, + Mat src2, + Mat dst, + int flags, + ffi.Pointer rval, + ) { + return _Mat_Solve( + src1, + src2, + dst, + flags, + rval, + ); + } + + late final _Mat_SolvePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Mat, ffi.Int, ffi.Pointer)>>('Mat_Solve'); + late final _Mat_Solve = _Mat_SolvePtr.asFunction< + CvStatus Function(Mat, Mat, Mat, int, ffi.Pointer)>(); + + CvStatus Mat_SolveCubic( + Mat coeffs, + Mat roots, + ffi.Pointer rval, + ) { + return _Mat_SolveCubic( + coeffs, + roots, + rval, + ); + } + + late final _Mat_SolveCubicPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Pointer)>>('Mat_SolveCubic'); + late final _Mat_SolveCubic = _Mat_SolveCubicPtr.asFunction< + CvStatus Function(Mat, Mat, ffi.Pointer)>(); + + CvStatus Mat_SolvePoly( + Mat coeffs, + Mat roots, + int maxIters, + ffi.Pointer rval, + ) { + return _Mat_SolvePoly( + coeffs, + roots, + maxIters, + rval, + ); + } + + late final _Mat_SolvePolyPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, ffi.Int, ffi.Pointer)>>('Mat_SolvePoly'); + late final _Mat_SolvePoly = _Mat_SolvePolyPtr.asFunction< + CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); + + CvStatus Mat_Sort( + Mat src, + Mat dst, + int flags, + ) { + return _Mat_Sort( + src, + dst, + flags, + ); + } + + late final _Mat_SortPtr = + _lookup>( + 'Mat_Sort'); + late final _Mat_Sort = + _Mat_SortPtr.asFunction(); + + CvStatus Mat_SortIdx( + Mat src, + Mat dst, + int flags, + ) { + return _Mat_SortIdx( + src, + dst, + flags, + ); + } + + late final _Mat_SortIdxPtr = + _lookup>( + 'Mat_SortIdx'); + late final _Mat_SortIdx = + _Mat_SortIdxPtr.asFunction(); + + CvStatus Mat_Split( + Mat src, + ffi.Pointer rval, + ) { + return _Mat_Split( + src, + rval, + ); + } + + late final _Mat_SplitPtr = + _lookup)>>( + 'Mat_Split'); + late final _Mat_Split = + _Mat_SplitPtr.asFunction)>(); + + CvStatus Mat_Sqrt( + Mat m, + ffi.Pointer rval, + ) { + return _Mat_Sqrt( + m, + rval, + ); + } + + late final _Mat_SqrtPtr = + _lookup)>>( + 'Mat_Sqrt'); + late final _Mat_Sqrt = + _Mat_SqrtPtr.asFunction)>(); + + CvStatus Mat_Step( + Mat m, + ffi.Pointer rval, + ) { + return _Mat_Step( + m, + rval, + ); + } + + late final _Mat_StepPtr = + _lookup)>>( + 'Mat_Step'); + late final _Mat_Step = + _Mat_StepPtr.asFunction)>(); + + CvStatus Mat_Subtract( + Mat src1, + Mat src2, + Mat dst, + ) { + return _Mat_Subtract( + src1, + src2, + dst, + ); + } + + late final _Mat_SubtractPtr = + _lookup>( + 'Mat_Subtract'); + late final _Mat_Subtract = + _Mat_SubtractPtr.asFunction(); + + CvStatus Mat_SubtractF64( + Mat m, + double val, + ) { + return _Mat_SubtractF64( + m, + val, + ); + } + + late final _Mat_SubtractF64Ptr = + _lookup>( + 'Mat_SubtractF64'); + late final _Mat_SubtractF64 = + _Mat_SubtractF64Ptr.asFunction(); + + CvStatus Mat_SubtractFloat( + Mat m, + double val, + ) { + return _Mat_SubtractFloat( + m, + val, + ); + } + + late final _Mat_SubtractFloatPtr = + _lookup>( + 'Mat_SubtractFloat'); + late final _Mat_SubtractFloat = + _Mat_SubtractFloatPtr.asFunction(); + + CvStatus Mat_SubtractI32( + Mat m, + int val, + ) { + return _Mat_SubtractI32( + m, + val, + ); + } + + late final _Mat_SubtractI32Ptr = + _lookup>( + 'Mat_SubtractI32'); + late final _Mat_SubtractI32 = + _Mat_SubtractI32Ptr.asFunction(); + + CvStatus Mat_SubtractSChar( + Mat m, + int val, + ) { + return _Mat_SubtractSChar( + m, + val, + ); + } + + late final _Mat_SubtractSCharPtr = + _lookup>( + 'Mat_SubtractSChar'); + late final _Mat_SubtractSChar = + _Mat_SubtractSCharPtr.asFunction(); + + CvStatus Mat_SubtractUChar( + Mat m, + int val, + ) { + return _Mat_SubtractUChar( + m, + val, + ); + } + + late final _Mat_SubtractUCharPtr = + _lookup>( + 'Mat_SubtractUChar'); + late final _Mat_SubtractUChar = + _Mat_SubtractUCharPtr.asFunction(); + + CvStatus Mat_Sum( + Mat src, + ffi.Pointer rval, + ) { + return _Mat_Sum( + src, + rval, + ); + } + + late final _Mat_SumPtr = + _lookup)>>( + 'Mat_Sum'); + late final _Mat_Sum = + _Mat_SumPtr.asFunction)>(); + + CvStatus Mat_T( + Mat x, + ffi.Pointer rval, + ) { + return _Mat_T( + x, + rval, + ); + } + + late final _Mat_TPtr = + _lookup)>>( + 'Mat_T'); + late final _Mat_T = + _Mat_TPtr.asFunction)>(); + + CvStatus Mat_ToVecChar( + Mat m, + ffi.Pointer rval, + ) { + return _Mat_ToVecChar( + m, + rval, + ); + } + + late final _Mat_ToVecCharPtr = + _lookup)>>( + 'Mat_ToVecChar'); + late final _Mat_ToVecChar = _Mat_ToVecCharPtr.asFunction< + CvStatus Function(Mat, ffi.Pointer)>(); + + CvStatus Mat_ToVecUChar( + Mat m, + ffi.Pointer rval, + ) { + return _Mat_ToVecUChar( + m, + rval, + ); + } + + late final _Mat_ToVecUCharPtr = _lookup< + ffi.NativeFunction)>>( + 'Mat_ToVecUChar'); + late final _Mat_ToVecUChar = _Mat_ToVecUCharPtr.asFunction< + CvStatus Function(Mat, ffi.Pointer)>(); + + CvStatus Mat_Total( + Mat m, + ffi.Pointer rval, + ) { + return _Mat_Total( + m, + rval, + ); + } + + late final _Mat_TotalPtr = + _lookup)>>( + 'Mat_Total'); + late final _Mat_Total = + _Mat_TotalPtr.asFunction)>(); + + CvStatus Mat_Trace( + Mat src, + ffi.Pointer rval, + ) { + return _Mat_Trace( + src, + rval, + ); + } + + late final _Mat_TracePtr = + _lookup)>>( + 'Mat_Trace'); + late final _Mat_Trace = + _Mat_TracePtr.asFunction)>(); + + CvStatus Mat_Transform( + Mat src, + Mat dst, + Mat tm, + ) { + return _Mat_Transform( + src, + dst, + tm, + ); + } + + late final _Mat_TransformPtr = + _lookup>( + 'Mat_Transform'); + late final _Mat_Transform = + _Mat_TransformPtr.asFunction(); + + CvStatus Mat_Transpose( + Mat src, + Mat dst, + ) { + return _Mat_Transpose( + src, + dst, + ); + } + + late final _Mat_TransposePtr = + _lookup>('Mat_Transpose'); + late final _Mat_Transpose = + _Mat_TransposePtr.asFunction(); + + CvStatus Mat_Type( + Mat m, + ffi.Pointer rval, + ) { + return _Mat_Type( + m, + rval, + ); + } + + late final _Mat_TypePtr = + _lookup)>>( + 'Mat_Type'); + late final _Mat_Type = + _Mat_TypePtr.asFunction)>(); + + CvStatus Mat_Vconcat( + Mat src1, + Mat src2, + Mat dst, + ) { + return _Mat_Vconcat( + src1, + src2, + dst, + ); + } + + late final _Mat_VconcatPtr = + _lookup>( + 'Mat_Vconcat'); + late final _Mat_Vconcat = + _Mat_VconcatPtr.asFunction(); + + CvStatus Mat_colRange( + Mat m, + int start, + int end, + ffi.Pointer rval, + ) { + return _Mat_colRange( + m, + start, + end, + rval, + ); + } + + late final _Mat_colRangePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_colRange'); + late final _Mat_colRange = _Mat_colRangePtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Mat_rowRange( + Mat m, + int start, + int end, + ffi.Pointer rval, + ) { + return _Mat_rowRange( + m, + start, + end, + rval, + ); + } + + late final _Mat_rowRangePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_rowRange'); + late final _Mat_rowRange = _Mat_rowRangePtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus MatchShapes( + VecPoint contour1, + VecPoint contour2, + int method, + double parameter, + ffi.Pointer rval, + ) { + return _MatchShapes( + contour1, + contour2, + method, + parameter, + rval, + ); + } + + late final _MatchShapesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint, VecPoint, ffi.Int, ffi.Double, + ffi.Pointer)>>('MatchShapes'); + late final _MatchShapes = _MatchShapesPtr.asFunction< + CvStatus Function( + VecPoint, VecPoint, int, double, ffi.Pointer)>(); + + CvStatus MatchTemplate( + Mat image, + Mat templ, + Mat result, + int method, + Mat mask, + ) { + return _MatchTemplate( + image, + templ, + result, + method, + mask, + ); + } + + late final _MatchTemplatePtr = _lookup< + ffi.NativeFunction>( + 'MatchTemplate'); + late final _MatchTemplate = _MatchTemplatePtr.asFunction< + CvStatus Function(Mat, Mat, Mat, int, Mat)>(); + + CvStatus MedianBlur( + Mat src, + Mat dst, + int ksize, + ) { + return _MedianBlur( + src, + dst, + ksize, + ); + } + + late final _MedianBlurPtr = + _lookup>( + 'MedianBlur'); + late final _MedianBlur = + _MedianBlurPtr.asFunction(); + + void MergeMertens_Close( + ffi.Pointer b, + ) { + return _MergeMertens_Close( + b, + ); + } + + late final _MergeMertens_ClosePtr = + _lookup)>>( + 'MergeMertens_Close'); + late final _MergeMertens_Close = _MergeMertens_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); + + CvStatus MergeMertens_Create( + ffi.Pointer rval, + ) { + return _MergeMertens_Create( + rval, + ); + } + + late final _MergeMertens_CreatePtr = + _lookup)>>( + 'MergeMertens_Create'); + late final _MergeMertens_Create = _MergeMertens_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); + + CvStatus MergeMertens_CreateWithParams( + double contrast_weight, + double saturation_weight, + double exposure_weight, + ffi.Pointer rval, + ) { + return _MergeMertens_CreateWithParams( + contrast_weight, + saturation_weight, + exposure_weight, + rval, + ); + } + + late final _MergeMertens_CreateWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Float, ffi.Float, ffi.Float, + ffi.Pointer)>>('MergeMertens_CreateWithParams'); + late final _MergeMertens_CreateWithParams = + _MergeMertens_CreateWithParamsPtr.asFunction< + CvStatus Function( + double, double, double, ffi.Pointer)>(); + + CvStatus MergeMertens_Process( + MergeMertens b, + VecMat src, + Mat dst, + ) { + return _MergeMertens_Process( + b, + src, + dst, + ); + } + + late final _MergeMertens_ProcessPtr = + _lookup>( + 'MergeMertens_Process'); + late final _MergeMertens_Process = _MergeMertens_ProcessPtr.asFunction< + CvStatus Function(MergeMertens, VecMat, Mat)>(); + + CvStatus MinAreaRect( + VecPoint pts, + ffi.Pointer rval, + ) { + return _MinAreaRect( + pts, + rval, + ); + } + + late final _MinAreaRectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + VecPoint, ffi.Pointer)>>('MinAreaRect'); + late final _MinAreaRect = _MinAreaRectPtr.asFunction< + CvStatus Function(VecPoint, ffi.Pointer)>(); + + CvStatus MinEnclosingCircle( + VecPoint pts, + ffi.Pointer center, + ffi.Pointer radius, + ) { + return _MinEnclosingCircle( + pts, + center, + radius, + ); + } + + late final _MinEnclosingCirclePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint, ffi.Pointer, + ffi.Pointer)>>('MinEnclosingCircle'); + late final _MinEnclosingCircle = _MinEnclosingCirclePtr.asFunction< + CvStatus Function( + VecPoint, ffi.Pointer, ffi.Pointer)>(); + + CvStatus Moments( + Mat src, + bool binaryImage, + ffi.Pointer rval, + ) { + return _Moments( + src, + binaryImage, + rval, + ); + } + + late final _MomentsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Bool, ffi.Pointer)>>('Moments'); + late final _Moments = _MomentsPtr.asFunction< + CvStatus Function(Mat, bool, ffi.Pointer)>(); + + CvStatus MorphologyDefaultBorderValue( + ffi.Pointer rval, + ) { + return _MorphologyDefaultBorderValue( + rval, + ); + } + + late final _MorphologyDefaultBorderValuePtr = + _lookup)>>( + 'MorphologyDefaultBorderValue'); + late final _MorphologyDefaultBorderValue = _MorphologyDefaultBorderValuePtr + .asFunction)>(); + + CvStatus MorphologyEx( + Mat src, + Mat dst, + int op, + Mat kernel, + ) { + return _MorphologyEx( + src, + dst, + op, + kernel, + ); + } + + late final _MorphologyExPtr = + _lookup>( + 'MorphologyEx'); + late final _MorphologyEx = + _MorphologyExPtr.asFunction(); + + CvStatus MorphologyExWithParams( + Mat src, + Mat dst, + int op, + Mat kernel, + Point pt, + int iterations, + int borderType, + Scalar borderValue, + ) { + return _MorphologyExWithParams( + src, + dst, + op, + kernel, + pt, + iterations, + borderType, + borderValue, + ); + } + + late final _MorphologyExWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, Mat, Point, ffi.Int, ffi.Int, + Scalar)>>('MorphologyExWithParams'); + late final _MorphologyExWithParams = _MorphologyExWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, int, Mat, Point, int, int, Scalar)>(); + + CvStatus NMSBoxes( + VecRect bboxes, + VecFloat scores, + double score_threshold, + double nms_threshold, + ffi.Pointer indices, + ) { + return _NMSBoxes( + bboxes, + scores, + score_threshold, + nms_threshold, + indices, + ); + } + + late final _NMSBoxesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecRect, VecFloat, ffi.Float, ffi.Float, + ffi.Pointer)>>('NMSBoxes'); + late final _NMSBoxes = _NMSBoxesPtr.asFunction< + CvStatus Function( + VecRect, VecFloat, double, double, ffi.Pointer)>(); + + CvStatus NMSBoxesWithParams( + VecRect bboxes, + VecFloat scores, + double score_threshold, + double nms_threshold, + ffi.Pointer indices, + double eta, + int top_k, + ) { + return _NMSBoxesWithParams( + bboxes, + scores, + score_threshold, + nms_threshold, + indices, + eta, + top_k, + ); + } + + late final _NMSBoxesWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecRect, VecFloat, ffi.Float, ffi.Float, + ffi.Pointer, ffi.Float, ffi.Int)>>('NMSBoxesWithParams'); + late final _NMSBoxesWithParams = _NMSBoxesWithParamsPtr.asFunction< + CvStatus Function(VecRect, VecFloat, double, double, ffi.Pointer, + double, int)>(); + + CvStatus Net_BlobFromImage( + Mat image, + Mat blob, + double scalefactor, + Size size, + Scalar mean, + bool swapRB, + bool crop, + int ddepth, + ) { + return _Net_BlobFromImage( + image, + blob, + scalefactor, + size, + mean, + swapRB, + crop, + ddepth, + ); + } + + late final _Net_BlobFromImagePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Double, Size, Scalar, ffi.Bool, + ffi.Bool, ffi.Int)>>('Net_BlobFromImage'); + late final _Net_BlobFromImage = _Net_BlobFromImagePtr.asFunction< + CvStatus Function(Mat, Mat, double, Size, Scalar, bool, bool, int)>(); + + CvStatus Net_BlobFromImages( + VecMat images, + Mat blob, + double scalefactor, + Size size, + Scalar mean, + bool swapRB, + bool crop, + int ddepth, + ) { + return _Net_BlobFromImages( + images, + blob, + scalefactor, + size, + mean, + swapRB, + crop, + ddepth, + ); + } + + late final _Net_BlobFromImagesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecMat, Mat, ffi.Double, Size, Scalar, ffi.Bool, + ffi.Bool, ffi.Int)>>('Net_BlobFromImages'); + late final _Net_BlobFromImages = _Net_BlobFromImagesPtr.asFunction< + CvStatus Function(VecMat, Mat, double, Size, Scalar, bool, bool, int)>(); + + void Net_Close( + ffi.Pointer net, + ) { + return _Net_Close( + net, + ); + } + + late final _Net_ClosePtr = + _lookup)>>( + 'Net_Close'); + late final _Net_Close = + _Net_ClosePtr.asFunction)>(); + + CvStatus Net_Create( + ffi.Pointer rval, + ) { + return _Net_Create( + rval, + ); + } + + late final _Net_CreatePtr = + _lookup)>>( + 'Net_Create'); + late final _Net_Create = + _Net_CreatePtr.asFunction)>(); + + CvStatus Net_Dump( + Net net, + VecChar rval, + ) { + return _Net_Dump( + net, + rval, + ); + } + + late final _Net_DumpPtr = + _lookup>('Net_Dump'); + late final _Net_Dump = + _Net_DumpPtr.asFunction(); + + CvStatus Net_Empty( + Net net, + ffi.Pointer rval, + ) { + return _Net_Empty( + net, + rval, + ); + } + + late final _Net_EmptyPtr = _lookup< + ffi.NativeFunction)>>( + 'Net_Empty'); + late final _Net_Empty = + _Net_EmptyPtr.asFunction)>(); + + CvStatus Net_Forward( + Net net, + ffi.Pointer outputName, + ffi.Pointer rval, + ) { + return _Net_Forward( + net, + outputName, + rval, + ); + } + + late final _Net_ForwardPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Net, ffi.Pointer, ffi.Pointer)>>('Net_Forward'); + late final _Net_Forward = _Net_ForwardPtr.asFunction< + CvStatus Function(Net, ffi.Pointer, ffi.Pointer)>(); + + CvStatus Net_ForwardLayers( + Net net, + ffi.Pointer outputBlobs, + VecVecChar outBlobNames, + ) { + return _Net_ForwardLayers( + net, + outputBlobs, + outBlobNames, + ); + } + + late final _Net_ForwardLayersPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Net, ffi.Pointer, VecVecChar)>>('Net_ForwardLayers'); + late final _Net_ForwardLayers = _Net_ForwardLayersPtr.asFunction< + CvStatus Function(Net, ffi.Pointer, VecVecChar)>(); + + CvStatus Net_FromNet( + Net net, + ffi.Pointer rval, + ) { + return _Net_FromNet( + net, + rval, + ); + } + + late final _Net_FromNetPtr = + _lookup)>>( + 'Net_FromNet'); + late final _Net_FromNet = + _Net_FromNetPtr.asFunction)>(); + + CvStatus Net_GetBlobChannel( + Mat blob, + int imgidx, + int chnidx, + ffi.Pointer rval, + ) { + return _Net_GetBlobChannel( + blob, + imgidx, + chnidx, + rval, + ); + } + + late final _Net_GetBlobChannelPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Net_GetBlobChannel'); + late final _Net_GetBlobChannel = _Net_GetBlobChannelPtr.asFunction< + CvStatus Function(Mat, int, int, ffi.Pointer)>(); + + CvStatus Net_GetBlobSize( + Mat blob, + ffi.Pointer rval, + ) { + return _Net_GetBlobSize( + blob, + rval, + ); + } + + late final _Net_GetBlobSizePtr = + _lookup)>>( + 'Net_GetBlobSize'); + late final _Net_GetBlobSize = _Net_GetBlobSizePtr.asFunction< + CvStatus Function(Mat, ffi.Pointer)>(); + + CvStatus Net_GetInputDetails( + Net net, + ffi.Pointer scales, + ffi.Pointer zeropoints, + ) { + return _Net_GetInputDetails( + net, + scales, + zeropoints, + ); + } + + late final _Net_GetInputDetailsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Net, ffi.Pointer, + ffi.Pointer)>>('Net_GetInputDetails'); + late final _Net_GetInputDetails = _Net_GetInputDetailsPtr.asFunction< + CvStatus Function(Net, ffi.Pointer, ffi.Pointer)>(); + + CvStatus Net_GetLayer( + Net net, + int layerid, + ffi.Pointer rval, + ) { + return _Net_GetLayer( + net, + layerid, + rval, + ); + } + + late final _Net_GetLayerPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Net, ffi.Int, ffi.Pointer)>>('Net_GetLayer'); + late final _Net_GetLayer = _Net_GetLayerPtr.asFunction< + CvStatus Function(Net, int, ffi.Pointer)>(); + + CvStatus Net_GetLayerNames( + Net net, + ffi.Pointer rval, + ) { + return _Net_GetLayerNames( + net, + rval, + ); + } + + late final _Net_GetLayerNamesPtr = _lookup< + ffi.NativeFunction)>>( + 'Net_GetLayerNames'); + late final _Net_GetLayerNames = _Net_GetLayerNamesPtr.asFunction< + CvStatus Function(Net, ffi.Pointer)>(); + + CvStatus Net_GetPerfProfile( + Net net, + ffi.Pointer rval, + ) { + return _Net_GetPerfProfile( + net, + rval, + ); + } + + late final _Net_GetPerfProfilePtr = _lookup< + ffi.NativeFunction)>>( + 'Net_GetPerfProfile'); + late final _Net_GetPerfProfile = _Net_GetPerfProfilePtr.asFunction< + CvStatus Function(Net, ffi.Pointer)>(); + + CvStatus Net_GetUnconnectedOutLayers( + Net net, + ffi.Pointer rval, + ) { + return _Net_GetUnconnectedOutLayers( + net, + rval, + ); + } + + late final _Net_GetUnconnectedOutLayersPtr = + _lookup)>>( + 'Net_GetUnconnectedOutLayers'); + late final _Net_GetUnconnectedOutLayers = _Net_GetUnconnectedOutLayersPtr + .asFunction)>(); + + CvStatus Net_ImagesFromBlob( + Mat blob, + ffi.Pointer rval, + ) { + return _Net_ImagesFromBlob( + blob, + rval, + ); + } + + late final _Net_ImagesFromBlobPtr = + _lookup)>>( + 'Net_ImagesFromBlob'); + late final _Net_ImagesFromBlob = _Net_ImagesFromBlobPtr.asFunction< + CvStatus Function(Mat, ffi.Pointer)>(); + + CvStatus Net_ReadNet( + ffi.Pointer model, + ffi.Pointer config, + ffi.Pointer framework, + ffi.Pointer rval, + ) { + return _Net_ReadNet( + model, + config, + framework, + rval, + ); + } + + late final _Net_ReadNetPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('Net_ReadNet'); + late final _Net_ReadNet = _Net_ReadNetPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + CvStatus Net_ReadNetBytes( + ffi.Pointer framework, + VecUChar model, + VecUChar config, + ffi.Pointer rval, + ) { + return _Net_ReadNetBytes( + framework, + model, + config, + rval, + ); + } + + late final _Net_ReadNetBytesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, VecUChar, VecUChar, + ffi.Pointer)>>('Net_ReadNetBytes'); + late final _Net_ReadNetBytes = _Net_ReadNetBytesPtr.asFunction< + CvStatus Function( + ffi.Pointer, VecUChar, VecUChar, ffi.Pointer)>(); + + CvStatus Net_ReadNetFromCaffe( + ffi.Pointer prototxt, + ffi.Pointer caffeModel, + ffi.Pointer rval, + ) { + return _Net_ReadNetFromCaffe( + prototxt, + caffeModel, + rval, + ); + } + + late final _Net_ReadNetFromCaffePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('Net_ReadNetFromCaffe'); + late final _Net_ReadNetFromCaffe = _Net_ReadNetFromCaffePtr.asFunction< + CvStatus Function( + ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); + + CvStatus Net_ReadNetFromCaffeBytes( + VecUChar prototxt, + VecUChar caffeModel, + ffi.Pointer rval, + ) { + return _Net_ReadNetFromCaffeBytes( + prototxt, + caffeModel, + rval, + ); + } + + late final _Net_ReadNetFromCaffeBytesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecUChar, VecUChar, + ffi.Pointer)>>('Net_ReadNetFromCaffeBytes'); + late final _Net_ReadNetFromCaffeBytes = _Net_ReadNetFromCaffeBytesPtr + .asFunction)>(); + + CvStatus Net_ReadNetFromONNX( + ffi.Pointer model, + ffi.Pointer rval, + ) { + return _Net_ReadNetFromONNX( + model, + rval, + ); + } + + late final _Net_ReadNetFromONNXPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ffi.Pointer, ffi.Pointer)>>('Net_ReadNetFromONNX'); + late final _Net_ReadNetFromONNX = _Net_ReadNetFromONNXPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer)>(); + + CvStatus Net_ReadNetFromONNXBytes( + VecUChar model, + ffi.Pointer rval, + ) { + return _Net_ReadNetFromONNXBytes( + model, + rval, + ); + } + + late final _Net_ReadNetFromONNXBytesPtr = _lookup< + ffi.NativeFunction)>>( + 'Net_ReadNetFromONNXBytes'); + late final _Net_ReadNetFromONNXBytes = _Net_ReadNetFromONNXBytesPtr + .asFunction)>(); + + CvStatus Net_ReadNetFromTFLite( + ffi.Pointer model, + ffi.Pointer rval, + ) { + return _Net_ReadNetFromTFLite( + model, + rval, + ); + } + + late final _Net_ReadNetFromTFLitePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, + ffi.Pointer)>>('Net_ReadNetFromTFLite'); + late final _Net_ReadNetFromTFLite = _Net_ReadNetFromTFLitePtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer)>(); + + CvStatus Net_ReadNetFromTFLiteBytes( + VecUChar bufferModel, + ffi.Pointer rval, + ) { + return _Net_ReadNetFromTFLiteBytes( + bufferModel, + rval, + ); + } + + late final _Net_ReadNetFromTFLiteBytesPtr = _lookup< + ffi.NativeFunction)>>( + 'Net_ReadNetFromTFLiteBytes'); + late final _Net_ReadNetFromTFLiteBytes = _Net_ReadNetFromTFLiteBytesPtr + .asFunction)>(); + + CvStatus Net_ReadNetFromTensorflow( + ffi.Pointer model, + ffi.Pointer config, + ffi.Pointer rval, + ) { + return _Net_ReadNetFromTensorflow( + model, + config, + rval, + ); + } + + late final _Net_ReadNetFromTensorflowPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('Net_ReadNetFromTensorflow'); + late final _Net_ReadNetFromTensorflow = + _Net_ReadNetFromTensorflowPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + CvStatus Net_ReadNetFromTensorflowBytes( + VecUChar model, + VecUChar config, + ffi.Pointer rval, + ) { + return _Net_ReadNetFromTensorflowBytes( + model, + config, + rval, + ); + } + + late final _Net_ReadNetFromTensorflowBytesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecUChar, VecUChar, + ffi.Pointer)>>('Net_ReadNetFromTensorflowBytes'); + late final _Net_ReadNetFromTensorflowBytes = + _Net_ReadNetFromTensorflowBytesPtr.asFunction< + CvStatus Function(VecUChar, VecUChar, ffi.Pointer)>(); + + CvStatus Net_ReadNetFromTorch( + ffi.Pointer model, + bool isBinary, + bool evaluate, + ffi.Pointer rval, + ) { + return _Net_ReadNetFromTorch( + model, + isBinary, + evaluate, + rval, + ); + } + + late final _Net_ReadNetFromTorchPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Bool, ffi.Bool, + ffi.Pointer)>>('Net_ReadNetFromTorch'); + late final _Net_ReadNetFromTorch = _Net_ReadNetFromTorchPtr.asFunction< + CvStatus Function(ffi.Pointer, bool, bool, ffi.Pointer)>(); + + CvStatus Net_SetInput( + Net net, + Mat blob, + ffi.Pointer name, + ) { + return _Net_SetInput( + net, + blob, + name, + ); + } + + late final _Net_SetInputPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Net, Mat, ffi.Pointer)>>('Net_SetInput'); + late final _Net_SetInput = _Net_SetInputPtr.asFunction< + CvStatus Function(Net, Mat, ffi.Pointer)>(); + + CvStatus Net_SetPreferableBackend( + Net net, + int backend, + ) { + return _Net_SetPreferableBackend( + net, + backend, + ); + } + + late final _Net_SetPreferableBackendPtr = + _lookup>( + 'Net_SetPreferableBackend'); + late final _Net_SetPreferableBackend = + _Net_SetPreferableBackendPtr.asFunction(); + + CvStatus Net_SetPreferableTarget( + Net net, + int target, + ) { + return _Net_SetPreferableTarget( + net, + target, + ); + } + + late final _Net_SetPreferableTargetPtr = + _lookup>( + 'Net_SetPreferableTarget'); + late final _Net_SetPreferableTarget = + _Net_SetPreferableTargetPtr.asFunction(); + + CvStatus Net_forwardAsync( + Net net, + ffi.Pointer outputName, + ffi.Pointer rval, + ) { + return _Net_forwardAsync( + net, + outputName, + rval, + ); + } + + late final _Net_forwardAsyncPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Net, ffi.Pointer, + ffi.Pointer)>>('Net_forwardAsync'); + late final _Net_forwardAsync = _Net_forwardAsyncPtr.asFunction< + CvStatus Function(Net, ffi.Pointer, ffi.Pointer)>(); + + CvStatus Norm( + Mat src1, + int normType, + ffi.Pointer rval, + ) { + return _Norm( + src1, + normType, + rval, + ); + } + + late final _NormPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Pointer)>>('Norm'); + late final _Norm = _NormPtr.asFunction< + CvStatus Function(Mat, int, ffi.Pointer)>(); + + CvStatus NormWithMats( + Mat src1, + Mat src2, + int normType, + ffi.Pointer rval, + ) { + return _NormWithMats( + src1, + src2, + normType, + rval, + ); + } + + late final _NormWithMatsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, ffi.Int, ffi.Pointer)>>('NormWithMats'); + late final _NormWithMats = _NormWithMatsPtr.asFunction< + CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); + + CvStatus NormalBayesClassifier_Clear( + NormalBayesClassifier self, + ) { + return _NormalBayesClassifier_Clear( + self, + ); + } + + late final _NormalBayesClassifier_ClearPtr = + _lookup>( + 'NormalBayesClassifier_Clear'); + late final _NormalBayesClassifier_Clear = _NormalBayesClassifier_ClearPtr + .asFunction(); + + void NormalBayesClassifier_Close( + ffi.Pointer self, + ) { + return _NormalBayesClassifier_Close( + self, + ); + } + + late final _NormalBayesClassifier_ClosePtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer)>>( + 'NormalBayesClassifier_Close'); + late final _NormalBayesClassifier_Close = _NormalBayesClassifier_ClosePtr + .asFunction)>(); + + CvStatus NormalBayesClassifier_Create( + ffi.Pointer rval, + ) { + return _NormalBayesClassifier_Create( + rval, + ); + } + + late final _NormalBayesClassifier_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'NormalBayesClassifier_Create'); + late final _NormalBayesClassifier_Create = _NormalBayesClassifier_CreatePtr + .asFunction)>(); + + CvStatus NormalBayesClassifier_Get( + PtrNormalBayesClassifier self, + ffi.Pointer rval, + ) { + return _NormalBayesClassifier_Get( + self, + rval, + ); + } + + late final _NormalBayesClassifier_GetPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrNormalBayesClassifier, + ffi.Pointer)>>( + 'NormalBayesClassifier_Get'); + late final _NormalBayesClassifier_Get = + _NormalBayesClassifier_GetPtr.asFunction< + CvStatus Function( + PtrNormalBayesClassifier, ffi.Pointer)>(); + + CvStatus NormalBayesClassifier_Load( + NormalBayesClassifier self, + ffi.Pointer filepath, + ) { + return _NormalBayesClassifier_Load( + self, + filepath, + ); + } + + late final _NormalBayesClassifier_LoadPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(NormalBayesClassifier, + ffi.Pointer)>>('NormalBayesClassifier_Load'); + late final _NormalBayesClassifier_Load = + _NormalBayesClassifier_LoadPtr.asFunction< + CvStatus Function(NormalBayesClassifier, ffi.Pointer)>(); + + CvStatus NormalBayesClassifier_LoadFromString( + NormalBayesClassifier self, + ffi.Pointer strModel, + ffi.Pointer objname, + ) { + return _NormalBayesClassifier_LoadFromString( + self, + strModel, + objname, + ); + } + + late final _NormalBayesClassifier_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(NormalBayesClassifier, ffi.Pointer, + ffi.Pointer)>>('NormalBayesClassifier_LoadFromString'); + late final _NormalBayesClassifier_LoadFromString = + _NormalBayesClassifier_LoadFromStringPtr.asFunction< + CvStatus Function(NormalBayesClassifier, ffi.Pointer, + ffi.Pointer)>(); + + CvStatus NormalBayesClassifier_PredictProb( + NormalBayesClassifier self, + Mat inputs, + Mat outputs, + Mat outputProbs, + int flags, + ffi.Pointer rval, + ) { + return _NormalBayesClassifier_PredictProb( + self, + inputs, + outputs, + outputProbs, + flags, + rval, + ); + } + + late final _NormalBayesClassifier_PredictProbPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(NormalBayesClassifier, Mat, Mat, Mat, ffi.Int, + ffi.Pointer)>>('NormalBayesClassifier_PredictProb'); + late final _NormalBayesClassifier_PredictProb = + _NormalBayesClassifier_PredictProbPtr.asFunction< + CvStatus Function(NormalBayesClassifier, Mat, Mat, Mat, int, + ffi.Pointer)>(); + + CvStatus NormalBayesClassifier_Save( + NormalBayesClassifier self, + ffi.Pointer filename, + ) { + return _NormalBayesClassifier_Save( + self, + filename, + ); + } + + late final _NormalBayesClassifier_SavePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(NormalBayesClassifier, + ffi.Pointer)>>('NormalBayesClassifier_Save'); + late final _NormalBayesClassifier_Save = + _NormalBayesClassifier_SavePtr.asFunction< + CvStatus Function(NormalBayesClassifier, ffi.Pointer)>(); + + CvStatus NormalBayesClassifier_Train( + NormalBayesClassifier self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, + ) { + return _NormalBayesClassifier_Train( + self, + trainData, + flags, + rval, + ); + } + + late final _NormalBayesClassifier_TrainPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(NormalBayesClassifier, PtrTrainData, ffi.Int, + ffi.Pointer)>>('NormalBayesClassifier_Train'); + late final _NormalBayesClassifier_Train = + _NormalBayesClassifier_TrainPtr.asFunction< + CvStatus Function(NormalBayesClassifier, PtrTrainData, int, + ffi.Pointer)>(); + + CvStatus NormalBayesClassifier_Train_1( + NormalBayesClassifier self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, + ) { + return _NormalBayesClassifier_Train_1( + self, + samples, + layout, + responses, + rval, + ); + } + + late final _NormalBayesClassifier_Train_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(NormalBayesClassifier, Mat, ffi.Int, Mat, + ffi.Pointer)>>('NormalBayesClassifier_Train_1'); + late final _NormalBayesClassifier_Train_1 = + _NormalBayesClassifier_Train_1Ptr.asFunction< + CvStatus Function( + NormalBayesClassifier, Mat, int, Mat, ffi.Pointer)>(); + + void ORB_Close( + ffi.Pointer o, + ) { + return _ORB_Close( + o, + ); + } + + late final _ORB_ClosePtr = + _lookup)>>( + 'ORB_Close'); + late final _ORB_Close = + _ORB_ClosePtr.asFunction)>(); + + CvStatus ORB_Create( + ffi.Pointer rval, + ) { + return _ORB_Create( + rval, + ); + } + + late final _ORB_CreatePtr = + _lookup)>>( + 'ORB_Create'); + late final _ORB_Create = + _ORB_CreatePtr.asFunction)>(); + + CvStatus ORB_CreateWithParams( + int nfeatures, + double scaleFactor, + int nlevels, + int edgeThreshold, + int firstLevel, + int WTA_K, + int scoreType, + int patchSize, + int fastThreshold, + ffi.Pointer rval, + ) { + return _ORB_CreateWithParams( + nfeatures, + scaleFactor, + nlevels, + edgeThreshold, + firstLevel, + WTA_K, + scoreType, + patchSize, + fastThreshold, + rval, + ); + } + + late final _ORB_CreateWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ffi.Int, + ffi.Float, + ffi.Int, + ffi.Int, + ffi.Int, + ffi.Int, + ffi.Int, + ffi.Int, + ffi.Int, + ffi.Pointer)>>('ORB_CreateWithParams'); + late final _ORB_CreateWithParams = _ORB_CreateWithParamsPtr.asFunction< + CvStatus Function( + int, double, int, int, int, int, int, int, int, ffi.Pointer)>(); + + CvStatus ORB_Detect( + ORB o, + Mat src, + ffi.Pointer rval, + ) { + return _ORB_Detect( + o, + src, + rval, + ); + } + + late final _ORB_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ORB, Mat, ffi.Pointer)>>('ORB_Detect'); + late final _ORB_Detect = _ORB_DetectPtr.asFunction< + CvStatus Function(ORB, Mat, ffi.Pointer)>(); + + CvStatus ORB_DetectAndCompute( + ORB o, + Mat src, + Mat mask, + Mat desc, + ffi.Pointer rval, + ) { + return _ORB_DetectAndCompute( + o, + src, + mask, + desc, + rval, + ); + } + + late final _ORB_DetectAndComputePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ORB, Mat, Mat, Mat, + ffi.Pointer)>>('ORB_DetectAndCompute'); + late final _ORB_DetectAndCompute = _ORB_DetectAndComputePtr.asFunction< + CvStatus Function(ORB, Mat, Mat, Mat, ffi.Pointer)>(); + + CvStatus Ones( + int rows, + int cols, + int type, + ffi.Pointer rval, + ) { + return _Ones( + rows, + cols, + type, + rval, + ); + } + + late final _OnesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ffi.Int, ffi.Int, ffi.Int, ffi.Pointer)>>('Ones'); + late final _Ones = + _OnesPtr.asFunction)>(); + + void ParamGrid_Close( + ffi.Pointer self, + ) { + return _ParamGrid_Close( + self, + ); + } + + late final _ParamGrid_ClosePtr = + _lookup)>>( + 'ParamGrid_Close'); + late final _ParamGrid_Close = _ParamGrid_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); + + CvStatus ParamGrid_Empty( + ffi.Pointer rval, + ) { + return _ParamGrid_Empty( + rval, + ); + } + + late final _ParamGrid_EmptyPtr = + _lookup)>>( + 'ParamGrid_Empty'); + late final _ParamGrid_Empty = _ParamGrid_EmptyPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); + + CvStatus ParamGrid_GetLogStep( + PtrParamGrid self, + ffi.Pointer rval, + ) { + return _ParamGrid_GetLogStep( + self, + rval, + ); + } + + late final _ParamGrid_GetLogStepPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + PtrParamGrid, ffi.Pointer)>>('ParamGrid_GetLogStep'); + late final _ParamGrid_GetLogStep = _ParamGrid_GetLogStepPtr.asFunction< + CvStatus Function(PtrParamGrid, ffi.Pointer)>(); + + CvStatus ParamGrid_GetMaxVal( + PtrParamGrid self, + ffi.Pointer rval, + ) { + return _ParamGrid_GetMaxVal( + self, + rval, + ); + } + + late final _ParamGrid_GetMaxValPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + PtrParamGrid, ffi.Pointer)>>('ParamGrid_GetMaxVal'); + late final _ParamGrid_GetMaxVal = _ParamGrid_GetMaxValPtr.asFunction< + CvStatus Function(PtrParamGrid, ffi.Pointer)>(); + + CvStatus ParamGrid_New( + double minVal, + double maxVal, + double logstep, + ffi.Pointer rval, + ) { + return _ParamGrid_New( + minVal, + maxVal, + logstep, + rval, + ); + } + + late final _ParamGrid_NewPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Double, ffi.Double, ffi.Double, + ffi.Pointer)>>('ParamGrid_New'); + late final _ParamGrid_New = _ParamGrid_NewPtr.asFunction< + CvStatus Function(double, double, double, ffi.Pointer)>(); + + CvStatus ParamGrid_getMinVal( + PtrParamGrid self, + ffi.Pointer rval, + ) { + return _ParamGrid_getMinVal( + self, + rval, + ); + } + + late final _ParamGrid_getMinValPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + PtrParamGrid, ffi.Pointer)>>('ParamGrid_getMinVal'); + late final _ParamGrid_getMinVal = _ParamGrid_getMinValPtr.asFunction< + CvStatus Function(PtrParamGrid, ffi.Pointer)>(); + + CvStatus PencilSketch( + Mat src, + Mat dst1, + Mat dst2, + double sigma_s, + double sigma_r, + double shade_factor, + ) { + return _PencilSketch( + src, + dst1, + dst2, + sigma_s, + sigma_r, + shade_factor, + ); + } + + late final _PencilSketchPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Mat, ffi.Float, ffi.Float, ffi.Float)>>('PencilSketch'); + late final _PencilSketch = _PencilSketchPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, double, double, double)>(); + + CvStatus PhaseCorrelate( + Mat src1, + Mat src2, + Mat window, + ffi.Pointer response, + ffi.Pointer rval, + ) { + return _PhaseCorrelate( + src1, + src2, + window, + response, + rval, + ); + } + + late final _PhaseCorrelatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, Mat, ffi.Pointer, + ffi.Pointer)>>('PhaseCorrelate'); + late final _PhaseCorrelate = _PhaseCorrelatePtr.asFunction< + CvStatus Function( + Mat, Mat, Mat, ffi.Pointer, ffi.Pointer)>(); + + CvStatus PhotoInpaint( + Mat src, + Mat mask, + Mat dst, + double inpaint_radius, + int algorithm_type, + ) { + return _PhotoInpaint( + src, + mask, + dst, + inpaint_radius, + algorithm_type, + ); + } + + late final _PhotoInpaintPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Mat, ffi.Float, ffi.Int)>>('PhotoInpaint'); + late final _PhotoInpaint = _PhotoInpaintPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, double, int)>(); + + CvStatus PointPolygonTest( + VecPoint pts, + Point2f pt, + bool measureDist, + ffi.Pointer rval, + ) { + return _PointPolygonTest( + pts, + pt, + measureDist, + rval, + ); + } + + late final _PointPolygonTestPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint, Point2f, ffi.Bool, + ffi.Pointer)>>('PointPolygonTest'); + late final _PointPolygonTest = _PointPolygonTestPtr.asFunction< + CvStatus Function(VecPoint, Point2f, bool, ffi.Pointer)>(); + + CvStatus Polylines( + Mat img, + VecVecPoint points, + bool isClosed, + Scalar color, + int thickness, + ) { + return _Polylines( + img, + points, + isClosed, + color, + thickness, + ); + } + + late final _PolylinesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, VecVecPoint, ffi.Bool, Scalar, ffi.Int)>>('Polylines'); + late final _Polylines = _PolylinesPtr.asFunction< + CvStatus Function(Mat, VecVecPoint, bool, Scalar, int)>(); + + CvStatus PutText( + Mat img, + ffi.Pointer text, + Point org, + int fontFace, + double fontScale, + Scalar color, + int thickness, + ) { + return _PutText( + img, + text, + org, + fontFace, + fontScale, + color, + thickness, + ); + } + + late final _PutTextPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Pointer, Point, ffi.Int, + ffi.Double, Scalar, ffi.Int)>>('PutText'); + late final _PutText = _PutTextPtr.asFunction< + CvStatus Function( + Mat, ffi.Pointer, Point, int, double, Scalar, int)>(); + + CvStatus PutTextWithParams( + Mat img, + ffi.Pointer text, + Point org, + int fontFace, + double fontScale, + Scalar color, + int thickness, + int lineType, + bool bottomLeftOrigin, + ) { + return _PutTextWithParams( + img, + text, + org, + fontFace, + fontScale, + color, + thickness, + lineType, + bottomLeftOrigin, + ); + } + + late final _PutTextWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + ffi.Pointer, + Point, + ffi.Int, + ffi.Double, + Scalar, + ffi.Int, + ffi.Int, + ffi.Bool)>>('PutTextWithParams'); + late final _PutTextWithParams = _PutTextWithParamsPtr.asFunction< + CvStatus Function(Mat, ffi.Pointer, Point, int, double, Scalar, + int, int, bool)>(); + + CvStatus PyrDown( + Mat src, + Mat dst, + Size dstsize, + int borderType, + ) { + return _PyrDown( + src, + dst, + dstsize, + borderType, + ); + } + + late final _PyrDownPtr = + _lookup>( + 'PyrDown'); + late final _PyrDown = + _PyrDownPtr.asFunction(); + + CvStatus PyrUp( + Mat src, + Mat dst, + Size dstsize, + int borderType, + ) { + return _PyrUp( + src, + dst, + dstsize, + borderType, + ); + } + + late final _PyrUpPtr = + _lookup>( + 'PyrUp'); + late final _PyrUp = + _PyrUpPtr.asFunction(); + + void QRCodeDetector_Close( + ffi.Pointer qr, + ) { + return _QRCodeDetector_Close( + qr, + ); + } + + late final _QRCodeDetector_ClosePtr = _lookup< + ffi.NativeFunction)>>( + 'QRCodeDetector_Close'); + late final _QRCodeDetector_Close = _QRCodeDetector_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); + + CvStatus QRCodeDetector_Decode( + QRCodeDetector qr, + Mat input, + VecPoint inputPoints, + Mat straight_qrcode, + ffi.Pointer rval, + ) { + return _QRCodeDetector_Decode( + qr, + input, + inputPoints, + straight_qrcode, + rval, + ); + } + + late final _QRCodeDetector_DecodePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(QRCodeDetector, Mat, VecPoint, Mat, + ffi.Pointer)>>('QRCodeDetector_Decode'); + late final _QRCodeDetector_Decode = _QRCodeDetector_DecodePtr.asFunction< + CvStatus Function( + QRCodeDetector, Mat, VecPoint, Mat, ffi.Pointer)>(); + + CvStatus QRCodeDetector_Detect( + QRCodeDetector qr, + Mat input, + VecPoint points, + ffi.Pointer rval, + ) { + return _QRCodeDetector_Detect( + qr, + input, + points, + rval, + ); + } + + late final _QRCodeDetector_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(QRCodeDetector, Mat, VecPoint, + ffi.Pointer)>>('QRCodeDetector_Detect'); + late final _QRCodeDetector_Detect = _QRCodeDetector_DetectPtr.asFunction< + CvStatus Function( + QRCodeDetector, Mat, VecPoint, ffi.Pointer)>(); + + CvStatus QRCodeDetector_DetectAndDecode( + QRCodeDetector qr, + Mat input, + ffi.Pointer points, + ffi.Pointer straight_qrcode, + ffi.Pointer rval, + ) { + return _QRCodeDetector_DetectAndDecode( + qr, + input, + points, + straight_qrcode, + rval, + ); + } + + late final _QRCodeDetector_DetectAndDecodePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + QRCodeDetector, + Mat, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('QRCodeDetector_DetectAndDecode'); + late final _QRCodeDetector_DetectAndDecode = + _QRCodeDetector_DetectAndDecodePtr.asFunction< + CvStatus Function(QRCodeDetector, Mat, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + CvStatus QRCodeDetector_DetectAndDecodeMulti( + QRCodeDetector qr, + Mat input, + ffi.Pointer decoded, + ffi.Pointer points, + ffi.Pointer straight_code, + ffi.Pointer rval, ) { - return _Mat_SetVec3b( - m, - row, - col, - val, + return _QRCodeDetector_DetectAndDecodeMulti( + qr, + input, + decoded, + points, + straight_code, + rval, ); } - late final _Mat_SetVec3bPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec3b'); - late final _Mat_SetVec3b = - _Mat_SetVec3bPtr.asFunction(); + late final _QRCodeDetector_DetectAndDecodeMultiPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + QRCodeDetector, + Mat, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('QRCodeDetector_DetectAndDecodeMulti'); + late final _QRCodeDetector_DetectAndDecodeMulti = + _QRCodeDetector_DetectAndDecodeMultiPtr.asFunction< + CvStatus Function( + QRCodeDetector, + Mat, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); - CvStatus Mat_SetVec3d( - Mat m, - int row, - int col, - Vec3d val, + CvStatus QRCodeDetector_DetectMulti( + QRCodeDetector qr, + Mat input, + VecPoint points, + ffi.Pointer rval, ) { - return _Mat_SetVec3d( - m, - row, - col, - val, + return _QRCodeDetector_DetectMulti( + qr, + input, + points, + rval, ); } - late final _Mat_SetVec3dPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec3d'); - late final _Mat_SetVec3d = - _Mat_SetVec3dPtr.asFunction(); + late final _QRCodeDetector_DetectMultiPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(QRCodeDetector, Mat, VecPoint, + ffi.Pointer)>>('QRCodeDetector_DetectMulti'); + late final _QRCodeDetector_DetectMulti = + _QRCodeDetector_DetectMultiPtr.asFunction< + CvStatus Function( + QRCodeDetector, Mat, VecPoint, ffi.Pointer)>(); - CvStatus Mat_SetVec3f( - Mat m, - int row, - int col, - Vec3f val, + CvStatus QRCodeDetector_New( + ffi.Pointer rval, ) { - return _Mat_SetVec3f( - m, - row, - col, - val, + return _QRCodeDetector_New( + rval, ); } - late final _Mat_SetVec3fPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec3f'); - late final _Mat_SetVec3f = - _Mat_SetVec3fPtr.asFunction(); + late final _QRCodeDetector_NewPtr = _lookup< + ffi.NativeFunction)>>( + 'QRCodeDetector_New'); + late final _QRCodeDetector_New = _QRCodeDetector_NewPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus Mat_SetVec3i( - Mat m, - int row, - int col, - Vec3i val, + CvStatus RNG_Fill( + RNG rng, + Mat mat, + int distType, + double a, + double b, + bool saturateRange, ) { - return _Mat_SetVec3i( - m, - row, - col, - val, + return _RNG_Fill( + rng, + mat, + distType, + a, + b, + saturateRange, ); } - late final _Mat_SetVec3iPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec3i'); - late final _Mat_SetVec3i = - _Mat_SetVec3iPtr.asFunction(); + late final _RNG_FillPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(RNG, Mat, ffi.Int, ffi.Double, ffi.Double, + ffi.Bool)>>('RNG_Fill'); + late final _RNG_Fill = _RNG_FillPtr.asFunction< + CvStatus Function(RNG, Mat, int, double, double, bool)>(); - CvStatus Mat_SetVec3s( - Mat m, - int row, - int col, - Vec3s val, + CvStatus RNG_Gaussian( + RNG rng, + double sigma, + ffi.Pointer rval, ) { - return _Mat_SetVec3s( - m, - row, - col, - val, + return _RNG_Gaussian( + rng, + sigma, + rval, ); } - late final _Mat_SetVec3sPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec3s'); - late final _Mat_SetVec3s = - _Mat_SetVec3sPtr.asFunction(); + late final _RNG_GaussianPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + RNG, ffi.Double, ffi.Pointer)>>('RNG_Gaussian'); + late final _RNG_Gaussian = _RNG_GaussianPtr.asFunction< + CvStatus Function(RNG, double, ffi.Pointer)>(); - CvStatus Mat_SetVec3w( - Mat m, - int row, - int col, - Vec3w val, + CvStatus RNG_Next( + RNG rng, + ffi.Pointer rval, ) { - return _Mat_SetVec3w( - m, - row, - col, - val, + return _RNG_Next( + rng, + rval, ); } - late final _Mat_SetVec3wPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec3w'); - late final _Mat_SetVec3w = - _Mat_SetVec3wPtr.asFunction(); + late final _RNG_NextPtr = _lookup< + ffi.NativeFunction)>>( + 'RNG_Next'); + late final _RNG_Next = _RNG_NextPtr.asFunction< + CvStatus Function(RNG, ffi.Pointer)>(); - CvStatus Mat_SetVec4b( - Mat m, - int row, - int col, - Vec4b val, + CvStatus RNG_Uniform( + RNG rng, + int a, + int b, + ffi.Pointer rval, ) { - return _Mat_SetVec4b( - m, - row, - col, - val, + return _RNG_Uniform( + rng, + a, + b, + rval, ); } - late final _Mat_SetVec4bPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec4b'); - late final _Mat_SetVec4b = - _Mat_SetVec4bPtr.asFunction(); + late final _RNG_UniformPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + RNG, ffi.Int, ffi.Int, ffi.Pointer)>>('RNG_Uniform'); + late final _RNG_Uniform = _RNG_UniformPtr.asFunction< + CvStatus Function(RNG, int, int, ffi.Pointer)>(); - CvStatus Mat_SetVec4d( - Mat m, - int row, - int col, - Vec4d val, + CvStatus RNG_UniformDouble( + RNG rng, + double a, + double b, + ffi.Pointer rval, ) { - return _Mat_SetVec4d( - m, - row, - col, - val, + return _RNG_UniformDouble( + rng, + a, + b, + rval, ); } - late final _Mat_SetVec4dPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec4d'); - late final _Mat_SetVec4d = - _Mat_SetVec4dPtr.asFunction(); - - CvStatus Mat_SetVec4f( - Mat m, - int row, - int col, - Vec4f val, - ) { - return _Mat_SetVec4f( - m, - row, - col, - val, + late final _RNG_UniformDoublePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(RNG, ffi.Double, ffi.Double, + ffi.Pointer)>>('RNG_UniformDouble'); + late final _RNG_UniformDouble = _RNG_UniformDoublePtr.asFunction< + CvStatus Function(RNG, double, double, ffi.Pointer)>(); + + CvStatus RTrees_Clear( + RTrees self, + ) { + return _RTrees_Clear( + self, ); } - late final _Mat_SetVec4fPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec4f'); - late final _Mat_SetVec4f = - _Mat_SetVec4fPtr.asFunction(); + late final _RTrees_ClearPtr = + _lookup>('RTrees_Clear'); + late final _RTrees_Clear = + _RTrees_ClearPtr.asFunction(); - CvStatus Mat_SetVec4i( - Mat m, - int row, - int col, - Vec4i val, + void RTrees_Close( + ffi.Pointer self, ) { - return _Mat_SetVec4i( - m, - row, - col, - val, + return _RTrees_Close( + self, ); } - late final _Mat_SetVec4iPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec4i'); - late final _Mat_SetVec4i = - _Mat_SetVec4iPtr.asFunction(); + late final _RTrees_ClosePtr = + _lookup)>>( + 'RTrees_Close'); + late final _RTrees_Close = + _RTrees_ClosePtr.asFunction)>(); - CvStatus Mat_SetVec4s( - Mat m, - int row, - int col, - Vec4s val, + CvStatus RTrees_Create( + ffi.Pointer rval, ) { - return _Mat_SetVec4s( - m, - row, - col, - val, + return _RTrees_Create( + rval, ); } - late final _Mat_SetVec4sPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec4s'); - late final _Mat_SetVec4s = - _Mat_SetVec4sPtr.asFunction(); + late final _RTrees_CreatePtr = + _lookup)>>( + 'RTrees_Create'); + late final _RTrees_Create = + _RTrees_CreatePtr.asFunction)>(); - CvStatus Mat_SetVec4w( - Mat m, - int row, - int col, - Vec4w val, + CvStatus RTrees_Get( + PtrRTrees self, + ffi.Pointer rval, ) { - return _Mat_SetVec4w( - m, - row, - col, - val, + return _RTrees_Get( + self, + rval, ); } - late final _Mat_SetVec4wPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec4w'); - late final _Mat_SetVec4w = - _Mat_SetVec4wPtr.asFunction(); + late final _RTrees_GetPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrRTrees, ffi.Pointer)>>('RTrees_Get'); + late final _RTrees_Get = _RTrees_GetPtr.asFunction< + CvStatus Function(PtrRTrees, ffi.Pointer)>(); - CvStatus Mat_SetVec6d( - Mat m, - int row, - int col, - Vec6d val, + CvStatus RTrees_GetActiveVarCount( + RTrees self, + ffi.Pointer rval, ) { - return _Mat_SetVec6d( - m, - row, - col, - val, + return _RTrees_GetActiveVarCount( + self, + rval, ); } - late final _Mat_SetVec6dPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec6d'); - late final _Mat_SetVec6d = - _Mat_SetVec6dPtr.asFunction(); + late final _RTrees_GetActiveVarCountPtr = _lookup< + ffi.NativeFunction)>>( + 'RTrees_GetActiveVarCount'); + late final _RTrees_GetActiveVarCount = _RTrees_GetActiveVarCountPtr + .asFunction)>(); - CvStatus Mat_SetVec6f( - Mat m, - int row, - int col, - Vec6f val, + CvStatus RTrees_GetCalculateVarImportance( + RTrees self, + ffi.Pointer rval, ) { - return _Mat_SetVec6f( - m, - row, - col, - val, + return _RTrees_GetCalculateVarImportance( + self, + rval, ); } - late final _Mat_SetVec6fPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec6f'); - late final _Mat_SetVec6f = - _Mat_SetVec6fPtr.asFunction(); + late final _RTrees_GetCalculateVarImportancePtr = _lookup< + ffi.NativeFunction)>>( + 'RTrees_GetCalculateVarImportance'); + late final _RTrees_GetCalculateVarImportance = + _RTrees_GetCalculateVarImportancePtr.asFunction< + CvStatus Function(RTrees, ffi.Pointer)>(); - CvStatus Mat_SetVec6i( - Mat m, - int row, - int col, - Vec6i val, + CvStatus RTrees_GetOOBError( + RTrees self, + ffi.Pointer rval, ) { - return _Mat_SetVec6i( - m, - row, - col, - val, + return _RTrees_GetOOBError( + self, + rval, ); } - late final _Mat_SetVec6iPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec6i'); - late final _Mat_SetVec6i = - _Mat_SetVec6iPtr.asFunction(); + late final _RTrees_GetOOBErrorPtr = _lookup< + ffi + .NativeFunction)>>( + 'RTrees_GetOOBError'); + late final _RTrees_GetOOBError = _RTrees_GetOOBErrorPtr.asFunction< + CvStatus Function(RTrees, ffi.Pointer)>(); - CvStatus Mat_SetVec8i( - Mat m, - int row, - int col, - Vec8i val, + CvStatus RTrees_GetTermCriteria( + RTrees self, + ffi.Pointer rval, ) { - return _Mat_SetVec8i( - m, - row, - col, - val, + return _RTrees_GetTermCriteria( + self, + rval, ); } - late final _Mat_SetVec8iPtr = _lookup< - ffi.NativeFunction>( - 'Mat_SetVec8i'); - late final _Mat_SetVec8i = - _Mat_SetVec8iPtr.asFunction(); + late final _RTrees_GetTermCriteriaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + RTrees, ffi.Pointer)>>('RTrees_GetTermCriteria'); + late final _RTrees_GetTermCriteria = _RTrees_GetTermCriteriaPtr.asFunction< + CvStatus Function(RTrees, ffi.Pointer)>(); - CvStatus Mat_Size( - Mat m, - ffi.Pointer rval, + CvStatus RTrees_GetVarImportance( + RTrees self, + ffi.Pointer rval, ) { - return _Mat_Size( - m, + return _RTrees_GetVarImportance( + self, rval, ); } - late final _Mat_SizePtr = - _lookup)>>( - 'Mat_Size'); - late final _Mat_Size = - _Mat_SizePtr.asFunction)>(); + late final _RTrees_GetVarImportancePtr = + _lookup)>>( + 'RTrees_GetVarImportance'); + late final _RTrees_GetVarImportance = _RTrees_GetVarImportancePtr.asFunction< + CvStatus Function(RTrees, ffi.Pointer)>(); - CvStatus Mat_Solve( - Mat src1, - Mat src2, - Mat dst, + CvStatus RTrees_GetVotes( + RTrees self, + Mat samples, + Mat results, int flags, - ffi.Pointer rval, ) { - return _Mat_Solve( - src1, - src2, - dst, + return _RTrees_GetVotes( + self, + samples, + results, flags, - rval, ); } - late final _Mat_SolvePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, ffi.Int, ffi.Pointer)>>('Mat_Solve'); - late final _Mat_Solve = _Mat_SolvePtr.asFunction< - CvStatus Function(Mat, Mat, Mat, int, ffi.Pointer)>(); + late final _RTrees_GetVotesPtr = + _lookup>( + 'RTrees_GetVotes'); + late final _RTrees_GetVotes = _RTrees_GetVotesPtr.asFunction< + CvStatus Function(RTrees, Mat, Mat, int)>(); - CvStatus Mat_SolveCubic( - Mat coeffs, - Mat roots, - ffi.Pointer rval, + CvStatus RTrees_Load( + RTrees self, + ffi.Pointer filepath, ) { - return _Mat_SolveCubic( - coeffs, - roots, - rval, + return _RTrees_Load( + self, + filepath, ); } - late final _Mat_SolveCubicPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Pointer)>>('Mat_SolveCubic'); - late final _Mat_SolveCubic = _Mat_SolveCubicPtr.asFunction< - CvStatus Function(Mat, Mat, ffi.Pointer)>(); + late final _RTrees_LoadPtr = _lookup< + ffi.NativeFunction)>>( + 'RTrees_Load'); + late final _RTrees_Load = _RTrees_LoadPtr.asFunction< + CvStatus Function(RTrees, ffi.Pointer)>(); - CvStatus Mat_SolvePoly( - Mat coeffs, - Mat roots, - int maxIters, - ffi.Pointer rval, + CvStatus RTrees_LoadFromString( + RTrees self, + ffi.Pointer strModel, + ffi.Pointer objname, ) { - return _Mat_SolvePoly( - coeffs, - roots, - maxIters, - rval, + return _RTrees_LoadFromString( + self, + strModel, + objname, ); } - late final _Mat_SolvePolyPtr = _lookup< + late final _RTrees_LoadFromStringPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Int, ffi.Pointer)>>('Mat_SolvePoly'); - late final _Mat_SolvePoly = _Mat_SolvePolyPtr.asFunction< - CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); + CvStatus Function(RTrees, ffi.Pointer, + ffi.Pointer)>>('RTrees_LoadFromString'); + late final _RTrees_LoadFromString = _RTrees_LoadFromStringPtr.asFunction< + CvStatus Function( + RTrees, ffi.Pointer, ffi.Pointer)>(); - CvStatus Mat_Sort( - Mat src, - Mat dst, - int flags, + CvStatus RTrees_Save( + RTrees self, + ffi.Pointer filename, ) { - return _Mat_Sort( - src, - dst, - flags, + return _RTrees_Save( + self, + filename, ); } - late final _Mat_SortPtr = - _lookup>( - 'Mat_Sort'); - late final _Mat_Sort = - _Mat_SortPtr.asFunction(); + late final _RTrees_SavePtr = _lookup< + ffi.NativeFunction)>>( + 'RTrees_Save'); + late final _RTrees_Save = _RTrees_SavePtr.asFunction< + CvStatus Function(RTrees, ffi.Pointer)>(); - CvStatus Mat_SortIdx( - Mat src, - Mat dst, - int flags, + CvStatus RTrees_SetActiveVarCount( + RTrees self, + int val, ) { - return _Mat_SortIdx( - src, - dst, - flags, + return _RTrees_SetActiveVarCount( + self, + val, ); } - late final _Mat_SortIdxPtr = - _lookup>( - 'Mat_SortIdx'); - late final _Mat_SortIdx = - _Mat_SortIdxPtr.asFunction(); + late final _RTrees_SetActiveVarCountPtr = + _lookup>( + 'RTrees_SetActiveVarCount'); + late final _RTrees_SetActiveVarCount = + _RTrees_SetActiveVarCountPtr.asFunction(); - CvStatus Mat_Split( - Mat src, - ffi.Pointer rval, + CvStatus RTrees_SetCalculateVarImportance( + RTrees self, + bool val, ) { - return _Mat_Split( - src, - rval, + return _RTrees_SetCalculateVarImportance( + self, + val, ); } - late final _Mat_SplitPtr = - _lookup)>>( - 'Mat_Split'); - late final _Mat_Split = - _Mat_SplitPtr.asFunction)>(); + late final _RTrees_SetCalculateVarImportancePtr = + _lookup>( + 'RTrees_SetCalculateVarImportance'); + late final _RTrees_SetCalculateVarImportance = + _RTrees_SetCalculateVarImportancePtr.asFunction< + CvStatus Function(RTrees, bool)>(); - CvStatus Mat_Sqrt( - Mat m, - ffi.Pointer rval, + CvStatus RTrees_SetTermCriteria( + RTrees self, + TermCriteria val, ) { - return _Mat_Sqrt( - m, + return _RTrees_SetTermCriteria( + self, + val, + ); + } + + late final _RTrees_SetTermCriteriaPtr = + _lookup>( + 'RTrees_SetTermCriteria'); + late final _RTrees_SetTermCriteria = _RTrees_SetTermCriteriaPtr.asFunction< + CvStatus Function(RTrees, TermCriteria)>(); + + CvStatus RTrees_Train( + RTrees self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, + ) { + return _RTrees_Train( + self, + trainData, + flags, rval, ); } - late final _Mat_SqrtPtr = - _lookup)>>( - 'Mat_Sqrt'); - late final _Mat_Sqrt = - _Mat_SqrtPtr.asFunction)>(); + late final _RTrees_TrainPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(RTrees, PtrTrainData, ffi.Int, + ffi.Pointer)>>('RTrees_Train'); + late final _RTrees_Train = _RTrees_TrainPtr.asFunction< + CvStatus Function(RTrees, PtrTrainData, int, ffi.Pointer)>(); - CvStatus Mat_Step( - Mat m, - ffi.Pointer rval, + CvStatus RTrees_Train_1( + RTrees self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _Mat_Step( - m, + return _RTrees_Train_1( + self, + samples, + layout, + responses, rval, ); } - late final _Mat_StepPtr = - _lookup)>>( - 'Mat_Step'); - late final _Mat_Step = - _Mat_StepPtr.asFunction)>(); + late final _RTrees_Train_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(RTrees, Mat, ffi.Int, Mat, + ffi.Pointer)>>('RTrees_Train_1'); + late final _RTrees_Train_1 = _RTrees_Train_1Ptr.asFunction< + CvStatus Function(RTrees, Mat, int, Mat, ffi.Pointer)>(); - CvStatus Mat_Subtract( - Mat src1, - Mat src2, - Mat dst, + CvStatus RandN( + Mat mat, + Scalar mean, + Scalar stddev, ) { - return _Mat_Subtract( - src1, - src2, - dst, + return _RandN( + mat, + mean, + stddev, ); } - late final _Mat_SubtractPtr = - _lookup>( - 'Mat_Subtract'); - late final _Mat_Subtract = - _Mat_SubtractPtr.asFunction(); + late final _RandNPtr = + _lookup>( + 'RandN'); + late final _RandN = + _RandNPtr.asFunction(); - CvStatus Mat_SubtractF64( - Mat m, - double val, + CvStatus RandShuffle( + Mat mat, ) { - return _Mat_SubtractF64( - m, - val, + return _RandShuffle( + mat, ); } - late final _Mat_SubtractF64Ptr = - _lookup>( - 'Mat_SubtractF64'); - late final _Mat_SubtractF64 = - _Mat_SubtractF64Ptr.asFunction(); + late final _RandShufflePtr = + _lookup>('RandShuffle'); + late final _RandShuffle = + _RandShufflePtr.asFunction(); - CvStatus Mat_SubtractFloat( - Mat m, - double val, + CvStatus RandShuffleWithParams( + Mat mat, + double iterFactor, + RNG rng, ) { - return _Mat_SubtractFloat( - m, - val, + return _RandShuffleWithParams( + mat, + iterFactor, + rng, ); } - late final _Mat_SubtractFloatPtr = - _lookup>( - 'Mat_SubtractFloat'); - late final _Mat_SubtractFloat = - _Mat_SubtractFloatPtr.asFunction(); + late final _RandShuffleWithParamsPtr = + _lookup>( + 'RandShuffleWithParams'); + late final _RandShuffleWithParams = _RandShuffleWithParamsPtr.asFunction< + CvStatus Function(Mat, double, RNG)>(); - CvStatus Mat_SubtractI32( - Mat m, - int val, + CvStatus RandU( + Mat mat, + Scalar low, + Scalar high, ) { - return _Mat_SubtractI32( - m, - val, + return _RandU( + mat, + low, + high, ); } - late final _Mat_SubtractI32Ptr = - _lookup>( - 'Mat_SubtractI32'); - late final _Mat_SubtractI32 = - _Mat_SubtractI32Ptr.asFunction(); + late final _RandUPtr = + _lookup>( + 'RandU'); + late final _RandU = + _RandUPtr.asFunction(); - CvStatus Mat_SubtractSChar( - Mat m, - int val, + CvStatus Rectangle( + Mat img, + Rect rect, + Scalar color, + int thickness, ) { - return _Mat_SubtractSChar( - m, - val, + return _Rectangle( + img, + rect, + color, + thickness, ); } - late final _Mat_SubtractSCharPtr = - _lookup>( - 'Mat_SubtractSChar'); - late final _Mat_SubtractSChar = - _Mat_SubtractSCharPtr.asFunction(); + late final _RectanglePtr = _lookup< + ffi.NativeFunction>( + 'Rectangle'); + late final _Rectangle = + _RectanglePtr.asFunction(); - CvStatus Mat_SubtractUChar( - Mat m, - int val, + CvStatus RectangleWithParams( + Mat img, + Rect rect, + Scalar color, + int thickness, + int lineType, + int shift, ) { - return _Mat_SubtractUChar( - m, - val, + return _RectangleWithParams( + img, + rect, + color, + thickness, + lineType, + shift, ); } - late final _Mat_SubtractUCharPtr = - _lookup>( - 'Mat_SubtractUChar'); - late final _Mat_SubtractUChar = - _Mat_SubtractUCharPtr.asFunction(); + late final _RectangleWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Rect, Scalar, ffi.Int, ffi.Int, + ffi.Int)>>('RectangleWithParams'); + late final _RectangleWithParams = _RectangleWithParamsPtr.asFunction< + CvStatus Function(Mat, Rect, Scalar, int, int, int)>(); - CvStatus Mat_Sum( + CvStatus Remap( Mat src, - ffi.Pointer rval, + Mat dst, + Mat map1, + Mat map2, + int interpolation, + int borderMode, + Scalar borderValue, ) { - return _Mat_Sum( + return _Remap( src, - rval, - ); - } - - late final _Mat_SumPtr = - _lookup)>>( - 'Mat_Sum'); - late final _Mat_Sum = - _Mat_SumPtr.asFunction)>(); - - CvStatus Mat_T( - Mat x, - ffi.Pointer rval, - ) { - return _Mat_T( - x, - rval, + dst, + map1, + map2, + interpolation, + borderMode, + borderValue, ); } - late final _Mat_TPtr = - _lookup)>>( - 'Mat_T'); - late final _Mat_T = - _Mat_TPtr.asFunction)>(); + late final _RemapPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Mat, Mat, ffi.Int, ffi.Int, Scalar)>>('Remap'); + late final _Remap = _RemapPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat, int, int, Scalar)>(); - CvStatus Mat_ToVecChar( - Mat m, - ffi.Pointer rval, + CvStatus Resize( + Mat src, + Mat dst, + Size sz, + double fx, + double fy, + int interp, ) { - return _Mat_ToVecChar( - m, - rval, + return _Resize( + src, + dst, + sz, + fx, + fy, + interp, ); } - late final _Mat_ToVecCharPtr = - _lookup)>>( - 'Mat_ToVecChar'); - late final _Mat_ToVecChar = _Mat_ToVecCharPtr.asFunction< - CvStatus Function(Mat, ffi.Pointer)>(); + late final _ResizePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Size, ffi.Double, ffi.Double, ffi.Int)>>('Resize'); + late final _Resize = _ResizePtr.asFunction< + CvStatus Function(Mat, Mat, Size, double, double, int)>(); - CvStatus Mat_ToVecUChar( - Mat m, - ffi.Pointer rval, + void Rng_Close( + ffi.Pointer rng, ) { - return _Mat_ToVecUChar( - m, - rval, + return _Rng_Close( + rng, ); } - late final _Mat_ToVecUCharPtr = _lookup< - ffi.NativeFunction)>>( - 'Mat_ToVecUChar'); - late final _Mat_ToVecUChar = _Mat_ToVecUCharPtr.asFunction< - CvStatus Function(Mat, ffi.Pointer)>(); + late final _Rng_ClosePtr = + _lookup)>>( + 'Rng_Close'); + late final _Rng_Close = + _Rng_ClosePtr.asFunction)>(); - CvStatus Mat_Total( - Mat m, - ffi.Pointer rval, + CvStatus Rng_New( + ffi.Pointer rval, ) { - return _Mat_Total( - m, + return _Rng_New( rval, ); } - late final _Mat_TotalPtr = - _lookup)>>( - 'Mat_Total'); - late final _Mat_Total = - _Mat_TotalPtr.asFunction)>(); + late final _Rng_NewPtr = + _lookup)>>( + 'Rng_New'); + late final _Rng_New = + _Rng_NewPtr.asFunction)>(); - CvStatus Mat_Trace( - Mat src, - ffi.Pointer rval, + CvStatus Rng_NewWithState( + int state, + ffi.Pointer rval, ) { - return _Mat_Trace( - src, + return _Rng_NewWithState( + state, rval, ); } - late final _Mat_TracePtr = - _lookup)>>( - 'Mat_Trace'); - late final _Mat_Trace = - _Mat_TracePtr.asFunction)>(); + late final _Rng_NewWithStatePtr = _lookup< + ffi.NativeFunction)>>( + 'Rng_NewWithState'); + late final _Rng_NewWithState = _Rng_NewWithStatePtr.asFunction< + CvStatus Function(int, ffi.Pointer)>(); - CvStatus Mat_Transform( + CvStatus Rotate( Mat src, Mat dst, - Mat tm, + int rotateCode, ) { - return _Mat_Transform( + return _Rotate( src, dst, - tm, + rotateCode, ); } - late final _Mat_TransformPtr = - _lookup>( - 'Mat_Transform'); - late final _Mat_Transform = - _Mat_TransformPtr.asFunction(); + late final _RotatePtr = + _lookup>( + 'Rotate'); + late final _Rotate = + _RotatePtr.asFunction(); - CvStatus Mat_Transpose( - Mat src, - Mat dst, + CvStatus RotatedRect_BoundingRect( + RotatedRect rect, + ffi.Pointer rval, ) { - return _Mat_Transpose( - src, - dst, + return _RotatedRect_BoundingRect( + rect, + rval, ); } - late final _Mat_TransposePtr = - _lookup>('Mat_Transpose'); - late final _Mat_Transpose = - _Mat_TransposePtr.asFunction(); + late final _RotatedRect_BoundingRectPtr = _lookup< + ffi + .NativeFunction)>>( + 'RotatedRect_BoundingRect'); + late final _RotatedRect_BoundingRect = _RotatedRect_BoundingRectPtr + .asFunction)>(); - CvStatus Mat_Type( - Mat m, - ffi.Pointer rval, + CvStatus RotatedRect_BoundingRect2f( + RotatedRect rect, + ffi.Pointer rval, ) { - return _Mat_Type( - m, + return _RotatedRect_BoundingRect2f( + rect, rval, ); } - late final _Mat_TypePtr = - _lookup)>>( - 'Mat_Type'); - late final _Mat_Type = - _Mat_TypePtr.asFunction)>(); + late final _RotatedRect_BoundingRect2fPtr = _lookup< + ffi + .NativeFunction)>>( + 'RotatedRect_BoundingRect2f'); + late final _RotatedRect_BoundingRect2f = _RotatedRect_BoundingRect2fPtr + .asFunction)>(); - CvStatus Mat_Vconcat( - Mat src1, - Mat src2, - Mat dst, + CvStatus RotatedRect_Points( + RotatedRect rect, + ffi.Pointer pts, ) { - return _Mat_Vconcat( - src1, - src2, - dst, + return _RotatedRect_Points( + rect, + pts, ); } - late final _Mat_VconcatPtr = - _lookup>( - 'Mat_Vconcat'); - late final _Mat_Vconcat = - _Mat_VconcatPtr.asFunction(); + late final _RotatedRect_PointsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + RotatedRect, ffi.Pointer)>>('RotatedRect_Points'); + late final _RotatedRect_Points = _RotatedRect_PointsPtr.asFunction< + CvStatus Function(RotatedRect, ffi.Pointer)>(); - CvStatus Mat_colRange( - Mat m, - int start, - int end, - ffi.Pointer rval, + void SIFT_Close( + ffi.Pointer f, ) { - return _Mat_colRange( - m, - start, - end, - rval, + return _SIFT_Close( + f, ); } - late final _Mat_colRangePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_colRange'); - late final _Mat_colRange = _Mat_colRangePtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _SIFT_ClosePtr = + _lookup)>>( + 'SIFT_Close'); + late final _SIFT_Close = + _SIFT_ClosePtr.asFunction)>(); - CvStatus Mat_rowRange( - Mat m, - int start, - int end, - ffi.Pointer rval, + CvStatus SIFT_Create( + ffi.Pointer rval, ) { - return _Mat_rowRange( - m, - start, - end, + return _SIFT_Create( rval, ); } - late final _Mat_rowRangePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Mat_rowRange'); - late final _Mat_rowRange = _Mat_rowRangePtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + late final _SIFT_CreatePtr = + _lookup)>>( + 'SIFT_Create'); + late final _SIFT_Create = + _SIFT_CreatePtr.asFunction)>(); - CvStatus MatchShapes( - VecPoint contour1, - VecPoint contour2, - int method, - double parameter, - ffi.Pointer rval, + CvStatus SIFT_Detect( + SIFT f, + Mat src, + ffi.Pointer rval, ) { - return _MatchShapes( - contour1, - contour2, - method, - parameter, + return _SIFT_Detect( + f, + src, rval, ); } - late final _MatchShapesPtr = _lookup< + late final _SIFT_DetectPtr = _lookup< ffi.NativeFunction< - CvStatus Function(VecPoint, VecPoint, ffi.Int, ffi.Double, - ffi.Pointer)>>('MatchShapes'); - late final _MatchShapes = _MatchShapesPtr.asFunction< - CvStatus Function( - VecPoint, VecPoint, int, double, ffi.Pointer)>(); + CvStatus Function( + SIFT, Mat, ffi.Pointer)>>('SIFT_Detect'); + late final _SIFT_Detect = _SIFT_DetectPtr.asFunction< + CvStatus Function(SIFT, Mat, ffi.Pointer)>(); - CvStatus MatchTemplate( - Mat image, - Mat templ, - Mat result, - int method, + CvStatus SIFT_DetectAndCompute( + SIFT f, + Mat src, Mat mask, + Mat desc, + ffi.Pointer rval, ) { - return _MatchTemplate( - image, - templ, - result, - method, + return _SIFT_DetectAndCompute( + f, + src, mask, + desc, + rval, ); } - late final _MatchTemplatePtr = _lookup< - ffi.NativeFunction>( - 'MatchTemplate'); - late final _MatchTemplate = _MatchTemplatePtr.asFunction< - CvStatus Function(Mat, Mat, Mat, int, Mat)>(); + late final _SIFT_DetectAndComputePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(SIFT, Mat, Mat, Mat, + ffi.Pointer)>>('SIFT_DetectAndCompute'); + late final _SIFT_DetectAndCompute = _SIFT_DetectAndComputePtr.asFunction< + CvStatus Function(SIFT, Mat, Mat, Mat, ffi.Pointer)>(); + + CvStatus SVD_Compute( + Mat src, + Mat w, + Mat u, + Mat vt, + int flags, + ) { + return _SVD_Compute( + src, + w, + u, + vt, + flags, + ); + } - CvStatus MedianBlur( - Mat src, - Mat dst, - int ksize, + late final _SVD_ComputePtr = _lookup< + ffi.NativeFunction>( + 'SVD_Compute'); + late final _SVD_Compute = + _SVD_ComputePtr.asFunction(); + + CvStatus SVMSGD_Clear( + SVMSGD self, ) { - return _MedianBlur( - src, - dst, - ksize, + return _SVMSGD_Clear( + self, ); } - late final _MedianBlurPtr = - _lookup>( - 'MedianBlur'); - late final _MedianBlur = - _MedianBlurPtr.asFunction(); + late final _SVMSGD_ClearPtr = + _lookup>('SVMSGD_Clear'); + late final _SVMSGD_Clear = + _SVMSGD_ClearPtr.asFunction(); - void MergeMertens_Close( - ffi.Pointer b, + void SVMSGD_Close( + ffi.Pointer self, ) { - return _MergeMertens_Close( - b, + return _SVMSGD_Close( + self, ); } - late final _MergeMertens_ClosePtr = - _lookup)>>( - 'MergeMertens_Close'); - late final _MergeMertens_Close = _MergeMertens_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _SVMSGD_ClosePtr = + _lookup)>>( + 'SVMSGD_Close'); + late final _SVMSGD_Close = + _SVMSGD_ClosePtr.asFunction)>(); - CvStatus MergeMertens_Create( - ffi.Pointer rval, + CvStatus SVMSGD_Create( + ffi.Pointer rval, ) { - return _MergeMertens_Create( + return _SVMSGD_Create( rval, ); } - late final _MergeMertens_CreatePtr = - _lookup)>>( - 'MergeMertens_Create'); - late final _MergeMertens_Create = _MergeMertens_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _SVMSGD_CreatePtr = + _lookup)>>( + 'SVMSGD_Create'); + late final _SVMSGD_Create = + _SVMSGD_CreatePtr.asFunction)>(); - CvStatus MergeMertens_CreateWithParams( - double contrast_weight, - double saturation_weight, - double exposure_weight, - ffi.Pointer rval, + CvStatus SVMSGD_Get( + PtrSVMSGD self, + ffi.Pointer rval, ) { - return _MergeMertens_CreateWithParams( - contrast_weight, - saturation_weight, - exposure_weight, + return _SVMSGD_Get( + self, rval, ); } - late final _MergeMertens_CreateWithParamsPtr = _lookup< + late final _SVMSGD_GetPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Float, ffi.Float, ffi.Float, - ffi.Pointer)>>('MergeMertens_CreateWithParams'); - late final _MergeMertens_CreateWithParams = - _MergeMertens_CreateWithParamsPtr.asFunction< - CvStatus Function( - double, double, double, ffi.Pointer)>(); + CvStatus Function(PtrSVMSGD, ffi.Pointer)>>('SVMSGD_Get'); + late final _SVMSGD_Get = _SVMSGD_GetPtr.asFunction< + CvStatus Function(PtrSVMSGD, ffi.Pointer)>(); - CvStatus MergeMertens_Process( - MergeMertens b, - VecMat src, - Mat dst, + CvStatus SVMSGD_GetInitialStepSize( + SVMSGD self, + ffi.Pointer rval, ) { - return _MergeMertens_Process( - b, - src, - dst, + return _SVMSGD_GetInitialStepSize( + self, + rval, ); } - late final _MergeMertens_ProcessPtr = - _lookup>( - 'MergeMertens_Process'); - late final _MergeMertens_Process = _MergeMertens_ProcessPtr.asFunction< - CvStatus Function(MergeMertens, VecMat, Mat)>(); + late final _SVMSGD_GetInitialStepSizePtr = _lookup< + ffi + .NativeFunction)>>( + 'SVMSGD_GetInitialStepSize'); + late final _SVMSGD_GetInitialStepSize = _SVMSGD_GetInitialStepSizePtr + .asFunction)>(); - CvStatus MinAreaRect( - VecPoint pts, - ffi.Pointer rval, + CvStatus SVMSGD_GetMarginRegularization( + SVMSGD self, + ffi.Pointer rval, ) { - return _MinAreaRect( - pts, + return _SVMSGD_GetMarginRegularization( + self, rval, ); } - late final _MinAreaRectPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - VecPoint, ffi.Pointer)>>('MinAreaRect'); - late final _MinAreaRect = _MinAreaRectPtr.asFunction< - CvStatus Function(VecPoint, ffi.Pointer)>(); - - CvStatus MinEnclosingCircle( - VecPoint pts, - ffi.Pointer center, - ffi.Pointer radius, + late final _SVMSGD_GetMarginRegularizationPtr = _lookup< + ffi + .NativeFunction)>>( + 'SVMSGD_GetMarginRegularization'); + late final _SVMSGD_GetMarginRegularization = + _SVMSGD_GetMarginRegularizationPtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); + + CvStatus SVMSGD_GetMarginType( + SVMSGD self, + ffi.Pointer rval, ) { - return _MinEnclosingCircle( - pts, - center, - radius, + return _SVMSGD_GetMarginType( + self, + rval, ); } - late final _MinEnclosingCirclePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint, ffi.Pointer, - ffi.Pointer)>>('MinEnclosingCircle'); - late final _MinEnclosingCircle = _MinEnclosingCirclePtr.asFunction< - CvStatus Function( - VecPoint, ffi.Pointer, ffi.Pointer)>(); + late final _SVMSGD_GetMarginTypePtr = _lookup< + ffi.NativeFunction)>>( + 'SVMSGD_GetMarginType'); + late final _SVMSGD_GetMarginType = _SVMSGD_GetMarginTypePtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); - CvStatus Moments( - Mat src, - bool binaryImage, - ffi.Pointer rval, + CvStatus SVMSGD_GetShift( + SVMSGD self, + ffi.Pointer rval, ) { - return _Moments( - src, - binaryImage, + return _SVMSGD_GetShift( + self, rval, ); } - late final _MomentsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, ffi.Bool, ffi.Pointer)>>('Moments'); - late final _Moments = _MomentsPtr.asFunction< - CvStatus Function(Mat, bool, ffi.Pointer)>(); + late final _SVMSGD_GetShiftPtr = _lookup< + ffi + .NativeFunction)>>( + 'SVMSGD_GetShift'); + late final _SVMSGD_GetShift = _SVMSGD_GetShiftPtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); - CvStatus MorphologyDefaultBorderValue( - ffi.Pointer rval, + CvStatus SVMSGD_GetStepDecreasingPower( + SVMSGD self, + ffi.Pointer rval, ) { - return _MorphologyDefaultBorderValue( + return _SVMSGD_GetStepDecreasingPower( + self, rval, ); } - late final _MorphologyDefaultBorderValuePtr = - _lookup)>>( - 'MorphologyDefaultBorderValue'); - late final _MorphologyDefaultBorderValue = _MorphologyDefaultBorderValuePtr - .asFunction)>(); + late final _SVMSGD_GetStepDecreasingPowerPtr = _lookup< + ffi + .NativeFunction)>>( + 'SVMSGD_GetStepDecreasingPower'); + late final _SVMSGD_GetStepDecreasingPower = _SVMSGD_GetStepDecreasingPowerPtr + .asFunction)>(); - CvStatus MorphologyEx( - Mat src, - Mat dst, - int op, - Mat kernel, + CvStatus SVMSGD_GetSvmsgdType( + SVMSGD self, + ffi.Pointer rval, ) { - return _MorphologyEx( - src, - dst, - op, - kernel, + return _SVMSGD_GetSvmsgdType( + self, + rval, ); } - late final _MorphologyExPtr = - _lookup>( - 'MorphologyEx'); - late final _MorphologyEx = - _MorphologyExPtr.asFunction(); + late final _SVMSGD_GetSvmsgdTypePtr = _lookup< + ffi.NativeFunction)>>( + 'SVMSGD_GetSvmsgdType'); + late final _SVMSGD_GetSvmsgdType = _SVMSGD_GetSvmsgdTypePtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); - CvStatus MorphologyExWithParams( - Mat src, - Mat dst, - int op, - Mat kernel, - Point pt, - int iterations, - int borderType, - Scalar borderValue, + CvStatus SVMSGD_GetTermCriteria( + SVMSGD self, + ffi.Pointer rval, ) { - return _MorphologyExWithParams( - src, - dst, - op, - kernel, - pt, - iterations, - borderType, - borderValue, + return _SVMSGD_GetTermCriteria( + self, + rval, ); } - late final _MorphologyExWithParamsPtr = _lookup< + late final _SVMSGD_GetTermCriteriaPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, Mat, Point, ffi.Int, ffi.Int, - Scalar)>>('MorphologyExWithParams'); - late final _MorphologyExWithParams = _MorphologyExWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, int, Mat, Point, int, int, Scalar)>(); + CvStatus Function( + SVMSGD, ffi.Pointer)>>('SVMSGD_GetTermCriteria'); + late final _SVMSGD_GetTermCriteria = _SVMSGD_GetTermCriteriaPtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); - CvStatus NMSBoxes( - VecRect bboxes, - VecFloat scores, - double score_threshold, - double nms_threshold, - ffi.Pointer indices, + CvStatus SVMSGD_GetWeights( + SVMSGD self, + ffi.Pointer rval, ) { - return _NMSBoxes( - bboxes, - scores, - score_threshold, - nms_threshold, - indices, + return _SVMSGD_GetWeights( + self, + rval, ); } - late final _NMSBoxesPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecRect, VecFloat, ffi.Float, ffi.Float, - ffi.Pointer)>>('NMSBoxes'); - late final _NMSBoxes = _NMSBoxesPtr.asFunction< - CvStatus Function( - VecRect, VecFloat, double, double, ffi.Pointer)>(); + late final _SVMSGD_GetWeightsPtr = + _lookup)>>( + 'SVMSGD_GetWeights'); + late final _SVMSGD_GetWeights = _SVMSGD_GetWeightsPtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); - CvStatus NMSBoxesWithParams( - VecRect bboxes, - VecFloat scores, - double score_threshold, - double nms_threshold, - ffi.Pointer indices, - double eta, - int top_k, + CvStatus SVMSGD_Load( + SVMSGD self, + ffi.Pointer filepath, ) { - return _NMSBoxesWithParams( - bboxes, - scores, - score_threshold, - nms_threshold, - indices, - eta, - top_k, + return _SVMSGD_Load( + self, + filepath, ); } - late final _NMSBoxesWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecRect, VecFloat, ffi.Float, ffi.Float, - ffi.Pointer, ffi.Float, ffi.Int)>>('NMSBoxesWithParams'); - late final _NMSBoxesWithParams = _NMSBoxesWithParamsPtr.asFunction< - CvStatus Function(VecRect, VecFloat, double, double, ffi.Pointer, - double, int)>(); + late final _SVMSGD_LoadPtr = _lookup< + ffi.NativeFunction)>>( + 'SVMSGD_Load'); + late final _SVMSGD_Load = _SVMSGD_LoadPtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); - CvStatus Net_BlobFromImage( - Mat image, - Mat blob, - double scalefactor, - Size size, - Scalar mean, - bool swapRB, - bool crop, - int ddepth, + CvStatus SVMSGD_LoadFromString( + SVMSGD self, + ffi.Pointer strModel, + ffi.Pointer objname, ) { - return _Net_BlobFromImage( - image, - blob, - scalefactor, - size, - mean, - swapRB, - crop, - ddepth, + return _SVMSGD_LoadFromString( + self, + strModel, + objname, ); } - late final _Net_BlobFromImagePtr = _lookup< + late final _SVMSGD_LoadFromStringPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Double, Size, Scalar, ffi.Bool, - ffi.Bool, ffi.Int)>>('Net_BlobFromImage'); - late final _Net_BlobFromImage = _Net_BlobFromImagePtr.asFunction< - CvStatus Function(Mat, Mat, double, Size, Scalar, bool, bool, int)>(); + CvStatus Function(SVMSGD, ffi.Pointer, + ffi.Pointer)>>('SVMSGD_LoadFromString'); + late final _SVMSGD_LoadFromString = _SVMSGD_LoadFromStringPtr.asFunction< + CvStatus Function( + SVMSGD, ffi.Pointer, ffi.Pointer)>(); + + CvStatus SVMSGD_Save( + SVMSGD self, + ffi.Pointer filename, + ) { + return _SVMSGD_Save( + self, + filename, + ); + } - CvStatus Net_BlobFromImages( - VecMat images, - Mat blob, - double scalefactor, - Size size, - Scalar mean, - bool swapRB, - bool crop, - int ddepth, + late final _SVMSGD_SavePtr = _lookup< + ffi.NativeFunction)>>( + 'SVMSGD_Save'); + late final _SVMSGD_Save = _SVMSGD_SavePtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); + + CvStatus SVMSGD_SetInitialStepSize( + SVMSGD self, + double InitialStepSize, ) { - return _Net_BlobFromImages( - images, - blob, - scalefactor, - size, - mean, - swapRB, - crop, - ddepth, + return _SVMSGD_SetInitialStepSize( + self, + InitialStepSize, ); } - late final _Net_BlobFromImagesPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecMat, Mat, ffi.Double, Size, Scalar, ffi.Bool, - ffi.Bool, ffi.Int)>>('Net_BlobFromImages'); - late final _Net_BlobFromImages = _Net_BlobFromImagesPtr.asFunction< - CvStatus Function(VecMat, Mat, double, Size, Scalar, bool, bool, int)>(); + late final _SVMSGD_SetInitialStepSizePtr = + _lookup>( + 'SVMSGD_SetInitialStepSize'); + late final _SVMSGD_SetInitialStepSize = _SVMSGD_SetInitialStepSizePtr + .asFunction(); - void Net_Close( - ffi.Pointer net, + CvStatus SVMSGD_SetMarginRegularization( + SVMSGD self, + double marginRegularization, ) { - return _Net_Close( - net, + return _SVMSGD_SetMarginRegularization( + self, + marginRegularization, ); } - late final _Net_ClosePtr = - _lookup)>>( - 'Net_Close'); - late final _Net_Close = - _Net_ClosePtr.asFunction)>(); + late final _SVMSGD_SetMarginRegularizationPtr = + _lookup>( + 'SVMSGD_SetMarginRegularization'); + late final _SVMSGD_SetMarginRegularization = + _SVMSGD_SetMarginRegularizationPtr.asFunction< + CvStatus Function(SVMSGD, double)>(); - CvStatus Net_Create( - ffi.Pointer rval, + CvStatus SVMSGD_SetMarginType( + SVMSGD self, + int marginType, ) { - return _Net_Create( - rval, + return _SVMSGD_SetMarginType( + self, + marginType, ); } - late final _Net_CreatePtr = - _lookup)>>( - 'Net_Create'); - late final _Net_Create = - _Net_CreatePtr.asFunction)>(); + late final _SVMSGD_SetMarginTypePtr = + _lookup>( + 'SVMSGD_SetMarginType'); + late final _SVMSGD_SetMarginType = + _SVMSGD_SetMarginTypePtr.asFunction(); - CvStatus Net_Dump( - Net net, - VecChar rval, + CvStatus SVMSGD_SetOptimalParameters( + SVMSGD self, + int svmsgdType, + int marginType, ) { - return _Net_Dump( - net, - rval, + return _SVMSGD_SetOptimalParameters( + self, + svmsgdType, + marginType, ); } - late final _Net_DumpPtr = - _lookup>('Net_Dump'); - late final _Net_Dump = - _Net_DumpPtr.asFunction(); + late final _SVMSGD_SetOptimalParametersPtr = + _lookup>( + 'SVMSGD_SetOptimalParameters'); + late final _SVMSGD_SetOptimalParameters = _SVMSGD_SetOptimalParametersPtr + .asFunction(); - CvStatus Net_Empty( - Net net, - ffi.Pointer rval, + CvStatus SVMSGD_SetStepDecreasingPower( + SVMSGD self, + double stepDecreasingPower, ) { - return _Net_Empty( - net, - rval, + return _SVMSGD_SetStepDecreasingPower( + self, + stepDecreasingPower, ); } - late final _Net_EmptyPtr = _lookup< - ffi.NativeFunction)>>( - 'Net_Empty'); - late final _Net_Empty = - _Net_EmptyPtr.asFunction)>(); + late final _SVMSGD_SetStepDecreasingPowerPtr = + _lookup>( + 'SVMSGD_SetStepDecreasingPower'); + late final _SVMSGD_SetStepDecreasingPower = _SVMSGD_SetStepDecreasingPowerPtr + .asFunction(); - CvStatus Net_Forward( - Net net, - ffi.Pointer outputName, - ffi.Pointer rval, + CvStatus SVMSGD_SetSvmsgdType( + SVMSGD self, + int svmsgdType, ) { - return _Net_Forward( - net, - outputName, - rval, + return _SVMSGD_SetSvmsgdType( + self, + svmsgdType, ); } - late final _Net_ForwardPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Net, ffi.Pointer, ffi.Pointer)>>('Net_Forward'); - late final _Net_Forward = _Net_ForwardPtr.asFunction< - CvStatus Function(Net, ffi.Pointer, ffi.Pointer)>(); + late final _SVMSGD_SetSvmsgdTypePtr = + _lookup>( + 'SVMSGD_SetSvmsgdType'); + late final _SVMSGD_SetSvmsgdType = + _SVMSGD_SetSvmsgdTypePtr.asFunction(); - CvStatus Net_ForwardLayers( - Net net, - ffi.Pointer outputBlobs, - VecVecChar outBlobNames, + CvStatus SVMSGD_SetTermCriteria( + SVMSGD self, + TermCriteria val, ) { - return _Net_ForwardLayers( - net, - outputBlobs, - outBlobNames, + return _SVMSGD_SetTermCriteria( + self, + val, ); } - late final _Net_ForwardLayersPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Net, ffi.Pointer, VecVecChar)>>('Net_ForwardLayers'); - late final _Net_ForwardLayers = _Net_ForwardLayersPtr.asFunction< - CvStatus Function(Net, ffi.Pointer, VecVecChar)>(); + late final _SVMSGD_SetTermCriteriaPtr = + _lookup>( + 'SVMSGD_SetTermCriteria'); + late final _SVMSGD_SetTermCriteria = _SVMSGD_SetTermCriteriaPtr.asFunction< + CvStatus Function(SVMSGD, TermCriteria)>(); - CvStatus Net_FromNet( - Net net, - ffi.Pointer rval, + CvStatus SVMSGD_Train( + SVMSGD self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, ) { - return _Net_FromNet( - net, + return _SVMSGD_Train( + self, + trainData, + flags, rval, ); } - late final _Net_FromNetPtr = - _lookup)>>( - 'Net_FromNet'); - late final _Net_FromNet = - _Net_FromNetPtr.asFunction)>(); + late final _SVMSGD_TrainPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(SVMSGD, PtrTrainData, ffi.Int, + ffi.Pointer)>>('SVMSGD_Train'); + late final _SVMSGD_Train = _SVMSGD_TrainPtr.asFunction< + CvStatus Function(SVMSGD, PtrTrainData, int, ffi.Pointer)>(); - CvStatus Net_GetBlobChannel( - Mat blob, - int imgidx, - int chnidx, - ffi.Pointer rval, + CvStatus SVMSGD_Train_1( + SVMSGD self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _Net_GetBlobChannel( - blob, - imgidx, - chnidx, + return _SVMSGD_Train_1( + self, + samples, + layout, + responses, rval, ); } - late final _Net_GetBlobChannelPtr = _lookup< + late final _SVMSGD_Train_1Ptr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, ffi.Int, ffi.Int, ffi.Pointer)>>('Net_GetBlobChannel'); - late final _Net_GetBlobChannel = _Net_GetBlobChannelPtr.asFunction< - CvStatus Function(Mat, int, int, ffi.Pointer)>(); + CvStatus Function(SVMSGD, Mat, ffi.Int, Mat, + ffi.Pointer)>>('SVMSGD_Train_1'); + late final _SVMSGD_Train_1 = _SVMSGD_Train_1Ptr.asFunction< + CvStatus Function(SVMSGD, Mat, int, Mat, ffi.Pointer)>(); - CvStatus Net_GetBlobSize( - Mat blob, - ffi.Pointer rval, + CvStatus SVM_CalcError( + PtrSVM self, + PtrTrainData data, + bool test, + Mat resp, + ffi.Pointer rval, ) { - return _Net_GetBlobSize( - blob, + return _SVM_CalcError( + self, + data, + test, + resp, rval, ); } - late final _Net_GetBlobSizePtr = - _lookup)>>( - 'Net_GetBlobSize'); - late final _Net_GetBlobSize = _Net_GetBlobSizePtr.asFunction< - CvStatus Function(Mat, ffi.Pointer)>(); + late final _SVM_CalcErrorPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrSVM, PtrTrainData, ffi.Bool, Mat, + ffi.Pointer)>>('SVM_CalcError'); + late final _SVM_CalcError = _SVM_CalcErrorPtr.asFunction< + CvStatus Function( + PtrSVM, PtrTrainData, bool, Mat, ffi.Pointer)>(); - CvStatus Net_GetInputDetails( - Net net, - ffi.Pointer scales, - ffi.Pointer zeropoints, + CvStatus SVM_Clear( + PtrSVM self, ) { - return _Net_GetInputDetails( - net, - scales, - zeropoints, + return _SVM_Clear( + self, ); } - late final _Net_GetInputDetailsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Net, ffi.Pointer, - ffi.Pointer)>>('Net_GetInputDetails'); - late final _Net_GetInputDetails = _Net_GetInputDetailsPtr.asFunction< - CvStatus Function(Net, ffi.Pointer, ffi.Pointer)>(); + late final _SVM_ClearPtr = + _lookup>('SVM_Clear'); + late final _SVM_Clear = _SVM_ClearPtr.asFunction(); - CvStatus Net_GetLayer( - Net net, - int layerid, - ffi.Pointer rval, + void SVM_Close( + ffi.Pointer self, ) { - return _Net_GetLayer( - net, - layerid, - rval, + return _SVM_Close( + self, ); } - late final _Net_GetLayerPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Net, ffi.Int, ffi.Pointer)>>('Net_GetLayer'); - late final _Net_GetLayer = _Net_GetLayerPtr.asFunction< - CvStatus Function(Net, int, ffi.Pointer)>(); + late final _SVM_ClosePtr = + _lookup)>>( + 'SVM_Close'); + late final _SVM_Close = + _SVM_ClosePtr.asFunction)>(); - CvStatus Net_GetLayerNames( - Net net, - ffi.Pointer rval, + CvStatus SVM_Create( + ffi.Pointer rval, ) { - return _Net_GetLayerNames( - net, + return _SVM_Create( rval, ); } - late final _Net_GetLayerNamesPtr = _lookup< - ffi.NativeFunction)>>( - 'Net_GetLayerNames'); - late final _Net_GetLayerNames = _Net_GetLayerNamesPtr.asFunction< - CvStatus Function(Net, ffi.Pointer)>(); + late final _SVM_CreatePtr = + _lookup)>>( + 'SVM_Create'); + late final _SVM_Create = + _SVM_CreatePtr.asFunction)>(); - CvStatus Net_GetPerfProfile( - Net net, - ffi.Pointer rval, + CvStatus SVM_Empty( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_GetPerfProfile( - net, + return _SVM_Empty( + self, rval, ); } - late final _Net_GetPerfProfilePtr = _lookup< - ffi.NativeFunction)>>( - 'Net_GetPerfProfile'); - late final _Net_GetPerfProfile = _Net_GetPerfProfilePtr.asFunction< - CvStatus Function(Net, ffi.Pointer)>(); + late final _SVM_EmptyPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_Empty'); + late final _SVM_Empty = _SVM_EmptyPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_GetUnconnectedOutLayers( - Net net, - ffi.Pointer rval, + CvStatus SVM_GetC( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_GetUnconnectedOutLayers( - net, + return _SVM_GetC( + self, rval, ); } - late final _Net_GetUnconnectedOutLayersPtr = - _lookup)>>( - 'Net_GetUnconnectedOutLayers'); - late final _Net_GetUnconnectedOutLayers = _Net_GetUnconnectedOutLayersPtr - .asFunction)>(); + late final _SVM_GetCPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>>('SVM_GetC'); + late final _SVM_GetC = _SVM_GetCPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_ImagesFromBlob( - Mat blob, - ffi.Pointer rval, + CvStatus SVM_GetClassWeights( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_ImagesFromBlob( - blob, + return _SVM_GetClassWeights( + self, rval, ); } - late final _Net_ImagesFromBlobPtr = - _lookup)>>( - 'Net_ImagesFromBlob'); - late final _Net_ImagesFromBlob = _Net_ImagesFromBlobPtr.asFunction< - CvStatus Function(Mat, ffi.Pointer)>(); + late final _SVM_GetClassWeightsPtr = + _lookup)>>( + 'SVM_GetClassWeights'); + late final _SVM_GetClassWeights = _SVM_GetClassWeightsPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_ReadNet( - ffi.Pointer model, - ffi.Pointer config, - ffi.Pointer framework, - ffi.Pointer rval, + CvStatus SVM_GetCoef0( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_ReadNet( - model, - config, - framework, + return _SVM_GetCoef0( + self, rval, ); } - late final _Net_ReadNetPtr = _lookup< + late final _SVM_GetCoef0Ptr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>>('Net_ReadNet'); - late final _Net_ReadNet = _Net_ReadNetPtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>>('SVM_GetCoef0'); + late final _SVM_GetCoef0 = _SVM_GetCoef0Ptr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_ReadNetBytes( - ffi.Pointer framework, - VecUChar model, - VecUChar config, - ffi.Pointer rval, + CvStatus SVM_GetDecisionFunction( + PtrSVM self, + int i, + Mat alpha, + Mat svidx, + ffi.Pointer rval, ) { - return _Net_ReadNetBytes( - framework, - model, - config, + return _SVM_GetDecisionFunction( + self, + i, + alpha, + svidx, rval, ); } - late final _Net_ReadNetBytesPtr = _lookup< + late final _SVM_GetDecisionFunctionPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, VecUChar, VecUChar, - ffi.Pointer)>>('Net_ReadNetBytes'); - late final _Net_ReadNetBytes = _Net_ReadNetBytesPtr.asFunction< - CvStatus Function( - ffi.Pointer, VecUChar, VecUChar, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Int, Mat, Mat, + ffi.Pointer)>>('SVM_GetDecisionFunction'); + late final _SVM_GetDecisionFunction = _SVM_GetDecisionFunctionPtr.asFunction< + CvStatus Function(PtrSVM, int, Mat, Mat, ffi.Pointer)>(); - CvStatus Net_ReadNetFromCaffe( - ffi.Pointer prototxt, - ffi.Pointer caffeModel, - ffi.Pointer rval, + CvStatus SVM_GetDefaultGridPtr( + PtrSVM self, + int param_id, + ffi.Pointer rval, ) { - return _Net_ReadNetFromCaffe( - prototxt, - caffeModel, + return _SVM_GetDefaultGridPtr( + self, + param_id, rval, ); } - late final _Net_ReadNetFromCaffePtr = _lookup< + late final _SVM_GetDefaultGridPtrPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>('Net_ReadNetFromCaffe'); - late final _Net_ReadNetFromCaffe = _Net_ReadNetFromCaffePtr.asFunction< - CvStatus Function( - ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Int, + ffi.Pointer)>>('SVM_GetDefaultGridPtr'); + late final _SVM_GetDefaultGridPtr = _SVM_GetDefaultGridPtrPtr.asFunction< + CvStatus Function(PtrSVM, int, ffi.Pointer)>(); - CvStatus Net_ReadNetFromCaffeBytes( - VecUChar prototxt, - VecUChar caffeModel, - ffi.Pointer rval, + CvStatus SVM_GetDefaultName( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_ReadNetFromCaffeBytes( - prototxt, - caffeModel, + return _SVM_GetDefaultName( + self, rval, ); } - late final _Net_ReadNetFromCaffeBytesPtr = _lookup< + late final _SVM_GetDefaultNamePtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetDefaultName'); + late final _SVM_GetDefaultName = _SVM_GetDefaultNamePtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); + + CvStatus SVM_GetDegree( + PtrSVM self, + ffi.Pointer rval, + ) { + return _SVM_GetDegree( + self, + rval, + ); + } + + late final _SVM_GetDegreePtr = _lookup< ffi.NativeFunction< - CvStatus Function(VecUChar, VecUChar, - ffi.Pointer)>>('Net_ReadNetFromCaffeBytes'); - late final _Net_ReadNetFromCaffeBytes = _Net_ReadNetFromCaffeBytesPtr - .asFunction)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>>('SVM_GetDegree'); + late final _SVM_GetDegree = _SVM_GetDegreePtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_ReadNetFromONNX( - ffi.Pointer model, - ffi.Pointer rval, + CvStatus SVM_GetGamma( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_ReadNetFromONNX( - model, + return _SVM_GetGamma( + self, rval, ); } - late final _Net_ReadNetFromONNXPtr = _lookup< + late final _SVM_GetGammaPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - ffi.Pointer, ffi.Pointer)>>('Net_ReadNetFromONNX'); - late final _Net_ReadNetFromONNX = _Net_ReadNetFromONNXPtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>>('SVM_GetGamma'); + late final _SVM_GetGamma = _SVM_GetGammaPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_ReadNetFromONNXBytes( - VecUChar model, - ffi.Pointer rval, + CvStatus SVM_GetKernelType( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_ReadNetFromONNXBytes( - model, + return _SVM_GetKernelType( + self, rval, ); } - late final _Net_ReadNetFromONNXBytesPtr = _lookup< - ffi.NativeFunction)>>( - 'Net_ReadNetFromONNXBytes'); - late final _Net_ReadNetFromONNXBytes = _Net_ReadNetFromONNXBytesPtr - .asFunction)>(); + late final _SVM_GetKernelTypePtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetKernelType'); + late final _SVM_GetKernelType = _SVM_GetKernelTypePtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_ReadNetFromTFLite( - ffi.Pointer model, - ffi.Pointer rval, + CvStatus SVM_GetNu( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_ReadNetFromTFLite( - model, + return _SVM_GetNu( + self, rval, ); } - late final _Net_ReadNetFromTFLitePtr = _lookup< + late final _SVM_GetNuPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, - ffi.Pointer)>>('Net_ReadNetFromTFLite'); - late final _Net_ReadNetFromTFLite = _Net_ReadNetFromTFLitePtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>>('SVM_GetNu'); + late final _SVM_GetNu = _SVM_GetNuPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_ReadNetFromTFLiteBytes( - VecUChar bufferModel, - ffi.Pointer rval, + CvStatus SVM_GetP( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_ReadNetFromTFLiteBytes( - bufferModel, + return _SVM_GetP( + self, rval, ); } - late final _Net_ReadNetFromTFLiteBytesPtr = _lookup< - ffi.NativeFunction)>>( - 'Net_ReadNetFromTFLiteBytes'); - late final _Net_ReadNetFromTFLiteBytes = _Net_ReadNetFromTFLiteBytesPtr - .asFunction)>(); + late final _SVM_GetPPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>>('SVM_GetP'); + late final _SVM_GetP = _SVM_GetPPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_ReadNetFromTensorflow( - ffi.Pointer model, - ffi.Pointer config, - ffi.Pointer rval, + CvStatus SVM_GetSupportVectors( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_ReadNetFromTensorflow( - model, - config, + return _SVM_GetSupportVectors( + self, rval, ); } - late final _Net_ReadNetFromTensorflowPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>('Net_ReadNetFromTensorflow'); - late final _Net_ReadNetFromTensorflow = - _Net_ReadNetFromTensorflowPtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>(); + late final _SVM_GetSupportVectorsPtr = + _lookup)>>( + 'SVM_GetSupportVectors'); + late final _SVM_GetSupportVectors = _SVM_GetSupportVectorsPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_ReadNetFromTensorflowBytes( - VecUChar model, - VecUChar config, - ffi.Pointer rval, + CvStatus SVM_GetTermCriteria( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_ReadNetFromTensorflowBytes( - model, - config, + return _SVM_GetTermCriteria( + self, rval, ); } - late final _Net_ReadNetFromTensorflowBytesPtr = _lookup< + late final _SVM_GetTermCriteriaPtr = _lookup< ffi.NativeFunction< - CvStatus Function(VecUChar, VecUChar, - ffi.Pointer)>>('Net_ReadNetFromTensorflowBytes'); - late final _Net_ReadNetFromTensorflowBytes = - _Net_ReadNetFromTensorflowBytesPtr.asFunction< - CvStatus Function(VecUChar, VecUChar, ffi.Pointer)>(); + CvStatus Function( + PtrSVM, ffi.Pointer)>>('SVM_GetTermCriteria'); + late final _SVM_GetTermCriteria = _SVM_GetTermCriteriaPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_ReadNetFromTorch( - ffi.Pointer model, - bool isBinary, - bool evaluate, - ffi.Pointer rval, + CvStatus SVM_GetType( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_ReadNetFromTorch( - model, - isBinary, - evaluate, + return _SVM_GetType( + self, rval, ); } - late final _Net_ReadNetFromTorchPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Bool, ffi.Bool, - ffi.Pointer)>>('Net_ReadNetFromTorch'); - late final _Net_ReadNetFromTorch = _Net_ReadNetFromTorchPtr.asFunction< - CvStatus Function(ffi.Pointer, bool, bool, ffi.Pointer)>(); + late final _SVM_GetTypePtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetType'); + late final _SVM_GetType = _SVM_GetTypePtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_SetInput( - Net net, - Mat blob, - ffi.Pointer name, + CvStatus SVM_GetUncompressedSupportVectors( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_SetInput( - net, - blob, - name, + return _SVM_GetUncompressedSupportVectors( + self, + rval, ); } - late final _Net_SetInputPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Net, Mat, ffi.Pointer)>>('Net_SetInput'); - late final _Net_SetInput = _Net_SetInputPtr.asFunction< - CvStatus Function(Net, Mat, ffi.Pointer)>(); + late final _SVM_GetUncompressedSupportVectorsPtr = + _lookup)>>( + 'SVM_GetUncompressedSupportVectors'); + late final _SVM_GetUncompressedSupportVectors = + _SVM_GetUncompressedSupportVectorsPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_SetPreferableBackend( - Net net, - int backend, + CvStatus SVM_GetVarCount( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_SetPreferableBackend( - net, - backend, + return _SVM_GetVarCount( + self, + rval, ); } - late final _Net_SetPreferableBackendPtr = - _lookup>( - 'Net_SetPreferableBackend'); - late final _Net_SetPreferableBackend = - _Net_SetPreferableBackendPtr.asFunction(); + late final _SVM_GetVarCountPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetVarCount'); + late final _SVM_GetVarCount = _SVM_GetVarCountPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_SetPreferableTarget( - Net net, - int target, + CvStatus SVM_IsClassifier( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_SetPreferableTarget( - net, - target, + return _SVM_IsClassifier( + self, + rval, ); } - late final _Net_SetPreferableTargetPtr = - _lookup>( - 'Net_SetPreferableTarget'); - late final _Net_SetPreferableTarget = - _Net_SetPreferableTargetPtr.asFunction(); + late final _SVM_IsClassifierPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_IsClassifier'); + late final _SVM_IsClassifier = _SVM_IsClassifierPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); - CvStatus Net_forwardAsync( - Net net, - ffi.Pointer outputName, - ffi.Pointer rval, + CvStatus SVM_IsTrained( + PtrSVM self, + ffi.Pointer rval, ) { - return _Net_forwardAsync( - net, - outputName, + return _SVM_IsTrained( + self, rval, ); } - late final _Net_forwardAsyncPtr = _lookup< + late final _SVM_IsTrainedPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_IsTrained'); + late final _SVM_IsTrained = _SVM_IsTrainedPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); + + CvStatus SVM_Load( + ffi.Pointer filepath, + ffi.Pointer rval, + ) { + return _SVM_Load( + filepath, + rval, + ); + } + + late final _SVM_LoadPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Net, ffi.Pointer, - ffi.Pointer)>>('Net_forwardAsync'); - late final _Net_forwardAsync = _Net_forwardAsyncPtr.asFunction< - CvStatus Function(Net, ffi.Pointer, ffi.Pointer)>(); + CvStatus Function( + ffi.Pointer, ffi.Pointer)>>('SVM_Load'); + late final _SVM_Load = _SVM_LoadPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer)>(); - CvStatus Norm( - Mat src1, - int normType, - ffi.Pointer rval, + CvStatus SVM_LoadFromString( + ffi.Pointer strModel, + ffi.Pointer objname, + ffi.Pointer rval, ) { - return _Norm( - src1, - normType, + return _SVM_LoadFromString( + strModel, + objname, rval, ); } - late final _NormPtr = _lookup< + late final _SVM_LoadFromStringPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Pointer)>>('Norm'); - late final _Norm = _NormPtr.asFunction< - CvStatus Function(Mat, int, ffi.Pointer)>(); + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('SVM_LoadFromString'); + late final _SVM_LoadFromString = _SVM_LoadFromStringPtr.asFunction< + CvStatus Function( + ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); - CvStatus NormWithMats( - Mat src1, - Mat src2, - int normType, - ffi.Pointer rval, + CvStatus SVM_Predict( + PtrSVM self, + Mat samples, + Mat results, + int flags, + ffi.Pointer rval, ) { - return _NormWithMats( - src1, - src2, - normType, + return _SVM_Predict( + self, + samples, + results, + flags, rval, ); } - late final _NormWithMatsPtr = _lookup< + late final _SVM_PredictPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Int, ffi.Pointer)>>('NormWithMats'); - late final _NormWithMats = _NormWithMatsPtr.asFunction< - CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); + CvStatus Function(PtrSVM, Mat, Mat, ffi.Int, + ffi.Pointer)>>('SVM_Predict'); + late final _SVM_Predict = _SVM_PredictPtr.asFunction< + CvStatus Function(PtrSVM, Mat, Mat, int, ffi.Pointer)>(); - void ORB_Close( - ffi.Pointer o, + CvStatus SVM_Save( + PtrSVM self, + ffi.Pointer filename, ) { - return _ORB_Close( - o, + return _SVM_Save( + self, + filename, ); } - late final _ORB_ClosePtr = - _lookup)>>( - 'ORB_Close'); - late final _ORB_Close = - _ORB_ClosePtr.asFunction)>(); + late final _SVM_SavePtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_Save'); + late final _SVM_Save = _SVM_SavePtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); + + CvStatus SVM_SetC( + PtrSVM self, + double val, + ) { + return _SVM_SetC( + self, + val, + ); + } - CvStatus ORB_Create( - ffi.Pointer rval, + late final _SVM_SetCPtr = + _lookup>( + 'SVM_SetC'); + late final _SVM_SetC = + _SVM_SetCPtr.asFunction(); + + CvStatus SVM_SetClassWeights( + PtrSVM self, + Mat val, ) { - return _ORB_Create( - rval, + return _SVM_SetClassWeights( + self, + val, ); } - late final _ORB_CreatePtr = - _lookup)>>( - 'ORB_Create'); - late final _ORB_Create = - _ORB_CreatePtr.asFunction)>(); + late final _SVM_SetClassWeightsPtr = + _lookup>( + 'SVM_SetClassWeights'); + late final _SVM_SetClassWeights = + _SVM_SetClassWeightsPtr.asFunction(); - CvStatus ORB_CreateWithParams( - int nfeatures, - double scaleFactor, - int nlevels, - int edgeThreshold, - int firstLevel, - int WTA_K, - int scoreType, - int patchSize, - int fastThreshold, - ffi.Pointer rval, + CvStatus SVM_SetCoef0( + PtrSVM self, + double val, ) { - return _ORB_CreateWithParams( - nfeatures, - scaleFactor, - nlevels, - edgeThreshold, - firstLevel, - WTA_K, - scoreType, - patchSize, - fastThreshold, - rval, + return _SVM_SetCoef0( + self, + val, ); } - late final _ORB_CreateWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ffi.Int, - ffi.Float, - ffi.Int, - ffi.Int, - ffi.Int, - ffi.Int, - ffi.Int, - ffi.Int, - ffi.Int, - ffi.Pointer)>>('ORB_CreateWithParams'); - late final _ORB_CreateWithParams = _ORB_CreateWithParamsPtr.asFunction< - CvStatus Function( - int, double, int, int, int, int, int, int, int, ffi.Pointer)>(); + late final _SVM_SetCoef0Ptr = + _lookup>( + 'SVM_SetCoef0'); + late final _SVM_SetCoef0 = + _SVM_SetCoef0Ptr.asFunction(); - CvStatus ORB_Detect( - ORB o, - Mat src, - ffi.Pointer rval, + CvStatus SVM_SetDegree( + PtrSVM self, + double val, ) { - return _ORB_Detect( - o, - src, - rval, + return _SVM_SetDegree( + self, + val, ); } - late final _ORB_DetectPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ORB, Mat, ffi.Pointer)>>('ORB_Detect'); - late final _ORB_Detect = _ORB_DetectPtr.asFunction< - CvStatus Function(ORB, Mat, ffi.Pointer)>(); + late final _SVM_SetDegreePtr = + _lookup>( + 'SVM_SetDegree'); + late final _SVM_SetDegree = + _SVM_SetDegreePtr.asFunction(); - CvStatus ORB_DetectAndCompute( - ORB o, - Mat src, - Mat mask, - Mat desc, - ffi.Pointer rval, + CvStatus SVM_SetGamma( + PtrSVM self, + double val, ) { - return _ORB_DetectAndCompute( - o, - src, - mask, - desc, - rval, + return _SVM_SetGamma( + self, + val, ); } - late final _ORB_DetectAndComputePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ORB, Mat, Mat, Mat, - ffi.Pointer)>>('ORB_DetectAndCompute'); - late final _ORB_DetectAndCompute = _ORB_DetectAndComputePtr.asFunction< - CvStatus Function(ORB, Mat, Mat, Mat, ffi.Pointer)>(); + late final _SVM_SetGammaPtr = + _lookup>( + 'SVM_SetGamma'); + late final _SVM_SetGamma = + _SVM_SetGammaPtr.asFunction(); - CvStatus Ones( - int rows, - int cols, - int type, - ffi.Pointer rval, + CvStatus SVM_SetKernel( + PtrSVM self, + int kernelType, ) { - return _Ones( - rows, - cols, - type, - rval, + return _SVM_SetKernel( + self, + kernelType, ); } - late final _OnesPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ffi.Int, ffi.Int, ffi.Int, ffi.Pointer)>>('Ones'); - late final _Ones = - _OnesPtr.asFunction)>(); + late final _SVM_SetKernelPtr = + _lookup>( + 'SVM_SetKernel'); + late final _SVM_SetKernel = + _SVM_SetKernelPtr.asFunction(); - CvStatus PencilSketch( - Mat src, - Mat dst1, - Mat dst2, - double sigma_s, - double sigma_r, - double shade_factor, + CvStatus SVM_SetNu( + PtrSVM self, + double val, ) { - return _PencilSketch( - src, - dst1, - dst2, - sigma_s, - sigma_r, - shade_factor, + return _SVM_SetNu( + self, + val, ); } - late final _PencilSketchPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, ffi.Float, ffi.Float, ffi.Float)>>('PencilSketch'); - late final _PencilSketch = _PencilSketchPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, double, double, double)>(); + late final _SVM_SetNuPtr = + _lookup>( + 'SVM_SetNu'); + late final _SVM_SetNu = + _SVM_SetNuPtr.asFunction(); - CvStatus PhaseCorrelate( - Mat src1, - Mat src2, - Mat window, - ffi.Pointer response, - ffi.Pointer rval, + CvStatus SVM_SetP( + PtrSVM self, + double val, ) { - return _PhaseCorrelate( - src1, - src2, - window, - response, - rval, + return _SVM_SetP( + self, + val, ); } - late final _PhaseCorrelatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, ffi.Pointer, - ffi.Pointer)>>('PhaseCorrelate'); - late final _PhaseCorrelate = _PhaseCorrelatePtr.asFunction< - CvStatus Function( - Mat, Mat, Mat, ffi.Pointer, ffi.Pointer)>(); + late final _SVM_SetPPtr = + _lookup>( + 'SVM_SetP'); + late final _SVM_SetP = + _SVM_SetPPtr.asFunction(); - CvStatus PhotoInpaint( - Mat src, - Mat mask, - Mat dst, - double inpaint_radius, - int algorithm_type, + CvStatus SVM_SetTermCriteria( + PtrSVM self, + TermCriteria val, ) { - return _PhotoInpaint( - src, - mask, - dst, - inpaint_radius, - algorithm_type, + return _SVM_SetTermCriteria( + self, + val, ); } - late final _PhotoInpaintPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, ffi.Float, ffi.Int)>>('PhotoInpaint'); - late final _PhotoInpaint = _PhotoInpaintPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, double, int)>(); + late final _SVM_SetTermCriteriaPtr = + _lookup>( + 'SVM_SetTermCriteria'); + late final _SVM_SetTermCriteria = _SVM_SetTermCriteriaPtr.asFunction< + CvStatus Function(PtrSVM, TermCriteria)>(); - CvStatus PointPolygonTest( - VecPoint pts, - Point2f pt, - bool measureDist, - ffi.Pointer rval, + CvStatus SVM_SetType( + PtrSVM self, + int val, ) { - return _PointPolygonTest( - pts, - pt, - measureDist, - rval, + return _SVM_SetType( + self, + val, ); } - late final _PointPolygonTestPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint, Point2f, ffi.Bool, - ffi.Pointer)>>('PointPolygonTest'); - late final _PointPolygonTest = _PointPolygonTestPtr.asFunction< - CvStatus Function(VecPoint, Point2f, bool, ffi.Pointer)>(); + late final _SVM_SetTypePtr = + _lookup>( + 'SVM_SetType'); + late final _SVM_SetType = + _SVM_SetTypePtr.asFunction(); - CvStatus Polylines( - Mat img, - VecVecPoint points, - bool isClosed, - Scalar color, - int thickness, + CvStatus SVM_Train( + PtrSVM self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, ) { - return _Polylines( - img, - points, - isClosed, - color, - thickness, + return _SVM_Train( + self, + trainData, + flags, + rval, ); } - late final _PolylinesPtr = _lookup< + late final _SVM_TrainPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, VecVecPoint, ffi.Bool, Scalar, ffi.Int)>>('Polylines'); - late final _Polylines = _PolylinesPtr.asFunction< - CvStatus Function(Mat, VecVecPoint, bool, Scalar, int)>(); + CvStatus Function(PtrSVM, PtrTrainData, ffi.Int, + ffi.Pointer)>>('SVM_Train'); + late final _SVM_Train = _SVM_TrainPtr.asFunction< + CvStatus Function(PtrSVM, PtrTrainData, int, ffi.Pointer)>(); - CvStatus PutText( - Mat img, - ffi.Pointer text, - Point org, - int fontFace, - double fontScale, - Scalar color, - int thickness, + CvStatus SVM_TrainAuto( + PtrSVM self, + PtrTrainData data, + int kFold, + PtrParamGrid Cgrid, + PtrParamGrid gammaGrid, + PtrParamGrid pGrid, + PtrParamGrid nuGrid, + PtrParamGrid coeffGrid, + PtrParamGrid degreeGrid, + bool balanced, + ffi.Pointer rval, ) { - return _PutText( - img, - text, - org, - fontFace, - fontScale, - color, - thickness, + return _SVM_TrainAuto( + self, + data, + kFold, + Cgrid, + gammaGrid, + pGrid, + nuGrid, + coeffGrid, + degreeGrid, + balanced, + rval, ); } - late final _PutTextPtr = _lookup< + late final _SVM_TrainAutoPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Pointer, Point, ffi.Int, - ffi.Double, Scalar, ffi.Int)>>('PutText'); - late final _PutText = _PutTextPtr.asFunction< + CvStatus Function( + PtrSVM, + PtrTrainData, + ffi.Int, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + ffi.Bool, + ffi.Pointer)>>('SVM_TrainAuto'); + late final _SVM_TrainAuto = _SVM_TrainAutoPtr.asFunction< CvStatus Function( - Mat, ffi.Pointer, Point, int, double, Scalar, int)>(); + PtrSVM, + PtrTrainData, + int, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + bool, + ffi.Pointer)>(); - CvStatus PutTextWithParams( - Mat img, - ffi.Pointer text, - Point org, - int fontFace, - double fontScale, - Scalar color, - int thickness, - int lineType, - bool bottomLeftOrigin, + CvStatus SVM_TrainAuto_1( + PtrSVM self, + Mat samples, + int layout, + Mat responses, + int kFold, + PtrParamGrid Cgrid, + PtrParamGrid gammaGrid, + PtrParamGrid pGrid, + PtrParamGrid nuGrid, + PtrParamGrid coeffGrid, + PtrParamGrid degreeGrid, + bool balanced, + ffi.Pointer rval, ) { - return _PutTextWithParams( - img, - text, - org, - fontFace, - fontScale, - color, - thickness, - lineType, - bottomLeftOrigin, + return _SVM_TrainAuto_1( + self, + samples, + layout, + responses, + kFold, + Cgrid, + gammaGrid, + pGrid, + nuGrid, + coeffGrid, + degreeGrid, + balanced, + rval, ); } - late final _PutTextWithParamsPtr = _lookup< + late final _SVM_TrainAuto_1Ptr = _lookup< ffi.NativeFunction< CvStatus Function( + PtrSVM, Mat, - ffi.Pointer, - Point, - ffi.Int, - ffi.Double, - Scalar, ffi.Int, + Mat, ffi.Int, - ffi.Bool)>>('PutTextWithParams'); - late final _PutTextWithParams = _PutTextWithParamsPtr.asFunction< - CvStatus Function(Mat, ffi.Pointer, Point, int, double, Scalar, - int, int, bool)>(); + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + ffi.Bool, + ffi.Pointer)>>('SVM_TrainAuto_1'); + late final _SVM_TrainAuto_1 = _SVM_TrainAuto_1Ptr.asFunction< + CvStatus Function( + PtrSVM, + Mat, + int, + Mat, + int, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + bool, + ffi.Pointer)>(); - CvStatus PyrDown( + CvStatus SVM_Train_1( + PtrSVM self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, + ) { + return _SVM_Train_1( + self, + samples, + layout, + responses, + rval, + ); + } + + late final _SVM_Train_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrSVM, Mat, ffi.Int, Mat, + ffi.Pointer)>>('SVM_Train_1'); + late final _SVM_Train_1 = _SVM_Train_1Ptr.asFunction< + CvStatus Function(PtrSVM, Mat, int, Mat, ffi.Pointer)>(); + + CvStatus Scharr( Mat src, Mat dst, - Size dstsize, + int dDepth, + int dx, + int dy, + double scale, + double delta, int borderType, ) { - return _PyrDown( + return _Scharr( src, dst, - dstsize, + dDepth, + dx, + dy, + scale, + delta, borderType, ); } - late final _PyrDownPtr = - _lookup>( - 'PyrDown'); - late final _PyrDown = - _PyrDownPtr.asFunction(); + late final _ScharrPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Double, + ffi.Double, ffi.Int)>>('Scharr'); + late final _Scharr = _ScharrPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, int, double, double, int)>(); - CvStatus PyrUp( + CvStatus SeamlessClone( Mat src, Mat dst, - Size dstsize, - int borderType, + Mat mask, + Point p, + Mat blend, + int flags, ) { - return _PyrUp( + return _SeamlessClone( src, dst, - dstsize, - borderType, + mask, + p, + blend, + flags, ); } - late final _PyrUpPtr = - _lookup>( - 'PyrUp'); - late final _PyrUp = - _PyrUpPtr.asFunction(); + late final _SeamlessClonePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Mat, Point, Mat, ffi.Int)>>('SeamlessClone'); + late final _SeamlessClone = _SeamlessClonePtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Point, Mat, int)>(); - void QRCodeDetector_Close( - ffi.Pointer qr, + CvStatus SepFilter2D( + Mat src, + Mat dst, + int ddepth, + Mat kernelX, + Mat kernelY, + Point anchor, + double delta, + int borderType, ) { - return _QRCodeDetector_Close( - qr, + return _SepFilter2D( + src, + dst, + ddepth, + kernelX, + kernelY, + anchor, + delta, + borderType, ); } - late final _QRCodeDetector_ClosePtr = _lookup< - ffi.NativeFunction)>>( - 'QRCodeDetector_Close'); - late final _QRCodeDetector_Close = _QRCodeDetector_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _SepFilter2DPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, Mat, Mat, Point, ffi.Double, + ffi.Int)>>('SepFilter2D'); + late final _SepFilter2D = _SepFilter2DPtr.asFunction< + CvStatus Function(Mat, Mat, int, Mat, Mat, Point, double, int)>(); - CvStatus QRCodeDetector_Decode( - QRCodeDetector qr, - Mat input, - VecPoint inputPoints, - Mat straight_qrcode, - ffi.Pointer rval, + CvStatus SetNumThreads( + int n, ) { - return _QRCodeDetector_Decode( - qr, - input, - inputPoints, - straight_qrcode, - rval, + return _SetNumThreads( + n, ); } - late final _QRCodeDetector_DecodePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(QRCodeDetector, Mat, VecPoint, Mat, - ffi.Pointer)>>('QRCodeDetector_Decode'); - late final _QRCodeDetector_Decode = _QRCodeDetector_DecodePtr.asFunction< - CvStatus Function( - QRCodeDetector, Mat, VecPoint, Mat, ffi.Pointer)>(); + late final _SetNumThreadsPtr = + _lookup>('SetNumThreads'); + late final _SetNumThreads = + _SetNumThreadsPtr.asFunction(); - CvStatus QRCodeDetector_Detect( - QRCodeDetector qr, - Mat input, - VecPoint points, - ffi.Pointer rval, + CvStatus SetRNGSeed( + int seed, ) { - return _QRCodeDetector_Detect( - qr, - input, - points, - rval, + return _SetRNGSeed( + seed, ); } - late final _QRCodeDetector_DetectPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(QRCodeDetector, Mat, VecPoint, - ffi.Pointer)>>('QRCodeDetector_Detect'); - late final _QRCodeDetector_Detect = _QRCodeDetector_DetectPtr.asFunction< - CvStatus Function( - QRCodeDetector, Mat, VecPoint, ffi.Pointer)>(); + late final _SetRNGSeedPtr = + _lookup>('SetRNGSeed'); + late final _SetRNGSeed = _SetRNGSeedPtr.asFunction(); - CvStatus QRCodeDetector_DetectAndDecode( - QRCodeDetector qr, - Mat input, - ffi.Pointer points, - ffi.Pointer straight_qrcode, - ffi.Pointer rval, + CvStatus SimpleBlobDetectorParams_Create( + ffi.Pointer rval, ) { - return _QRCodeDetector_DetectAndDecode( - qr, - input, - points, - straight_qrcode, + return _SimpleBlobDetectorParams_Create( rval, ); } - late final _QRCodeDetector_DetectAndDecodePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - QRCodeDetector, - Mat, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>('QRCodeDetector_DetectAndDecode'); - late final _QRCodeDetector_DetectAndDecode = - _QRCodeDetector_DetectAndDecodePtr.asFunction< - CvStatus Function(QRCodeDetector, Mat, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>(); + late final _SimpleBlobDetectorParams_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'SimpleBlobDetectorParams_Create'); + late final _SimpleBlobDetectorParams_Create = + _SimpleBlobDetectorParams_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus QRCodeDetector_DetectAndDecodeMulti( - QRCodeDetector qr, - Mat input, - ffi.Pointer decoded, - ffi.Pointer points, - ffi.Pointer straight_code, - ffi.Pointer rval, + void SimpleBlobDetector_Close( + ffi.Pointer b, ) { - return _QRCodeDetector_DetectAndDecodeMulti( - qr, - input, - decoded, - points, - straight_code, - rval, + return _SimpleBlobDetector_Close( + b, ); } - late final _QRCodeDetector_DetectAndDecodeMultiPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - QRCodeDetector, - Mat, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>('QRCodeDetector_DetectAndDecodeMulti'); - late final _QRCodeDetector_DetectAndDecodeMulti = - _QRCodeDetector_DetectAndDecodeMultiPtr.asFunction< - CvStatus Function( - QRCodeDetector, - Mat, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>(); - - CvStatus QRCodeDetector_DetectMulti( - QRCodeDetector qr, - Mat input, - VecPoint points, - ffi.Pointer rval, + late final _SimpleBlobDetector_ClosePtr = _lookup< + ffi + .NativeFunction)>>( + 'SimpleBlobDetector_Close'); + late final _SimpleBlobDetector_Close = _SimpleBlobDetector_ClosePtr + .asFunction)>(); + + CvStatus SimpleBlobDetector_Create( + ffi.Pointer rval, ) { - return _QRCodeDetector_DetectMulti( - qr, - input, - points, + return _SimpleBlobDetector_Create( rval, ); } - late final _QRCodeDetector_DetectMultiPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(QRCodeDetector, Mat, VecPoint, - ffi.Pointer)>>('QRCodeDetector_DetectMulti'); - late final _QRCodeDetector_DetectMulti = - _QRCodeDetector_DetectMultiPtr.asFunction< - CvStatus Function( - QRCodeDetector, Mat, VecPoint, ffi.Pointer)>(); + late final _SimpleBlobDetector_CreatePtr = _lookup< + ffi + .NativeFunction)>>( + 'SimpleBlobDetector_Create'); + late final _SimpleBlobDetector_Create = _SimpleBlobDetector_CreatePtr + .asFunction)>(); - CvStatus QRCodeDetector_New( - ffi.Pointer rval, + CvStatus SimpleBlobDetector_Create_WithParams( + SimpleBlobDetectorParams params, + ffi.Pointer rval, ) { - return _QRCodeDetector_New( + return _SimpleBlobDetector_Create_WithParams( + params, rval, ); } - late final _QRCodeDetector_NewPtr = _lookup< - ffi.NativeFunction)>>( - 'QRCodeDetector_New'); - late final _QRCodeDetector_New = _QRCodeDetector_NewPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _SimpleBlobDetector_Create_WithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + SimpleBlobDetectorParams, ffi.Pointer)>>( + 'SimpleBlobDetector_Create_WithParams'); + late final _SimpleBlobDetector_Create_WithParams = + _SimpleBlobDetector_Create_WithParamsPtr.asFunction< + CvStatus Function( + SimpleBlobDetectorParams, ffi.Pointer)>(); - CvStatus RNG_Fill( - RNG rng, - Mat mat, - int distType, - double a, - double b, - bool saturateRange, + CvStatus SimpleBlobDetector_Detect( + SimpleBlobDetector b, + Mat src, + ffi.Pointer rval, ) { - return _RNG_Fill( - rng, - mat, - distType, - a, + return _SimpleBlobDetector_Detect( b, - saturateRange, + src, + rval, ); } - late final _RNG_FillPtr = _lookup< + late final _SimpleBlobDetector_DetectPtr = _lookup< ffi.NativeFunction< - CvStatus Function(RNG, Mat, ffi.Int, ffi.Double, ffi.Double, - ffi.Bool)>>('RNG_Fill'); - late final _RNG_Fill = _RNG_FillPtr.asFunction< - CvStatus Function(RNG, Mat, int, double, double, bool)>(); + CvStatus Function(SimpleBlobDetector, Mat, + ffi.Pointer)>>('SimpleBlobDetector_Detect'); + late final _SimpleBlobDetector_Detect = + _SimpleBlobDetector_DetectPtr.asFunction< + CvStatus Function( + SimpleBlobDetector, Mat, ffi.Pointer)>(); - CvStatus RNG_Gaussian( - RNG rng, - double sigma, - ffi.Pointer rval, + CvStatus Sobel( + Mat src, + Mat dst, + int ddepth, + int dx, + int dy, + int ksize, + double scale, + double delta, + int borderType, ) { - return _RNG_Gaussian( - rng, - sigma, - rval, + return _Sobel( + src, + dst, + ddepth, + dx, + dy, + ksize, + scale, + delta, + borderType, ); } - late final _RNG_GaussianPtr = _lookup< + late final _SobelPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - RNG, ffi.Double, ffi.Pointer)>>('RNG_Gaussian'); - late final _RNG_Gaussian = _RNG_GaussianPtr.asFunction< - CvStatus Function(RNG, double, ffi.Pointer)>(); + CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int, + ffi.Double, ffi.Double, ffi.Int)>>('Sobel'); + late final _Sobel = _SobelPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, int, int, double, double, int)>(); - CvStatus RNG_Next( - RNG rng, - ffi.Pointer rval, + CvStatus SpatialGradient( + Mat src, + Mat dx, + Mat dy, + int ksize, + int borderType, ) { - return _RNG_Next( - rng, - rval, + return _SpatialGradient( + src, + dx, + dy, + ksize, + borderType, ); } - late final _RNG_NextPtr = _lookup< - ffi.NativeFunction)>>( - 'RNG_Next'); - late final _RNG_Next = _RNG_NextPtr.asFunction< - CvStatus Function(RNG, ffi.Pointer)>(); + late final _SpatialGradientPtr = _lookup< + ffi + .NativeFunction>( + 'SpatialGradient'); + late final _SpatialGradient = _SpatialGradientPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, int, int)>(); - CvStatus RNG_Uniform( - RNG rng, - int a, - int b, - ffi.Pointer rval, + CvStatus SqBoxFilter( + Mat src, + Mat dst, + int ddepth, + Size ps, ) { - return _RNG_Uniform( - rng, - a, - b, - rval, + return _SqBoxFilter( + src, + dst, + ddepth, + ps, ); } - late final _RNG_UniformPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - RNG, ffi.Int, ffi.Int, ffi.Pointer)>>('RNG_Uniform'); - late final _RNG_Uniform = _RNG_UniformPtr.asFunction< - CvStatus Function(RNG, int, int, ffi.Pointer)>(); + late final _SqBoxFilterPtr = + _lookup>( + 'SqBoxFilter'); + late final _SqBoxFilter = + _SqBoxFilterPtr.asFunction(); - CvStatus RNG_UniformDouble( - RNG rng, - double a, - double b, - ffi.Pointer rval, + void Stitcher_Close( + ffi.Pointer stitcher, ) { - return _RNG_UniformDouble( - rng, - a, - b, + return _Stitcher_Close( + stitcher, + ); + } + + late final _Stitcher_ClosePtr = + _lookup)>>( + 'Stitcher_Close'); + late final _Stitcher_Close = + _Stitcher_ClosePtr.asFunction)>(); + + CvStatus Stitcher_Component( + PtrStitcher self, + ffi.Pointer rval, + ) { + return _Stitcher_Component( + self, rval, ); } - late final _RNG_UniformDoublePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(RNG, ffi.Double, ffi.Double, - ffi.Pointer)>>('RNG_UniformDouble'); - late final _RNG_UniformDouble = _RNG_UniformDoublePtr.asFunction< - CvStatus Function(RNG, double, double, ffi.Pointer)>(); + late final _Stitcher_ComponentPtr = _lookup< + ffi + .NativeFunction)>>( + 'Stitcher_Component'); + late final _Stitcher_Component = _Stitcher_ComponentPtr.asFunction< + CvStatus Function(PtrStitcher, ffi.Pointer)>(); - CvStatus RandN( - Mat mat, - Scalar mean, - Scalar stddev, + CvStatus Stitcher_ComposePanorama( + PtrStitcher self, + Mat rpano, + ffi.Pointer rval, ) { - return _RandN( - mat, - mean, - stddev, + return _Stitcher_ComposePanorama( + self, + rpano, + rval, ); } - late final _RandNPtr = - _lookup>( - 'RandN'); - late final _RandN = - _RandNPtr.asFunction(); + late final _Stitcher_ComposePanoramaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrStitcher, Mat, + ffi.Pointer)>>('Stitcher_ComposePanorama'); + late final _Stitcher_ComposePanorama = _Stitcher_ComposePanoramaPtr + .asFunction)>(); - CvStatus RandShuffle( - Mat mat, + CvStatus Stitcher_ComposePanorama_1( + PtrStitcher self, + VecMat mats, + Mat rpano, + ffi.Pointer rval, ) { - return _RandShuffle( - mat, + return _Stitcher_ComposePanorama_1( + self, + mats, + rpano, + rval, ); } - late final _RandShufflePtr = - _lookup>('RandShuffle'); - late final _RandShuffle = - _RandShufflePtr.asFunction(); + late final _Stitcher_ComposePanorama_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrStitcher, VecMat, Mat, + ffi.Pointer)>>('Stitcher_ComposePanorama_1'); + late final _Stitcher_ComposePanorama_1 = + _Stitcher_ComposePanorama_1Ptr.asFunction< + CvStatus Function(PtrStitcher, VecMat, Mat, ffi.Pointer)>(); - CvStatus RandShuffleWithParams( - Mat mat, - double iterFactor, - RNG rng, + CvStatus Stitcher_Create( + int mode, + ffi.Pointer rval, ) { - return _RandShuffleWithParams( - mat, - iterFactor, - rng, + return _Stitcher_Create( + mode, + rval, ); } - late final _RandShuffleWithParamsPtr = - _lookup>( - 'RandShuffleWithParams'); - late final _RandShuffleWithParams = _RandShuffleWithParamsPtr.asFunction< - CvStatus Function(Mat, double, RNG)>(); + late final _Stitcher_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ffi.Int, ffi.Pointer)>>('Stitcher_Create'); + late final _Stitcher_Create = _Stitcher_CreatePtr.asFunction< + CvStatus Function(int, ffi.Pointer)>(); - CvStatus RandU( - Mat mat, - Scalar low, - Scalar high, + CvStatus Stitcher_EstimateTransform( + PtrStitcher self, + VecMat mats, + VecMat masks, + ffi.Pointer rval, ) { - return _RandU( - mat, - low, - high, + return _Stitcher_EstimateTransform( + self, + mats, + masks, + rval, ); } - late final _RandUPtr = - _lookup>( - 'RandU'); - late final _RandU = - _RandUPtr.asFunction(); + late final _Stitcher_EstimateTransformPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrStitcher, VecMat, VecMat, + ffi.Pointer)>>('Stitcher_EstimateTransform'); + late final _Stitcher_EstimateTransform = + _Stitcher_EstimateTransformPtr.asFunction< + CvStatus Function( + PtrStitcher, VecMat, VecMat, ffi.Pointer)>(); - CvStatus Rectangle( - Mat img, - Rect rect, - Scalar color, - int thickness, + CvStatus Stitcher_GetCompositingResol( + PtrStitcher self, + ffi.Pointer rval, ) { - return _Rectangle( - img, - rect, - color, - thickness, + return _Stitcher_GetCompositingResol( + self, + rval, ); } - late final _RectanglePtr = _lookup< - ffi.NativeFunction>( - 'Rectangle'); - late final _Rectangle = - _RectanglePtr.asFunction(); + late final _Stitcher_GetCompositingResolPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrStitcher, + ffi.Pointer)>>('Stitcher_GetCompositingResol'); + late final _Stitcher_GetCompositingResol = _Stitcher_GetCompositingResolPtr + .asFunction)>(); - CvStatus RectangleWithParams( - Mat img, - Rect rect, - Scalar color, - int thickness, - int lineType, - int shift, + CvStatus Stitcher_GetInterpolationFlags( + PtrStitcher self, + ffi.Pointer rval, ) { - return _RectangleWithParams( - img, - rect, - color, - thickness, - lineType, - shift, + return _Stitcher_GetInterpolationFlags( + self, + rval, ); } - late final _RectangleWithParamsPtr = _lookup< + late final _Stitcher_GetInterpolationFlagsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Rect, Scalar, ffi.Int, ffi.Int, - ffi.Int)>>('RectangleWithParams'); - late final _RectangleWithParams = _RectangleWithParamsPtr.asFunction< - CvStatus Function(Mat, Rect, Scalar, int, int, int)>(); + CvStatus Function(PtrStitcher, + ffi.Pointer)>>('Stitcher_GetInterpolationFlags'); + late final _Stitcher_GetInterpolationFlags = + _Stitcher_GetInterpolationFlagsPtr.asFunction< + CvStatus Function(PtrStitcher, ffi.Pointer)>(); - CvStatus Remap( - Mat src, - Mat dst, - Mat map1, - Mat map2, - int interpolation, - int borderMode, - Scalar borderValue, + CvStatus Stitcher_GetPanoConfidenceThresh( + PtrStitcher self, + ffi.Pointer rval, ) { - return _Remap( - src, - dst, - map1, - map2, - interpolation, - borderMode, - borderValue, + return _Stitcher_GetPanoConfidenceThresh( + self, + rval, ); } - late final _RemapPtr = _lookup< + late final _Stitcher_GetPanoConfidenceThreshPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, Mat, ffi.Int, ffi.Int, Scalar)>>('Remap'); - late final _Remap = _RemapPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat, int, int, Scalar)>(); + CvStatus Function(PtrStitcher, + ffi.Pointer)>>('Stitcher_GetPanoConfidenceThresh'); + late final _Stitcher_GetPanoConfidenceThresh = + _Stitcher_GetPanoConfidenceThreshPtr.asFunction< + CvStatus Function(PtrStitcher, ffi.Pointer)>(); - CvStatus Resize( - Mat src, - Mat dst, - Size sz, - double fx, - double fy, - int interp, + CvStatus Stitcher_GetRegistrationResol( + PtrStitcher self, + ffi.Pointer rval, ) { - return _Resize( - src, - dst, - sz, - fx, - fy, - interp, + return _Stitcher_GetRegistrationResol( + self, + rval, ); } - late final _ResizePtr = _lookup< + late final _Stitcher_GetRegistrationResolPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Size, ffi.Double, ffi.Double, ffi.Int)>>('Resize'); - late final _Resize = _ResizePtr.asFunction< - CvStatus Function(Mat, Mat, Size, double, double, int)>(); + CvStatus Function(PtrStitcher, + ffi.Pointer)>>('Stitcher_GetRegistrationResol'); + late final _Stitcher_GetRegistrationResol = _Stitcher_GetRegistrationResolPtr + .asFunction)>(); - void Rng_Close( - ffi.Pointer rng, + CvStatus Stitcher_GetSeamEstimationResol( + PtrStitcher self, + ffi.Pointer rval, ) { - return _Rng_Close( - rng, + return _Stitcher_GetSeamEstimationResol( + self, + rval, ); } - late final _Rng_ClosePtr = - _lookup)>>( - 'Rng_Close'); - late final _Rng_Close = - _Rng_ClosePtr.asFunction)>(); + late final _Stitcher_GetSeamEstimationResolPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrStitcher, + ffi.Pointer)>>('Stitcher_GetSeamEstimationResol'); + late final _Stitcher_GetSeamEstimationResol = + _Stitcher_GetSeamEstimationResolPtr.asFunction< + CvStatus Function(PtrStitcher, ffi.Pointer)>(); - CvStatus Rng_New( - ffi.Pointer rval, + CvStatus Stitcher_GetWaveCorrectKind( + PtrStitcher self, + ffi.Pointer rval, ) { - return _Rng_New( + return _Stitcher_GetWaveCorrectKind( + self, rval, ); } - late final _Rng_NewPtr = - _lookup)>>( - 'Rng_New'); - late final _Rng_New = - _Rng_NewPtr.asFunction)>(); + late final _Stitcher_GetWaveCorrectKindPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrStitcher, + ffi.Pointer)>>('Stitcher_GetWaveCorrectKind'); + late final _Stitcher_GetWaveCorrectKind = _Stitcher_GetWaveCorrectKindPtr + .asFunction)>(); - CvStatus Rng_NewWithState( - int state, - ffi.Pointer rval, + CvStatus Stitcher_GetWaveCorrection( + PtrStitcher self, + ffi.Pointer rval, ) { - return _Rng_NewWithState( - state, + return _Stitcher_GetWaveCorrection( + self, rval, ); } - late final _Rng_NewWithStatePtr = _lookup< - ffi.NativeFunction)>>( - 'Rng_NewWithState'); - late final _Rng_NewWithState = _Rng_NewWithStatePtr.asFunction< - CvStatus Function(int, ffi.Pointer)>(); + late final _Stitcher_GetWaveCorrectionPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrStitcher, + ffi.Pointer)>>('Stitcher_GetWaveCorrection'); + late final _Stitcher_GetWaveCorrection = _Stitcher_GetWaveCorrectionPtr + .asFunction)>(); - CvStatus Rotate( - Mat src, - Mat dst, - int rotateCode, + CvStatus Stitcher_SetCompositingResol( + PtrStitcher self, + double inval, ) { - return _Rotate( - src, - dst, - rotateCode, + return _Stitcher_SetCompositingResol( + self, + inval, ); } - late final _RotatePtr = - _lookup>( - 'Rotate'); - late final _Rotate = - _RotatePtr.asFunction(); + late final _Stitcher_SetCompositingResolPtr = + _lookup>( + 'Stitcher_SetCompositingResol'); + late final _Stitcher_SetCompositingResol = _Stitcher_SetCompositingResolPtr + .asFunction(); - CvStatus RotatedRect_BoundingRect( - RotatedRect rect, - ffi.Pointer rval, - ) { - return _RotatedRect_BoundingRect( - rect, - rval, + CvStatus Stitcher_SetInterpolationFlags( + PtrStitcher self, + int inval, + ) { + return _Stitcher_SetInterpolationFlags( + self, + inval, ); } - late final _RotatedRect_BoundingRectPtr = _lookup< - ffi - .NativeFunction)>>( - 'RotatedRect_BoundingRect'); - late final _RotatedRect_BoundingRect = _RotatedRect_BoundingRectPtr - .asFunction)>(); + late final _Stitcher_SetInterpolationFlagsPtr = + _lookup>( + 'Stitcher_SetInterpolationFlags'); + late final _Stitcher_SetInterpolationFlags = + _Stitcher_SetInterpolationFlagsPtr.asFunction< + CvStatus Function(PtrStitcher, int)>(); - CvStatus RotatedRect_BoundingRect2f( - RotatedRect rect, - ffi.Pointer rval, + CvStatus Stitcher_SetPanoConfidenceThresh( + PtrStitcher self, + double inval, ) { - return _RotatedRect_BoundingRect2f( - rect, - rval, + return _Stitcher_SetPanoConfidenceThresh( + self, + inval, ); } - late final _RotatedRect_BoundingRect2fPtr = _lookup< - ffi - .NativeFunction)>>( - 'RotatedRect_BoundingRect2f'); - late final _RotatedRect_BoundingRect2f = _RotatedRect_BoundingRect2fPtr - .asFunction)>(); + late final _Stitcher_SetPanoConfidenceThreshPtr = + _lookup>( + 'Stitcher_SetPanoConfidenceThresh'); + late final _Stitcher_SetPanoConfidenceThresh = + _Stitcher_SetPanoConfidenceThreshPtr.asFunction< + CvStatus Function(PtrStitcher, double)>(); - CvStatus RotatedRect_Points( - RotatedRect rect, - ffi.Pointer pts, + CvStatus Stitcher_SetRegistrationResol( + PtrStitcher self, + double inval, ) { - return _RotatedRect_Points( - rect, - pts, + return _Stitcher_SetRegistrationResol( + self, + inval, ); } - late final _RotatedRect_PointsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - RotatedRect, ffi.Pointer)>>('RotatedRect_Points'); - late final _RotatedRect_Points = _RotatedRect_PointsPtr.asFunction< - CvStatus Function(RotatedRect, ffi.Pointer)>(); + late final _Stitcher_SetRegistrationResolPtr = + _lookup>( + 'Stitcher_SetRegistrationResol'); + late final _Stitcher_SetRegistrationResol = _Stitcher_SetRegistrationResolPtr + .asFunction(); - void SIFT_Close( - ffi.Pointer f, + CvStatus Stitcher_SetSeamEstimationResol( + PtrStitcher self, + double inval, ) { - return _SIFT_Close( - f, + return _Stitcher_SetSeamEstimationResol( + self, + inval, ); } - late final _SIFT_ClosePtr = - _lookup)>>( - 'SIFT_Close'); - late final _SIFT_Close = - _SIFT_ClosePtr.asFunction)>(); + late final _Stitcher_SetSeamEstimationResolPtr = + _lookup>( + 'Stitcher_SetSeamEstimationResol'); + late final _Stitcher_SetSeamEstimationResol = + _Stitcher_SetSeamEstimationResolPtr.asFunction< + CvStatus Function(PtrStitcher, double)>(); - CvStatus SIFT_Create( - ffi.Pointer rval, + CvStatus Stitcher_SetWaveCorrectKind( + PtrStitcher self, + int inval, ) { - return _SIFT_Create( - rval, + return _Stitcher_SetWaveCorrectKind( + self, + inval, ); } - late final _SIFT_CreatePtr = - _lookup)>>( - 'SIFT_Create'); - late final _SIFT_Create = - _SIFT_CreatePtr.asFunction)>(); + late final _Stitcher_SetWaveCorrectKindPtr = + _lookup>( + 'Stitcher_SetWaveCorrectKind'); + late final _Stitcher_SetWaveCorrectKind = _Stitcher_SetWaveCorrectKindPtr + .asFunction(); - CvStatus SIFT_Detect( - SIFT f, - Mat src, - ffi.Pointer rval, + CvStatus Stitcher_SetWaveCorrection( + PtrStitcher self, + bool inval, ) { - return _SIFT_Detect( - f, - src, - rval, + return _Stitcher_SetWaveCorrection( + self, + inval, ); } - late final _SIFT_DetectPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - SIFT, Mat, ffi.Pointer)>>('SIFT_Detect'); - late final _SIFT_Detect = _SIFT_DetectPtr.asFunction< - CvStatus Function(SIFT, Mat, ffi.Pointer)>(); + late final _Stitcher_SetWaveCorrectionPtr = + _lookup>( + 'Stitcher_SetWaveCorrection'); + late final _Stitcher_SetWaveCorrection = _Stitcher_SetWaveCorrectionPtr + .asFunction(); - CvStatus SIFT_DetectAndCompute( - SIFT f, - Mat src, - Mat mask, - Mat desc, - ffi.Pointer rval, + CvStatus Stitcher_Stitch( + PtrStitcher self, + VecMat mats, + Mat rpano, + ffi.Pointer rval, ) { - return _SIFT_DetectAndCompute( - f, - src, - mask, - desc, + return _Stitcher_Stitch( + self, + mats, + rpano, rval, ); } - late final _SIFT_DetectAndComputePtr = _lookup< + late final _Stitcher_StitchPtr = _lookup< ffi.NativeFunction< - CvStatus Function(SIFT, Mat, Mat, Mat, - ffi.Pointer)>>('SIFT_DetectAndCompute'); - late final _SIFT_DetectAndCompute = _SIFT_DetectAndComputePtr.asFunction< - CvStatus Function(SIFT, Mat, Mat, Mat, ffi.Pointer)>(); + CvStatus Function(PtrStitcher, VecMat, Mat, + ffi.Pointer)>>('Stitcher_Stitch'); + late final _Stitcher_Stitch = _Stitcher_StitchPtr.asFunction< + CvStatus Function(PtrStitcher, VecMat, Mat, ffi.Pointer)>(); - CvStatus SVD_Compute( - Mat src, - Mat w, - Mat u, - Mat vt, - int flags, + CvStatus Stitcher_Stitch_1( + PtrStitcher self, + VecMat mats, + VecMat masks, + Mat rpano, + ffi.Pointer rval, ) { - return _SVD_Compute( - src, - w, - u, - vt, - flags, + return _Stitcher_Stitch_1( + self, + mats, + masks, + rpano, + rval, ); } - late final _SVD_ComputePtr = _lookup< - ffi.NativeFunction>( - 'SVD_Compute'); - late final _SVD_Compute = - _SVD_ComputePtr.asFunction(); + late final _Stitcher_Stitch_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrStitcher, VecMat, VecMat, Mat, + ffi.Pointer)>>('Stitcher_Stitch_1'); + late final _Stitcher_Stitch_1 = _Stitcher_Stitch_1Ptr.asFunction< + CvStatus Function( + PtrStitcher, VecMat, VecMat, Mat, ffi.Pointer)>(); - CvStatus Scharr( + CvStatus Stylization( Mat src, Mat dst, - int dDepth, - int dx, - int dy, - double scale, - double delta, - int borderType, + double sigma_s, + double sigma_r, ) { - return _Scharr( + return _Stylization( src, dst, - dDepth, - dx, - dy, - scale, - delta, - borderType, + sigma_s, + sigma_r, ); } - late final _ScharrPtr = _lookup< + late final _StylizationPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Double, - ffi.Double, ffi.Int)>>('Scharr'); - late final _Scharr = _ScharrPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, int, double, double, int)>(); + CvStatus Function(Mat, Mat, ffi.Float, ffi.Float)>>('Stylization'); + late final _Stylization = + _StylizationPtr.asFunction(); - CvStatus SeamlessClone( - Mat src, - Mat dst, - Mat mask, - Point p, - Mat blend, - int flags, + void Subdiv2D_Close( + ffi.Pointer self, ) { - return _SeamlessClone( - src, - dst, - mask, - p, - blend, - flags, + return _Subdiv2D_Close( + self, ); } - late final _SeamlessClonePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, Point, Mat, ffi.Int)>>('SeamlessClone'); - late final _SeamlessClone = _SeamlessClonePtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Point, Mat, int)>(); + late final _Subdiv2D_ClosePtr = + _lookup)>>( + 'Subdiv2D_Close'); + late final _Subdiv2D_Close = + _Subdiv2D_ClosePtr.asFunction)>(); - CvStatus SepFilter2D( - Mat src, - Mat dst, - int ddepth, - Mat kernelX, - Mat kernelY, - Point anchor, - double delta, - int borderType, - ) { - return _SepFilter2D( - src, - dst, - ddepth, - kernelX, - kernelY, - anchor, - delta, - borderType, + CvStatus Subdiv2D_EdgeDst( + Subdiv2D self, + int edge, + ffi.Pointer dstpt, + ffi.Pointer rval, + ) { + return _Subdiv2D_EdgeDst( + self, + edge, + dstpt, + rval, ); } - late final _SepFilter2DPtr = _lookup< + late final _Subdiv2D_EdgeDstPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, Mat, Mat, Point, ffi.Double, - ffi.Int)>>('SepFilter2D'); - late final _SepFilter2D = _SepFilter2DPtr.asFunction< - CvStatus Function(Mat, Mat, int, Mat, Mat, Point, double, int)>(); + CvStatus Function(Subdiv2D, ffi.Int, ffi.Pointer, + ffi.Pointer)>>('Subdiv2D_EdgeDst'); + late final _Subdiv2D_EdgeDst = _Subdiv2D_EdgeDstPtr.asFunction< + CvStatus Function( + Subdiv2D, int, ffi.Pointer, ffi.Pointer)>(); - CvStatus SetNumThreads( - int n, + CvStatus Subdiv2D_EdgeOrg( + Subdiv2D self, + int edge, + ffi.Pointer orgpt, + ffi.Pointer rval, ) { - return _SetNumThreads( - n, + return _Subdiv2D_EdgeOrg( + self, + edge, + orgpt, + rval, ); } - late final _SetNumThreadsPtr = - _lookup>('SetNumThreads'); - late final _SetNumThreads = - _SetNumThreadsPtr.asFunction(); + late final _Subdiv2D_EdgeOrgPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, ffi.Int, ffi.Pointer, + ffi.Pointer)>>('Subdiv2D_EdgeOrg'); + late final _Subdiv2D_EdgeOrg = _Subdiv2D_EdgeOrgPtr.asFunction< + CvStatus Function( + Subdiv2D, int, ffi.Pointer, ffi.Pointer)>(); - CvStatus SetRNGSeed( - int seed, + CvStatus Subdiv2D_FindNearest( + Subdiv2D self, + Point2f pt, + ffi.Pointer nearestPt, + ffi.Pointer rval, ) { - return _SetRNGSeed( - seed, + return _Subdiv2D_FindNearest( + self, + pt, + nearestPt, + rval, ); } - late final _SetRNGSeedPtr = - _lookup>('SetRNGSeed'); - late final _SetRNGSeed = _SetRNGSeedPtr.asFunction(); + late final _Subdiv2D_FindNearestPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, Point2f, ffi.Pointer, + ffi.Pointer)>>('Subdiv2D_FindNearest'); + late final _Subdiv2D_FindNearest = _Subdiv2D_FindNearestPtr.asFunction< + CvStatus Function( + Subdiv2D, Point2f, ffi.Pointer, ffi.Pointer)>(); - CvStatus SimpleBlobDetectorParams_Create( - ffi.Pointer rval, + CvStatus Subdiv2D_GetEdge( + Subdiv2D self, + int edge, + int nextEdgeType, + ffi.Pointer rval, ) { - return _SimpleBlobDetectorParams_Create( + return _Subdiv2D_GetEdge( + self, + edge, + nextEdgeType, rval, ); } - late final _SimpleBlobDetectorParams_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer)>>( - 'SimpleBlobDetectorParams_Create'); - late final _SimpleBlobDetectorParams_Create = - _SimpleBlobDetectorParams_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _Subdiv2D_GetEdgePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, ffi.Int, ffi.Int, + ffi.Pointer)>>('Subdiv2D_GetEdge'); + late final _Subdiv2D_GetEdge = _Subdiv2D_GetEdgePtr.asFunction< + CvStatus Function(Subdiv2D, int, int, ffi.Pointer)>(); - void SimpleBlobDetector_Close( - ffi.Pointer b, + CvStatus Subdiv2D_GetEdgeList( + Subdiv2D self, + ffi.Pointer> rval, + ffi.Pointer size, ) { - return _SimpleBlobDetector_Close( - b, + return _Subdiv2D_GetEdgeList( + self, + rval, + size, ); } - late final _SimpleBlobDetector_ClosePtr = _lookup< - ffi - .NativeFunction)>>( - 'SimpleBlobDetector_Close'); - late final _SimpleBlobDetector_Close = _SimpleBlobDetector_ClosePtr - .asFunction)>(); + late final _Subdiv2D_GetEdgeListPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, ffi.Pointer>, + ffi.Pointer)>>('Subdiv2D_GetEdgeList'); + late final _Subdiv2D_GetEdgeList = _Subdiv2D_GetEdgeListPtr.asFunction< + CvStatus Function( + Subdiv2D, ffi.Pointer>, ffi.Pointer)>(); - CvStatus SimpleBlobDetector_Create( - ffi.Pointer rval, + CvStatus Subdiv2D_GetLeadingEdgeList( + Subdiv2D self, + ffi.Pointer leadingEdgeList, ) { - return _SimpleBlobDetector_Create( - rval, + return _Subdiv2D_GetLeadingEdgeList( + self, + leadingEdgeList, ); } - late final _SimpleBlobDetector_CreatePtr = _lookup< - ffi - .NativeFunction)>>( - 'SimpleBlobDetector_Create'); - late final _SimpleBlobDetector_Create = _SimpleBlobDetector_CreatePtr - .asFunction)>(); + late final _Subdiv2D_GetLeadingEdgeListPtr = _lookup< + ffi.NativeFunction)>>( + 'Subdiv2D_GetLeadingEdgeList'); + late final _Subdiv2D_GetLeadingEdgeList = _Subdiv2D_GetLeadingEdgeListPtr + .asFunction)>(); - CvStatus SimpleBlobDetector_Create_WithParams( - SimpleBlobDetectorParams params, - ffi.Pointer rval, + CvStatus Subdiv2D_GetTriangleList( + Subdiv2D self, + ffi.Pointer> rval, + ffi.Pointer size, ) { - return _SimpleBlobDetector_Create_WithParams( - params, + return _Subdiv2D_GetTriangleList( + self, rval, + size, ); } - late final _SimpleBlobDetector_Create_WithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - SimpleBlobDetectorParams, ffi.Pointer)>>( - 'SimpleBlobDetector_Create_WithParams'); - late final _SimpleBlobDetector_Create_WithParams = - _SimpleBlobDetector_Create_WithParamsPtr.asFunction< - CvStatus Function( - SimpleBlobDetectorParams, ffi.Pointer)>(); + late final _Subdiv2D_GetTriangleListPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, ffi.Pointer>, + ffi.Pointer)>>('Subdiv2D_GetTriangleList'); + late final _Subdiv2D_GetTriangleList = + _Subdiv2D_GetTriangleListPtr.asFunction< + CvStatus Function(Subdiv2D, ffi.Pointer>, + ffi.Pointer)>(); - CvStatus SimpleBlobDetector_Detect( - SimpleBlobDetector b, - Mat src, - ffi.Pointer rval, + CvStatus Subdiv2D_GetVertex( + Subdiv2D self, + int vertex, + ffi.Pointer firstEdge, + ffi.Pointer rval, ) { - return _SimpleBlobDetector_Detect( - b, - src, + return _Subdiv2D_GetVertex( + self, + vertex, + firstEdge, rval, ); } - late final _SimpleBlobDetector_DetectPtr = _lookup< + late final _Subdiv2D_GetVertexPtr = _lookup< ffi.NativeFunction< - CvStatus Function(SimpleBlobDetector, Mat, - ffi.Pointer)>>('SimpleBlobDetector_Detect'); - late final _SimpleBlobDetector_Detect = - _SimpleBlobDetector_DetectPtr.asFunction< - CvStatus Function( - SimpleBlobDetector, Mat, ffi.Pointer)>(); + CvStatus Function(Subdiv2D, ffi.Int, ffi.Pointer, + ffi.Pointer)>>('Subdiv2D_GetVertex'); + late final _Subdiv2D_GetVertex = _Subdiv2D_GetVertexPtr.asFunction< + CvStatus Function( + Subdiv2D, int, ffi.Pointer, ffi.Pointer)>(); - CvStatus Sobel( - Mat src, - Mat dst, - int ddepth, - int dx, - int dy, - int ksize, - double scale, - double delta, - int borderType, + CvStatus Subdiv2D_GetVoronoiFacetList( + Subdiv2D self, + VecInt idx, + ffi.Pointer facetList, + ffi.Pointer facetCenters, ) { - return _Sobel( - src, - dst, - ddepth, - dx, - dy, - ksize, - scale, - delta, - borderType, + return _Subdiv2D_GetVoronoiFacetList( + self, + idx, + facetList, + facetCenters, ); } - late final _SobelPtr = _lookup< + late final _Subdiv2D_GetVoronoiFacetListPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int, - ffi.Double, ffi.Double, ffi.Int)>>('Sobel'); - late final _Sobel = _SobelPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, int, int, double, double, int)>(); - - CvStatus SpatialGradient( - Mat src, - Mat dx, - Mat dy, - int ksize, - int borderType, - ) { - return _SpatialGradient( - src, - dx, - dy, - ksize, - borderType, + CvStatus Function(Subdiv2D, VecInt, ffi.Pointer, + ffi.Pointer)>>('Subdiv2D_GetVoronoiFacetList'); + late final _Subdiv2D_GetVoronoiFacetList = + _Subdiv2D_GetVoronoiFacetListPtr.asFunction< + CvStatus Function(Subdiv2D, VecInt, ffi.Pointer, + ffi.Pointer)>(); + + CvStatus Subdiv2D_InitDelaunay( + Subdiv2D self, + Rect rect, + ) { + return _Subdiv2D_InitDelaunay( + self, + rect, ); } - late final _SpatialGradientPtr = _lookup< - ffi - .NativeFunction>( - 'SpatialGradient'); - late final _SpatialGradient = _SpatialGradientPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, int, int)>(); + late final _Subdiv2D_InitDelaunayPtr = + _lookup>( + 'Subdiv2D_InitDelaunay'); + late final _Subdiv2D_InitDelaunay = + _Subdiv2D_InitDelaunayPtr.asFunction(); - CvStatus SqBoxFilter( - Mat src, - Mat dst, - int ddepth, - Size ps, + CvStatus Subdiv2D_Insert( + Subdiv2D self, + Point2f pt, + ffi.Pointer rval, ) { - return _SqBoxFilter( - src, - dst, - ddepth, - ps, + return _Subdiv2D_Insert( + self, + pt, + rval, ); } - late final _SqBoxFilterPtr = - _lookup>( - 'SqBoxFilter'); - late final _SqBoxFilter = - _SqBoxFilterPtr.asFunction(); + late final _Subdiv2D_InsertPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Subdiv2D, Point2f, ffi.Pointer)>>('Subdiv2D_Insert'); + late final _Subdiv2D_Insert = _Subdiv2D_InsertPtr.asFunction< + CvStatus Function(Subdiv2D, Point2f, ffi.Pointer)>(); - void Stitcher_Close( - ffi.Pointer stitcher, + CvStatus Subdiv2D_InsertVec( + Subdiv2D self, + VecPoint2f ptvec, ) { - return _Stitcher_Close( - stitcher, + return _Subdiv2D_InsertVec( + self, + ptvec, ); } - late final _Stitcher_ClosePtr = - _lookup)>>( - 'Stitcher_Close'); - late final _Stitcher_Close = - _Stitcher_ClosePtr.asFunction)>(); + late final _Subdiv2D_InsertVecPtr = + _lookup>( + 'Subdiv2D_InsertVec'); + late final _Subdiv2D_InsertVec = _Subdiv2D_InsertVecPtr.asFunction< + CvStatus Function(Subdiv2D, VecPoint2f)>(); - CvStatus Stitcher_Component( - Stitcher self, - ffi.Pointer rval, + CvStatus Subdiv2D_Locate( + Subdiv2D self, + Point2f pt, + ffi.Pointer edge, + ffi.Pointer vertex, + ffi.Pointer rval, ) { - return _Stitcher_Component( + return _Subdiv2D_Locate( self, + pt, + edge, + vertex, rval, ); } - late final _Stitcher_ComponentPtr = _lookup< - ffi.NativeFunction)>>( - 'Stitcher_Component'); - late final _Stitcher_Component = _Stitcher_ComponentPtr.asFunction< - CvStatus Function(Stitcher, ffi.Pointer)>(); + late final _Subdiv2D_LocatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, Point2f, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('Subdiv2D_Locate'); + late final _Subdiv2D_Locate = _Subdiv2D_LocatePtr.asFunction< + CvStatus Function(Subdiv2D, Point2f, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); - CvStatus Stitcher_ComposePanorama( - Stitcher self, - Mat rpano, - ffi.Pointer rval, + CvStatus Subdiv2D_NewEmpty( + ffi.Pointer rval, ) { - return _Stitcher_ComposePanorama( - self, - rpano, + return _Subdiv2D_NewEmpty( rval, ); } - late final _Stitcher_ComposePanoramaPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Stitcher, Mat, - ffi.Pointer)>>('Stitcher_ComposePanorama'); - late final _Stitcher_ComposePanorama = _Stitcher_ComposePanoramaPtr - .asFunction)>(); + late final _Subdiv2D_NewEmptyPtr = + _lookup)>>( + 'Subdiv2D_NewEmpty'); + late final _Subdiv2D_NewEmpty = _Subdiv2D_NewEmptyPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus Stitcher_ComposePanorama_1( - Stitcher self, - VecMat mats, - Mat rpano, - ffi.Pointer rval, + CvStatus Subdiv2D_NewWithRect( + Rect rect, + ffi.Pointer rval, ) { - return _Stitcher_ComposePanorama_1( - self, - mats, - rpano, + return _Subdiv2D_NewWithRect( + rect, rval, ); } - late final _Stitcher_ComposePanorama_1Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Stitcher, VecMat, Mat, - ffi.Pointer)>>('Stitcher_ComposePanorama_1'); - late final _Stitcher_ComposePanorama_1 = - _Stitcher_ComposePanorama_1Ptr.asFunction< - CvStatus Function(Stitcher, VecMat, Mat, ffi.Pointer)>(); + late final _Subdiv2D_NewWithRectPtr = _lookup< + ffi.NativeFunction)>>( + 'Subdiv2D_NewWithRect'); + late final _Subdiv2D_NewWithRect = _Subdiv2D_NewWithRectPtr.asFunction< + CvStatus Function(Rect, ffi.Pointer)>(); - CvStatus Stitcher_Create( - int mode, - ffi.Pointer rval, + CvStatus Subdiv2D_NextEdge( + Subdiv2D self, + int edge, + ffi.Pointer rval, ) { - return _Stitcher_Create( - mode, + return _Subdiv2D_NextEdge( + self, + edge, rval, ); } - late final _Stitcher_CreatePtr = _lookup< + late final _Subdiv2D_NextEdgePtr = _lookup< ffi.NativeFunction< CvStatus Function( - ffi.Int, ffi.Pointer)>>('Stitcher_Create'); - late final _Stitcher_Create = _Stitcher_CreatePtr.asFunction< - CvStatus Function(int, ffi.Pointer)>(); + Subdiv2D, ffi.Int, ffi.Pointer)>>('Subdiv2D_NextEdge'); + late final _Subdiv2D_NextEdge = _Subdiv2D_NextEdgePtr.asFunction< + CvStatus Function(Subdiv2D, int, ffi.Pointer)>(); - CvStatus Stitcher_EstimateTransform( - Stitcher self, - VecMat mats, - VecMat masks, + CvStatus Subdiv2D_RotateEdge( + Subdiv2D self, + int edge, + int rotate, ffi.Pointer rval, ) { - return _Stitcher_EstimateTransform( + return _Subdiv2D_RotateEdge( self, - mats, - masks, + edge, + rotate, rval, ); } - late final _Stitcher_EstimateTransformPtr = _lookup< + late final _Subdiv2D_RotateEdgePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, VecMat, VecMat, - ffi.Pointer)>>('Stitcher_EstimateTransform'); - late final _Stitcher_EstimateTransform = - _Stitcher_EstimateTransformPtr.asFunction< - CvStatus Function(Stitcher, VecMat, VecMat, ffi.Pointer)>(); + CvStatus Function(Subdiv2D, ffi.Int, ffi.Int, + ffi.Pointer)>>('Subdiv2D_RotateEdge'); + late final _Subdiv2D_RotateEdge = _Subdiv2D_RotateEdgePtr.asFunction< + CvStatus Function(Subdiv2D, int, int, ffi.Pointer)>(); - CvStatus Stitcher_Get( - PtrStitcher self, - ffi.Pointer rval, + CvStatus Subdiv2D_SymEdge( + Subdiv2D self, + int edge, + ffi.Pointer rval, ) { - return _Stitcher_Get( + return _Subdiv2D_SymEdge( self, + edge, rval, ); } - late final _Stitcher_GetPtr = _lookup< + late final _Subdiv2D_SymEdgePtr = _lookup< ffi.NativeFunction< CvStatus Function( - PtrStitcher, ffi.Pointer)>>('Stitcher_Get'); - late final _Stitcher_Get = _Stitcher_GetPtr.asFunction< - CvStatus Function(PtrStitcher, ffi.Pointer)>(); + Subdiv2D, ffi.Int, ffi.Pointer)>>('Subdiv2D_SymEdge'); + late final _Subdiv2D_SymEdge = _Subdiv2D_SymEdgePtr.asFunction< + CvStatus Function(Subdiv2D, int, ffi.Pointer)>(); - CvStatus Stitcher_GetCompositingResol( - Stitcher self, - ffi.Pointer rval, + CvStatus TextureFlattening( + Mat src, + Mat mask, + Mat dst, + double low_threshold, + double high_threshold, + int kernel_size, ) { - return _Stitcher_GetCompositingResol( - self, - rval, + return _TextureFlattening( + src, + mask, + dst, + low_threshold, + high_threshold, + kernel_size, ); } - late final _Stitcher_GetCompositingResolPtr = _lookup< + late final _TextureFlatteningPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, - ffi.Pointer)>>('Stitcher_GetCompositingResol'); - late final _Stitcher_GetCompositingResol = _Stitcher_GetCompositingResolPtr - .asFunction)>(); + CvStatus Function(Mat, Mat, Mat, ffi.Float, ffi.Float, + ffi.Int)>>('TextureFlattening'); + late final _TextureFlattening = _TextureFlatteningPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, double, double, int)>(); - CvStatus Stitcher_GetInterpolationFlags( - Stitcher self, - ffi.Pointer rval, + CvStatus TheRNG( + ffi.Pointer rval, ) { - return _Stitcher_GetInterpolationFlags( - self, + return _TheRNG( rval, ); } - late final _Stitcher_GetInterpolationFlagsPtr = _lookup< - ffi - .NativeFunction)>>( - 'Stitcher_GetInterpolationFlags'); - late final _Stitcher_GetInterpolationFlags = - _Stitcher_GetInterpolationFlagsPtr.asFunction< - CvStatus Function(Stitcher, ffi.Pointer)>(); + late final _TheRNGPtr = + _lookup)>>( + 'TheRNG'); + late final _TheRNG = + _TheRNGPtr.asFunction)>(); - CvStatus Stitcher_GetPanoConfidenceThresh( - Stitcher self, + CvStatus Threshold( + Mat src, + Mat dst, + double thresh, + double maxvalue, + int typ, ffi.Pointer rval, ) { - return _Stitcher_GetPanoConfidenceThresh( - self, + return _Threshold( + src, + dst, + thresh, + maxvalue, + typ, rval, ); } - late final _Stitcher_GetPanoConfidenceThreshPtr = _lookup< + late final _ThresholdPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, - ffi.Pointer)>>('Stitcher_GetPanoConfidenceThresh'); - late final _Stitcher_GetPanoConfidenceThresh = - _Stitcher_GetPanoConfidenceThreshPtr.asFunction< - CvStatus Function(Stitcher, ffi.Pointer)>(); + CvStatus Function(Mat, Mat, ffi.Double, ffi.Double, ffi.Int, + ffi.Pointer)>>('Threshold'); + late final _Threshold = _ThresholdPtr.asFunction< + CvStatus Function( + Mat, Mat, double, double, int, ffi.Pointer)>(); - CvStatus Stitcher_GetRegistrationResol( - Stitcher self, - ffi.Pointer rval, + CvStatus Trackbar_Create( + ffi.Pointer winname, + ffi.Pointer trackname, + int max, ) { - return _Stitcher_GetRegistrationResol( - self, - rval, + return _Trackbar_Create( + winname, + trackname, + max, ); } - late final _Stitcher_GetRegistrationResolPtr = _lookup< + late final _Trackbar_CreatePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, - ffi.Pointer)>>('Stitcher_GetRegistrationResol'); - late final _Stitcher_GetRegistrationResol = _Stitcher_GetRegistrationResolPtr - .asFunction)>(); + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Int)>>('Trackbar_Create'); + late final _Trackbar_Create = _Trackbar_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); - CvStatus Stitcher_GetSeamEstimationResol( - Stitcher self, - ffi.Pointer rval, + CvStatus Trackbar_CreateWithValue( + ffi.Pointer winname, + ffi.Pointer trackname, + ffi.Pointer value, + int max, ) { - return _Stitcher_GetSeamEstimationResol( - self, - rval, + return _Trackbar_CreateWithValue( + winname, + trackname, + value, + max, ); } - late final _Stitcher_GetSeamEstimationResolPtr = _lookup< + late final _Trackbar_CreateWithValuePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, - ffi.Pointer)>>('Stitcher_GetSeamEstimationResol'); - late final _Stitcher_GetSeamEstimationResol = - _Stitcher_GetSeamEstimationResolPtr.asFunction< - CvStatus Function(Stitcher, ffi.Pointer)>(); + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int)>>('Trackbar_CreateWithValue'); + late final _Trackbar_CreateWithValue = + _Trackbar_CreateWithValuePtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); - CvStatus Stitcher_GetWaveCorrectKind( - Stitcher self, + CvStatus Trackbar_GetPos( + ffi.Pointer winname, + ffi.Pointer trackname, ffi.Pointer rval, ) { - return _Stitcher_GetWaveCorrectKind( - self, + return _Trackbar_GetPos( + winname, + trackname, rval, ); } - late final _Stitcher_GetWaveCorrectKindPtr = _lookup< - ffi - .NativeFunction)>>( - 'Stitcher_GetWaveCorrectKind'); - late final _Stitcher_GetWaveCorrectKind = _Stitcher_GetWaveCorrectKindPtr - .asFunction)>(); + late final _Trackbar_GetPosPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('Trackbar_GetPos'); + late final _Trackbar_GetPos = _Trackbar_GetPosPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); - CvStatus Stitcher_GetWaveCorrection( - Stitcher self, - ffi.Pointer rval, + CvStatus Trackbar_SetMax( + ffi.Pointer winname, + ffi.Pointer trackname, + int pos, ) { - return _Stitcher_GetWaveCorrection( - self, - rval, + return _Trackbar_SetMax( + winname, + trackname, + pos, ); } - late final _Stitcher_GetWaveCorrectionPtr = _lookup< - ffi - .NativeFunction)>>( - 'Stitcher_GetWaveCorrection'); - late final _Stitcher_GetWaveCorrection = _Stitcher_GetWaveCorrectionPtr - .asFunction)>(); + late final _Trackbar_SetMaxPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Int)>>('Trackbar_SetMax'); + late final _Trackbar_SetMax = _Trackbar_SetMaxPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); - CvStatus Stitcher_SetCompositingResol( - Stitcher self, - double inval, + CvStatus Trackbar_SetMin( + ffi.Pointer winname, + ffi.Pointer trackname, + int pos, ) { - return _Stitcher_SetCompositingResol( - self, - inval, + return _Trackbar_SetMin( + winname, + trackname, + pos, ); } - late final _Stitcher_SetCompositingResolPtr = - _lookup>( - 'Stitcher_SetCompositingResol'); - late final _Stitcher_SetCompositingResol = _Stitcher_SetCompositingResolPtr - .asFunction(); + late final _Trackbar_SetMinPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Int)>>('Trackbar_SetMin'); + late final _Trackbar_SetMin = _Trackbar_SetMinPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); - CvStatus Stitcher_SetInterpolationFlags( - Stitcher self, - int inval, + CvStatus Trackbar_SetPos( + ffi.Pointer winname, + ffi.Pointer trackname, + int pos, ) { - return _Stitcher_SetInterpolationFlags( - self, - inval, + return _Trackbar_SetPos( + winname, + trackname, + pos, ); } - late final _Stitcher_SetInterpolationFlagsPtr = - _lookup>( - 'Stitcher_SetInterpolationFlags'); - late final _Stitcher_SetInterpolationFlags = - _Stitcher_SetInterpolationFlagsPtr.asFunction< - CvStatus Function(Stitcher, int)>(); + late final _Trackbar_SetPosPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Int)>>('Trackbar_SetPos'); + late final _Trackbar_SetPos = _Trackbar_SetPosPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); - CvStatus Stitcher_SetPanoConfidenceThresh( - Stitcher self, - double inval, + void TrackerMIL_Close( + ffi.Pointer self, ) { - return _Stitcher_SetPanoConfidenceThresh( + return _TrackerMIL_Close( self, - inval, ); } - late final _Stitcher_SetPanoConfidenceThreshPtr = - _lookup>( - 'Stitcher_SetPanoConfidenceThresh'); - late final _Stitcher_SetPanoConfidenceThresh = - _Stitcher_SetPanoConfidenceThreshPtr.asFunction< - CvStatus Function(Stitcher, double)>(); + late final _TrackerMIL_ClosePtr = + _lookup)>>( + 'TrackerMIL_Close'); + late final _TrackerMIL_Close = + _TrackerMIL_ClosePtr.asFunction)>(); - CvStatus Stitcher_SetRegistrationResol( - Stitcher self, - double inval, + CvStatus TrackerMIL_Create( + ffi.Pointer rval, ) { - return _Stitcher_SetRegistrationResol( - self, - inval, + return _TrackerMIL_Create( + rval, ); } - late final _Stitcher_SetRegistrationResolPtr = - _lookup>( - 'Stitcher_SetRegistrationResol'); - late final _Stitcher_SetRegistrationResol = _Stitcher_SetRegistrationResolPtr - .asFunction(); + late final _TrackerMIL_CreatePtr = + _lookup)>>( + 'TrackerMIL_Create'); + late final _TrackerMIL_Create = _TrackerMIL_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus Stitcher_SetSeamEstimationResol( - Stitcher self, - double inval, + CvStatus TrackerMIL_Init( + TrackerMIL self, + Mat image, + Rect bbox, ) { - return _Stitcher_SetSeamEstimationResol( + return _TrackerMIL_Init( self, - inval, + image, + bbox, ); } - late final _Stitcher_SetSeamEstimationResolPtr = - _lookup>( - 'Stitcher_SetSeamEstimationResol'); - late final _Stitcher_SetSeamEstimationResol = - _Stitcher_SetSeamEstimationResolPtr.asFunction< - CvStatus Function(Stitcher, double)>(); + late final _TrackerMIL_InitPtr = + _lookup>( + 'TrackerMIL_Init'); + late final _TrackerMIL_Init = _TrackerMIL_InitPtr.asFunction< + CvStatus Function(TrackerMIL, Mat, Rect)>(); - CvStatus Stitcher_SetWaveCorrectKind( - Stitcher self, - int inval, + CvStatus TrackerMIL_Update( + TrackerMIL self, + Mat image, + ffi.Pointer boundingBox, + ffi.Pointer rval, ) { - return _Stitcher_SetWaveCorrectKind( + return _TrackerMIL_Update( self, - inval, + image, + boundingBox, + rval, ); } - late final _Stitcher_SetWaveCorrectKindPtr = - _lookup>( - 'Stitcher_SetWaveCorrectKind'); - late final _Stitcher_SetWaveCorrectKind = _Stitcher_SetWaveCorrectKindPtr - .asFunction(); + late final _TrackerMIL_UpdatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(TrackerMIL, Mat, ffi.Pointer, + ffi.Pointer)>>('TrackerMIL_Update'); + late final _TrackerMIL_Update = _TrackerMIL_UpdatePtr.asFunction< + CvStatus Function( + TrackerMIL, Mat, ffi.Pointer, ffi.Pointer)>(); - CvStatus Stitcher_SetWaveCorrection( - Stitcher self, - bool inval, + void TrainData_Close( + ffi.Pointer self, ) { - return _Stitcher_SetWaveCorrection( + return _TrainData_Close( self, - inval, ); } - late final _Stitcher_SetWaveCorrectionPtr = - _lookup>( - 'Stitcher_SetWaveCorrection'); - late final _Stitcher_SetWaveCorrection = _Stitcher_SetWaveCorrectionPtr - .asFunction(); + late final _TrainData_ClosePtr = + _lookup)>>( + 'TrainData_Close'); + late final _TrainData_Close = _TrainData_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus Stitcher_Stitch( - Stitcher self, - VecMat mats, - Mat rpano, - ffi.Pointer rval, - ) { - return _Stitcher_Stitch( - self, - mats, - rpano, + CvStatus TrainData_Create( + Mat samples, + int layout, + Mat responses, + Mat varIdx, + Mat sampleIdx, + Mat sampleWeights, + Mat varType, + ffi.Pointer rval, + ) { + return _TrainData_Create( + samples, + layout, + responses, + varIdx, + sampleIdx, + sampleWeights, + varType, rval, ); } - late final _Stitcher_StitchPtr = _lookup< + late final _TrainData_CreatePtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Stitcher, VecMat, Mat, ffi.Pointer)>>('Stitcher_Stitch'); - late final _Stitcher_Stitch = _Stitcher_StitchPtr.asFunction< - CvStatus Function(Stitcher, VecMat, Mat, ffi.Pointer)>(); + CvStatus Function(Mat, ffi.Int, Mat, Mat, Mat, Mat, Mat, + ffi.Pointer)>>('TrainData_Create'); + late final _TrainData_Create = _TrainData_CreatePtr.asFunction< + CvStatus Function( + Mat, int, Mat, Mat, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus Stitcher_Stitch_1( - Stitcher self, - VecMat mats, - VecMat masks, - Mat rpano, - ffi.Pointer rval, + CvStatus TrainData_Get( + ffi.Pointer self, + ffi.Pointer rval, ) { - return _Stitcher_Stitch_1( + return _TrainData_Get( self, - mats, - masks, - rpano, rval, ); } - late final _Stitcher_Stitch_1Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Stitcher, VecMat, VecMat, Mat, - ffi.Pointer)>>('Stitcher_Stitch_1'); - late final _Stitcher_Stitch_1 = _Stitcher_Stitch_1Ptr.asFunction< - CvStatus Function(Stitcher, VecMat, VecMat, Mat, ffi.Pointer)>(); - - CvStatus Stylization( - Mat src, - Mat dst, - double sigma_s, - double sigma_r, - ) { - return _Stylization( - src, - dst, - sigma_s, - sigma_r, - ); - } - - late final _StylizationPtr = _lookup< + late final _TrainData_GetPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Float, ffi.Float)>>('Stylization'); - late final _Stylization = - _StylizationPtr.asFunction(); + CvStatus Function(ffi.Pointer, + ffi.Pointer)>>('TrainData_Get'); + late final _TrainData_Get = _TrainData_GetPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer)>(); - void Subdiv2D_Close( - ffi.Pointer self, + CvStatus TrainData_GetCatCount( + PtrTrainData self, + int vi, + ffi.Pointer rval, ) { - return _Subdiv2D_Close( + return _TrainData_GetCatCount( self, + vi, + rval, ); } - late final _Subdiv2D_ClosePtr = - _lookup)>>( - 'Subdiv2D_Close'); - late final _Subdiv2D_Close = - _Subdiv2D_ClosePtr.asFunction)>(); + late final _TrainData_GetCatCountPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrTrainData, ffi.Int, + ffi.Pointer)>>('TrainData_GetCatCount'); + late final _TrainData_GetCatCount = _TrainData_GetCatCountPtr.asFunction< + CvStatus Function(PtrTrainData, int, ffi.Pointer)>(); - CvStatus Subdiv2D_EdgeDst( - Subdiv2D self, - int edge, - ffi.Pointer dstpt, - ffi.Pointer rval, + CvStatus TrainData_GetCatMap( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_EdgeDst( + return _TrainData_GetCatMap( self, - edge, - dstpt, rval, ); } - late final _Subdiv2D_EdgeDstPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Int, ffi.Pointer, - ffi.Pointer)>>('Subdiv2D_EdgeDst'); - late final _Subdiv2D_EdgeDst = _Subdiv2D_EdgeDstPtr.asFunction< - CvStatus Function( - Subdiv2D, int, ffi.Pointer, ffi.Pointer)>(); + late final _TrainData_GetCatMapPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetCatMap'); + late final _TrainData_GetCatMap = _TrainData_GetCatMapPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_EdgeOrg( - Subdiv2D self, - int edge, - ffi.Pointer orgpt, - ffi.Pointer rval, + CvStatus TrainData_GetCatOfs( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_EdgeOrg( + return _TrainData_GetCatOfs( self, - edge, - orgpt, rval, ); } - late final _Subdiv2D_EdgeOrgPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Int, ffi.Pointer, - ffi.Pointer)>>('Subdiv2D_EdgeOrg'); - late final _Subdiv2D_EdgeOrg = _Subdiv2D_EdgeOrgPtr.asFunction< - CvStatus Function( - Subdiv2D, int, ffi.Pointer, ffi.Pointer)>(); + late final _TrainData_GetCatOfsPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetCatOfs'); + late final _TrainData_GetCatOfs = _TrainData_GetCatOfsPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_FindNearest( - Subdiv2D self, - Point2f pt, - ffi.Pointer nearestPt, - ffi.Pointer rval, + CvStatus TrainData_GetClassLabels( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_FindNearest( + return _TrainData_GetClassLabels( self, - pt, - nearestPt, rval, ); } - late final _Subdiv2D_FindNearestPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, Point2f, ffi.Pointer, - ffi.Pointer)>>('Subdiv2D_FindNearest'); - late final _Subdiv2D_FindNearest = _Subdiv2D_FindNearestPtr.asFunction< - CvStatus Function( - Subdiv2D, Point2f, ffi.Pointer, ffi.Pointer)>(); + late final _TrainData_GetClassLabelsPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetClassLabels'); + late final _TrainData_GetClassLabels = _TrainData_GetClassLabelsPtr + .asFunction)>(); - CvStatus Subdiv2D_GetEdge( - Subdiv2D self, - int edge, - int nextEdgeType, - ffi.Pointer rval, + CvStatus TrainData_GetDefaultSubstValues( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_GetEdge( + return _TrainData_GetDefaultSubstValues( self, - edge, - nextEdgeType, rval, ); } - late final _Subdiv2D_GetEdgePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Int, ffi.Int, - ffi.Pointer)>>('Subdiv2D_GetEdge'); - late final _Subdiv2D_GetEdge = _Subdiv2D_GetEdgePtr.asFunction< - CvStatus Function(Subdiv2D, int, int, ffi.Pointer)>(); - - CvStatus Subdiv2D_GetEdgeList( - Subdiv2D self, - ffi.Pointer> rval, - ffi.Pointer size, + late final _TrainData_GetDefaultSubstValuesPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetDefaultSubstValues'); + late final _TrainData_GetDefaultSubstValues = + _TrainData_GetDefaultSubstValuesPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); + + CvStatus TrainData_GetLayout( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_GetEdgeList( + return _TrainData_GetLayout( self, rval, - size, ); } - late final _Subdiv2D_GetEdgeListPtr = _lookup< + late final _TrainData_GetLayoutPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Pointer>, - ffi.Pointer)>>('Subdiv2D_GetEdgeList'); - late final _Subdiv2D_GetEdgeList = _Subdiv2D_GetEdgeListPtr.asFunction< - CvStatus Function( - Subdiv2D, ffi.Pointer>, ffi.Pointer)>(); + CvStatus Function( + PtrTrainData, ffi.Pointer)>>('TrainData_GetLayout'); + late final _TrainData_GetLayout = _TrainData_GetLayoutPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_GetLeadingEdgeList( - Subdiv2D self, - ffi.Pointer leadingEdgeList, + CvStatus TrainData_GetMissing( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_GetLeadingEdgeList( + return _TrainData_GetMissing( self, - leadingEdgeList, + rval, ); } - late final _Subdiv2D_GetLeadingEdgeListPtr = _lookup< - ffi.NativeFunction)>>( - 'Subdiv2D_GetLeadingEdgeList'); - late final _Subdiv2D_GetLeadingEdgeList = _Subdiv2D_GetLeadingEdgeListPtr - .asFunction)>(); + late final _TrainData_GetMissingPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetMissing'); + late final _TrainData_GetMissing = _TrainData_GetMissingPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_GetTriangleList( - Subdiv2D self, - ffi.Pointer> rval, - ffi.Pointer size, + CvStatus TrainData_GetNAllVars( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_GetTriangleList( + return _TrainData_GetNAllVars( self, rval, - size, ); } - late final _Subdiv2D_GetTriangleListPtr = _lookup< + late final _TrainData_GetNAllVarsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Pointer>, - ffi.Pointer)>>('Subdiv2D_GetTriangleList'); - late final _Subdiv2D_GetTriangleList = - _Subdiv2D_GetTriangleListPtr.asFunction< - CvStatus Function(Subdiv2D, ffi.Pointer>, - ffi.Pointer)>(); + CvStatus Function( + PtrTrainData, ffi.Pointer)>>('TrainData_GetNAllVars'); + late final _TrainData_GetNAllVars = _TrainData_GetNAllVarsPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_GetVertex( - Subdiv2D self, - int vertex, - ffi.Pointer firstEdge, - ffi.Pointer rval, + CvStatus TrainData_GetNSamples( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_GetVertex( + return _TrainData_GetNSamples( self, - vertex, - firstEdge, rval, ); } - late final _Subdiv2D_GetVertexPtr = _lookup< + late final _TrainData_GetNSamplesPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Int, ffi.Pointer, - ffi.Pointer)>>('Subdiv2D_GetVertex'); - late final _Subdiv2D_GetVertex = _Subdiv2D_GetVertexPtr.asFunction< - CvStatus Function( - Subdiv2D, int, ffi.Pointer, ffi.Pointer)>(); + CvStatus Function( + PtrTrainData, ffi.Pointer)>>('TrainData_GetNSamples'); + late final _TrainData_GetNSamples = _TrainData_GetNSamplesPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_GetVoronoiFacetList( - Subdiv2D self, - VecInt idx, - ffi.Pointer facetList, - ffi.Pointer facetCenters, + CvStatus TrainData_GetNTestSamples( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_GetVoronoiFacetList( + return _TrainData_GetNTestSamples( self, - idx, - facetList, - facetCenters, + rval, ); } - late final _Subdiv2D_GetVoronoiFacetListPtr = _lookup< + late final _TrainData_GetNTestSamplesPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Subdiv2D, VecInt, ffi.Pointer, - ffi.Pointer)>>('Subdiv2D_GetVoronoiFacetList'); - late final _Subdiv2D_GetVoronoiFacetList = - _Subdiv2D_GetVoronoiFacetListPtr.asFunction< - CvStatus Function(Subdiv2D, VecInt, ffi.Pointer, - ffi.Pointer)>(); + CvStatus Function(PtrTrainData, + ffi.Pointer)>>('TrainData_GetNTestSamples'); + late final _TrainData_GetNTestSamples = _TrainData_GetNTestSamplesPtr + .asFunction)>(); - CvStatus Subdiv2D_InitDelaunay( - Subdiv2D self, - Rect rect, + CvStatus TrainData_GetNTrainSamples( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_InitDelaunay( + return _TrainData_GetNTrainSamples( self, - rect, + rval, ); } - late final _Subdiv2D_InitDelaunayPtr = - _lookup>( - 'Subdiv2D_InitDelaunay'); - late final _Subdiv2D_InitDelaunay = - _Subdiv2D_InitDelaunayPtr.asFunction(); + late final _TrainData_GetNTrainSamplesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrTrainData, + ffi.Pointer)>>('TrainData_GetNTrainSamples'); + late final _TrainData_GetNTrainSamples = _TrainData_GetNTrainSamplesPtr + .asFunction)>(); - CvStatus Subdiv2D_Insert( - Subdiv2D self, - Point2f pt, + CvStatus TrainData_GetNVars( + PtrTrainData self, ffi.Pointer rval, ) { - return _Subdiv2D_Insert( + return _TrainData_GetNVars( self, - pt, rval, ); } - late final _Subdiv2D_InsertPtr = _lookup< + late final _TrainData_GetNVarsPtr = _lookup< ffi.NativeFunction< CvStatus Function( - Subdiv2D, Point2f, ffi.Pointer)>>('Subdiv2D_Insert'); - late final _Subdiv2D_Insert = _Subdiv2D_InsertPtr.asFunction< - CvStatus Function(Subdiv2D, Point2f, ffi.Pointer)>(); + PtrTrainData, ffi.Pointer)>>('TrainData_GetNVars'); + late final _TrainData_GetNVars = _TrainData_GetNVarsPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_InsertVec( - Subdiv2D self, - VecPoint2f ptvec, + CvStatus TrainData_GetNames( + PtrTrainData self, + ffi.Pointer names, ) { - return _Subdiv2D_InsertVec( + return _TrainData_GetNames( self, - ptvec, + names, ); } - late final _Subdiv2D_InsertVecPtr = - _lookup>( - 'Subdiv2D_InsertVec'); - late final _Subdiv2D_InsertVec = _Subdiv2D_InsertVecPtr.asFunction< - CvStatus Function(Subdiv2D, VecPoint2f)>(); + late final _TrainData_GetNamesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + PtrTrainData, ffi.Pointer)>>('TrainData_GetNames'); + late final _TrainData_GetNames = _TrainData_GetNamesPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_Locate( - Subdiv2D self, - Point2f pt, - ffi.Pointer edge, - ffi.Pointer vertex, + CvStatus TrainData_GetNormCatResponses( + PtrTrainData self, + ffi.Pointer rval, + ) { + return _TrainData_GetNormCatResponses( + self, + rval, + ); + } + + late final _TrainData_GetNormCatResponsesPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetNormCatResponses'); + late final _TrainData_GetNormCatResponses = _TrainData_GetNormCatResponsesPtr + .asFunction)>(); + + CvStatus TrainData_GetNormCatValues( + PtrTrainData self, + int vi, + Mat sidx, + ffi.Pointer values, + ) { + return _TrainData_GetNormCatValues( + self, + vi, + sidx, + values, + ); + } + + late final _TrainData_GetNormCatValuesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrTrainData, ffi.Int, Mat, + ffi.Pointer)>>('TrainData_GetNormCatValues'); + late final _TrainData_GetNormCatValues = + _TrainData_GetNormCatValuesPtr.asFunction< + CvStatus Function(PtrTrainData, int, Mat, ffi.Pointer)>(); + + CvStatus TrainData_GetResponseType( + PtrTrainData self, ffi.Pointer rval, ) { - return _Subdiv2D_Locate( + return _TrainData_GetResponseType( self, - pt, - edge, - vertex, rval, ); } - late final _Subdiv2D_LocatePtr = _lookup< + late final _TrainData_GetResponseTypePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Subdiv2D, Point2f, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>>('Subdiv2D_Locate'); - late final _Subdiv2D_Locate = _Subdiv2D_LocatePtr.asFunction< - CvStatus Function(Subdiv2D, Point2f, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, + ffi.Pointer)>>('TrainData_GetResponseType'); + late final _TrainData_GetResponseType = _TrainData_GetResponseTypePtr + .asFunction)>(); - CvStatus Subdiv2D_NewEmpty( - ffi.Pointer rval, + CvStatus TrainData_GetResponses( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_NewEmpty( + return _TrainData_GetResponses( + self, rval, ); } - late final _Subdiv2D_NewEmptyPtr = - _lookup)>>( - 'Subdiv2D_NewEmpty'); - late final _Subdiv2D_NewEmpty = _Subdiv2D_NewEmptyPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _TrainData_GetResponsesPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetResponses'); + late final _TrainData_GetResponses = _TrainData_GetResponsesPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); + + CvStatus TrainData_GetSample( + PtrTrainData self, + Mat varIdx, + int sidx, + ffi.Pointer buf, + ) { + return _TrainData_GetSample( + self, + varIdx, + sidx, + buf, + ); + } - CvStatus Subdiv2D_NewWithRect( - Rect rect, - ffi.Pointer rval, + late final _TrainData_GetSamplePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrTrainData, Mat, ffi.Int, + ffi.Pointer)>>('TrainData_GetSample'); + late final _TrainData_GetSample = _TrainData_GetSamplePtr.asFunction< + CvStatus Function(PtrTrainData, Mat, int, ffi.Pointer)>(); + + CvStatus TrainData_GetSampleWeights( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_NewWithRect( - rect, + return _TrainData_GetSampleWeights( + self, rval, ); } - late final _Subdiv2D_NewWithRectPtr = _lookup< - ffi.NativeFunction)>>( - 'Subdiv2D_NewWithRect'); - late final _Subdiv2D_NewWithRect = _Subdiv2D_NewWithRectPtr.asFunction< - CvStatus Function(Rect, ffi.Pointer)>(); + late final _TrainData_GetSampleWeightsPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetSampleWeights'); + late final _TrainData_GetSampleWeights = _TrainData_GetSampleWeightsPtr + .asFunction)>(); - CvStatus Subdiv2D_NextEdge( - Subdiv2D self, - int edge, - ffi.Pointer rval, + CvStatus TrainData_GetSamples( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_NextEdge( + return _TrainData_GetSamples( self, - edge, rval, ); } - late final _Subdiv2D_NextEdgePtr = _lookup< + late final _TrainData_GetSamplesPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetSamples'); + late final _TrainData_GetSamples = _TrainData_GetSamplesPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); + + CvStatus TrainData_GetSubMatrix( + Mat matrix, + Mat idx, + int layout, + ffi.Pointer rval, + ) { + return _TrainData_GetSubMatrix( + matrix, + idx, + layout, + rval, + ); + } + + late final _TrainData_GetSubMatrixPtr = _lookup< ffi.NativeFunction< CvStatus Function( - Subdiv2D, ffi.Int, ffi.Pointer)>>('Subdiv2D_NextEdge'); - late final _Subdiv2D_NextEdge = _Subdiv2D_NextEdgePtr.asFunction< - CvStatus Function(Subdiv2D, int, ffi.Pointer)>(); + Mat, Mat, ffi.Int, ffi.Pointer)>>('TrainData_GetSubMatrix'); + late final _TrainData_GetSubMatrix = _TrainData_GetSubMatrixPtr.asFunction< + CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); - CvStatus Subdiv2D_RotateEdge( - Subdiv2D self, - int edge, - int rotate, - ffi.Pointer rval, + CvStatus TrainData_GetSubVector( + Mat vec, + Mat idx, + ffi.Pointer rval, ) { - return _Subdiv2D_RotateEdge( - self, - edge, - rotate, + return _TrainData_GetSubVector( + vec, + idx, rval, ); } - late final _Subdiv2D_RotateEdgePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Int, ffi.Int, - ffi.Pointer)>>('Subdiv2D_RotateEdge'); - late final _Subdiv2D_RotateEdge = _Subdiv2D_RotateEdgePtr.asFunction< - CvStatus Function(Subdiv2D, int, int, ffi.Pointer)>(); + late final _TrainData_GetSubVectorPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetSubVector'); + late final _TrainData_GetSubVector = _TrainData_GetSubVectorPtr.asFunction< + CvStatus Function(Mat, Mat, ffi.Pointer)>(); - CvStatus Subdiv2D_SymEdge( - Subdiv2D self, - int edge, - ffi.Pointer rval, + CvStatus TrainData_GetTestNormCatResponses( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_SymEdge( + return _TrainData_GetTestNormCatResponses( self, - edge, rval, ); } - late final _Subdiv2D_SymEdgePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Subdiv2D, ffi.Int, ffi.Pointer)>>('Subdiv2D_SymEdge'); - late final _Subdiv2D_SymEdge = _Subdiv2D_SymEdgePtr.asFunction< - CvStatus Function(Subdiv2D, int, ffi.Pointer)>(); - - void TermCriteria_Close( - ffi.Pointer tc, + late final _TrainData_GetTestNormCatResponsesPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetTestNormCatResponses'); + late final _TrainData_GetTestNormCatResponses = + _TrainData_GetTestNormCatResponsesPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); + + CvStatus TrainData_GetTestResponses( + PtrTrainData self, + ffi.Pointer rval, ) { - return _TermCriteria_Close( - tc, + return _TrainData_GetTestResponses( + self, + rval, ); } - late final _TermCriteria_ClosePtr = - _lookup)>>( - 'TermCriteria_Close'); - late final _TermCriteria_Close = _TermCriteria_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _TrainData_GetTestResponsesPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetTestResponses'); + late final _TrainData_GetTestResponses = _TrainData_GetTestResponsesPtr + .asFunction)>(); - CvStatus TermCriteria_Epsilon( - TermCriteria tc, - ffi.Pointer rval, + CvStatus TrainData_GetTestSampleIdx( + PtrTrainData self, + ffi.Pointer rval, ) { - return _TermCriteria_Epsilon( - tc, + return _TrainData_GetTestSampleIdx( + self, rval, ); } - late final _TermCriteria_EpsilonPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - TermCriteria, ffi.Pointer)>>('TermCriteria_Epsilon'); - late final _TermCriteria_Epsilon = _TermCriteria_EpsilonPtr.asFunction< - CvStatus Function(TermCriteria, ffi.Pointer)>(); + late final _TrainData_GetTestSampleIdxPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetTestSampleIdx'); + late final _TrainData_GetTestSampleIdx = _TrainData_GetTestSampleIdxPtr + .asFunction)>(); - CvStatus TermCriteria_MaxCount( - TermCriteria tc, - ffi.Pointer rval, + CvStatus TrainData_GetTestSampleWeights( + PtrTrainData self, + ffi.Pointer rval, ) { - return _TermCriteria_MaxCount( - tc, + return _TrainData_GetTestSampleWeights( + self, rval, ); } - late final _TermCriteria_MaxCountPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - TermCriteria, ffi.Pointer)>>('TermCriteria_MaxCount'); - late final _TermCriteria_MaxCount = _TermCriteria_MaxCountPtr.asFunction< - CvStatus Function(TermCriteria, ffi.Pointer)>(); - - CvStatus TermCriteria_New( - int typ, - int maxCount, - double epsilon, - ffi.Pointer rval, + late final _TrainData_GetTestSampleWeightsPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetTestSampleWeights'); + late final _TrainData_GetTestSampleWeights = + _TrainData_GetTestSampleWeightsPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); + + CvStatus TrainData_GetTestSamples( + PtrTrainData self, + ffi.Pointer rval, ) { - return _TermCriteria_New( - typ, - maxCount, - epsilon, + return _TrainData_GetTestSamples( + self, rval, ); } - late final _TermCriteria_NewPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Int, ffi.Double, - ffi.Pointer)>>('TermCriteria_New'); - late final _TermCriteria_New = _TermCriteria_NewPtr.asFunction< - CvStatus Function(int, int, double, ffi.Pointer)>(); + late final _TrainData_GetTestSamplesPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetTestSamples'); + late final _TrainData_GetTestSamples = _TrainData_GetTestSamplesPtr + .asFunction)>(); - CvStatus TermCriteria_Type( - TermCriteria tc, - ffi.Pointer rval, + CvStatus TrainData_GetTrainNormCatResponses( + PtrTrainData self, + ffi.Pointer rval, ) { - return _TermCriteria_Type( - tc, + return _TrainData_GetTrainNormCatResponses( + self, rval, ); } - late final _TermCriteria_TypePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - TermCriteria, ffi.Pointer)>>('TermCriteria_Type'); - late final _TermCriteria_Type = _TermCriteria_TypePtr.asFunction< - CvStatus Function(TermCriteria, ffi.Pointer)>(); - - CvStatus TextureFlattening( - Mat src, - Mat mask, - Mat dst, - double low_threshold, - double high_threshold, - int kernel_size, + late final _TrainData_GetTrainNormCatResponsesPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetTrainNormCatResponses'); + late final _TrainData_GetTrainNormCatResponses = + _TrainData_GetTrainNormCatResponsesPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); + + CvStatus TrainData_GetTrainResponses( + PtrTrainData self, + ffi.Pointer rval, ) { - return _TextureFlattening( - src, - mask, - dst, - low_threshold, - high_threshold, - kernel_size, + return _TrainData_GetTrainResponses( + self, + rval, ); } - late final _TextureFlatteningPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, ffi.Float, ffi.Float, - ffi.Int)>>('TextureFlattening'); - late final _TextureFlattening = _TextureFlatteningPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, double, double, int)>(); + late final _TrainData_GetTrainResponsesPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetTrainResponses'); + late final _TrainData_GetTrainResponses = _TrainData_GetTrainResponsesPtr + .asFunction)>(); - CvStatus TheRNG( - ffi.Pointer rval, + CvStatus TrainData_GetTrainSampleIdx( + PtrTrainData self, + ffi.Pointer rval, ) { - return _TheRNG( + return _TrainData_GetTrainSampleIdx( + self, rval, ); } - late final _TheRNGPtr = - _lookup)>>( - 'TheRNG'); - late final _TheRNG = - _TheRNGPtr.asFunction)>(); + late final _TrainData_GetTrainSampleIdxPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetTrainSampleIdx'); + late final _TrainData_GetTrainSampleIdx = _TrainData_GetTrainSampleIdxPtr + .asFunction)>(); - CvStatus Threshold( - Mat src, - Mat dst, - double thresh, - double maxvalue, - int typ, - ffi.Pointer rval, + CvStatus TrainData_GetTrainSampleWeights( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Threshold( - src, - dst, - thresh, - maxvalue, - typ, + return _TrainData_GetTrainSampleWeights( + self, rval, ); } - late final _ThresholdPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Double, ffi.Double, ffi.Int, - ffi.Pointer)>>('Threshold'); - late final _Threshold = _ThresholdPtr.asFunction< - CvStatus Function( - Mat, Mat, double, double, int, ffi.Pointer)>(); - - CvStatus Trackbar_Create( - ffi.Pointer winname, - ffi.Pointer trackname, - int max, + late final _TrainData_GetTrainSampleWeightsPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetTrainSampleWeights'); + late final _TrainData_GetTrainSampleWeights = + _TrainData_GetTrainSampleWeightsPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); + + CvStatus TrainData_GetTrainSamples( + PtrTrainData self, + int layout, + bool compressSamples, + bool compressVars, + ffi.Pointer rval, ) { - return _Trackbar_Create( - winname, - trackname, - max, + return _TrainData_GetTrainSamples( + self, + layout, + compressSamples, + compressVars, + rval, ); } - late final _Trackbar_CreatePtr = _lookup< + late final _TrainData_GetTrainSamplesPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Int)>>('Trackbar_Create'); - late final _Trackbar_Create = _Trackbar_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); + CvStatus Function(PtrTrainData, ffi.Int, ffi.Bool, ffi.Bool, + ffi.Pointer)>>('TrainData_GetTrainSamples'); + late final _TrainData_GetTrainSamples = + _TrainData_GetTrainSamplesPtr.asFunction< + CvStatus Function(PtrTrainData, int, bool, bool, ffi.Pointer)>(); - CvStatus Trackbar_CreateWithValue( - ffi.Pointer winname, - ffi.Pointer trackname, - ffi.Pointer value, - int max, + CvStatus TrainData_GetValues( + PtrTrainData self, + int vi, + Mat sidx, + ffi.Pointer values, ) { - return _Trackbar_CreateWithValue( - winname, - trackname, - value, - max, + return _TrainData_GetValues( + self, + vi, + sidx, + values, ); } - late final _Trackbar_CreateWithValuePtr = _lookup< + late final _TrainData_GetValuesPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Int)>>('Trackbar_CreateWithValue'); - late final _Trackbar_CreateWithValue = - _Trackbar_CreateWithValuePtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, int)>(); + CvStatus Function(PtrTrainData, ffi.Int, Mat, + ffi.Pointer)>>('TrainData_GetValues'); + late final _TrainData_GetValues = _TrainData_GetValuesPtr.asFunction< + CvStatus Function(PtrTrainData, int, Mat, ffi.Pointer)>(); - CvStatus Trackbar_GetPos( - ffi.Pointer winname, - ffi.Pointer trackname, - ffi.Pointer rval, + CvStatus TrainData_GetVarIdx( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Trackbar_GetPos( - winname, - trackname, + return _TrainData_GetVarIdx( + self, rval, ); } - late final _Trackbar_GetPosPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>('Trackbar_GetPos'); - late final _Trackbar_GetPos = _Trackbar_GetPosPtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>(); + late final _TrainData_GetVarIdxPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetVarIdx'); + late final _TrainData_GetVarIdx = _TrainData_GetVarIdxPtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); - CvStatus Trackbar_SetMax( - ffi.Pointer winname, - ffi.Pointer trackname, - int pos, + CvStatus TrainData_GetVarSymbolFlags( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Trackbar_SetMax( - winname, - trackname, - pos, + return _TrainData_GetVarSymbolFlags( + self, + rval, ); } - late final _Trackbar_SetMaxPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Int)>>('Trackbar_SetMax'); - late final _Trackbar_SetMax = _Trackbar_SetMaxPtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _TrainData_GetVarSymbolFlagsPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetVarSymbolFlags'); + late final _TrainData_GetVarSymbolFlags = _TrainData_GetVarSymbolFlagsPtr + .asFunction)>(); - CvStatus Trackbar_SetMin( - ffi.Pointer winname, - ffi.Pointer trackname, - int pos, + CvStatus TrainData_GetVarType( + PtrTrainData self, + ffi.Pointer rval, ) { - return _Trackbar_SetMin( - winname, - trackname, - pos, + return _TrainData_GetVarType( + self, + rval, ); } - late final _Trackbar_SetMinPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Int)>>('Trackbar_SetMin'); - late final _Trackbar_SetMin = _Trackbar_SetMinPtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _TrainData_GetVarTypePtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetVarType'); + late final _TrainData_GetVarType = _TrainData_GetVarTypePtr.asFunction< + CvStatus Function(PtrTrainData, ffi.Pointer)>(); - CvStatus Trackbar_SetPos( - ffi.Pointer winname, - ffi.Pointer trackname, - int pos, - ) { - return _Trackbar_SetPos( - winname, - trackname, - pos, + CvStatus TrainData_LoadFromCSV( + ffi.Pointer filename, + int headerLineCount, + int responseStartIdx, + int responseEndIdx, + ffi.Pointer varTypeSpec, + int delimiter, + int missch, + ffi.Pointer rval, + ) { + return _TrainData_LoadFromCSV( + filename, + headerLineCount, + responseStartIdx, + responseEndIdx, + varTypeSpec, + delimiter, + missch, + rval, ); } - late final _Trackbar_SetPosPtr = _lookup< + late final _TrainData_LoadFromCSVPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Int)>>('Trackbar_SetPos'); - late final _Trackbar_SetPos = _Trackbar_SetPosPtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); - - void TrackerMIL_Close( - ffi.Pointer self, + CvStatus Function( + ffi.Pointer, + ffi.Int, + ffi.Int, + ffi.Int, + ffi.Pointer, + ffi.Char, + ffi.Char, + ffi.Pointer)>>('TrainData_LoadFromCSV'); + late final _TrainData_LoadFromCSV = _TrainData_LoadFromCSVPtr.asFunction< + CvStatus Function(ffi.Pointer, int, int, int, + ffi.Pointer, int, int, ffi.Pointer)>(); + + CvStatus TrainData_MissingValue( + ffi.Pointer rval, ) { - return _TrackerMIL_Close( - self, + return _TrainData_MissingValue( + rval, ); } - late final _TrackerMIL_ClosePtr = - _lookup)>>( - 'TrackerMIL_Close'); - late final _TrackerMIL_Close = - _TrackerMIL_ClosePtr.asFunction)>(); + late final _TrainData_MissingValuePtr = + _lookup)>>( + 'TrainData_MissingValue'); + late final _TrainData_MissingValue = _TrainData_MissingValuePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus TrackerMIL_Create( - ffi.Pointer rval, + CvStatus TrainData_SetTrainTestSplit( + PtrTrainData self, + int count, + bool shuffle, ) { - return _TrackerMIL_Create( - rval, + return _TrainData_SetTrainTestSplit( + self, + count, + shuffle, ); } - late final _TrackerMIL_CreatePtr = - _lookup)>>( - 'TrackerMIL_Create'); - late final _TrackerMIL_Create = _TrackerMIL_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _TrainData_SetTrainTestSplitPtr = _lookup< + ffi + .NativeFunction>( + 'TrainData_SetTrainTestSplit'); + late final _TrainData_SetTrainTestSplit = _TrainData_SetTrainTestSplitPtr + .asFunction(); - CvStatus TrackerMIL_Init( - TrackerMIL self, - Mat image, - Rect bbox, + CvStatus TrainData_SetTrainTestSplitRatio( + PtrTrainData self, + double ratio, + bool shuffle, ) { - return _TrackerMIL_Init( + return _TrainData_SetTrainTestSplitRatio( self, - image, - bbox, + ratio, + shuffle, ); } - late final _TrackerMIL_InitPtr = - _lookup>( - 'TrackerMIL_Init'); - late final _TrackerMIL_Init = _TrackerMIL_InitPtr.asFunction< - CvStatus Function(TrackerMIL, Mat, Rect)>(); + late final _TrainData_SetTrainTestSplitRatioPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrTrainData, ffi.Double, + ffi.Bool)>>('TrainData_SetTrainTestSplitRatio'); + late final _TrainData_SetTrainTestSplitRatio = + _TrainData_SetTrainTestSplitRatioPtr.asFunction< + CvStatus Function(PtrTrainData, double, bool)>(); - CvStatus TrackerMIL_Update( - TrackerMIL self, - Mat image, - ffi.Pointer boundingBox, - ffi.Pointer rval, + CvStatus TrainData_ShuffleTrainTest( + PtrTrainData self, ) { - return _TrackerMIL_Update( + return _TrainData_ShuffleTrainTest( self, - image, - boundingBox, - rval, ); } - late final _TrackerMIL_UpdatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(TrackerMIL, Mat, ffi.Pointer, - ffi.Pointer)>>('TrackerMIL_Update'); - late final _TrackerMIL_Update = _TrackerMIL_UpdatePtr.asFunction< - CvStatus Function( - TrackerMIL, Mat, ffi.Pointer, ffi.Pointer)>(); + late final _TrainData_ShuffleTrainTestPtr = + _lookup>( + 'TrainData_ShuffleTrainTest'); + late final _TrainData_ShuffleTrainTest = _TrainData_ShuffleTrainTestPtr + .asFunction(); CvStatus Undistort( Mat src, @@ -17346,6 +22296,8 @@ class _SymbolAddresses { _SymbolAddresses(this._library); ffi.Pointer)>> get AKAZE_Close => _library._AKAZE_ClosePtr; + ffi.Pointer)>> + get ANN_MLP_Close => _library._ANN_MLP_ClosePtr; ffi.Pointer< ffi .NativeFunction)>> @@ -17380,11 +22332,17 @@ class _SymbolAddresses { _library._BackgroundSubtractorMOG2_ClosePtr; ffi.Pointer)>> get BlockMeanHash_Close => _library._BlockMeanHash_ClosePtr; + ffi.Pointer)>> + get Boost_Close => _library._Boost_ClosePtr; ffi.Pointer)>> get CLAHE_Close => _library._CLAHE_ClosePtr; ffi.Pointer< ffi.NativeFunction)>> get CascadeClassifier_Close => _library._CascadeClassifier_ClosePtr; + ffi.Pointer)>> + get DTrees_Close => _library._DTrees_ClosePtr; + ffi.Pointer)>> + get EM_Close => _library._EM_ClosePtr; ffi.Pointer< ffi .NativeFunction)>> @@ -17398,10 +22356,16 @@ class _SymbolAddresses { get HOGDescriptor_Close => _library._HOGDescriptor_ClosePtr; ffi.Pointer)>> get KAZE_Close => _library._KAZE_ClosePtr; + ffi.Pointer)>> + get KNearest_Close => _library._KNearest_ClosePtr; ffi.Pointer)>> get KalmanFilter_Close => _library._KalmanFilter_ClosePtr; ffi.Pointer)>> get Layer_Close => _library._Layer_ClosePtr; + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer)>> + get LogisticRegression_Close => _library._LogisticRegression_ClosePtr; ffi.Pointer)>> get MSER_Close => _library._MSER_ClosePtr; ffi.Pointer)>> @@ -17412,15 +22376,28 @@ class _SymbolAddresses { get MergeMertens_Close => _library._MergeMertens_ClosePtr; ffi.Pointer)>> get Net_Close => _library._Net_ClosePtr; + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer)>> + get NormalBayesClassifier_Close => + _library._NormalBayesClassifier_ClosePtr; ffi.Pointer)>> get ORB_Close => _library._ORB_ClosePtr; + ffi.Pointer)>> + get ParamGrid_Close => _library._ParamGrid_ClosePtr; ffi.Pointer< ffi.NativeFunction)>> get QRCodeDetector_Close => _library._QRCodeDetector_ClosePtr; + ffi.Pointer)>> + get RTrees_Close => _library._RTrees_ClosePtr; ffi.Pointer)>> get Rng_Close => _library._Rng_ClosePtr; ffi.Pointer)>> get SIFT_Close => _library._SIFT_ClosePtr; + ffi.Pointer)>> + get SVMSGD_Close => _library._SVMSGD_ClosePtr; + ffi.Pointer)>> + get SVM_Close => _library._SVM_ClosePtr; ffi.Pointer< ffi .NativeFunction)>> @@ -17429,10 +22406,10 @@ class _SymbolAddresses { get Stitcher_Close => _library._Stitcher_ClosePtr; ffi.Pointer)>> get Subdiv2D_Close => _library._Subdiv2D_ClosePtr; - ffi.Pointer)>> - get TermCriteria_Close => _library._TermCriteria_ClosePtr; ffi.Pointer)>> get TrackerMIL_Close => _library._TrackerMIL_ClosePtr; + ffi.Pointer)>> + get TrainData_Close => _library._TrainData_ClosePtr; ffi.Pointer)>> get VecChar_Close => _library._VecChar_ClosePtr; ffi.Pointer)>> @@ -17552,6 +22529,12 @@ final class BlockMeanHash extends ffi.Struct { typedef BlockMeanHashPtr = ffi.Pointer; +final class Boost extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef BoostPtr = ffi.Pointer; + final class CLAHE extends ffi.Struct { external ffi.Pointer ptr; } @@ -17594,6 +22577,17 @@ final class DMatch extends ffi.Struct { external double distance; } +final class DTrees extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef DTreesPtr = ffi.Pointer; + +final class EM extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef EMPtr = ffi.Pointer; typedef ErrorCallback = ffi.Pointer>; typedef ErrorCallbackFunction = ffi.Void Function( ffi.Int status, @@ -17646,6 +22640,12 @@ final class KAZE extends ffi.Struct { typedef KAZEPtr = ffi.Pointer; +final class KNearest extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef KNearestPtr = ffi.Pointer; + final class KalmanFilter extends ffi.Struct { external ffi.Pointer ptr; } @@ -17681,6 +22681,12 @@ final class Layer extends ffi.Struct { typedef LayerPtr = ffi.Pointer; +final class LogisticRegression extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef LogisticRegressionPtr = ffi.Pointer; + final class MSER extends ffi.Struct { external ffi.Pointer ptr; } @@ -17857,6 +22863,13 @@ final class NO_USE_BlockMeanHashPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_BoostPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -17871,6 +22884,20 @@ final class NO_USE_CascadeClassifierPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_DTreesPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_EMPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -17913,6 +22940,13 @@ final class NO_USE_KAZEPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_KNearestPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -17927,6 +22961,13 @@ final class NO_USE_LayerPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_LogisticRegressionPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -17955,6 +22996,13 @@ final class NO_USE_NetPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_NormalBayesClassifierPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -17962,6 +23010,83 @@ final class NO_USE_ORBPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrANN_MLPPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrBoostPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrDTreesPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrEMPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrKNearestPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrLogisticRegressionPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrNormalBayesClassifierPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrParamGridPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrRTreesPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrSVMPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrSVMSGDPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -17969,6 +23094,13 @@ final class NO_USE_PtrStitcherPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrTrainDataPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -17986,36 +23118,36 @@ final class NO_USE_RNGPtr extends ffi.Struct { /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ -final class NO_USE_SIFTPtr extends ffi.Struct { - external ffi.Pointer p; +final class NO_USE_RTreesPtr extends ffi.Struct { + external ffi.Pointer p; } /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ -final class NO_USE_SimpleBlobDetectorPtr extends ffi.Struct { - external ffi.Pointer p; +final class NO_USE_SIFTPtr extends ffi.Struct { + external ffi.Pointer p; } /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ -final class NO_USE_StitcherPtr extends ffi.Struct { - external ffi.Pointer p; +final class NO_USE_SVMSGDPtr extends ffi.Struct { + external ffi.Pointer p; } /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ -final class NO_USE_Subdiv2DPtr extends ffi.Struct { - external ffi.Pointer p; +final class NO_USE_SimpleBlobDetectorPtr extends ffi.Struct { + external ffi.Pointer p; } /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ -final class NO_USE_TermCriteriaPtr extends ffi.Struct { - external ffi.Pointer p; +final class NO_USE_Subdiv2DPtr extends ffi.Struct { + external ffi.Pointer p; } /// \ @@ -18039,6 +23171,13 @@ final class NO_USE_TrackerPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_TrainDataPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -18185,6 +23324,12 @@ final class Net extends ffi.Struct { typedef NetPtr = ffi.Pointer; +final class NormalBayesClassifier extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef NormalBayesClassifierPtr = ffi.Pointer; + final class ORB extends ffi.Struct { external ffi.Pointer ptr; } @@ -18218,12 +23363,84 @@ final class Point3f extends ffi.Struct { external double z; } +final class PtrANN_MLP extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrANN_MLPPtr = ffi.Pointer; + +final class PtrBoost extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrBoostPtr = ffi.Pointer; + +final class PtrDTrees extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrDTreesPtr = ffi.Pointer; + +final class PtrEM extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrEMPtr = ffi.Pointer; + +final class PtrKNearest extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrKNearestPtr = ffi.Pointer; + +final class PtrLogisticRegression extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrLogisticRegressionPtr = ffi.Pointer; + +final class PtrNormalBayesClassifier extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrNormalBayesClassifierPtr = ffi.Pointer; + +final class PtrParamGrid extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrParamGridPtr = ffi.Pointer; + +final class PtrRTrees extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrRTreesPtr = ffi.Pointer; + +final class PtrSVM extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrSVMPtr = ffi.Pointer; + +final class PtrSVMSGD extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrSVMSGDPtr = ffi.Pointer; + final class PtrStitcher extends ffi.Struct { external ffi.Pointer> ptr; } typedef PtrStitcherPtr = ffi.Pointer; +final class PtrTrainData extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrTrainDataPtr = ffi.Pointer; + final class QRCodeDetector extends ffi.Struct { external ffi.Pointer ptr; } @@ -18236,6 +23453,12 @@ final class RNG extends ffi.Struct { typedef RNGPtr = ffi.Pointer; +final class RTrees extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef RTreesPtr = ffi.Pointer; + final class Rect extends ffi.Struct { @ffi.Int() external int x; @@ -18291,6 +23514,12 @@ const int STITCHING_PANORAMA = 0; const int STITCHING_SCANS = 1; +final class SVMSGD extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef SVMSGDPtr = ffi.Pointer; + final class Scalar extends ffi.Struct { @ffi.Double() external double val1; @@ -18386,12 +23615,6 @@ final class Size2f extends ffi.Struct { external double height; } -final class Stitcher extends ffi.Struct { - external ffi.Pointer ptr; -} - -typedef StitcherPtr = ffi.Pointer; - final class Subdiv2D extends ffi.Struct { external ffi.Pointer ptr; } @@ -18399,10 +23622,15 @@ final class Subdiv2D extends ffi.Struct { typedef Subdiv2DPtr = ffi.Pointer; final class TermCriteria extends ffi.Struct { - external ffi.Pointer ptr; -} + @ffi.Int() + external int type; -typedef TermCriteriaPtr = ffi.Pointer; + @ffi.Int() + external int maxCount; + + @ffi.Double() + external double epsilon; +} final class Tracker extends ffi.Struct { external ffi.Pointer ptr; @@ -18421,6 +23649,12 @@ final class TrackerMIL extends ffi.Struct { typedef TrackerMILPtr = ffi.Pointer; typedef TrackerPtr = ffi.Pointer; +final class TrainData extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef TrainDataPtr = ffi.Pointer; + final class Vec2b extends ffi.Struct { @uchar() external int val1; diff --git a/lib/src/stitching/stitching.dart b/lib/src/stitching/stitching.dart index 22187281..0ee59667 100644 --- a/lib/src/stitching/stitching.dart +++ b/lib/src/stitching/stitching.dart @@ -23,12 +23,6 @@ class Stitcher extends CvStruct { finalizer.attach(this, ptr.cast()); } - cvg.Stitcher get stitcher { - final s = calloc(); - cvRun(() => CFFI.Stitcher_Get(ptr.ref, s)); - return s.ref; - } - /// Creates a Stitcher configured in one of the stitching modes. /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a308a47865a1f381e4429c8ec5e99549f factory Stitcher.create({StitcherMode mode = StitcherMode.PANORAMA}) { @@ -41,98 +35,98 @@ class Stitcher extends CvStruct { double get registrationResol { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetRegistrationResol(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetRegistrationResol(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a9912fe8c095b8385267908e5ef707439 set registrationResol(double value) { - cvRun(() => CFFI.Stitcher_SetRegistrationResol(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetRegistrationResol(ref, value)); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#ac559c3eb228614f9402ff3eba23a08f5 double get seamEstimationResol { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetSeamEstimationResol(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetSeamEstimationResol(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#ad0fcef52b2fedda1dbb90ea780cd7979 set seamEstimationResol(double value) { - cvRun(() => CFFI.Stitcher_SetSeamEstimationResol(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetSeamEstimationResol(ref, value)); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#ad13d2d50b253e471fbaf041b9a044571 double get compositingResol { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetCompositingResol(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetCompositingResol(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#afe927e80fcb2ca2061630ddd98eebba8 set compositingResol(double value) { - cvRun(() => CFFI.Stitcher_SetCompositingResol(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetCompositingResol(ref, value)); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a3755bbeca7f4c80dc42af034f7621568 double get panoConfidenceThresh { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetPanoConfidenceThresh(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetPanoConfidenceThresh(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a6f5e62bc1dd5d7bdb5f9313a2c21c558 set panoConfidenceThresh(double value) { - cvRun(() => CFFI.Stitcher_SetPanoConfidenceThresh(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetPanoConfidenceThresh(ref, value)); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#af6a51e0b23dac119a3612d57345f9a7f bool get waveCorrection { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetWaveCorrection(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetWaveCorrection(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a968a2f4a1faddfdacbcfce54b44bab70 set waveCorrection(bool value) { - cvRun(() => CFFI.Stitcher_SetWaveCorrection(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetWaveCorrection(ref, value)); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#abc0c8f54a1d223a1098206654813d973 int get interpolationFlags { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetInterpolationFlags(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetInterpolationFlags(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a253d04b8dcd3c674321b29139c769873 set interpolationFlags(int value) { - cvRun(() => CFFI.Stitcher_SetInterpolationFlags(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetInterpolationFlags(ref, value)); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#ad9c9c9b8a97b686ad3b93f7918c4c6de int get waveCorrectKind { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetWaveCorrectKind(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetWaveCorrectKind(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a17413f5c06e4e569bfd45e01d4e8ff4a set waveCorrectKind(int value) { - cvRun(() => CFFI.Stitcher_SetWaveCorrectKind(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetWaveCorrectKind(ref, value)); } /// These functions try to match the given images and to estimate rotations of each camera. @@ -141,7 +135,7 @@ class Stitcher extends CvStruct { return using((arena) { final rptr = arena(); masks ??= VecMat.fromList([]); - cvRun(() => CFFI.Stitcher_EstimateTransform(stitcher, images.ref, masks!.ref, rptr)); + cvRun(() => CFFI.Stitcher_EstimateTransform(ref, images.ref, masks!.ref, rptr)); return StitcherStatus.fromInt(rptr.value); }); } @@ -155,8 +149,8 @@ class Stitcher extends CvStruct { final rptr = arena(); final rpano = Mat.empty(); images == null - ? cvRun(() => CFFI.Stitcher_ComposePanorama(stitcher, rpano.ref, rptr)) - : cvRun(() => CFFI.Stitcher_ComposePanorama_1(stitcher, images.ref, rpano.ref, rptr)); + ? cvRun(() => CFFI.Stitcher_ComposePanorama(ref, rpano.ref, rptr)) + : cvRun(() => CFFI.Stitcher_ComposePanorama_1(ref, images.ref, rpano.ref, rptr)); return (StitcherStatus.fromInt(rptr.value), rpano); }); } @@ -169,8 +163,8 @@ class Stitcher extends CvStruct { final rptr = arena(); final rpano = Mat.empty(); masks == null - ? cvRun(() => CFFI.Stitcher_Stitch(stitcher, images.ref, rpano.ref, rptr)) - : cvRun(() => CFFI.Stitcher_Stitch_1(stitcher, images.ref, masks.ref, rpano.ref, rptr)); + ? cvRun(() => CFFI.Stitcher_Stitch(ref, images.ref, rpano.ref, rptr)) + : cvRun(() => CFFI.Stitcher_Stitch_1(ref, images.ref, masks.ref, rpano.ref, rptr)); return (StitcherStatus.fromInt(rptr.value), rpano); }); } @@ -179,7 +173,7 @@ class Stitcher extends CvStruct { VecInt get component { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_Component(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_Component(ref, rptr)); return VecInt.fromVec(rptr.ref); }); } diff --git a/lib/src/video/video.dart b/lib/src/video/video.dart index b257ad0d..d43c2754 100644 --- a/lib/src/video/video.dart +++ b/lib/src/video/video.dart @@ -193,7 +193,7 @@ Mat calcOpticalFlowFarneback( err!.ref, winSize.toSize(arena).ref, maxLevel, - criteria.toTermCriteria(arena).ref, + criteria.toNativePtr(arena).ref, flags, minEigThreshold, ), @@ -223,7 +223,7 @@ Mat calcOpticalFlowFarneback( inputImage.ref, warpMatrix.ref, motionType, - criteria.toTermCriteria(arena).ref, + criteria.toNativePtr(arena).ref, inputMask.ref, gaussFiltSize, p, diff --git a/src/calib3d/calib3d.cpp b/src/calib3d/calib3d.cpp index 8263a7cb..c4d7eec6 100644 --- a/src/calib3d/calib3d.cpp +++ b/src/calib3d/calib3d.cpp @@ -7,6 +7,7 @@ */ #include "calib3d.h" +#include "opencv2/core/types.hpp" CvStatus Fisheye_UndistortImage(Mat distorted, Mat undistorted, Mat k, Mat d) { @@ -66,7 +67,8 @@ CvStatus GetOptimalNewCameraMatrixWithParams(Mat cameraMatrix, Mat distCoeffs, S CvStatus CalibrateCamera(VecVecPoint3f objectPoints, VecVecPoint2f imagePoints, Size imageSize, Mat cameraMatrix, Mat distCoeffs, Mat rvecs, Mat tvecs, int flag, TermCriteria criteria, double *rval) { BEGIN_WRAP - *rval = cv::calibrateCamera(*objectPoints.ptr, *imagePoints.ptr, cv::Size(imageSize.width, imageSize.height), *cameraMatrix.ptr, *distCoeffs.ptr, *rvecs.ptr, *tvecs.ptr, flag, *criteria.ptr); + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); + *rval = cv::calibrateCamera(*objectPoints.ptr, *imagePoints.ptr, cv::Size(imageSize.width, imageSize.height), *cameraMatrix.ptr, *distCoeffs.ptr, *rvecs.ptr, *tvecs.ptr, flag, tc); END_WRAP } @@ -80,7 +82,8 @@ CvStatus Undistort(Mat src, Mat dst, Mat cameraMatrix, Mat distCoeffs, Mat newCa CvStatus UndistortPoints(Mat distorted, Mat undistorted, Mat k, Mat d, Mat r, Mat p, TermCriteria criteria) { BEGIN_WRAP - cv::undistortPoints(*distorted.ptr, *undistorted.ptr, *k.ptr, *d.ptr, *r.ptr, *p.ptr, *criteria.ptr); + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); + cv::undistortPoints(*distorted.ptr, *undistorted.ptr, *k.ptr, *d.ptr, *r.ptr, *p.ptr, tc); END_WRAP } diff --git a/src/calib3d/calib3d.h b/src/calib3d/calib3d.h index 78548d6f..ffefde2a 100644 --- a/src/calib3d/calib3d.h +++ b/src/calib3d/calib3d.h @@ -17,7 +17,7 @@ extern "C" { #endif #include "core/core.h" - +#include // Calib CvStatus Fisheye_UndistortImage(Mat distorted, Mat undistorted, Mat k, Mat d); CvStatus Fisheye_UndistortImageWithParams(Mat distorted, Mat undistorted, Mat k, Mat d, Mat knew, Size size); diff --git a/src/core/constants.h b/src/core/constants.h index 7d4081d0..3671b953 100644 --- a/src/core/constants.h +++ b/src/core/constants.h @@ -3,8 +3,8 @@ Licensed: Apache 2.0 license. Copyright (c) 2024 Rainyl. */ -#ifndef OPENCV_DART_LIBRARY_ENUMS_H -#define OPENCV_DART_LIBRARY_ENUMS_H +#ifndef OCV_ENUMS_H +#define OCV_ENUMS_H /** the color conversion codes @see @ref imgproc_color_conversions @@ -2020,4 +2020,20 @@ enum CALIB_USE_EXTRINSIC_GUESS = (1 << 22) //!< for stereoCalibrate }; -#endif // OPENCV_DART_LIBRARY_ENUMS_H +/** @brief Variable types */ +enum { + VAR_NUMERICAL = 0, //!< same as VAR_ORDERED + VAR_ORDERED = 0, //!< ordered variables + VAR_CATEGORICAL = 1 //!< categorical variables +}; + +/** @brief %Error types */ +enum { TEST_ERROR = 0, TRAIN_ERROR = 1 }; + +/** @brief Sample types */ +enum { + ROW_SAMPLE = 0, //!< each training sample is a row of samples + COL_SAMPLE = 1 //!< each training sample occupies a column of samples +}; + +#endif // OCV_ENUMS_H diff --git a/src/core/core.cpp b/src/core/core.cpp index b245e4e2..b961de8c 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -1,6 +1,5 @@ #include "core.h" #include "lut.hpp" -#include #include CvStatus RotatedRect_Points(RotatedRect rect, VecPoint2f *pts) @@ -33,32 +32,6 @@ CvStatus RotatedRect_BoundingRect2f(RotatedRect rect, Rect2f *rval) END_WRAP } -CvStatus TermCriteria_New(int typ, int maxCount, double epsilon, TermCriteria *rval) -{ - BEGIN_WRAP - *rval = {new cv::TermCriteria(typ, maxCount, epsilon)}; - END_WRAP -} -CvStatus TermCriteria_Type(TermCriteria tc, int *rval) -{ - BEGIN_WRAP - *rval = tc.ptr->type; - END_WRAP -} -CvStatus TermCriteria_MaxCount(TermCriteria tc, int *rval) -{ - BEGIN_WRAP - *rval = tc.ptr->maxCount; - END_WRAP -} -CvStatus TermCriteria_Epsilon(TermCriteria tc, double *rval) -{ - BEGIN_WRAP - *rval = tc.ptr->epsilon; - END_WRAP -} -void TermCriteria_Close(TermCriteria *tc){CVD_FREE(tc)} - CvStatus Mat_New(Mat *rval) { BEGIN_WRAP @@ -1778,14 +1751,16 @@ CvStatus KMeans(Mat data, int k, Mat bestLabels, TermCriteria criteria, int atte double *rval) { BEGIN_WRAP - *rval = cv::kmeans(*data.ptr, k, *bestLabels.ptr, *criteria.ptr, attempts, flags, *centers.ptr); + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); + *rval = cv::kmeans(*data.ptr, k, *bestLabels.ptr, tc, attempts, flags, *centers.ptr); END_WRAP } CvStatus KMeansPoints(VecPoint2f pts, int k, Mat bestLabels, TermCriteria criteria, int attempts, int flags, Mat centers, double *rval) { BEGIN_WRAP - *rval = cv::kmeans(*pts.ptr, k, *bestLabels.ptr, *criteria.ptr, attempts, flags, *centers.ptr); + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); + *rval = cv::kmeans(*pts.ptr, k, *bestLabels.ptr, tc, attempts, flags, *centers.ptr); END_WRAP } CvStatus Rotate(Mat src, Mat dst, int rotateCode) diff --git a/src/core/core.h b/src/core/core.h index 6056061a..f9492115 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -92,7 +92,6 @@ extern "C" { CVD_TYPEDEF(cv::Mat, Mat) CVD_TYPEDEF(cv::_InputOutputArray, InputOutputArray) -CVD_TYPEDEF(cv::TermCriteria, TermCriteria) CVD_TYPEDEF(cv::RNG, RNG) CVD_TYPEDEF(std::vector, VecPoint) CVD_TYPEDEF(std::vector>, VecVecPoint) @@ -122,7 +121,6 @@ typedef unsigned short ushort; CVD_TYPEDEF(void, Mat) CVD_TYPEDEF(void, InputOutputArray) -CVD_TYPEDEF(void, TermCriteria) CVD_TYPEDEF(void, RNG) CVD_TYPEDEF(void, VecPoint) CVD_TYPEDEF(void, VecVecPoint) @@ -145,7 +143,6 @@ CVD_TYPEDEF(void, VecVecDMatch) CVD_TYPEDEF_PTR(Mat) CVD_TYPEDEF_PTR(InputOutputArray) -CVD_TYPEDEF_PTR(TermCriteria) CVD_TYPEDEF_PTR(RNG) // Wrapper for an individual cv::cvPoint @@ -405,12 +402,11 @@ CvStatus RotatedRect_BoundingRect2f(RotatedRect rect, Rect2f *rval); // internal use // VecPoint2f vecPointToVecPoint2f(VecPoint src); - -CvStatus TermCriteria_New(int typ, int maxCount, double epsilon, TermCriteria *rval); -CvStatus TermCriteria_Type(TermCriteria tc, int *rval); -CvStatus TermCriteria_MaxCount(TermCriteria tc, int *rval); -CvStatus TermCriteria_Epsilon(TermCriteria tc, double *rval); -void TermCriteria_Close(TermCriteria *tc); +typedef struct TermCriteria { + int type; + int maxCount; + double epsilon; +} TermCriteria; /** * @brief Create empty Mat diff --git a/src/features2d/features2d.h b/src/features2d/features2d.h index 28bb0115..ad631aac 100644 --- a/src/features2d/features2d.h +++ b/src/features2d/features2d.h @@ -15,7 +15,7 @@ extern "C" { #endif #include "core/core.h" - +#include #ifdef __cplusplus CVD_TYPEDEF(cv::Ptr, AKAZE) CVD_TYPEDEF(cv::Ptr, AgastFeatureDetector) diff --git a/src/imgproc/imgproc.cpp b/src/imgproc/imgproc.cpp index 7b2624c4..c6d7c1f8 100644 --- a/src/imgproc/imgproc.cpp +++ b/src/imgproc/imgproc.cpp @@ -7,7 +7,6 @@ */ #include "imgproc.h" -#include #include CvStatus ArcLength(VecPoint curve, bool is_closed, double *rval) @@ -303,9 +302,10 @@ CvStatus Canny(Mat src, Mat edges, double t1, double t2, int apertureSize, bool CvStatus CornerSubPix(Mat img, VecPoint2f corners, Size winSize, Size zeroZone, TermCriteria criteria) { BEGIN_WRAP + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); auto size = cv::Size(winSize.width, winSize.height); auto zone = cv::Size(zeroZone.width, zeroZone.height); - cv::cornerSubPix(*img.ptr, *corners.ptr, size, zone, *criteria.ptr); + cv::cornerSubPix(*img.ptr, *corners.ptr, size, zone, tc); // std::cout << *corners.ptr << std::endl; END_WRAP } diff --git a/src/ml/ann_mlp.cpp b/src/ml/ann_mlp.cpp new file mode 100644 index 00000000..964fec0c --- /dev/null +++ b/src/ml/ann_mlp.cpp @@ -0,0 +1,277 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "ann_mlp.h" +#include "opencv2/ml.hpp" + +// ANN_MLP +CvStatus ANN_MLP_Create(PtrANN_MLP *rval) +{ + BEGIN_WRAP + auto p = cv::ml::ANN_MLP::create(); + rval->ptr = new cv::Ptr(p); + END_WRAP +} + +void ANN_MLP_Close(PtrANN_MLP *self) +{ + self->ptr = nullptr; + CVD_FREE(self) +} + +CvStatus ANN_MLP_SetTrainMethod(PtrANN_MLP self, int method, double param1, double param2) +{ + BEGIN_WRAP + (*self.ptr)->setTrainMethod(method, param1, param2); + END_WRAP +} + +CvStatus ANN_MLP_GetTrainMethod(PtrANN_MLP self, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getTrainMethod(); + END_WRAP +} + +CvStatus ANN_MLP_SetActivationFunction(PtrANN_MLP self, int type, double param1, double param2) +{ + BEGIN_WRAP + (*self.ptr)->setActivationFunction(type, param1, param2); + END_WRAP +} + +CvStatus ANN_MLP_SetLayerSizes(PtrANN_MLP self, Mat _layer_sizes) +{ + BEGIN_WRAP + (*self.ptr)->setLayerSizes(*_layer_sizes.ptr); + END_WRAP +} + +CvStatus ANN_MLP_GetLayerSizes(PtrANN_MLP self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getLayerSizes())}; + END_WRAP +} + +CvStatus ANN_MLP_SetTermCriteria(PtrANN_MLP self, TermCriteria val) +{ + BEGIN_WRAP + auto tc = cv::TermCriteria(val.type, val.maxCount, val.epsilon); + (*self.ptr)->setTermCriteria(tc); + END_WRAP +} + +CvStatus ANN_MLP_GetTermCriteria(PtrANN_MLP self, TermCriteria *rval) +{ + BEGIN_WRAP + auto tc = (*self.ptr)->getTermCriteria(); + *rval = {tc.type, tc.maxCount, tc.epsilon}; + END_WRAP +} + +CvStatus ANN_MLP_SetBackpropWeightScale(PtrANN_MLP self, double val) +{ + BEGIN_WRAP + (*self.ptr)->setBackpropWeightScale(val); + END_WRAP +} + +CvStatus ANN_MLP_GetBackpropWeightScale(PtrANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getBackpropWeightScale(); + END_WRAP +} + +CvStatus ANN_MLP_SetBackpropMomentumScale(PtrANN_MLP self, double val) +{ + BEGIN_WRAP + (*self.ptr)->setBackpropMomentumScale(val); + END_WRAP +} + +CvStatus ANN_MLP_GetBackpropMomentumScale(PtrANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getBackpropMomentumScale(); + END_WRAP +} + +CvStatus ANN_MLP_SetRpropDW0(PtrANN_MLP self, double val) +{ + BEGIN_WRAP + (*self.ptr)->setRpropDW0(val); + END_WRAP +} + +CvStatus ANN_MLP_GetRpropDW0(PtrANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getRpropDW0(); + END_WRAP +} + +CvStatus ANN_MLP_SetRpropDWPlus(PtrANN_MLP self, double val) +{ + BEGIN_WRAP + (*self.ptr)->setRpropDWPlus(val); + END_WRAP +} + +CvStatus ANN_MLP_GetRpropDWPlus(PtrANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getRpropDWPlus(); + END_WRAP +} + +CvStatus ANN_MLP_SetRpropDWMinus(PtrANN_MLP self, double val) +{ + BEGIN_WRAP + (*self.ptr)->setRpropDWMinus(val); + END_WRAP +} + +CvStatus ANN_MLP_GetRpropDWMinus(PtrANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getRpropDWMinus(); + END_WRAP +} + +CvStatus ANN_MLP_SetRpropDWMin(PtrANN_MLP self, double val) +{ + BEGIN_WRAP + (*self.ptr)->setRpropDWMin(val); + END_WRAP +} + +CvStatus ANN_MLP_GetRpropDWMin(PtrANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getRpropDWMin(); + END_WRAP +} + +CvStatus ANN_MLP_SetRpropDWMax(PtrANN_MLP self, double val) +{ + BEGIN_WRAP + (*self.ptr)->setRpropDWMax(val); + END_WRAP +} + +CvStatus ANN_MLP_GetRpropDWMax(PtrANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getRpropDWMax(); + END_WRAP +} + +CvStatus ANN_MLP_SetAnnealInitialT(PtrANN_MLP self, double val) +{ + BEGIN_WRAP + (*self.ptr)->setAnnealInitialT(val); + END_WRAP +} + +CvStatus ANN_MLP_GetAnnealInitialT(PtrANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getAnnealInitialT(); + END_WRAP +} + +CvStatus ANN_MLP_SetAnnealFinalT(PtrANN_MLP self, double val) +{ + BEGIN_WRAP + (*self.ptr)->setAnnealFinalT(val); + END_WRAP +} + +CvStatus ANN_MLP_GetAnnealFinalT(PtrANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getAnnealFinalT(); + END_WRAP +} + +CvStatus ANN_MLP_SetAnnealCoolingRatio(PtrANN_MLP self, double val) +{ + BEGIN_WRAP + (*self.ptr)->setAnnealCoolingRatio(val); + END_WRAP +} + +CvStatus ANN_MLP_GetAnnealCoolingRatio(PtrANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getAnnealCoolingRatio(); + END_WRAP +} + +CvStatus ANN_MLP_SetAnnealItePerStep(PtrANN_MLP self, int val) +{ + BEGIN_WRAP + (*self.ptr)->setAnnealItePerStep(val); + END_WRAP +} + +CvStatus ANN_MLP_GetAnnealItePerStep(PtrANN_MLP self, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getAnnealItePerStep(); + END_WRAP +} + +CvStatus ANN_MLP_Predict(PtrANN_MLP self, Mat samples, Mat results, int flags, float *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->predict(*samples.ptr, *results.ptr, flags); + END_WRAP +} + +CvStatus ANN_MLP_Train(PtrANN_MLP self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->train(*trainData.ptr, flags); + END_WRAP +} + +CvStatus ANN_MLP_Train_1(PtrANN_MLP self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->train(*samples.ptr, layout, *responses.ptr); + END_WRAP +} + +CvStatus ANN_MLP_Clear(PtrANN_MLP self) +{ + BEGIN_WRAP + (*self.ptr)->clear(); + END_WRAP +} + +CvStatus ANN_MLP_Save(PtrANN_MLP self, char *filename) +{ + BEGIN_WRAP + (*self.ptr)->save(filename); + END_WRAP +} + +CvStatus ANN_MLP_Load(char *filepath, PtrANN_MLP *rval) +{ + BEGIN_WRAP + cv::Ptr p = cv::ml::ANN_MLP::load(filepath); + (*rval->ptr) = p; + END_WRAP +} + +CvStatus ANN_MLP_LoadFromString( const char *strModel, const char *objname, PtrANN_MLP *rval) +{ + BEGIN_WRAP + (*rval->ptr) = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/ann_mlp.h b/src/ml/ann_mlp.h new file mode 100644 index 00000000..6aca3459 --- /dev/null +++ b/src/ml/ann_mlp.h @@ -0,0 +1,74 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_ANN_MLP_H +#define CVD_ML_ANN_MLP_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrANN_MLP) +// CVD_TYPEDEF(cv::ml::ANN_MLP, ANN_MLP) +#else +CVD_TYPEDEF(void *, PtrANN_MLP) +// CVD_TYPEDEF(void, ANN_MLP) +#endif + +CVD_TYPEDEF_PTR(PtrANN_MLP) +// CVD_TYPEDEF_PTR(ANN_MLP) + +// ANN_MLP +CvStatus ANN_MLP_Create(PtrANN_MLP *rval); +void ANN_MLP_Close(PtrANN_MLP *self); +// CvStatus ANN_MLP_Get(PtrANN_MLP self, ANN_MLP *rval); + +CvStatus ANN_MLP_SetTrainMethod(PtrANN_MLP self, int method, double param1, double param2); +CvStatus ANN_MLP_GetTrainMethod(PtrANN_MLP self, int *rval); +CvStatus ANN_MLP_SetActivationFunction(PtrANN_MLP self, int type, double param1, double param2); +CvStatus ANN_MLP_SetLayerSizes(PtrANN_MLP self, Mat _layer_sizes); +CvStatus ANN_MLP_GetLayerSizes(PtrANN_MLP self, Mat *rval); +CvStatus ANN_MLP_SetTermCriteria(PtrANN_MLP self, TermCriteria val); +CvStatus ANN_MLP_GetTermCriteria(PtrANN_MLP self, TermCriteria *rval); +CvStatus ANN_MLP_SetBackpropWeightScale(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetBackpropWeightScale(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetBackpropMomentumScale(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetBackpropMomentumScale(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDW0(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDW0(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDWPlus(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDWPlus(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDWMinus(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDWMinus(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDWMin(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDWMin(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDWMax(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDWMax(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetAnnealInitialT(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetAnnealInitialT(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetAnnealFinalT(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetAnnealFinalT(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetAnnealCoolingRatio(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetAnnealCoolingRatio(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetAnnealItePerStep(PtrANN_MLP self, int val); +CvStatus ANN_MLP_GetAnnealItePerStep(PtrANN_MLP self, int *rval); +CvStatus ANN_MLP_Predict(PtrANN_MLP self, Mat samples, Mat results, int flags, float *rval); +CvStatus ANN_MLP_Train(PtrANN_MLP self, PtrTrainData trainData, int flags, bool *rval); +CvStatus ANN_MLP_Train_1(PtrANN_MLP self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus ANN_MLP_Clear(PtrANN_MLP self); +CvStatus ANN_MLP_Save(PtrANN_MLP self, char *filename); +CvStatus ANN_MLP_Load(char *filepath, PtrANN_MLP *rval); +CvStatus ANN_MLP_LoadFromString( const char *strModel, const char *objname, PtrANN_MLP *rval); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/boost.cpp b/src/ml/boost.cpp new file mode 100644 index 00000000..a42dfb2e --- /dev/null +++ b/src/ml/boost.cpp @@ -0,0 +1,118 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "boost.h" + +// Boost +CvStatus Boost_Create(PtrBoost *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void Boost_Close(PtrBoost *self) +{ + *self->ptr = nullptr; + CVD_FREE(self) +} + +CvStatus Boost_Get(PtrBoost self, Boost *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus Boost_GetBoostType(Boost self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getBoostType(); + END_WRAP +} + +CvStatus Boost_SetBoostType(Boost self, int val) +{ + BEGIN_WRAP + self.ptr->setBoostType(val); + END_WRAP +} + +CvStatus Boost_GetWeakCount(Boost self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getWeakCount(); + END_WRAP +} + +CvStatus Boost_SetWeakCount(Boost self, int val) +{ + BEGIN_WRAP + self.ptr->setWeakCount(val); + END_WRAP +} + +CvStatus Boost_GetWeightTrimRate(Boost self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getWeightTrimRate(); + END_WRAP +} + +CvStatus Boost_SetWeightTrimRate(Boost self, double val) +{ + BEGIN_WRAP + self.ptr->setWeightTrimRate(val); + END_WRAP +} + +CvStatus Boost_Predict(Boost self, Mat samples, Mat results, int flags, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predict(*samples.ptr, *results.ptr, flags); + END_WRAP +} + +CvStatus Boost_Train(Boost self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*trainData.ptr, flags); + END_WRAP +} + +CvStatus Boost_Train_1(Boost self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); + END_WRAP +} + +CvStatus Boost_Clear(Boost self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus Boost_Save(Boost self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus Boost_Load(Boost self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::Boost::load(filepath); + END_WRAP +} + +CvStatus Boost_LoadFromString(Boost self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/boost.h b/src/ml/boost.h new file mode 100644 index 00000000..458d1542 --- /dev/null +++ b/src/ml/boost.h @@ -0,0 +1,52 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_BOOST_H +#define CVD_ML_BOOST_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrBoost) +CVD_TYPEDEF(cv::ml::Boost, Boost) +#else +CVD_TYPEDEF(void *, PtrBoost) +CVD_TYPEDEF(void, Boost) +#endif + +CVD_TYPEDEF_PTR(PtrBoost) +CVD_TYPEDEF_PTR(Boost) + +// Boost +CvStatus Boost_Create(PtrBoost *rval); +void Boost_Close(PtrBoost *self); +CvStatus Boost_Get(PtrBoost self, Boost *rval); + +CvStatus Boost_GetBoostType(Boost self, int *rval); +CvStatus Boost_SetBoostType(Boost self, int val); +CvStatus Boost_GetWeakCount(Boost self, int *rval); +CvStatus Boost_SetWeakCount(Boost self, int val); +CvStatus Boost_GetWeightTrimRate(Boost self, double *rval); +CvStatus Boost_SetWeightTrimRate(Boost self, double val); +CvStatus Boost_Predict(Boost self, Mat samples, Mat results, int flags, float *rval); +CvStatus Boost_Train(Boost self, PtrTrainData trainData, int flags, bool *rval); +CvStatus Boost_Train_1(Boost self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus Boost_Clear(Boost self); +CvStatus Boost_Save(Boost self, char *filename); +CvStatus Boost_Load(Boost self, char *filepath); +CvStatus Boost_LoadFromString(Boost self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/dtrees.cpp b/src/ml/dtrees.cpp new file mode 100644 index 00000000..9e3761d0 --- /dev/null +++ b/src/ml/dtrees.cpp @@ -0,0 +1,202 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "dtrees.h" + +// DTrees +CvStatus DTrees_Create(PtrDTrees *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void DTrees_Close(PtrDTrees *self) +{ + *self->ptr = nullptr; + CVD_FREE(self) +} + +CvStatus DTrees_Get(PtrDTrees self, DTrees *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus DTrees_GetMaxCategories(DTrees self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getMaxCategories(); + END_WRAP +} + +CvStatus DTrees_SetMaxCategories(DTrees self, int val) +{ + BEGIN_WRAP + self.ptr->setMaxCategories(val); + END_WRAP +} + +CvStatus DTrees_GetMaxDepth(DTrees self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getMaxDepth(); + END_WRAP +} + +CvStatus DTrees_SetMaxDepth(DTrees self, int val) +{ + BEGIN_WRAP + self.ptr->setMaxDepth(val); + END_WRAP +} + +CvStatus DTrees_GetMinSampleCount(DTrees self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getMinSampleCount(); + END_WRAP +} + +CvStatus DTrees_SetMinSampleCount(DTrees self, int val) +{ + BEGIN_WRAP + self.ptr->setMinSampleCount(val); + END_WRAP +} + +CvStatus DTrees_GetCVFolds(DTrees self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getCVFolds(); + END_WRAP +} + +CvStatus DTrees_SetCVFolds(DTrees self, int val) +{ + BEGIN_WRAP + self.ptr->setCVFolds(val); + END_WRAP +} + +CvStatus DTrees_GetUseSurrogates(DTrees self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getUseSurrogates(); + END_WRAP +} + +CvStatus DTrees_SetUseSurrogates(DTrees self, bool val) +{ + BEGIN_WRAP + self.ptr->setUseSurrogates(val); + END_WRAP +} + +CvStatus DTrees_GetUse1SERule(DTrees self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getUse1SERule(); + END_WRAP +} + +CvStatus DTrees_SetUse1SERule(DTrees self, bool val) +{ + BEGIN_WRAP + self.ptr->setUse1SERule(val); + END_WRAP +} + +CvStatus DTrees_GetTruncatePrunedTree(DTrees self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getTruncatePrunedTree(); + END_WRAP +} + +CvStatus DTrees_SetTruncatePrunedTree(DTrees self, bool val) +{ + BEGIN_WRAP + self.ptr->setTruncatePrunedTree(val); + END_WRAP +} + +CvStatus DTrees_GetRegressionAccuracy(DTrees self, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getRegressionAccuracy(); + END_WRAP +} + +CvStatus DTrees_SetRegressionAccuracy(DTrees self, float val) +{ + BEGIN_WRAP + self.ptr->setRegressionAccuracy(val); + END_WRAP +} + +CvStatus DTrees_GetPriors(DTrees self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getPriors())}; + END_WRAP +} + +CvStatus DTrees_SetPriors(DTrees self, Mat val) +{ + BEGIN_WRAP + self.ptr->setPriors(*val.ptr); + END_WRAP +} + +CvStatus DTrees_Predict(DTrees self, Mat samples, Mat results, int flags, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predict(*samples.ptr, *results.ptr, flags); + END_WRAP +} + +CvStatus DTrees_Train(DTrees self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*trainData.ptr, flags); + END_WRAP +} + +CvStatus DTrees_Train_1(DTrees self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); + END_WRAP +} + +CvStatus DTrees_Clear(DTrees self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus DTrees_Save(DTrees self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus DTrees_Load(DTrees self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::DTrees::load(filepath); + END_WRAP +} + +CvStatus DTrees_LoadFromString(DTrees self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/dtrees.h b/src/ml/dtrees.h new file mode 100644 index 00000000..85b4b8d6 --- /dev/null +++ b/src/ml/dtrees.h @@ -0,0 +1,64 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_DTREES_H +#define CVD_ML_DTREES_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrDTrees) +CVD_TYPEDEF(cv::ml::DTrees, DTrees) +#else +CVD_TYPEDEF(void *, PtrDTrees) +CVD_TYPEDEF(void, DTrees) +#endif + +CVD_TYPEDEF_PTR(PtrDTrees) +CVD_TYPEDEF_PTR(DTrees) + +// DTrees +CvStatus DTrees_Create(PtrDTrees *rval); +void DTrees_Close(PtrDTrees *self); +CvStatus DTrees_Get(PtrDTrees self, DTrees *rval); + +CvStatus DTrees_GetMaxCategories(DTrees self, int *rval); +CvStatus DTrees_SetMaxCategories(DTrees self, int val); +CvStatus DTrees_GetMaxDepth(DTrees self, int *rval); +CvStatus DTrees_SetMaxDepth(DTrees self, int val); +CvStatus DTrees_GetMinSampleCount(DTrees self, int *rval); +CvStatus DTrees_SetMinSampleCount(DTrees self, int val); +CvStatus DTrees_GetCVFolds(DTrees self, int *rval); +CvStatus DTrees_SetCVFolds(DTrees self, int val); +CvStatus DTrees_GetUseSurrogates(DTrees self, bool *rval); +CvStatus DTrees_SetUseSurrogates(DTrees self, bool val); +CvStatus DTrees_GetUse1SERule(DTrees self, bool *rval); +CvStatus DTrees_SetUse1SERule(DTrees self, bool val); +CvStatus DTrees_GetTruncatePrunedTree(DTrees self, bool *rval); +CvStatus DTrees_SetTruncatePrunedTree(DTrees self, bool val); +CvStatus DTrees_GetRegressionAccuracy(DTrees self, float *rval); +CvStatus DTrees_SetRegressionAccuracy(DTrees self, float val); +CvStatus DTrees_GetPriors(DTrees self, Mat *rval); +CvStatus DTrees_SetPriors(DTrees self, Mat val); +CvStatus DTrees_Predict(DTrees self, Mat samples, Mat results, int flags, float *rval); +CvStatus DTrees_Train(DTrees self, PtrTrainData trainData, int flags, bool *rval); +CvStatus DTrees_Train_1(DTrees self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus DTrees_Clear(DTrees self); +CvStatus DTrees_Save(DTrees self, char *filename); +CvStatus DTrees_Load(DTrees self, char *filepath); +CvStatus DTrees_LoadFromString(DTrees self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/em.cpp b/src/ml/em.cpp new file mode 100644 index 00000000..acf7fec9 --- /dev/null +++ b/src/ml/em.cpp @@ -0,0 +1,137 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "em.h" + +// EM +CvStatus EM_Create(PtrEM *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void EM_Close(PtrEM *self) +{ + *self->ptr = nullptr; + CVD_FREE(self) +} + +CvStatus EM_Get(PtrEM self, EM *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus EM_GetClustersNumber(EM self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getClustersNumber(); + END_WRAP +} + +CvStatus EM_SetClustersNumber(EM self, int val) +{ + BEGIN_WRAP + self.ptr->setClustersNumber(val); + END_WRAP +} + +CvStatus EM_GetCovarianceMatrixType(EM self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getCovarianceMatrixType(); + END_WRAP +} + +CvStatus EM_SetCovarianceMatrixType(EM self, int val) +{ + BEGIN_WRAP + self.ptr->setCovarianceMatrixType(val); + END_WRAP +} + +CvStatus EM_GetTermCriteria(EM self, TermCriteria *rval) +{ + BEGIN_WRAP + auto tc = self.ptr->getTermCriteria(); + *rval = {tc.type, tc.maxCount, tc.epsilon}; + END_WRAP +} + +CvStatus EM_SetTermCriteria(EM self, TermCriteria val) +{ + BEGIN_WRAP + auto tc = cv::TermCriteria(val.type, val.maxCount, val.epsilon); + self.ptr->setTermCriteria(tc); + END_WRAP +} + +CvStatus EM_Predict(EM self, Mat samples, Mat results, int flags, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predict(*samples.ptr, *results.ptr, flags); + END_WRAP +} + +CvStatus EM_Predict2(EM self, Mat sample, Mat probs, Vec2d *rval) +{ + BEGIN_WRAP + auto r = self.ptr->predict2(*sample.ptr, *probs.ptr); + *rval = {r.val[0], r.val[1]}; + END_WRAP +} + +CvStatus EM_TrainEM(EM self, Mat samples, Mat logLikelihoods, Mat labels, Mat probs, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->trainEM(*samples.ptr, *logLikelihoods.ptr, *labels.ptr, *probs.ptr); + END_WRAP +} + +CvStatus EM_TrainE(EM self, Mat samples, Mat means0, Mat covs0, Mat weights0, Mat logLikelihoods, Mat labels, + Mat probs, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->trainE(*samples.ptr, *means0.ptr, *covs0.ptr, *weights0.ptr, *logLikelihoods.ptr, + *labels.ptr, *probs.ptr); + END_WRAP +} + +CvStatus EM_TrainM(EM self, Mat samples, Mat probs0, Mat logLikelihoods, Mat labels, Mat probs, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->trainM(*samples.ptr, *probs0.ptr, *logLikelihoods.ptr, *labels.ptr, *probs.ptr); + END_WRAP +} + +CvStatus EM_Clear(EM self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus EM_Save(EM self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus EM_Load(EM self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::EM::load(filepath); + END_WRAP +} + +CvStatus EM_LoadFromString(EM self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/em.h b/src/ml/em.h new file mode 100644 index 00000000..8a19bf04 --- /dev/null +++ b/src/ml/em.h @@ -0,0 +1,54 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_EM_H +#define CVD_ML_EM_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrEM) +CVD_TYPEDEF(cv::ml::EM, EM) +#else +CVD_TYPEDEF(void *, PtrEM) +CVD_TYPEDEF(void, EM) +#endif + +CVD_TYPEDEF_PTR(PtrEM) +CVD_TYPEDEF_PTR(EM) + +// EM +CvStatus EM_Create(PtrEM *rval); +void EM_Close(PtrEM *self); +CvStatus EM_Get(PtrEM self, EM *rval); + +CvStatus EM_GetClustersNumber(EM self, int *rval); +CvStatus EM_SetClustersNumber(EM self, int val); +CvStatus EM_GetCovarianceMatrixType(EM self, int *rval); +CvStatus EM_SetCovarianceMatrixType(EM self, int val); +CvStatus EM_GetTermCriteria(EM self, TermCriteria *rval); +CvStatus EM_SetTermCriteria(EM self, TermCriteria val); +CvStatus EM_Predict(EM self, Mat samples, Mat results, int flags, float *rval); +CvStatus EM_Predict2(EM self, Mat sample, Mat probs, Vec2d *rval); +CvStatus EM_TrainEM(EM self, Mat samples, Mat logLikelihoods, Mat labels, Mat probs, bool *rval); +CvStatus EM_TrainE(EM self, Mat samples, Mat means0, Mat covs0, Mat weights0, Mat logLikelihoods, Mat labels, Mat probs, bool *rval); +CvStatus EM_TrainM(EM self, Mat samples, Mat probs0, Mat logLikelihoods, Mat labels, Mat probs, bool *rval); +CvStatus EM_Clear(EM self); +CvStatus EM_Save(EM self, char *filename); +CvStatus EM_Load(EM self, char *filepath); +CvStatus EM_LoadFromString(EM self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/knearest.cpp b/src/ml/knearest.cpp new file mode 100644 index 00000000..476b48b8 --- /dev/null +++ b/src/ml/knearest.cpp @@ -0,0 +1,133 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "knearest.h" + +// KNearest +CvStatus KNearest_Create(PtrKNearest *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void KNearest_Close(PtrKNearest *self) +{ + *self->ptr = nullptr; + CVD_FREE(self) +} + +CvStatus KNearest_Get(PtrKNearest self, KNearest *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus KNearest_GetDefaultK(KNearest self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getDefaultK(); + END_WRAP +} + +CvStatus KNearest_SetDefaultK(KNearest self, int val) +{ + BEGIN_WRAP + self.ptr->setDefaultK(val); + END_WRAP +} + +CvStatus KNearest_GetIsClassifier(KNearest self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getIsClassifier(); + END_WRAP +} + +CvStatus KNearest_SetIsClassifier(KNearest self, bool val) +{ + BEGIN_WRAP + self.ptr->setIsClassifier(val); + END_WRAP +} + +CvStatus KNearest_GetEmax(KNearest self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getEmax(); + END_WRAP +} + +CvStatus KNearest_SetEmax(KNearest self, int val) +{ + BEGIN_WRAP + self.ptr->setEmax(val); + END_WRAP +} + +CvStatus KNearest_GetAlgorithmType(KNearest self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getAlgorithmType(); + END_WRAP +} + +CvStatus KNearest_SetAlgorithmType(KNearest self, int val) +{ + BEGIN_WRAP + self.ptr->setAlgorithmType(val); + END_WRAP +} + +CvStatus KNearest_FindNearest(KNearest self, Mat samples, int k, Mat results, Mat neighborResponses, Mat dist, + float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->findNearest(*samples.ptr, k, *results.ptr, *neighborResponses.ptr, *dist.ptr); + END_WRAP +} + +CvStatus KNearest_Train(KNearest self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*trainData.ptr, flags); + END_WRAP +} + +CvStatus KNearest_Train_1(KNearest self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); + END_WRAP +} + +CvStatus KNearest_Clear(KNearest self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus KNearest_Save(KNearest self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus KNearest_Load(KNearest self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::KNearest::load(filepath); + END_WRAP +} + +CvStatus KNearest_LoadFromString(KNearest self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/knearest.h b/src/ml/knearest.h new file mode 100644 index 00000000..652f61b9 --- /dev/null +++ b/src/ml/knearest.h @@ -0,0 +1,54 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_KNEAREST_H +#define CVD_ML_KNEAREST_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrKNearest) +CVD_TYPEDEF(cv::ml::KNearest, KNearest) +#else +CVD_TYPEDEF(void *, PtrKNearest) +CVD_TYPEDEF(void, KNearest) +#endif + +CVD_TYPEDEF_PTR(PtrKNearest) +CVD_TYPEDEF_PTR(KNearest) + +// KNearest +CvStatus KNearest_Create(PtrKNearest *rval); +void KNearest_Close(PtrKNearest *self); +CvStatus KNearest_Get(PtrKNearest self, KNearest *rval); + +CvStatus KNearest_GetDefaultK(KNearest self, int *rval); +CvStatus KNearest_SetDefaultK(KNearest self, int val); +CvStatus KNearest_GetIsClassifier(KNearest self, bool *rval); +CvStatus KNearest_SetIsClassifier(KNearest self, bool val); +CvStatus KNearest_GetEmax(KNearest self, int *rval); +CvStatus KNearest_SetEmax(KNearest self, int val); +CvStatus KNearest_GetAlgorithmType(KNearest self, int *rval); +CvStatus KNearest_SetAlgorithmType(KNearest self, int val); +CvStatus KNearest_FindNearest(KNearest self, Mat samples, int k, Mat results, Mat neighborResponses, Mat dist, float *rval); +CvStatus KNearest_Train(KNearest self, PtrTrainData trainData, int flags, bool *rval); +CvStatus KNearest_Train_1(KNearest self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus KNearest_Clear(KNearest self); +CvStatus KNearest_Save(KNearest self, char *filename); +CvStatus KNearest_Load(KNearest self, char *filepath); +CvStatus KNearest_LoadFromString(KNearest self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/logistic_regression.cpp b/src/ml/logistic_regression.cpp new file mode 100644 index 00000000..b8173415 --- /dev/null +++ b/src/ml/logistic_regression.cpp @@ -0,0 +1,170 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "logistic_regression.h" + +// LogisticRegression +CvStatus LogisticRegression_Create(PtrLogisticRegression *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void LogisticRegression_Close(PtrLogisticRegression *self) +{ + *self->ptr = nullptr; + CVD_FREE(self) +} + +CvStatus LogisticRegression_Get(PtrLogisticRegression self, LogisticRegression *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus LogisticRegression_GetLearningRate(LogisticRegression self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getLearningRate(); + END_WRAP +} + +CvStatus LogisticRegression_SetLearningRate(LogisticRegression self, double val) +{ + BEGIN_WRAP + self.ptr->setLearningRate(val); + END_WRAP +} + +CvStatus LogisticRegression_GetIterations(LogisticRegression self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getIterations(); + END_WRAP +} + +CvStatus LogisticRegression_SetIterations(LogisticRegression self, int val) +{ + BEGIN_WRAP + self.ptr->setIterations(val); + END_WRAP +} + +CvStatus LogisticRegression_GetRegularization(LogisticRegression self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getRegularization(); + END_WRAP +} + +CvStatus LogisticRegression_SetRegularization(LogisticRegression self, int val) +{ + BEGIN_WRAP + self.ptr->setRegularization(val); + END_WRAP +} + +CvStatus LogisticRegression_GetTrainMethod(LogisticRegression self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getTrainMethod(); + END_WRAP +} + +CvStatus LogisticRegression_SetTrainMethod(LogisticRegression self, int val) +{ + BEGIN_WRAP + self.ptr->setTrainMethod(val); + END_WRAP +} + +CvStatus LogisticRegression_GetMiniBatchSize(LogisticRegression self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getMiniBatchSize(); + END_WRAP +} + +CvStatus LogisticRegression_SetMiniBatchSize(LogisticRegression self, int val) +{ + BEGIN_WRAP + self.ptr->setMiniBatchSize(val); + END_WRAP +} + +CvStatus LogisticRegression_GetTermCriteria(LogisticRegression self, TermCriteria *rval) +{ + BEGIN_WRAP + auto tc = self.ptr->getTermCriteria(); + *rval = {tc.type, tc.maxCount, tc.epsilon}; + END_WRAP +} + +CvStatus LogisticRegression_SetTermCriteria(LogisticRegression self, TermCriteria val) +{ + BEGIN_WRAP + auto tc = cv::TermCriteria(val.type, val.maxCount, val.epsilon); + self.ptr->setTermCriteria(tc); + END_WRAP +} + +CvStatus LogisticRegression_Predict(LogisticRegression self, Mat samples, Mat results, int flags, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predict(*samples.ptr, *results.ptr, flags); + END_WRAP +} + +CvStatus LogisticRegression_Train(LogisticRegression self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*trainData.ptr, flags); + END_WRAP +} + +CvStatus LogisticRegression_Train_1(LogisticRegression self, Mat samples, int layout, Mat responses, + bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); + END_WRAP +} + +CvStatus LogisticRegression_Clear(LogisticRegression self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus LogisticRegression_GetLearntThetas(LogisticRegression self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->get_learnt_thetas())}; + END_WRAP +} + +CvStatus LogisticRegression_Save(LogisticRegression self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus LogisticRegression_Load(LogisticRegression self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::LogisticRegression::load(filepath); + END_WRAP +} + +CvStatus LogisticRegression_LoadFromString(LogisticRegression self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/logistic_regression.h b/src/ml/logistic_regression.h new file mode 100644 index 00000000..2059988a --- /dev/null +++ b/src/ml/logistic_regression.h @@ -0,0 +1,59 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_LOGISTIC_REGRESSION_H +#define CVD_ML_LOGISTIC_REGRESSION_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrLogisticRegression) +CVD_TYPEDEF(cv::ml::LogisticRegression, LogisticRegression) +#else +CVD_TYPEDEF(void *, PtrLogisticRegression) +CVD_TYPEDEF(void, LogisticRegression) +#endif + +CVD_TYPEDEF_PTR(PtrLogisticRegression) +CVD_TYPEDEF_PTR(LogisticRegression) + +// LogisticRegression +CvStatus LogisticRegression_Create(PtrLogisticRegression *rval); +void LogisticRegression_Close(PtrLogisticRegression *self); +CvStatus LogisticRegression_Get(PtrLogisticRegression self, LogisticRegression *rval); + +CvStatus LogisticRegression_GetLearningRate(LogisticRegression self, double *rval); +CvStatus LogisticRegression_SetLearningRate(LogisticRegression self, double val); +CvStatus LogisticRegression_GetIterations(LogisticRegression self, int *rval); +CvStatus LogisticRegression_SetIterations(LogisticRegression self, int val); +CvStatus LogisticRegression_GetRegularization(LogisticRegression self, int *rval); +CvStatus LogisticRegression_SetRegularization(LogisticRegression self, int val); +CvStatus LogisticRegression_GetTrainMethod(LogisticRegression self, int *rval); +CvStatus LogisticRegression_SetTrainMethod(LogisticRegression self, int val); +CvStatus LogisticRegression_GetMiniBatchSize(LogisticRegression self, int *rval); +CvStatus LogisticRegression_SetMiniBatchSize(LogisticRegression self, int val); +CvStatus LogisticRegression_GetTermCriteria(LogisticRegression self, TermCriteria *rval); +CvStatus LogisticRegression_SetTermCriteria(LogisticRegression self, TermCriteria val); +CvStatus LogisticRegression_Predict(LogisticRegression self, Mat samples, Mat results, int flags, float *rval); +CvStatus LogisticRegression_Train(LogisticRegression self, PtrTrainData trainData, int flags, bool *rval); +CvStatus LogisticRegression_Train_1(LogisticRegression self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus LogisticRegression_Clear(LogisticRegression self); +CvStatus LogisticRegression_GetLearntThetas(LogisticRegression self, Mat *rval); +CvStatus LogisticRegression_Save(LogisticRegression self, char *filename); +CvStatus LogisticRegression_Load(LogisticRegression self, char *filepath); +CvStatus LogisticRegression_LoadFromString(LogisticRegression self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/ml.cpp b/src/ml/ml.cpp new file mode 100644 index 00000000..a9451725 --- /dev/null +++ b/src/ml/ml.cpp @@ -0,0 +1 @@ +#include "ml.h" diff --git a/src/ml/ml.h b/src/ml/ml.h new file mode 100644 index 00000000..fd91ea81 --- /dev/null +++ b/src/ml/ml.h @@ -0,0 +1,29 @@ +/* + Created by Rainyl. + Licensed: Apache 2.0 license. Copyright (c) 2024 Rainyl. +*/ + +#ifndef CVD_ML_H +#define CVD_ML_H + +#include "core/core.h" +#include "core/exception.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus + +#else + +#endif + +// Wrappers + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/normal_bayes_classifier.cpp b/src/ml/normal_bayes_classifier.cpp new file mode 100644 index 00000000..d00a19f7 --- /dev/null +++ b/src/ml/normal_bayes_classifier.cpp @@ -0,0 +1,80 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "normal_bayes_classifier.h" + +// NormalBayesClassifier +CvStatus NormalBayesClassifier_Create(PtrNormalBayesClassifier *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void NormalBayesClassifier_Close(PtrNormalBayesClassifier *self) +{ + *self->ptr = nullptr; + CVD_FREE(self) +} + +CvStatus NormalBayesClassifier_Get(PtrNormalBayesClassifier self, NormalBayesClassifier *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus NormalBayesClassifier_PredictProb(NormalBayesClassifier self, Mat inputs, Mat outputs, + Mat outputProbs, int flags, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predictProb(*inputs.ptr, *outputs.ptr, *outputProbs.ptr, flags); + END_WRAP +} + +CvStatus NormalBayesClassifier_Train(NormalBayesClassifier self, PtrTrainData trainData, int flags, + bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*trainData.ptr, flags); + END_WRAP +} + +CvStatus NormalBayesClassifier_Train_1(NormalBayesClassifier self, Mat samples, int layout, Mat responses, + bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); + END_WRAP +} + +CvStatus NormalBayesClassifier_Clear(NormalBayesClassifier self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus NormalBayesClassifier_Save(NormalBayesClassifier self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus NormalBayesClassifier_Load(NormalBayesClassifier self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::NormalBayesClassifier::load(filepath); + END_WRAP +} + +CvStatus NormalBayesClassifier_LoadFromString(NormalBayesClassifier self, const char *strModel, + const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/normal_bayes_classifier.h b/src/ml/normal_bayes_classifier.h new file mode 100644 index 00000000..de91da60 --- /dev/null +++ b/src/ml/normal_bayes_classifier.h @@ -0,0 +1,46 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_NORMAL_BAYES_CLASSIFIER_H +#define CVD_ML_NORMAL_BAYES_CLASSIFIER_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrNormalBayesClassifier) +CVD_TYPEDEF(cv::ml::NormalBayesClassifier, NormalBayesClassifier) +#else +CVD_TYPEDEF(void *, PtrNormalBayesClassifier) +CVD_TYPEDEF(void, NormalBayesClassifier) +#endif + +CVD_TYPEDEF_PTR(PtrNormalBayesClassifier) +CVD_TYPEDEF_PTR(NormalBayesClassifier) + +// NormalBayesClassifier +CvStatus NormalBayesClassifier_Create(PtrNormalBayesClassifier *rval); +void NormalBayesClassifier_Close(PtrNormalBayesClassifier *self); +CvStatus NormalBayesClassifier_Get(PtrNormalBayesClassifier self, NormalBayesClassifier *rval); + +CvStatus NormalBayesClassifier_PredictProb(NormalBayesClassifier self, Mat inputs, Mat outputs, Mat outputProbs, int flags, float *rval); +CvStatus NormalBayesClassifier_Train(NormalBayesClassifier self, PtrTrainData trainData, int flags, bool *rval); +CvStatus NormalBayesClassifier_Train_1(NormalBayesClassifier self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus NormalBayesClassifier_Clear(NormalBayesClassifier self); +CvStatus NormalBayesClassifier_Save(NormalBayesClassifier self, char *filename); +CvStatus NormalBayesClassifier_Load(NormalBayesClassifier self, char *filepath); +CvStatus NormalBayesClassifier_LoadFromString(NormalBayesClassifier self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/rtrees.cpp b/src/ml/rtrees.cpp new file mode 100644 index 00000000..24e711c7 --- /dev/null +++ b/src/ml/rtrees.cpp @@ -0,0 +1,134 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "rtrees.h" + +// RTrees +CvStatus RTrees_Create(PtrRTrees *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void RTrees_Close(PtrRTrees *self) +{ + *self->ptr = nullptr; + CVD_FREE(self) +} + +CvStatus RTrees_Get(PtrRTrees self, RTrees *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus RTrees_GetCalculateVarImportance(RTrees self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getCalculateVarImportance(); + END_WRAP +} + +CvStatus RTrees_SetCalculateVarImportance(RTrees self, bool val) +{ + BEGIN_WRAP + self.ptr->setCalculateVarImportance(val); + END_WRAP +} + +CvStatus RTrees_GetActiveVarCount(RTrees self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getActiveVarCount(); + END_WRAP +} + +CvStatus RTrees_SetActiveVarCount(RTrees self, int val) +{ + BEGIN_WRAP + self.ptr->setActiveVarCount(val); + END_WRAP +} + +CvStatus RTrees_GetTermCriteria(RTrees self, TermCriteria *rval) +{ + BEGIN_WRAP + auto tc = self.ptr->getTermCriteria(); + *rval = {tc.type, tc.maxCount, tc.epsilon}; + END_WRAP +} + +CvStatus RTrees_SetTermCriteria(RTrees self, TermCriteria val) +{ + BEGIN_WRAP + auto tc = cv::TermCriteria(val.type, val.maxCount, val.epsilon); + self.ptr->setTermCriteria(tc); + END_WRAP +} + +CvStatus RTrees_GetVarImportance(RTrees self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getVarImportance())}; + END_WRAP +} + +CvStatus RTrees_GetVotes(RTrees self, Mat samples, Mat results, int flags) +{ + BEGIN_WRAP + self.ptr->getVotes(*samples.ptr, *results.ptr, flags); + END_WRAP +} + +CvStatus RTrees_GetOOBError(RTrees self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getOOBError(); + END_WRAP +} + +CvStatus RTrees_Train(RTrees self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*trainData.ptr, flags); + END_WRAP +} + +CvStatus RTrees_Train_1(RTrees self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); + END_WRAP +} + +CvStatus RTrees_Clear(RTrees self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus RTrees_Save(RTrees self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus RTrees_Load(RTrees self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::RTrees::load(filepath); + END_WRAP +} + +CvStatus RTrees_LoadFromString(RTrees self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/rtrees.h b/src/ml/rtrees.h new file mode 100644 index 00000000..73289a05 --- /dev/null +++ b/src/ml/rtrees.h @@ -0,0 +1,54 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_RTREES_H +#define CVD_ML_RTREES_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrRTrees) +CVD_TYPEDEF(cv::ml::RTrees, RTrees) +#else +CVD_TYPEDEF(void *, PtrRTrees) +CVD_TYPEDEF(void, RTrees) +#endif + +CVD_TYPEDEF_PTR(PtrRTrees) +CVD_TYPEDEF_PTR(RTrees) + +// RTrees +CvStatus RTrees_Create(PtrRTrees *rval); +void RTrees_Close(PtrRTrees *self); +CvStatus RTrees_Get(PtrRTrees self, RTrees *rval); + +CvStatus RTrees_GetCalculateVarImportance(RTrees self, bool *rval); +CvStatus RTrees_SetCalculateVarImportance(RTrees self, bool val); +CvStatus RTrees_GetActiveVarCount(RTrees self, int *rval); +CvStatus RTrees_SetActiveVarCount(RTrees self, int val); +CvStatus RTrees_GetTermCriteria(RTrees self, TermCriteria *rval); +CvStatus RTrees_SetTermCriteria(RTrees self, TermCriteria val); +CvStatus RTrees_GetVarImportance(RTrees self, Mat *rval); +CvStatus RTrees_GetVotes(RTrees self, Mat samples, Mat results, int flags); +CvStatus RTrees_GetOOBError(RTrees self, double *rval); +CvStatus RTrees_Train(RTrees self, PtrTrainData trainData, int flags, bool *rval); +CvStatus RTrees_Train_1(RTrees self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus RTrees_Clear(RTrees self); +CvStatus RTrees_Save(RTrees self, char *filename); +CvStatus RTrees_Load(RTrees self, char *filepath); +CvStatus RTrees_LoadFromString(RTrees self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/svm.cpp b/src/ml/svm.cpp new file mode 100644 index 00000000..e6b52f0f --- /dev/null +++ b/src/ml/svm.cpp @@ -0,0 +1,343 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "svm.h" + +// ParamGrid +CvStatus ParamGrid_Empty(PtrParamGrid *rval) +{ + BEGIN_WRAP + auto p = cv::ml::ParamGrid::create(); + *rval = {new cv::Ptr(p)}; + END_WRAP +} + +CvStatus ParamGrid_New(double minVal, double maxVal, double logstep, PtrParamGrid *rval) +{ + BEGIN_WRAP + auto p = cv::ml::ParamGrid::create(minVal, maxVal, logstep); + *rval = {new cv::Ptr(p)}; + END_WRAP +} + +CvStatus ParamGrid_getMinVal(PtrParamGrid self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->minVal; + END_WRAP +} + +CvStatus ParamGrid_GetMaxVal(PtrParamGrid self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->maxVal; + END_WRAP +} + +CvStatus ParamGrid_GetLogStep(PtrParamGrid self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->logStep; + END_WRAP +} + +void ParamGrid_Close(PtrParamGrid *self) +{ + *self->ptr = nullptr; + CVD_FREE(self) +} + +// SVM +CvStatus SVM_Create(PtrSVM *rval) +{ + BEGIN_WRAP + cv::Ptr p = cv::ml::SVM::create(); + *rval = {new cv::Ptr(p)}; + END_WRAP +} + +void SVM_Close(PtrSVM *self) +{ + *self->ptr = nullptr; + CVD_FREE(self) +} + +// CvStatus SVM_Get(PtrSVM self, SVM *rval) +// { +// BEGIN_WRAP +// *rval = {self.ptr->get()}; +// END_WRAP +// } + +CvStatus SVM_GetC(PtrSVM self, double *rval) +{ + BEGIN_WRAP + auto c = (*self.ptr)->getC(); + std::cout << c << std::endl; + *rval = (*self.ptr)->getC(); + END_WRAP +} + +CvStatus SVM_GetClassWeights(PtrSVM self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getClassWeights())}; + END_WRAP +} + +CvStatus SVM_GetCoef0(PtrSVM self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getCoef0(); + END_WRAP +} + +CvStatus SVM_GetDecisionFunction(PtrSVM self, int i, Mat alpha, Mat svidx, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getDecisionFunction(i, *alpha.ptr, *svidx.ptr); + END_WRAP +} + +CvStatus SVM_GetDegree(PtrSVM self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getDegree(); + END_WRAP +} + +CvStatus SVM_GetGamma(PtrSVM self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getGamma(); + END_WRAP +} + +CvStatus SVM_GetKernelType(PtrSVM self, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getKernelType(); + END_WRAP +} + +CvStatus SVM_GetNu(PtrSVM self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getNu(); + END_WRAP +} + +CvStatus SVM_GetP(PtrSVM self, double *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getP(); + END_WRAP +} + +CvStatus SVM_GetSupportVectors(PtrSVM self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getSupportVectors())}; + END_WRAP +} + +CvStatus SVM_GetTermCriteria(PtrSVM self, TermCriteria *rval) +{ + BEGIN_WRAP + auto tc = (*self.ptr)->getTermCriteria(); + *rval = {tc.type, tc.maxCount, tc.epsilon}; + END_WRAP +} + +CvStatus SVM_GetType(PtrSVM self, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getType(); + END_WRAP +} + +CvStatus SVM_GetUncompressedSupportVectors(PtrSVM self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getUncompressedSupportVectors())}; + END_WRAP +} + +CvStatus SVM_SetC(PtrSVM self, double val) +{ + BEGIN_WRAP(*self.ptr)->setC(val); + END_WRAP +} + +CvStatus SVM_SetClassWeights(PtrSVM self, Mat val) +{ + BEGIN_WRAP(*self.ptr)->setClassWeights(*val.ptr); + END_WRAP +} + +CvStatus SVM_SetCoef0(PtrSVM self, double val) +{ + BEGIN_WRAP(*self.ptr)->setCoef0(val); + END_WRAP +} + +CvStatus SVM_SetDegree(PtrSVM self, double val) +{ + BEGIN_WRAP(*self.ptr)->setDegree(val); + END_WRAP +} + +CvStatus SVM_SetGamma(PtrSVM self, double val) +{ + BEGIN_WRAP(*self.ptr)->setGamma(val); + END_WRAP +} + +CvStatus SVM_SetKernel(PtrSVM self, int kernelType) +{ + BEGIN_WRAP(*self.ptr)->setKernel(kernelType); + END_WRAP +} + +CvStatus SVM_SetNu(PtrSVM self, double val) +{ + BEGIN_WRAP(*self.ptr)->setNu(val); + END_WRAP +} + +CvStatus SVM_SetP(PtrSVM self, double val) +{ + BEGIN_WRAP(*self.ptr)->setP(val); + END_WRAP +} + +CvStatus SVM_SetTermCriteria(PtrSVM self, TermCriteria val) +{ + BEGIN_WRAP + auto tc = cv::TermCriteria(val.type, val.maxCount, val.epsilon); + (*self.ptr)->setTermCriteria(tc); + END_WRAP +} + +CvStatus SVM_SetType(PtrSVM self, int val) +{ + BEGIN_WRAP(*self.ptr)->setType(val); + END_WRAP +} + +CvStatus SVM_TrainAuto(PtrSVM self, PtrTrainData data, int kFold, PtrParamGrid Cgrid, PtrParamGrid gammaGrid, + PtrParamGrid pGrid, PtrParamGrid nuGrid, PtrParamGrid coeffGrid, + PtrParamGrid degreeGrid, bool balanced, bool *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->trainAuto(*data.ptr, kFold, **Cgrid.ptr, **gammaGrid.ptr, **pGrid.ptr, **nuGrid.ptr, + **coeffGrid.ptr, **degreeGrid.ptr, balanced); + END_WRAP +} + +CvStatus SVM_TrainAuto_1(PtrSVM self, Mat samples, int layout, Mat responses, int kFold, PtrParamGrid Cgrid, + PtrParamGrid gammaGrid, PtrParamGrid pGrid, PtrParamGrid nuGrid, + PtrParamGrid coeffGrid, PtrParamGrid degreeGrid, bool balanced, bool *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->trainAuto(*samples.ptr, layout, *responses.ptr, kFold, *Cgrid.ptr, *gammaGrid.ptr, + *pGrid.ptr, *nuGrid.ptr, *coeffGrid.ptr, *degreeGrid.ptr, balanced); + END_WRAP +} + +CvStatus SVM_CalcError(PtrSVM self, PtrTrainData data, bool test, Mat resp, float *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->calcError(*data.ptr, test, *resp.ptr); + END_WRAP +} + +CvStatus SVM_Empty(PtrSVM self, bool *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->empty(); + END_WRAP +} + +CvStatus SVM_GetVarCount(PtrSVM self, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getVarCount(); + END_WRAP +} + +CvStatus SVM_IsClassifier(PtrSVM self, bool *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->isClassifier(); + END_WRAP +} + +CvStatus SVM_IsTrained(PtrSVM self, bool *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->isTrained(); + END_WRAP +} + +CvStatus SVM_Predict(PtrSVM self, Mat samples, Mat results, int flags, float *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->predict(*samples.ptr, *results.ptr, flags); + END_WRAP +} + +CvStatus SVM_Train(PtrSVM self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->train(*trainData.ptr, flags); + END_WRAP +} + +CvStatus SVM_Train_1(PtrSVM self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->train(*samples.ptr, layout, *responses.ptr); + END_WRAP +} + +CvStatus SVM_Clear(PtrSVM self) +{ + BEGIN_WRAP(*self.ptr)->clear(); + END_WRAP +} + +CvStatus SVM_GetDefaultName(PtrSVM self, char *rval) +{ + BEGIN_WRAP + std::string name = (*self.ptr)->getDefaultName(); + std::strcpy(rval, name.c_str()); + END_WRAP +} + +CvStatus SVM_GetDefaultGridPtr(PtrSVM self, int param_id, PtrParamGrid *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr((*self.ptr)->getDefaultGridPtr(param_id))}; + END_WRAP +} + +CvStatus SVM_Save(PtrSVM self, char *filename) +{ + BEGIN_WRAP(*self.ptr)->save(filename); + END_WRAP +} + +CvStatus SVM_Load(char *filepath, PtrSVM *rval) +{ + BEGIN_WRAP(*rval->ptr) = cv::ml::SVM::load(filepath); + END_WRAP +} + +CvStatus SVM_LoadFromString(const char *strModel, const char *objname, PtrSVM *rval) +{ + BEGIN_WRAP(*rval->ptr) = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/svm.h b/src/ml/svm.h new file mode 100644 index 00000000..3d54c988 --- /dev/null +++ b/src/ml/svm.h @@ -0,0 +1,91 @@ +/* + Created by Rainyl. + Licensed: Apache 2.0 license. Copyright (c) 2024 Rainyl. +*/ + +#ifndef CVD_ML_SVM_H +#define CVD_ML_SVM_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +// https://docs.opencv.org/4.x/d1/d2d/classcv_1_1ml_1_1SVM.html +CVD_TYPEDEF(cv::Ptr, PtrSVM) +CVD_TYPEDEF(cv::Ptr, PtrParamGrid) +#else +CVD_TYPEDEF(void *, PtrSVM) +CVD_TYPEDEF(void *, PtrParamGrid) +#endif + +CVD_TYPEDEF_PTR(PtrSVM) +CVD_TYPEDEF_PTR(PtrParamGrid) + +// ParamGrid +CvStatus ParamGrid_Empty(PtrParamGrid *rval); +CvStatus ParamGrid_New(double minVal, double maxVal, double logstep, PtrParamGrid *rval); +CvStatus ParamGrid_getMinVal(PtrParamGrid self, double *rval); +CvStatus ParamGrid_GetMaxVal(PtrParamGrid self, double *rval); +CvStatus ParamGrid_GetLogStep(PtrParamGrid self, double *rval); +void ParamGrid_Close(PtrParamGrid *self); + +// SVM +CvStatus SVM_Create(PtrSVM *rval); +void SVM_Close(PtrSVM *self); + +CvStatus SVM_GetC(PtrSVM self, double *rval); +CvStatus SVM_GetClassWeights(PtrSVM self, Mat *rval); +CvStatus SVM_GetCoef0(PtrSVM self, double *rval); +CvStatus SVM_GetDecisionFunction(PtrSVM self, int i, Mat alpha, Mat svidx, double *rval); +CvStatus SVM_GetDegree(PtrSVM self, double *rval); +CvStatus SVM_GetGamma(PtrSVM self, double *rval); +CvStatus SVM_GetKernelType(PtrSVM self, int *rval); +CvStatus SVM_GetNu(PtrSVM self, double *rval); +CvStatus SVM_GetP(PtrSVM self, double *rval); +CvStatus SVM_GetSupportVectors(PtrSVM self, Mat *rval); +CvStatus SVM_GetTermCriteria(PtrSVM self, TermCriteria *rval); +CvStatus SVM_GetType(PtrSVM self, int *rval); +CvStatus SVM_GetUncompressedSupportVectors(PtrSVM self, Mat *rval); +CvStatus SVM_SetC(PtrSVM self, double val); +CvStatus SVM_SetClassWeights(PtrSVM self, Mat val); +CvStatus SVM_SetCoef0(PtrSVM self, double val); +// CvStatus SVM_SetCustomKernel(PtrSVM self, ); TODO +CvStatus SVM_SetDegree(PtrSVM self, double val); +CvStatus SVM_SetGamma(PtrSVM self, double val); +CvStatus SVM_SetKernel(PtrSVM self, int kernelType); +CvStatus SVM_SetNu(PtrSVM self, double val); +CvStatus SVM_SetP(PtrSVM self, double val); +CvStatus SVM_SetTermCriteria(PtrSVM self, TermCriteria val); +CvStatus SVM_SetType(PtrSVM self, int val); +CvStatus SVM_TrainAuto(PtrSVM self, PtrTrainData data, int kFold, PtrParamGrid Cgrid, PtrParamGrid gammaGrid, + PtrParamGrid pGrid, PtrParamGrid nuGrid, PtrParamGrid coeffGrid, + PtrParamGrid degreeGrid, bool balanced, bool *rval); +CvStatus SVM_TrainAuto_1(PtrSVM self, Mat samples, int layout, Mat responses, int kFold, PtrParamGrid Cgrid, + PtrParamGrid gammaGrid, PtrParamGrid pGrid, PtrParamGrid nuGrid, + PtrParamGrid coeffGrid, PtrParamGrid degreeGrid, bool balanced, bool *rval); +CvStatus SVM_CalcError(PtrSVM self, PtrTrainData data, bool test, Mat resp, float *rval); +CvStatus SVM_Empty(PtrSVM self, bool *rval); +CvStatus SVM_GetVarCount(PtrSVM self, int *rval); +CvStatus SVM_IsClassifier(PtrSVM self, bool *rval); +CvStatus SVM_IsTrained(PtrSVM self, bool *rval); +CvStatus SVM_Predict(PtrSVM self, Mat samples, Mat results, int flags, float *rval); +CvStatus SVM_Train(PtrSVM self, PtrTrainData trainData, int flags, bool *rval); +CvStatus SVM_Train_1(PtrSVM self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus SVM_Clear(PtrSVM self); +CvStatus SVM_GetDefaultName(PtrSVM self, char *rval); +CvStatus SVM_GetDefaultGridPtr(PtrSVM self, int param_id, PtrParamGrid *rval); +CvStatus SVM_Save(PtrSVM self, char *filename); +CvStatus SVM_Load(char *filepath, PtrSVM *rval); +CvStatus SVM_LoadFromString(const char *strModel, const char *objname, PtrSVM *rval); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/svmsgd.cpp b/src/ml/svmsgd.cpp new file mode 100644 index 00000000..b1fd5965 --- /dev/null +++ b/src/ml/svmsgd.cpp @@ -0,0 +1,176 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "svmsgd.h" + +// SVMSGD +CvStatus SVMSGD_Create(PtrSVMSGD *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void SVMSGD_Close(PtrSVMSGD *self) +{ + *self->ptr = nullptr; + CVD_FREE(self) +} + +CvStatus SVMSGD_Get(PtrSVMSGD self, SVMSGD *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus SVMSGD_SetOptimalParameters(SVMSGD self, int svmsgdType, int marginType) +{ + BEGIN_WRAP + self.ptr->setOptimalParameters(svmsgdType, marginType); + END_WRAP +} + +CvStatus SVMSGD_GetWeights(SVMSGD self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getWeights())}; + END_WRAP +} + +CvStatus SVMSGD_GetShift(SVMSGD self, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getShift(); + END_WRAP +} + +CvStatus SVMSGD_GetSvmsgdType(SVMSGD self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getSvmsgdType(); + END_WRAP +} + +CvStatus SVMSGD_SetSvmsgdType(SVMSGD self, int svmsgdType) +{ + BEGIN_WRAP + self.ptr->setSvmsgdType(svmsgdType); + END_WRAP +} + +CvStatus SVMSGD_GetMarginType(SVMSGD self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getMarginType(); + END_WRAP +} + +CvStatus SVMSGD_SetMarginType(SVMSGD self, int marginType) +{ + BEGIN_WRAP + self.ptr->setMarginType(marginType); + END_WRAP +} + +CvStatus SVMSGD_GetMarginRegularization(SVMSGD self, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getMarginRegularization(); + END_WRAP +} + +CvStatus SVMSGD_SetMarginRegularization(SVMSGD self, float marginRegularization) +{ + BEGIN_WRAP + self.ptr->setMarginRegularization(marginRegularization); + END_WRAP +} + +CvStatus SVMSGD_GetInitialStepSize(SVMSGD self, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getInitialStepSize(); + END_WRAP +} + +CvStatus SVMSGD_SetInitialStepSize(SVMSGD self, float InitialStepSize) +{ + BEGIN_WRAP + self.ptr->setInitialStepSize(InitialStepSize); + END_WRAP +} + +CvStatus SVMSGD_GetStepDecreasingPower(SVMSGD self, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getStepDecreasingPower(); + END_WRAP +} + +CvStatus SVMSGD_SetStepDecreasingPower(SVMSGD self, float stepDecreasingPower) +{ + BEGIN_WRAP + self.ptr->setStepDecreasingPower(stepDecreasingPower); + END_WRAP +} + +CvStatus SVMSGD_GetTermCriteria(SVMSGD self, TermCriteria *rval) +{ + BEGIN_WRAP + auto tc = self.ptr->getTermCriteria(); + *rval = {tc.type, tc.maxCount, tc.epsilon}; + END_WRAP +} + +CvStatus SVMSGD_SetTermCriteria(SVMSGD self, TermCriteria val) +{ + BEGIN_WRAP + auto tc = cv::TermCriteria(val.type, val.maxCount, val.epsilon); + self.ptr->setTermCriteria(tc); + END_WRAP +} + +CvStatus SVMSGD_Train(SVMSGD self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*trainData.ptr, flags); + END_WRAP +} + +CvStatus SVMSGD_Train_1(SVMSGD self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); + END_WRAP +} + +CvStatus SVMSGD_Clear(SVMSGD self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus SVMSGD_Save(SVMSGD self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus SVMSGD_Load(SVMSGD self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::SVMSGD::load(filepath); + END_WRAP +} + +CvStatus SVMSGD_LoadFromString(SVMSGD self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/svmsgd.h b/src/ml/svmsgd.h new file mode 100644 index 00000000..64526334 --- /dev/null +++ b/src/ml/svmsgd.h @@ -0,0 +1,60 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_SVMSGD_H +#define CVD_ML_SVMSGD_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrSVMSGD) +CVD_TYPEDEF(cv::ml::SVMSGD, SVMSGD) +#else +CVD_TYPEDEF(void *, PtrSVMSGD) +CVD_TYPEDEF(void, SVMSGD) +#endif + +CVD_TYPEDEF_PTR(PtrSVMSGD) +CVD_TYPEDEF_PTR(SVMSGD) + +// SVMSGD +CvStatus SVMSGD_Create(PtrSVMSGD *rval); +void SVMSGD_Close(PtrSVMSGD *self); +CvStatus SVMSGD_Get(PtrSVMSGD self, SVMSGD *rval); + +CvStatus SVMSGD_SetOptimalParameters(SVMSGD self, int svmsgdType, int marginType); +CvStatus SVMSGD_GetWeights(SVMSGD self, Mat *rval); +CvStatus SVMSGD_GetShift(SVMSGD self, float *rval); +CvStatus SVMSGD_GetSvmsgdType(SVMSGD self, int *rval); +CvStatus SVMSGD_SetSvmsgdType(SVMSGD self, int svmsgdType); +CvStatus SVMSGD_GetMarginType(SVMSGD self, int *rval); +CvStatus SVMSGD_SetMarginType(SVMSGD self, int marginType); +CvStatus SVMSGD_GetMarginRegularization(SVMSGD self, float *rval); +CvStatus SVMSGD_SetMarginRegularization(SVMSGD self, float marginRegularization); +CvStatus SVMSGD_GetInitialStepSize(SVMSGD self, float *rval); +CvStatus SVMSGD_SetInitialStepSize(SVMSGD self, float InitialStepSize); +CvStatus SVMSGD_GetStepDecreasingPower(SVMSGD self, float *rval); +CvStatus SVMSGD_SetStepDecreasingPower(SVMSGD self, float stepDecreasingPower); +CvStatus SVMSGD_GetTermCriteria(SVMSGD self, TermCriteria *rval); +CvStatus SVMSGD_SetTermCriteria(SVMSGD self, TermCriteria val); +CvStatus SVMSGD_Train(SVMSGD self, PtrTrainData trainData, int flags, bool *rval); +CvStatus SVMSGD_Train_1(SVMSGD self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus SVMSGD_Clear(SVMSGD self); +CvStatus SVMSGD_Save(SVMSGD self, char *filename); +CvStatus SVMSGD_Load(SVMSGD self, char *filepath); +CvStatus SVMSGD_LoadFromString(SVMSGD self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/train_data.cpp b/src/ml/train_data.cpp new file mode 100644 index 00000000..b5ae862e --- /dev/null +++ b/src/ml/train_data.cpp @@ -0,0 +1,294 @@ +#include "train_data.h" +#include "core/core.h" +#include + +CvStatus TrainData_Create(Mat samples, int layout, Mat responses, Mat varIdx, Mat sampleIdx, + Mat sampleWeights, Mat varType, PtrTrainData *rval) +{ + BEGIN_WRAP + auto p = cv::ml::TrainData::create(*samples.ptr, layout, *responses.ptr, *varIdx.ptr, *sampleIdx.ptr, + *sampleWeights.ptr, *varType.ptr); + *rval = {new cv::Ptr(p)}; + END_WRAP +} +CvStatus TrainData_LoadFromCSV(char *filename, int headerLineCount, int responseStartIdx, int responseEndIdx, + char *varTypeSpec, char delimiter, char missch, PtrTrainData *rval) +{ + BEGIN_WRAP + auto p = cv::ml::TrainData::loadFromCSV(filename, headerLineCount, responseStartIdx, responseEndIdx, + varTypeSpec, delimiter, missch); + *rval = {new cv::Ptr(p)}; + END_WRAP +} +void TrainData_Close(PtrTrainData *self) +{ + *self->ptr = nullptr; + CVD_FREE(self) +} + +CvStatus TrainData_Get(PtrTrainData *self, TrainData *rval) +{ + BEGIN_WRAP + *rval = {self->ptr->get()}; + END_WRAP +} + +CvStatus TrainData_GetSubMatrix(Mat matrix, Mat idx, int layout, Mat *rval) +{ + BEGIN_WRAP + auto p = cv::ml::TrainData::getSubMatrix(*matrix.ptr, *idx.ptr, layout); + *rval = {new cv::Mat(p)}; + END_WRAP +} +CvStatus TrainData_GetSubVector(Mat vec, Mat idx, Mat *rval) +{ + BEGIN_WRAP + auto p = cv::ml::TrainData::getSubVector(*vec.ptr, *idx.ptr); + *rval = {new cv::Mat(p)}; + END_WRAP +} +CvStatus TrainData_MissingValue(float *rval) +{ + BEGIN_WRAP + *rval = cv::ml::TrainData::missingValue(); + END_WRAP +} + +CvStatus TrainData_GetCatCount(PtrTrainData self, int vi, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getCatCount(vi); + END_WRAP +} +CvStatus TrainData_GetCatMap(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getCatMap())}; + END_WRAP +} +CvStatus TrainData_GetCatOfs(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getCatOfs())}; + END_WRAP +} +CvStatus TrainData_GetClassLabels(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getCatOfs())}; + END_WRAP +} +CvStatus TrainData_GetDefaultSubstValues(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getDefaultSubstValues())}; + END_WRAP +} +CvStatus TrainData_GetLayout(PtrTrainData self, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getLayout(); + END_WRAP +} +CvStatus TrainData_GetMissing(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getMissing())}; + END_WRAP +} +CvStatus TrainData_GetNAllVars(PtrTrainData self, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getNAllVars(); + END_WRAP +} +CvStatus TrainData_GetNames(PtrTrainData self, VecVecChar *names) +{ + BEGIN_WRAP + auto vec = new std::vector>(); + std::vector cstrs; + (*self.ptr)->getNames(cstrs); + for (size_t i = 0; i < cstrs.size(); i++) { + std::vector cstr(cstrs[i].begin(), cstrs[i].end()); + vec->push_back(cstr); + } + *names = {vec}; + END_WRAP +} +CvStatus TrainData_GetNormCatResponses(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getNormCatResponses())}; + END_WRAP +} +CvStatus TrainData_GetNormCatValues(PtrTrainData self, int vi, Mat sidx, VecInt *values) +{ + BEGIN_WRAP + // https://github.com/opencv/opencv/blob/05e48605a0aea00d3a89b9ab5e25cdf89568aa28/modules/ml/src/data.cpp#L888 + int n = sidx.ptr->checkVector(1, CV_32S); + int *buffer = new int[n]; + (*self.ptr)->getNormCatValues(vi, *sidx.ptr, buffer); + *values = {new std::vector(buffer, buffer + n)}; + END_WRAP +} +CvStatus TrainData_GetNSamples(PtrTrainData self, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getNSamples(); + END_WRAP +} +CvStatus TrainData_GetNTestSamples(PtrTrainData self, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getNTestSamples(); + END_WRAP +} +CvStatus TrainData_GetNTrainSamples(PtrTrainData self, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getNTrainSamples(); + END_WRAP +} +CvStatus TrainData_GetNVars(PtrTrainData self, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getNVars(); + END_WRAP +} +CvStatus TrainData_GetResponses(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getResponses())}; + END_WRAP +} +CvStatus TrainData_GetResponseType(PtrTrainData self, int *rval) +{ + BEGIN_WRAP + *rval = (*self.ptr)->getResponseType(); + END_WRAP +} +CvStatus TrainData_GetSample(PtrTrainData self, Mat varIdx, int sidx, VecFloat *buf) +{ + BEGIN_WRAP + int n = varIdx.ptr->checkVector(1, CV_32S); + float *buffer = new float[n]; + (*self.ptr)->getSample(*varIdx.ptr, sidx, buffer); + *buf = {new std::vector(buffer, buffer + n)}; + END_WRAP +} +CvStatus TrainData_GetSamples(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getSamples())}; + END_WRAP +} +CvStatus TrainData_GetSampleWeights(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getSampleWeights())}; + END_WRAP +} +CvStatus TrainData_GetTestNormCatResponses(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getTestNormCatResponses())}; + END_WRAP +} +CvStatus TrainData_GetTestResponses(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getTestResponses())}; + END_WRAP +} +CvStatus TrainData_GetTestSampleIdx(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getTestSampleIdx())}; + END_WRAP +} +CvStatus TrainData_GetTestSamples(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getTestSamples())}; + END_WRAP +} +CvStatus TrainData_GetTestSampleWeights(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getTestSampleWeights())}; + END_WRAP +} +CvStatus TrainData_GetTrainNormCatResponses(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getTrainNormCatResponses())}; + END_WRAP +} +CvStatus TrainData_GetTrainResponses(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getTrainResponses())}; + END_WRAP +} +CvStatus TrainData_GetTrainSampleIdx(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getTrainSampleIdx())}; + END_WRAP +} +CvStatus TrainData_GetTrainSamples(PtrTrainData self, int layout, bool compressSamples, bool compressVars, + Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getTrainSamples(layout, compressSamples, compressVars))}; + END_WRAP +} +CvStatus TrainData_GetTrainSampleWeights(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getTrainSampleWeights())}; + END_WRAP +} +CvStatus TrainData_GetValues(PtrTrainData self, int vi, Mat sidx, VecFloat *values) +{ + BEGIN_WRAP + // https://github.com/opencv/opencv/blob/05e48605a0aea00d3a89b9ab5e25cdf89568aa28/modules/ml/src/data.cpp#L888 + int n = sidx.ptr->checkVector(1, CV_32S); + float *buffer = new float[n]; + (*self.ptr)->getValues(vi, *sidx.ptr, buffer); + *values = {new std::vector(buffer, buffer + n)}; + END_WRAP +} +CvStatus TrainData_GetVarIdx(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getVarIdx())}; + END_WRAP +} +CvStatus TrainData_GetVarSymbolFlags(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getVarSymbolFlags())}; + END_WRAP +} +CvStatus TrainData_GetVarType(PtrTrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat((*self.ptr)->getVarType())}; + END_WRAP +} +CvStatus TrainData_SetTrainTestSplit(PtrTrainData self, int count, bool shuffle) +{ + BEGIN_WRAP(*self.ptr)->setTrainTestSplit(count, shuffle); + END_WRAP +} +CvStatus TrainData_SetTrainTestSplitRatio(PtrTrainData self, double ratio, bool shuffle) +{ + BEGIN_WRAP(*self.ptr)->setTrainTestSplitRatio(ratio, shuffle); + END_WRAP +} +CvStatus TrainData_ShuffleTrainTest(PtrTrainData self) +{ + BEGIN_WRAP(*self.ptr)->shuffleTrainTest(); + END_WRAP +} diff --git a/src/ml/train_data.h b/src/ml/train_data.h new file mode 100644 index 00000000..92ca2d05 --- /dev/null +++ b/src/ml/train_data.h @@ -0,0 +1,86 @@ +/* + Created by Rainyl. + Licensed: Apache 2.0 license. Copyright (c) 2024 Rainyl. +*/ + +#ifndef CVD_ML_TRAINDATA_H +#define CVD_ML_TRAINDATA_H + +#include "core/core.h" +#include "core/exception.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html +CVD_TYPEDEF(cv::Ptr, PtrTrainData) +CVD_TYPEDEF(cv::ml::TrainData, TrainData) +#else +CVD_TYPEDEF(void *, PtrTrainData) +CVD_TYPEDEF(void, TrainData) +#endif + +CVD_TYPEDEF_PTR(PtrTrainData) +CVD_TYPEDEF_PTR(TrainData) + +// TrainData +CvStatus TrainData_Create(Mat samples, int layout, Mat responses, Mat varIdx, Mat sampleIdx, + Mat sampleWeights, Mat varType, PtrTrainData *rval); +CvStatus TrainData_LoadFromCSV(char *filename, int headerLineCount, int responseStartIdx, int responseEndIdx, + char *varTypeSpec, char delimiter, char missch, PtrTrainData *rval); +void TrainData_Close(PtrTrainData *self); +CvStatus TrainData_Get(PtrTrainData *self, TrainData *rval); +// static functions +// input matrix (supported types: CV_32S, CV_32F, CV_64F) +CvStatus TrainData_GetSubMatrix(Mat matrix, Mat idx, int layout, Mat *rval); +CvStatus TrainData_GetSubVector(Mat vec, Mat idx, Mat *rval); +CvStatus TrainData_MissingValue(float *rval); + +// member functions +CvStatus TrainData_GetCatCount(PtrTrainData self, int vi, int *rval); +CvStatus TrainData_GetCatMap(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetCatOfs(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetClassLabels(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetDefaultSubstValues(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetLayout(PtrTrainData self, int *rval); +CvStatus TrainData_GetMissing(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetNAllVars(PtrTrainData self, int *rval); +CvStatus TrainData_GetNames(PtrTrainData self, VecVecChar *names); +CvStatus TrainData_GetNormCatResponses(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetNormCatValues(PtrTrainData self, int vi, Mat sidx, VecInt *values); +CvStatus TrainData_GetNSamples(PtrTrainData self, int *rval); +CvStatus TrainData_GetNTestSamples(PtrTrainData self, int *rval); +CvStatus TrainData_GetNTrainSamples(PtrTrainData self, int *rval); +CvStatus TrainData_GetNVars(PtrTrainData self, int *rval); +CvStatus TrainData_GetResponses(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetResponseType(PtrTrainData self, int *rval); +CvStatus TrainData_GetSample(PtrTrainData self, Mat varIdx, int sidx, VecFloat *buf); +CvStatus TrainData_GetSamples(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetSampleWeights(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTestNormCatResponses(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTestResponses(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTestSampleIdx(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTestSamples(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTestSampleWeights(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTrainNormCatResponses(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTrainResponses(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTrainSampleIdx(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTrainSamples(PtrTrainData self, int layout, bool compressSamples, bool compressVars, + Mat *rval); +CvStatus TrainData_GetTrainSampleWeights(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetValues(PtrTrainData self, int vi, Mat sidx, VecFloat *values); +CvStatus TrainData_GetVarIdx(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetVarSymbolFlags(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetVarType(PtrTrainData self, Mat *rval); +CvStatus TrainData_SetTrainTestSplit(PtrTrainData self, int count, bool shuffle); +CvStatus TrainData_SetTrainTestSplitRatio(PtrTrainData self, double ratio, bool shuffle); +CvStatus TrainData_ShuffleTrainTest(PtrTrainData self); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/stitching/stitching.cpp b/src/stitching/stitching.cpp index 6ce040c3..ae38f0ce 100644 --- a/src/stitching/stitching.cpp +++ b/src/stitching/stitching.cpp @@ -13,147 +13,137 @@ CvStatus Stitcher_Create(int mode, PtrStitcher *rval) END_WRAP } -void Stitcher_Close(PtrStitcher *stitcher){CVD_FREE(stitcher)} - -CvStatus Stitcher_Get(PtrStitcher self, Stitcher *rval) +void Stitcher_Close(PtrStitcher *stitcher) { - BEGIN_WRAP - *rval = {self.ptr->get()}; - END_WRAP + *stitcher->ptr = nullptr; + CVD_FREE(stitcher) } -CvStatus Stitcher_GetRegistrationResol(Stitcher self, double *rval) +CvStatus Stitcher_GetRegistrationResol(PtrStitcher self, double *rval) { BEGIN_WRAP - *rval = self.ptr->registrationResol(); + *rval = (*self.ptr)->registrationResol(); END_WRAP } -CvStatus Stitcher_SetRegistrationResol(Stitcher self, double inval) +CvStatus Stitcher_SetRegistrationResol(PtrStitcher self, double inval) { - BEGIN_WRAP - self.ptr->setRegistrationResol(inval); + BEGIN_WRAP(*self.ptr)->setRegistrationResol(inval); END_WRAP } -CvStatus Stitcher_GetSeamEstimationResol(Stitcher self, double *rval) +CvStatus Stitcher_GetSeamEstimationResol(PtrStitcher self, double *rval) { BEGIN_WRAP - *rval = self.ptr->seamEstimationResol(); + *rval = (*self.ptr)->seamEstimationResol(); END_WRAP } -CvStatus Stitcher_SetSeamEstimationResol(Stitcher self, double inval) +CvStatus Stitcher_SetSeamEstimationResol(PtrStitcher self, double inval) { - BEGIN_WRAP - self.ptr->setSeamEstimationResol(inval); + BEGIN_WRAP(*self.ptr)->setSeamEstimationResol(inval); END_WRAP } -CvStatus Stitcher_GetCompositingResol(Stitcher self, double *rval) +CvStatus Stitcher_GetCompositingResol(PtrStitcher self, double *rval) { BEGIN_WRAP - *rval = self.ptr->compositingResol(); + *rval = (*self.ptr)->compositingResol(); END_WRAP } -CvStatus Stitcher_SetCompositingResol(Stitcher self, double inval) +CvStatus Stitcher_SetCompositingResol(PtrStitcher self, double inval) { - BEGIN_WRAP - self.ptr->setCompositingResol(inval); + BEGIN_WRAP(*self.ptr)->setCompositingResol(inval); END_WRAP } -CvStatus Stitcher_GetPanoConfidenceThresh(Stitcher self, double *rval) +CvStatus Stitcher_GetPanoConfidenceThresh(PtrStitcher self, double *rval) { BEGIN_WRAP - *rval = self.ptr->panoConfidenceThresh(); + *rval = (*self.ptr)->panoConfidenceThresh(); END_WRAP } -CvStatus Stitcher_SetPanoConfidenceThresh(Stitcher self, double inval) +CvStatus Stitcher_SetPanoConfidenceThresh(PtrStitcher self, double inval) { - BEGIN_WRAP - self.ptr->setPanoConfidenceThresh(inval); + BEGIN_WRAP(*self.ptr)->setPanoConfidenceThresh(inval); END_WRAP } -CvStatus Stitcher_GetWaveCorrection(Stitcher self, bool *rval) +CvStatus Stitcher_GetWaveCorrection(PtrStitcher self, bool *rval) { BEGIN_WRAP - *rval = self.ptr->waveCorrection(); + *rval = (*self.ptr)->waveCorrection(); END_WRAP } -CvStatus Stitcher_SetWaveCorrection(Stitcher self, bool inval) +CvStatus Stitcher_SetWaveCorrection(PtrStitcher self, bool inval) { - BEGIN_WRAP - self.ptr->setWaveCorrection(inval); + BEGIN_WRAP(*self.ptr)->setWaveCorrection(inval); END_WRAP } -CvStatus Stitcher_GetInterpolationFlags(Stitcher self, int *rval) +CvStatus Stitcher_GetInterpolationFlags(PtrStitcher self, int *rval) { BEGIN_WRAP - *rval = static_cast(self.ptr->interpolationFlags()); + *rval = static_cast((*self.ptr)->interpolationFlags()); END_WRAP } -CvStatus Stitcher_SetInterpolationFlags(Stitcher self, int inval) +CvStatus Stitcher_SetInterpolationFlags(PtrStitcher self, int inval) { - BEGIN_WRAP - self.ptr->setInterpolationFlags(static_cast(inval)); + BEGIN_WRAP(*self.ptr)->setInterpolationFlags(static_cast(inval)); END_WRAP } -CvStatus Stitcher_GetWaveCorrectKind(Stitcher self, int *rval) +CvStatus Stitcher_GetWaveCorrectKind(PtrStitcher self, int *rval) { BEGIN_WRAP - *rval = static_cast(self.ptr->waveCorrectKind()); + *rval = static_cast((*self.ptr)->waveCorrectKind()); END_WRAP } -CvStatus Stitcher_SetWaveCorrectKind(Stitcher self, int inval) +CvStatus Stitcher_SetWaveCorrectKind(PtrStitcher self, int inval) { - BEGIN_WRAP - self.ptr->setWaveCorrectKind(static_cast(inval)); + BEGIN_WRAP(*self.ptr)->setWaveCorrectKind(static_cast(inval)); END_WRAP } -CvStatus Stitcher_EstimateTransform(Stitcher self, VecMat mats, VecMat masks, int *rval) +CvStatus Stitcher_EstimateTransform(PtrStitcher self, VecMat mats, VecMat masks, int *rval) { BEGIN_WRAP if (masks.ptr->size() > 0) { - *rval = static_cast(self.ptr->estimateTransform(*mats.ptr, *masks.ptr)); + *rval = static_cast((*self.ptr)->estimateTransform(*mats.ptr, *masks.ptr)); } else - *rval = static_cast(self.ptr->estimateTransform(*mats.ptr)); + *rval = static_cast((*self.ptr)->estimateTransform(*mats.ptr)); END_WRAP } -CvStatus Stitcher_ComposePanorama(Stitcher self, Mat rpano, int *rval) +CvStatus Stitcher_ComposePanorama(PtrStitcher self, Mat rpano, int *rval) { BEGIN_WRAP - *rval = static_cast(self.ptr->composePanorama(*rpano.ptr)); + *rval = static_cast((*self.ptr)->composePanorama(*rpano.ptr)); END_WRAP } -CvStatus Stitcher_ComposePanorama_1(Stitcher self, VecMat mats, Mat rpano, int *rval) +CvStatus Stitcher_ComposePanorama_1(PtrStitcher self, VecMat mats, Mat rpano, int *rval) { BEGIN_WRAP - *rval = static_cast(self.ptr->composePanorama(*mats.ptr, *rpano.ptr)); + *rval = static_cast((*self.ptr)->composePanorama(*mats.ptr, *rpano.ptr)); END_WRAP } -CvStatus Stitcher_Stitch(Stitcher self, VecMat mats, Mat rpano, int *rval) +CvStatus Stitcher_Stitch(PtrStitcher self, VecMat mats, Mat rpano, int *rval) { BEGIN_WRAP - *rval = static_cast(self.ptr->stitch(*mats.ptr, *rpano.ptr)); + *rval = static_cast((*self.ptr)->stitch(*mats.ptr, *rpano.ptr)); END_WRAP } -CvStatus Stitcher_Stitch_1(Stitcher self, VecMat mats, VecMat masks, Mat rpano, int *rval) +CvStatus Stitcher_Stitch_1(PtrStitcher self, VecMat mats, VecMat masks, Mat rpano, int *rval) { BEGIN_WRAP - *rval = static_cast(self.ptr->stitch(*mats.ptr, *masks.ptr, *rpano.ptr)); + *rval = static_cast((*self.ptr)->stitch(*mats.ptr, *masks.ptr, *rpano.ptr)); END_WRAP } -CvStatus Stitcher_Component(Stitcher self, VecInt *rval) +CvStatus Stitcher_Component(PtrStitcher self, VecInt *rval) { BEGIN_WRAP - std::vector _rval = self.ptr->component(); + std::vector _rval = (*self.ptr)->component(); *rval = {new std::vector(_rval)}; END_WRAP } diff --git a/src/stitching/stitching.h b/src/stitching/stitching.h index d245f5c0..9b9e7c1e 100644 --- a/src/stitching/stitching.h +++ b/src/stitching/stitching.h @@ -3,8 +3,8 @@ Licensed: Apache 2.0 license. Copyright (c) 2024 Rainyl. */ -#ifndef OPENCV_DART_LIBRARY_STITCHING_H -#define OPENCV_DART_LIBRARY_STITCHING_H +#ifndef OCV_STITCHING_H +#define OCV_STITCHING_H #include "core/core.h" #include "core/exception.h" @@ -24,58 +24,54 @@ enum { #ifdef __cplusplus CVD_TYPEDEF(cv::Ptr, PtrStitcher) -CVD_TYPEDEF(cv::Stitcher, Stitcher) #else CVD_TYPEDEF(void *, PtrStitcher) -CVD_TYPEDEF(void, Stitcher) #endif CVD_TYPEDEF_PTR(PtrStitcher) -CVD_TYPEDEF_PTR(Stitcher) CvStatus Stitcher_Create(int mode, PtrStitcher *rval); void Stitcher_Close(PtrStitcher *stitcher); -CvStatus Stitcher_Get(PtrStitcher self, Stitcher *rval); #pragma region getter/setter -CvStatus Stitcher_GetRegistrationResol(Stitcher self, double *rval); -CvStatus Stitcher_SetRegistrationResol(Stitcher self, double inval); +CvStatus Stitcher_GetRegistrationResol(PtrStitcher self, double *rval); +CvStatus Stitcher_SetRegistrationResol(PtrStitcher self, double inval); -CvStatus Stitcher_GetSeamEstimationResol(Stitcher self, double *rval); -CvStatus Stitcher_SetSeamEstimationResol(Stitcher self, double inval); +CvStatus Stitcher_GetSeamEstimationResol(PtrStitcher self, double *rval); +CvStatus Stitcher_SetSeamEstimationResol(PtrStitcher self, double inval); -CvStatus Stitcher_GetCompositingResol(Stitcher self, double *rval); -CvStatus Stitcher_SetCompositingResol(Stitcher self, double inval); +CvStatus Stitcher_GetCompositingResol(PtrStitcher self, double *rval); +CvStatus Stitcher_SetCompositingResol(PtrStitcher self, double inval); -CvStatus Stitcher_GetPanoConfidenceThresh(Stitcher self, double *rval); -CvStatus Stitcher_SetPanoConfidenceThresh(Stitcher self, double inval); +CvStatus Stitcher_GetPanoConfidenceThresh(PtrStitcher self, double *rval); +CvStatus Stitcher_SetPanoConfidenceThresh(PtrStitcher self, double inval); -CvStatus Stitcher_GetWaveCorrection(Stitcher self, bool *rval); -CvStatus Stitcher_SetWaveCorrection(Stitcher self, bool inval); +CvStatus Stitcher_GetWaveCorrection(PtrStitcher self, bool *rval); +CvStatus Stitcher_SetWaveCorrection(PtrStitcher self, bool inval); -CvStatus Stitcher_GetInterpolationFlags(Stitcher self, int *rval); -CvStatus Stitcher_SetInterpolationFlags(Stitcher self, int inval); +CvStatus Stitcher_GetInterpolationFlags(PtrStitcher self, int *rval); +CvStatus Stitcher_SetInterpolationFlags(PtrStitcher self, int inval); -CvStatus Stitcher_GetWaveCorrectKind(Stitcher self, int *rval); -CvStatus Stitcher_SetWaveCorrectKind(Stitcher self, int inval); +CvStatus Stitcher_GetWaveCorrectKind(PtrStitcher self, int *rval); +CvStatus Stitcher_SetWaveCorrectKind(PtrStitcher self, int inval); #pragma endregion #pragma region functions -CvStatus Stitcher_EstimateTransform(Stitcher self, VecMat mats, VecMat masks, int *rval); +CvStatus Stitcher_EstimateTransform(PtrStitcher self, VecMat mats, VecMat masks, int *rval); -CvStatus Stitcher_ComposePanorama(Stitcher self, Mat rpano, int *rval); -CvStatus Stitcher_ComposePanorama_1(Stitcher self, VecMat mats, Mat rpano, int *rval); +CvStatus Stitcher_ComposePanorama(PtrStitcher self, Mat rpano, int *rval); +CvStatus Stitcher_ComposePanorama_1(PtrStitcher self, VecMat mats, Mat rpano, int *rval); -CvStatus Stitcher_Stitch(Stitcher self, VecMat mats, Mat rpano, int *rval); -CvStatus Stitcher_Stitch_1(Stitcher self, VecMat mats, VecMat masks, Mat rpano, int *rval); +CvStatus Stitcher_Stitch(PtrStitcher self, VecMat mats, Mat rpano, int *rval); +CvStatus Stitcher_Stitch_1(PtrStitcher self, VecMat mats, VecMat masks, Mat rpano, int *rval); -CvStatus Stitcher_Component(Stitcher self, VecInt *rval); +CvStatus Stitcher_Component(PtrStitcher self, VecInt *rval); #pragma endregion #ifdef __cplusplus } #endif -#endif // OPENCV_DART_LIBRARY_STITCHING_H \ No newline at end of file +#endif // OCV_STITCHING_H diff --git a/src/test/core.cc b/src/test/core.cc index 6fd6f14b..da1b7d94 100644 --- a/src/test/core.cc +++ b/src/test/core.cc @@ -5,31 +5,6 @@ #include #include -TEST(TermCriteria, New_Close) -{ - int typ = cv::TermCriteria::COUNT; - int maxCount = 10; - double epsilon = 0.001; - - CvStatus s; - TermCriteria tc; - s = TermCriteria_New(typ, maxCount, epsilon, &tc); - ASSERT_EQ(s.code, 0); - ASSERT_NE(tc.ptr, nullptr); - - int type, max_count; - double eps; - s = TermCriteria_Type(tc, &type); - EXPECT_EQ(s.code, 0); - EXPECT_EQ(type, typ); - s = TermCriteria_MaxCount(tc, &max_count); - EXPECT_EQ(s.code, 0); - EXPECT_EQ(maxCount, maxCount); - s = TermCriteria_Epsilon(tc, &eps); - EXPECT_EQ(s.code, 0); - EXPECT_EQ(eps, epsilon); -} - TEST(Mat, New_Close) { Mat *mat = (Mat *)malloc(sizeof(Mat)); @@ -426,4 +401,4 @@ TEST(Mat, Getter_Vec) EXPECT_EQ(pix.val3, expectedVec.val[2]); Mat_Close(&mat); -} \ No newline at end of file +} diff --git a/src/test/imgproc.cc b/src/test/imgproc.cc index e3a398ff..f4cdf2d0 100644 --- a/src/test/imgproc.cc +++ b/src/test/imgproc.cc @@ -17,7 +17,7 @@ TEST(ImgProc, cornerSubPix) ASSERT_EQ(img.ptr->empty(), false); Mat mask = {new cv::Mat()}; VecPoint2f corners = {new std::vector()}; - TermCriteria criteria = {new cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 30, 0.1)}; + TermCriteria criteria = {cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 30, 0.1}; status = GoodFeaturesToTrack(img, corners, 10, 0.01, 10, mask, 3, false, 0.04); ASSERT_EQ(status.code, 0); status = CornerSubPix(img, corners, {10, 10}, {-1, -1}, criteria); @@ -25,4 +25,4 @@ TEST(ImgProc, cornerSubPix) status = CornerSubPix(img, corners, {10, 10}, {-1, -1}, criteria); ASSERT_EQ(status.code, 0); std::cout << *corners.ptr << std::endl; -} \ No newline at end of file +} diff --git a/src/video/video.cpp b/src/video/video.cpp index e9f36396..a26ea0c5 100644 --- a/src/video/video.cpp +++ b/src/video/video.cpp @@ -64,8 +64,9 @@ CvStatus CalcOpticalFlowPyrLKWithParams(Mat prevImg, Mat nextImg, VecPoint2f pre TermCriteria criteria, int flags, double minEigThreshold) { BEGIN_WRAP + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); cv::calcOpticalFlowPyrLK(*prevImg.ptr, *nextImg.ptr, *prevPts.ptr, *nextPts.ptr, *status.ptr, *err.ptr, - cv::Size(winSize.width, winSize.height), maxLevel, *criteria.ptr, flags, + cv::Size(winSize.width, winSize.height), maxLevel, tc, flags, minEigThreshold); END_WRAP } @@ -82,8 +83,9 @@ CvStatus FindTransformECC(Mat templateImage, Mat inputImage, Mat warpMatrix, int TermCriteria criteria, Mat inputMask, int gaussFiltSize, double *rval) { BEGIN_WRAP + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); *rval = cv::findTransformECC(*templateImage.ptr, *inputImage.ptr, *warpMatrix.ptr, motionType, - *criteria.ptr, *inputMask.ptr, gaussFiltSize); + tc, *inputMask.ptr, gaussFiltSize); END_WRAP } diff --git a/test/data/agaricus-lepiota.data b/test/data/agaricus-lepiota.data new file mode 100644 index 00000000..14fe8bbe --- /dev/null +++ b/test/data/agaricus-lepiota.data @@ -0,0 +1,8124 @@ +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,s,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,y,u +e,f,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,s,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,f,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,s,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,f,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,y,u +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,s,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,f,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,s,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,s,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,f,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,s,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,s,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,y,u +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,s,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,s,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,s,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,s,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,y,u +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,s,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u +e,f,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,s,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,s,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,s,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,y,u +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,s,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,f,f,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,y,u +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,f,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,s,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +e,s,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,f,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,s,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,f,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,y,u +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,s,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,f,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u +e,f,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,s,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,f,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,s,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,s,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,y,u +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,f,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,s,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,y,u +e,f,s,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,y,u +e,f,s,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,s,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,f,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,s,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,y,u +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,y,u +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,s,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,s,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,f,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,s,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,s,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,f,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,s,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,y,u +e,s,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +e,f,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,s,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,y,u +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,s,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,y,u +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,s,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,f,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,f,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,y,u +e,f,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,f,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,s,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,s,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,s,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,s,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,s,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,y,u +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,s,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,s,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,s,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,s,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,s,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,s,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,f,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,y,u +e,f,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,s,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,f,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,y,u +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,f,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,y,u +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,f,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,s,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +e,f,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,f,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,f,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,s,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,f,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,y,u +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,f,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,s,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,s,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,f,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,y,u +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,y,u +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +e,f,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,s,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,f,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,s,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,s,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,s,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,s,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,s,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,f,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,f,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,f,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,f,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,f,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,s,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,s,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,f,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,f,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,f,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,f,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +p,x,s,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,s,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +p,x,s,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,x,s,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,s,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,s,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,s,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,s,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,f,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +p,x,s,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,s,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +p,x,s,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,s,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,f,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,f,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,s,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,f,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,s,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,f,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,s,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,s,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,s,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +p,x,s,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,s,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +p,x,f,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,s,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,s,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +p,x,f,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,s,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,f,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,s,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,f,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,f,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,s,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,s,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,f,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,f,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,s,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +p,x,f,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,f,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,s,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,s,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,s,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,s,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,f,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,f,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,s,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,s,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,s,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +p,x,s,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,s,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,s,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,f,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,s,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,f,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,f,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,s,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,s,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,f,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,f,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,f,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,f,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,s,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,f,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,s,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,f,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,s,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,s,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,f,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,s,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,s,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,s,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,s,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,s,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,f,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,f,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,s,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,f,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,f,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,s,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,f,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,s,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,s,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,s,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,s,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,f,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,s,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,s,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +p,x,f,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +p,x,f,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,s,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,f,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,s,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,f,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,s,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,s,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,s,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,s,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,f,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,s,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +p,x,s,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +p,x,f,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,s,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +p,x,s,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,f,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +p,x,s,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,s,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,f,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,f,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,s,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,f,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,s,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,f,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,s,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,f,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,s,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,f,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,s,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,f,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,f,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,s,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,f,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,s,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,x,s,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +p,x,s,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,s,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,f,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +p,f,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +e,x,y,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,f,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,s,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,s,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,s,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,f,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,f,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,s,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +e,f,y,u,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,f,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +p,x,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +p,b,s,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,s,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +p,f,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,u +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +e,f,f,c,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,u +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,u +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +p,x,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,u +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,u +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +p,x,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,f,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +e,k,y,n,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +e,f,s,p,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +e,k,s,p,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +e,x,y,r,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +p,k,y,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +e,x,s,e,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,b,y,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,f,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,u +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,b,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +e,x,y,u,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +p,f,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +e,x,s,b,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,s,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,u +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +e,k,y,b,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +p,x,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,u +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +e,f,f,c,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,g +e,f,s,n,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +e,x,s,b,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +e,x,y,u,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,v,d +e,f,y,b,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,g +p,f,s,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,u,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +p,x,f,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,f,y,b,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,f,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +p,f,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,g +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +e,f,y,u,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +p,x,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,u +e,f,y,e,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,y,u,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,s,p,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,f,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,u +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,u +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +e,f,y,u,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,f,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +e,x,s,p,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,s,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +p,k,f,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +e,x,y,e,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,b,f,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,u +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +e,k,y,e,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +e,k,y,n,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,s,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +p,b,s,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,g +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +p,b,s,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +e,f,y,p,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,g +e,k,y,n,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,u +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +e,k,s,e,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,y,n,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,s,b,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +p,x,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +p,b,y,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +e,f,y,p,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,u +p,x,f,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +e,x,y,r,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,y,d +e,f,y,w,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,s,e,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +p,x,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,u +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,s,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +e,k,s,b,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +e,x,f,n,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +e,x,y,e,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,k,s,b,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +e,k,s,p,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +p,f,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,u +e,f,s,b,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,u +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,u +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,u +e,f,s,b,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +e,x,s,p,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +e,k,s,n,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,y,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +e,f,y,u,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +e,f,s,b,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +e,x,s,n,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,y,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,b,s,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,y,u,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +e,x,y,e,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +e,k,s,b,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,u +p,x,s,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,y,u,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,u +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +e,k,y,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,y,b,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,u +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,u +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,u +p,f,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,u +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +e,x,y,w,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,y,d +e,x,s,e,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,k,f,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +e,k,f,c,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +p,b,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +e,k,y,p,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +e,k,y,b,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,g,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,x,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,u +e,f,y,c,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +e,f,y,p,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,g +p,x,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +e,k,y,c,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,x,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,g +p,f,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,g +e,k,y,c,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,f,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,u +p,c,g,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,x,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,u +p,b,g,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,x,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,u +p,b,f,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,x,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +e,k,s,n,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,k,y,b,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,s,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,s,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +e,x,s,e,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,f,f,n,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,x,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,x,s,b,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +e,f,y,n,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,y,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,x,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,f,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +e,x,y,e,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,g +p,f,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,g +e,k,y,e,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +e,x,y,n,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +e,x,s,p,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +e,f,s,p,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,b,y,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +e,x,y,c,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +e,f,s,n,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,g +e,f,y,c,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +e,x,y,w,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,k,s,p,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +p,f,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,u +e,k,y,p,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,f,f,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +e,k,s,b,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,u +e,f,s,n,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +e,k,y,b,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,k,y,n,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +e,x,y,p,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,u +e,x,s,p,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,b,y,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,g +p,x,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,k,y,p,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +e,k,f,c,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +e,x,s,n,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,u +p,k,y,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +e,k,f,n,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,k,f,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,g +p,f,y,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +e,k,s,b,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,b,y,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,g +e,k,y,b,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,g +p,b,y,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,g +e,k,s,n,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,u +p,x,f,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +p,k,y,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,u +e,f,s,e,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,u +e,k,s,n,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +e,x,s,b,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,u +e,k,f,n,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,g +p,x,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,u +p,k,y,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,s,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +e,k,y,p,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,f,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,u +e,f,y,w,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,y,d +e,x,y,r,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,v,d +e,x,s,b,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,g +p,x,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,g +p,f,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,g +e,f,s,e,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +e,x,s,n,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,g +e,x,f,c,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,f,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +e,x,y,r,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,f,y,e,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,u +e,k,y,n,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +e,f,y,e,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,b,y,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,x,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,f,y,b,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +e,f,y,n,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,b,y,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +e,x,y,n,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,f,y,w,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,x,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +p,x,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,u +p,k,y,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,u +e,x,y,c,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,y,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +e,x,s,p,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,f,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +e,f,f,n,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +e,x,f,n,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,u +p,f,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,g +p,x,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,g +e,x,y,r,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +p,f,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,u +p,x,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,u +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +p,x,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,y,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +e,f,s,n,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +e,k,s,p,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,g +p,x,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,b,y,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,u +e,x,y,p,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,u +e,f,y,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,u +e,x,f,c,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +e,f,s,p,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +e,x,y,n,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +e,f,s,p,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,u +e,k,s,e,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +e,k,y,e,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,g +e,k,s,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,g +p,b,y,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,x,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,b,f,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,y,c,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,b,y,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +p,f,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +e,x,s,n,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +e,f,s,b,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +e,f,s,e,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,x,s,n,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,u +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,s,p,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,x,s,e,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +p,b,y,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,u +p,f,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,g +p,x,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,u +e,f,y,r,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,g +e,x,f,c,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,u +e,x,y,u,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,y,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +e,x,y,p,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,u +p,f,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,u +p,f,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,u +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,g +e,k,s,e,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,k,y,n,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,u +p,f,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,x,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,b,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +p,f,y,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,g +e,k,y,p,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,g +e,k,s,p,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +e,x,y,e,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +e,k,y,e,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +e,f,y,r,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,k,y,e,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +e,k,s,p,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,y,b,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,c,y,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,f,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,x,y,p,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,y,w,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +p,x,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,u +p,x,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +e,k,f,n,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,x,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,u +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +e,x,y,p,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,b,y,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,y,r,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,f,y,n,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,f,y,e,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +e,x,y,b,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,s,n,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,g +e,x,y,b,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +e,k,y,e,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,u +e,k,y,c,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +e,k,y,n,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,b,s,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,u +e,f,y,r,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,g +e,f,y,u,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,u +e,x,s,e,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,y,p,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +e,x,y,n,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,y,e,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,u +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,s,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,g +e,f,s,p,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,x,y,n,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,b,y,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,g +p,x,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,b,y,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +e,x,y,c,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,f,y,n,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +e,x,y,r,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,y,d +p,b,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +e,x,s,p,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,x,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,y,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +e,f,s,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,u +e,x,y,c,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +e,x,y,w,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,f,y,n,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,k,y,p,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,s,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +e,k,y,n,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,f,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,s,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +e,f,s,n,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,b,s,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,u +e,f,y,b,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +e,x,f,c,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,f,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,u +e,k,s,p,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,k,y,n,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,x,y,b,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +p,f,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +e,x,y,e,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,g +e,x,y,n,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +p,b,y,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,y,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +e,k,s,e,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +e,k,s,n,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,f,s,b,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +e,f,y,p,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +e,k,s,e,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +e,x,y,n,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,u +p,x,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,g +p,x,f,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,g +e,f,y,e,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,u +e,k,f,n,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +e,k,y,c,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +e,f,y,p,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,f,y,r,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +p,x,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,g +p,x,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,g +e,x,y,n,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,f,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +e,f,y,u,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,x,s,n,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,u +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +e,f,s,b,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +e,k,f,c,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,f,y,p,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,k,y,p,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +e,f,s,n,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +e,f,s,n,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +e,f,f,c,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,b,y,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +e,k,y,e,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,u +p,x,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,u +e,f,s,p,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +e,f,y,w,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,v,d +e,x,y,p,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,u +p,k,g,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,f,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,k,s,e,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,g +e,f,s,e,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,g +p,b,s,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +e,f,f,n,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,f,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +e,x,s,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,y,n,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,x,y,r,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,v,d +e,k,s,b,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,u +p,x,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +e,x,y,b,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,g +e,k,s,n,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,g +e,k,y,p,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,u +e,k,f,c,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,f,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,g +p,b,s,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,b,s,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,g +e,x,y,n,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +e,x,s,b,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,s,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,u +p,f,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,u +e,f,y,r,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,u +e,x,y,w,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,k,y,b,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,u +e,f,y,r,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,y,d +p,b,s,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,u +e,f,y,c,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +e,x,y,u,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,u +e,x,y,w,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +e,x,s,p,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,s,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +e,f,y,e,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,b,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +p,b,y,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +e,f,y,n,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +p,x,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,y,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,x,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +e,f,f,n,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,u +e,f,s,e,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +e,f,f,c,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,k,y,e,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,x,s,n,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,u +e,f,s,e,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,g +e,k,s,n,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,y,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +e,f,y,w,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,v,d +e,x,y,w,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,u +e,x,y,u,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,v,d +p,f,s,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +p,f,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,x,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,g +e,f,y,r,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,v,d +p,f,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,g +e,k,s,n,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,b,s,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,b,s,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +e,x,y,e,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,k,s,b,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +e,x,s,e,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +e,f,s,n,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,f,y,b,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,s,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,u +e,x,y,p,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,x,y,u,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,u +p,x,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,b,s,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +e,k,y,n,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +e,x,y,b,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,g +p,f,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,u +p,f,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,u +e,k,y,n,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,s,e,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +e,x,y,w,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,v,d +p,f,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,u +p,f,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,u +e,f,s,e,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,s,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +e,x,f,n,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,u +e,x,s,b,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +e,x,s,p,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,x,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,u +e,k,y,n,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +e,x,y,p,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +e,f,y,b,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,s,e,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,u +p,f,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,u +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +p,b,s,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,b,s,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +e,x,y,n,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,x,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,g +p,b,y,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,x,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,u +e,f,y,p,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,k,s,p,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +e,f,y,n,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,b,y,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,y,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,u +p,b,s,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +e,f,y,w,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,y,d +e,x,y,n,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +e,k,s,e,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +p,b,f,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,x,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +e,x,y,n,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,y,n,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,f,y,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,k,f,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,g +e,x,y,r,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,s,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,g +p,x,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,u +e,k,s,e,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,g +e,x,f,n,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +e,f,y,w,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,s,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,b,y,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,k,y,b,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,y,w,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,c,l +p,f,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,x,f,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +e,x,s,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +e,b,f,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,x,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,k,f,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,x,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +p,x,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,s,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,f,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,k,s,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,f,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,k,s,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,x,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +e,b,s,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,f,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,x,f,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,f,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +e,k,f,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,x,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,x,s,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,f,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,f,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,f,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,y,e,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,f,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,c,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,k,s,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,x,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +e,x,f,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,k,f,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,b,f,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,x,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,c,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +e,x,f,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,x,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,f,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,c,l +p,f,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,x,s,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,c,l +p,x,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,y,n,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,x,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,k,s,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,f,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,x,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,x,y,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,c,l +e,k,s,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,x,f,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,x,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,c,l +p,k,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,b,y,y,f,n,f,w,n,y,e,c,y,y,y,y,p,y,o,e,w,c,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,b,s,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +e,b,f,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,c,l +e,x,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,f,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,b,s,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +p,x,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +e,b,s,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +e,f,y,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,x,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,x,f,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,k,f,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +e,b,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +p,f,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,x,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +p,f,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,k,f,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,f,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,b,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,c,l +e,k,s,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,y,e,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,c,l +p,f,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +e,k,f,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,x,s,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,k,s,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +e,k,s,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,k,s,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +e,x,f,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,b,s,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,k,s,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +e,x,s,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,f,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +e,k,f,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,f,s,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,c,l +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +e,k,f,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,c,l +p,k,y,c,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +e,x,f,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,v,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,v,l +p,k,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,f,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,x,f,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,f,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +e,k,s,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,c,l +p,k,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,x,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,f,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,y,n,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,k,s,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +e,f,s,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,f,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,c,l +p,f,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,b,f,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,v,l +p,f,y,n,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,x,f,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,y,c,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,b,s,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +e,b,f,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,f,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +e,x,y,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,k,f,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,x,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,k,s,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,k,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,v,l +e,k,s,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,v,l +e,x,f,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,b,s,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,f,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,x,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,y,c,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,f,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +e,k,s,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,x,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +p,x,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,b,s,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,x,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,n,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,b,f,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,f,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,k,s,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,f,y,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,c,l +e,b,s,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,c,l +p,x,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +e,k,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +p,f,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +e,b,f,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,x,s,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,x,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,x,f,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,k,s,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,x,s,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,v,l +e,k,s,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,x,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,v,l +e,k,s,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,y,e,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,b,s,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,f,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,c,l +e,b,s,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,c,l +e,b,s,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,c,l +p,k,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,v,l +e,k,f,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,c,l +p,k,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,k,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,k,s,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,f,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,n,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +e,b,f,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +e,k,f,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,k,s,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +e,k,s,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,b,s,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,x,s,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,x,f,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,x,y,e,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +e,f,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +e,k,s,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,f,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,k,y,y,f,n,f,w,n,y,e,c,y,y,y,y,p,y,o,e,w,c,l +p,k,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,c,l +e,x,s,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,k,s,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,f,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,b,f,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,c,l +p,k,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +e,x,f,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +e,x,s,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +e,b,f,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,y,n,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,c,l +p,x,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,v,l +e,b,s,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +e,b,s,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,b,f,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +e,k,s,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +p,f,y,e,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,y,c,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +e,k,s,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,f,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +e,b,f,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,f,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,k,s,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,c,l +e,f,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,b,s,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,x,f,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +e,x,s,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,k,f,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,c,l +p,f,y,y,f,n,f,w,n,w,e,c,y,y,y,y,p,y,o,e,w,c,l +p,x,y,c,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,x,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,x,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,k,s,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +e,b,s,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,v,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,v,l +e,f,s,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,k,s,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,f,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,b,s,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,v,l +p,k,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,b,s,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,c,y,y,f,n,f,w,n,y,e,c,y,y,y,y,p,y,o,e,w,c,l +p,x,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,x,s,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,v,l +p,k,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,c,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +e,x,s,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +e,x,f,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,f,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,k,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,c,l +p,f,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,s,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,x,f,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,f,y,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,x,f,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +e,k,s,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,k,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +e,x,f,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,c,l +e,x,f,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,c,l +e,b,s,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,x,y,e,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,f,s,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,y,f,n,f,w,n,y,e,c,y,y,y,y,p,y,o,e,w,c,l +p,k,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,x,f,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,x,s,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +e,x,f,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,k,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,c,l +p,f,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,x,s,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +e,x,f,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,c,l +p,k,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,c,l +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,c,l +e,b,s,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,c,l +p,k,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +e,b,s,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,x,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,c,l +e,x,s,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +e,k,s,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +e,x,s,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,y,c,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,x,s,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +e,k,f,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +e,b,f,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,v,l +p,k,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,v,l +e,f,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +e,b,s,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,k,s,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,c,l +p,k,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,v,l +e,x,f,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +e,x,f,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,v,l +p,k,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +e,x,s,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +e,x,f,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,k,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,k,f,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +e,k,f,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,b,f,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +e,b,s,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +e,b,s,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,f,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,k,s,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,x,s,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,b,y,y,f,n,f,w,n,w,e,c,y,y,y,y,p,y,o,e,w,c,l +p,k,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +e,x,s,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,k,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,k,f,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,x,f,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +e,b,s,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,b,f,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +e,k,s,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,x,s,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,c,l +p,k,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,v,l +e,b,f,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,x,s,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,c,l +p,k,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +e,b,s,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +e,b,s,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,k,f,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +e,k,f,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +e,x,f,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,b,s,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,k,s,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,b,f,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,v,l +e,k,f,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,c,l +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,x,s,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,f,y,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,v,l +p,k,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,b,f,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,x,s,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,x,s,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,v,l +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,v,l +p,k,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,c,l +p,k,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,k,f,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,v,l +e,f,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +p,k,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +e,f,s,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,x,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,c,y,y,f,n,f,w,n,w,e,c,y,y,y,y,p,y,o,e,w,c,l +p,k,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,x,s,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,x,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,y,c,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,f,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,c,l +e,b,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +p,f,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,x,y,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,c,l +e,b,f,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +e,x,f,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,y,n,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,v,l +p,k,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,y,y,f,n,f,w,n,w,e,c,y,y,y,y,p,y,o,e,w,c,l +e,k,s,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,k,f,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +e,k,f,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,c,l +e,x,s,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +e,b,s,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +e,x,f,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,k,f,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +e,x,s,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,v,l +e,b,s,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,b,s,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +e,x,s,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,x,s,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +p,k,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,v,l +e,b,f,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,k,s,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,c,l +p,k,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,k,s,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +e,x,s,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,y,c,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,x,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,y,n,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,f,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,b,f,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +e,b,f,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,c,l +e,x,s,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +e,b,s,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,y,e,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,x,f,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,v,l +p,k,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,v,l +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,v,l +e,k,s,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,v,l +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,v,l +p,k,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +e,x,s,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,v,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,x,f,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,x,s,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,x,f,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,c,l +e,b,s,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,v,l +e,x,s,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +e,k,s,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,v,l +e,k,s,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,x,f,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,f,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,v,l +e,x,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +p,k,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,b,s,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,c,l +e,x,s,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,f,y,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,x,f,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,v,l +p,x,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,x,f,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,f,y,n,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,v,l +e,b,s,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,v,l +p,k,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,v,l +e,x,f,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,x,f,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +e,f,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,c,l +p,k,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,k,f,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +e,f,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +p,k,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,x,f,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,c,l +e,k,s,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,c,l +e,f,y,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,k,y,e,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,x,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,v,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,c,l +e,x,y,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,f,s,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,c,l +e,b,f,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,k,f,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,c,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,c,l +e,k,f,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +e,b,f,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,v,l +e,x,y,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,b,s,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,c,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,v,l +e,b,s,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,x,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +e,b,f,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +e,b,f,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,v,l +p,k,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,k,y,c,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +e,x,s,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,c,l +e,b,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +p,x,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,c,l +p,f,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +e,k,s,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,c,l +p,k,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,c,l +e,x,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +e,x,s,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,v,l +p,f,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,v,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,v,l +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,v,l +e,k,s,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +e,k,f,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +e,x,s,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +e,b,f,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,c,l +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,v,l +p,k,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +e,x,f,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +e,k,s,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,c,l +e,b,f,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,v,l +p,k,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,x,y,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,k,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,v,l +p,k,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,c,l +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,v,l +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,c,l +p,k,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,b,f,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,v,l +p,k,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,v,l +e,b,f,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,v,l +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,k,f,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,v,l +p,k,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,c,l +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,c,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,c,l +p,k,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,v,l +e,b,f,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,c,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,c,l +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,v,l +e,b,f,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,b,f,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +e,k,f,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +e,b,s,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,x,y,c,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,k,f,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,k,f,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,c,l +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,c,l +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,v,l +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,v,l +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,v,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +e,b,s,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,v,l +e,k,s,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,v,l +p,k,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,y,c,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,c,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,v,l +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,c,l +p,k,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,c,l diff --git a/test/data/agaricus-lepiota.names b/test/data/agaricus-lepiota.names new file mode 100644 index 00000000..4f1f3b53 --- /dev/null +++ b/test/data/agaricus-lepiota.names @@ -0,0 +1,148 @@ +1. Title: Mushroom Database + +2. Sources: + (a) Mushroom records drawn from The Audubon Society Field Guide to North + American Mushrooms (1981). G. H. Lincoff (Pres.), New York: Alfred + A. Knopf + (b) Donor: Jeff Schlimmer (Jeffrey.Schlimmer@a.gp.cs.cmu.edu) + (c) Date: 27 April 1987 + +3. Past Usage: + 1. Schlimmer,J.S. (1987). Concept Acquisition Through Representational + Adjustment (Technical Report 87-19). Doctoral disseration, Department + of Information and Computer Science, University of California, Irvine. + --- STAGGER: asymptoted to 95% classification accuracy after reviewing + 1000 instances. + 2. Iba,W., Wogulis,J., & Langley,P. (1988). Trading off Simplicity + and Coverage in Incremental Concept Learning. In Proceedings of + the 5th International Conference on Machine Learning, 73-79. + Ann Arbor, Michigan: Morgan Kaufmann. + -- approximately the same results with their HILLARY algorithm + 3. In the following references a set of rules (given below) were + learned for this data set which may serve as a point of + comparison for other researchers. + + Duch W, Adamczak R, Grabczewski K (1996) Extraction of logical rules + from training data using backpropagation networks, in: Proc. of the + The 1st Online Workshop on Soft Computing, 19-30.Aug.1996, pp. 25-30, + available on-line at: http://www.bioele.nuee.nagoya-u.ac.jp/wsc1/ + + Duch W, Adamczak R, Grabczewski K, Ishikawa M, Ueda H, Extraction of + crisp logical rules using constrained backpropagation networks - + comparison of two new approaches, in: Proc. of the European Symposium + on Artificial Neural Networks (ESANN'97), Bruge, Belgium 16-18.4.1997, + pp. xx-xx + + Wlodzislaw Duch, Department of Computer Methods, Nicholas Copernicus + University, 87-100 Torun, Grudziadzka 5, Poland + e-mail: duch@phys.uni.torun.pl + WWW http://www.phys.uni.torun.pl/kmk/ + + Date: Mon, 17 Feb 1997 13:47:40 +0100 + From: Wlodzislaw Duch + Organization: Dept. of Computer Methods, UMK + + I have attached a file containing logical rules for mushrooms. + It should be helpful for other people since only in the last year I + have seen about 10 papers analyzing this dataset and obtaining quite + complex rules. We will try to contribute other results later. + + With best regards, Wlodek Duch + ________________________________________________________________ + + Logical rules for the mushroom data sets. + + Logical rules given below seem to be the simplest possible for the + mushroom dataset and therefore should be treated as benchmark results. + + Disjunctive rules for poisonous mushrooms, from most general + to most specific: + + P_1) odor=NOT(almond.OR.anise.OR.none) + 120 poisonous cases missed, 98.52% accuracy + + P_2) spore-print-color=green + 48 cases missed, 99.41% accuracy + + P_3) odor=none.AND.stalk-surface-below-ring=scaly.AND. + (stalk-color-above-ring=NOT.brown) + 8 cases missed, 99.90% accuracy + + P_4) habitat=leaves.AND.cap-color=white + 100% accuracy + + Rule P_4) may also be + + P_4') population=clustered.AND.cap_color=white + + These rule involve 6 attributes (out of 22). Rules for edible + mushrooms are obtained as negation of the rules given above, for + example the rule: + + odor=(almond.OR.anise.OR.none).AND.spore-print-color=NOT.green + + gives 48 errors, or 99.41% accuracy on the whole dataset. + + Several slightly more complex variations on these rules exist, + involving other attributes, such as gill_size, gill_spacing, + stalk_surface_above_ring, but the rules given above are the simplest + we have found. + + +4. Relevant Information: + This data set includes descriptions of hypothetical samples + corresponding to 23 species of gilled mushrooms in the Agaricus and + Lepiota Family (pp. 500-525). Each species is identified as + definitely edible, definitely poisonous, or of unknown edibility and + not recommended. This latter class was combined with the poisonous + one. The Guide clearly states that there is no simple rule for + determining the edibility of a mushroom; no rule like ``leaflets + three, let it be'' for Poisonous Oak and Ivy. + +5. Number of Instances: 8124 + +6. Number of Attributes: 22 (all nominally valued) + +7. Attribute Information: (classes: edible=e, poisonous=p) + 1. cap-shape: bell=b,conical=c,convex=x,flat=f, + knobbed=k,sunken=s + 2. cap-surface: fibrous=f,grooves=g,scaly=y,smooth=s + 3. cap-color: brown=n,buff=b,cinnamon=c,gray=g,green=r, + pink=p,purple=u,red=e,white=w,yellow=y + 4. bruises?: bruises=t,no=f + 5. odor: almond=a,anise=l,creosote=c,fishy=y,foul=f, + musty=m,none=n,pungent=p,spicy=s + 6. gill-attachment: attached=a,descending=d,free=f,notched=n + 7. gill-spacing: close=c,crowded=w,distant=d + 8. gill-size: broad=b,narrow=n + 9. gill-color: black=k,brown=n,buff=b,chocolate=h,gray=g, + green=r,orange=o,pink=p,purple=u,red=e, + white=w,yellow=y + 10. stalk-shape: enlarging=e,tapering=t + 11. stalk-root: bulbous=b,club=c,cup=u,equal=e, + rhizomorphs=z,rooted=r,missing=? + 12. stalk-surface-above-ring: fibrous=f,scaly=y,silky=k,smooth=s + 13. stalk-surface-below-ring: fibrous=f,scaly=y,silky=k,smooth=s + 14. stalk-color-above-ring: brown=n,buff=b,cinnamon=c,gray=g,orange=o, + pink=p,red=e,white=w,yellow=y + 15. stalk-color-below-ring: brown=n,buff=b,cinnamon=c,gray=g,orange=o, + pink=p,red=e,white=w,yellow=y + 16. veil-type: partial=p,universal=u + 17. veil-color: brown=n,orange=o,white=w,yellow=y + 18. ring-number: none=n,one=o,two=t + 19. ring-type: cobwebby=c,evanescent=e,flaring=f,large=l, + none=n,pendant=p,sheathing=s,zone=z + 20. spore-print-color: black=k,brown=n,buff=b,chocolate=h,green=r, + orange=o,purple=u,white=w,yellow=y + 21. population: abundant=a,clustered=c,numerous=n, + scattered=s,several=v,solitary=y + 22. habitat: grasses=g,leaves=l,meadows=m,paths=p, + urban=u,waste=w,woods=d + +8. Missing Attribute Values: 2480 of them (denoted by "?"), all for + attribute #11. + +9. Class Distribution: + -- edible: 4208 (51.8%) + -- poisonous: 3916 (48.2%) + -- total: 8124 instances diff --git a/test/haarcascade_frontalface_default.xml b/test/data/haarcascade_frontalface_default.xml similarity index 100% rename from test/haarcascade_frontalface_default.xml rename to test/data/haarcascade_frontalface_default.xml diff --git a/test/ml/ann_mlp_test.dart b/test/ml/ann_mlp_test.dart new file mode 100644 index 00000000..f063eec9 --- /dev/null +++ b/test/ml/ann_mlp_test.dart @@ -0,0 +1,12 @@ +import 'package:test/test.dart'; + +import 'package:opencv_dart/opencv_dart.dart' as cv; + +void main() { + test('cv.ANN_MLP', () { + final model = cv.ANN_MLP.create(); + expect(model.getTrainMethod(), cv.ANN_MLP.TRAIN_METHODS_RPROP); + model.setTrainMethod(cv.ANN_MLP.TRAIN_METHODS_BACKPROP); + expect(model.getTrainMethod(), cv.ANN_MLP.TRAIN_METHODS_BACKPROP); + }); +} diff --git a/test/ml/svm_test.dart b/test/ml/svm_test.dart new file mode 100644 index 00000000..7463333d --- /dev/null +++ b/test/ml/svm_test.dart @@ -0,0 +1,15 @@ +import 'package:test/test.dart'; + +import 'package:opencv_dart/opencv_dart.dart' as cv; + +void main() { + test('cv.SVM', () { + final model = cv.SVM.create(); + expect(model.getC(), closeTo(1.0, 1e-6)); + + model.setC(2.0); + expect(model.getC(), closeTo(2.0, 1e-6)); + + // model.save("svm.xml"); + }); +} diff --git a/test/ml/train_data_test.dart b/test/ml/train_data_test.dart new file mode 100644 index 00000000..198f9576 --- /dev/null +++ b/test/ml/train_data_test.dart @@ -0,0 +1,65 @@ +import 'package:test/test.dart'; + +import 'package:opencv_dart/opencv_dart.dart' as cv; + +void main() { + test('cv.TrainData static methods', () { + expect(cv.TrainData.missingValue(), greaterThan(0)); + final mat = cv.Mat.eye(3, 3, cv.MatType.CV_32FC1); + final idx = cv.Mat.zeros(1, 2, cv.MatType.CV_32SC1); + expect(cv.TrainData.getSubVector(mat, idx).shape, [2, 3, 1]); + expect(cv.TrainData.getSubMatrix(mat, idx, cv.COL_SAMPLE).shape, [3, 2, 1]); + }); + + test('cv.TrainData', () { + final data = cv.TrainData.loadFromCSV( + "test/data/agaricus-lepiota.data", + 0, + responseStartIdx: 0, + responseEndIdx: 1, + varTypeSpec: "cat[0-22]", + ); + expect(data.getCatCount(0), 6); + expect(data.getCatOfs().isEmpty, false); + expect(data.getClassLabels().isEmpty, false); + expect(data.getDefaultSubstValues().isEmpty, false); + expect(data.getLayout(), cv.ROW_SAMPLE); + expect(data.getMissing().isEmpty, false); + expect(data.getNAllVars(), 22); + expect(data.getNames().length, greaterThan(0)); + expect(data.getNormCatResponses().isEmpty, false); + expect(data.getNSamples(), 8124); + + data.setTrainTestSplit(5410); + expect(data.getNTestSamples(), 8124 - 5410); + expect(data.getNTrainSamples(), 5410); + + data.setTrainTestSplitRatio(0.8); + data.shuffleTrainTest(); + expect(data.getNTestSamples(), 8124 - (8124 * 0.8).toInt()); + expect(data.getNTrainSamples(), (8124 * 0.8).toInt()); + + expect(data.getNVars(), 22); + expect(data.getResponses().isEmpty, false); + expect(data.getResponseType(), 1); + // TODO: how to use? + // expect(data.getSample(cv.Mat.zeros(1, 3, cv.MatType.CV_32SC1), 0), false); + expect(data.getSamples().isEmpty, false); + expect(data.getSampleWeights().isEmpty, false); + expect(data.getTestNormCatResponses().isEmpty, false); + expect(data.getTestResponses().isEmpty, false); + expect(data.getTestSampleIdx().isEmpty, false); + expect(data.getTestSamples().isEmpty, false); + expect(data.getTestSampleWeights().isEmpty, false); + expect(data.getTrainNormCatResponses().isEmpty, false); + expect(data.getTrainResponses().isEmpty, false); + expect(data.getTrainSampleIdx().isEmpty, false); + expect(data.getTrainSamples().isEmpty, false); + expect(data.getTrainSampleWeights().isEmpty, false); + // TODO: how to use? + // expect(data.getValues().isEmpty, false); + expect(data.getVarIdx().isEmpty, true); + expect(data.getVarSymbolFlags().isEmpty, false); + expect(data.getVarType().isEmpty, false); + }); +} diff --git a/test/objdetect_test.dart b/test/objdetect_test.dart index b5a2a421..49c42abe 100644 --- a/test/objdetect_test.dart +++ b/test/objdetect_test.dart @@ -8,7 +8,7 @@ void main() async { expect(img.isEmpty, false); final classifier = cv.CascadeClassifier.empty(); - classifier.load("test/haarcascade_frontalface_default.xml"); + classifier.load("test/data/haarcascade_frontalface_default.xml"); final rects = classifier.detectMultiScale(img); expect(rects.length, 1); });