Browse Source

first commit

Julien Dehos 5 years ago
commit
ea926695cf
9 changed files with 1335 additions and 0 deletions
  1. 38 0
      README.md
  2. 16 0
      module_sucks
  3. 14 0
      pah/CMakeLists.txt
  4. 38 0
      pah/Makefile
  5. 3 0
      pah/env.sh
  6. 8 0
      pah/main.cpp
  7. 31 0
      pah/toto.cpp
  8. 3 0
      pah/toto.hpp
  9. 1184 0
      pah/values.csv

+ 38 - 0
README.md

@@ -0,0 +1,38 @@
+ml purge
+
+mkdir -p ~/tmp
+export MYPATH=$HOME/opt/module_sucks
+mkdir -p $MYPATH/modules
+cd $MYPATH/modules
+wget https://gogs.univ-littoral.fr/jdehos/calculco_armadillo/src/master/module_sucks
+module use $MYPATH/modules
+module load module_sucks 
+
+cd ~/tmp
+wget http://github.com/xianyi/OpenBLAS/archive/v0.2.20.tar.gz
+tar zxf v0.2.20.tar.gz
+cd OpenBLAS-0.2.20/
+make -j16 DYNAMIC_ARCH=1 
+make PREFIX=$MYPATH install
+
+cd ~/tmp
+wget https://www-lisic.univ-littoral.fr/~dehos/pub/armadillo-7.960.1.tar.gz
+tar zxf armadillo-7.960.1.tar.gz
+cd armadillo-7.960.1/
+mkdir build
+cd build
+cmake -DCMAKE_INSTALL_PREFIX=$MYPATH -Dopenblas_LIBRARY=$MYPATH/lib -DLAPACK_LIBRARY="$MYPATH/lib" -DBLAS_LIBRARY="$MYPATH/lib" ..
+make -j16
+make install
+
+cd ~/tmp
+wget https://github.com/opencv/opencv/archive/3.3.0.tar.gz
+tar zxf 3.3.0.tar.gz 
+cd opencv-3.3.0/
+mkdir build
+cd build
+cmake -DCMAKE_INSTALL_PREFIX=$MYPATH -DOpenBLAS_INCLUDE_DIR=$MYPATH/include -DOpenBLAS_LIB=$MYPATH/lib/libopenblas.so ..
+make -j16
+make install
+
+

+ 16 - 0
module_sucks

@@ -0,0 +1,16 @@
+#%Module -*- tcl -*-
+
+proc ModulesHelp { } {
+      puts stderr "module sucks" 
+}
+
+module-whatis "ugly patch for module"
+
+set          MS_ROOT       "$::env(HOME)/opt/module_sucks"
+
+append-path  CPATH            $MS_ROOT/include
+append-path  PATH             $MS_ROOT/bin
+append-path  LD_LIBRARY_PATH  $MS_ROOT/lib
+append-path  LIBRARY_PATH     $MS_ROOT/lib
+append-path  PKG_CONFIG_PATH  $MS_ROOT/lib/pkgconfig
+

+ 14 - 0
pah/CMakeLists.txt

@@ -0,0 +1,14 @@
+cmake_minimum_required( VERSION 3.0 )
+project( main )
+
+find_package( PkgConfig REQUIRED )
+pkg_check_modules( MYPKGS REQUIRED armadillo )
+include_directories( ${MYPKGS_INCLUDE_DIRS} )
+
+add_library( toto STATIC toto.cpp )
+target_link_libraries( toto ${MYPKGS_LIBRARIES} )
+
+add_executable( main main.cpp )
+target_link_libraries( main toto )
+install( TARGETS main DESTINATION bin )
+

+ 38 - 0
pah/Makefile

@@ -0,0 +1,38 @@
+PACKAGES = armadillo
+CXXFLAGS = -std=c++11 -Wall -Wextra 
+LDFLAGS = -larmadillo
+LIBS = 
+MAINSRC = ./src/main.cpp
+
+ifeq ($(DEBUG), 1)
+	CXXFLAGS += -DDEBUG -O0
+else
+	CXXFLAGS += -DNDEBUG -O2
+endif
+
+CXXFLAGS += `pkg-config --cflags $(PACKAGES)`
+LDFLAGS +=`pkg-config --libs-only-L --libs-only-other $(PACKAGES)`
+LIBS +=`pkg-config --libs-only-l $(PACKAGES)`
+BINDIR = ./bin
+OBJDIR = ./obj
+SRCDIR = ./src
+SRC = $(filter-out $(MAINSRC), $(shell find $(SRCDIR) -name *.cpp))
+OBJ = $(subst $(SRCDIR)/, $(OBJDIR)/, $(SRC:.cpp=.o))
+BIN = $(subst $(SRCDIR)/, $(BINDIR)/, $(MAINSRC:.cpp=.out))
+.PHONY: all clean
+.SECONDARY:
+all: ctags $(BIN)
+$(BINDIR)/%.out: $(OBJ) $(OBJDIR)/%.o
+	mkdir -p $(@D)
+	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
+$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
+	mkdir -p $(@D)
+	$(CXX) $(CXXFLAGS) -c $<  -o $@
+clean:
+	find $(OBJDIR) -name "*.o" | xargs rm 
+	rm $(BIN)
+ctags: $(SRC) $(MAINSRC)
+	ctags -R $(SRCDIR)
+
+
+

+ 3 - 0
pah/env.sh

@@ -0,0 +1,3 @@
+module use ~/opt/armadillo/modules
+module load armadillo 
+

+ 8 - 0
pah/main.cpp

@@ -0,0 +1,8 @@
+#include "toto.hpp"
+
+int main()
+{
+
+  toto();
+    return 0;
+}

+ 31 - 0
pah/toto.cpp

@@ -0,0 +1,31 @@
+#include <iostream>
+#include <armadillo>
+
+using namespace arma;
+
+void toto() {
+    // read data from csv file
+    mat data;
+    data.load("values.csv", csv_ascii);
+    data = data.t();
+    cout << data.t() << endl;
+    cout << "data size : " << data.n_rows << " , " << data.n_cols << endl;
+
+
+    // model the data as a diagonal GMM with 2 Gaussians
+
+    gmm_diag model;
+
+    bool status = model.learn(data, 3, eucl_dist, static_subset, 10, 10, 1e-0, true);
+
+    if(status == false)
+      {
+      cout << "learning failed" << endl;
+      }
+
+    model.hefts.print("weights:");
+    model.means.print("means:");
+    model.dcovs.print("dcovs:");
+
+}
+

+ 3 - 0
pah/toto.hpp

@@ -0,0 +1,3 @@
+
+void toto();
+

+ 1184 - 0
pah/values.csv

@@ -0,0 +1,1184 @@
+245, 245, 245
+245, 245, 245
+245, 245, 245
+245, 245, 245
+245, 245, 245
+244, 244, 244
+244, 244, 244
+245, 245, 245
+245, 245, 245
+251, 251, 251
+246, 246, 246
+246, 246, 246
+239, 239, 239
+239, 239, 239
+239, 239, 239
+238, 238, 238
+238, 238, 238
+239, 239, 239
+244, 244, 244
+243, 243, 243
+245, 245, 245
+244, 244, 244
+244, 244, 244
+244, 244, 244
+245, 245, 245
+245, 245, 245
+245, 245, 245
+245, 245, 245
+245, 245, 245
+245, 245, 245
+245, 245, 245
+242, 242, 242
+242, 242, 242
+242, 242, 242
+242, 242, 242
+242, 242, 242
+241, 241, 241
+241, 241, 241
+241, 241, 241
+241, 241, 241
+241, 241, 241
+241, 241, 241
+238, 238, 238
+238, 238, 238
+241, 241, 241
+241, 241, 241
+243, 243, 243
+243, 243, 243
+251, 251, 251
+249, 249, 249
+255, 255, 255
+250, 250, 250
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+239, 239, 239
+237, 237, 237
+237, 237, 237
+238, 238, 238
+244, 244, 244
+245, 245, 245
+245, 245, 245
+244, 244, 244
+245, 245, 245
+245, 245, 245
+244, 244, 244
+244, 244, 244
+238, 238, 238
+238, 238, 238
+237, 237, 237
+237, 237, 237
+235, 235, 235
+235, 235, 235
+235, 235, 235
+236, 236, 236
+236, 236, 236
+236, 236, 236
+238, 238, 238
+237, 237, 237
+241, 241, 241
+248, 248, 248
+245, 245, 245
+246, 246, 246
+245, 245, 245
+245, 245, 245
+246, 246, 246
+244, 244, 244
+244, 244, 244
+243, 243, 243
+244, 244, 244
+243, 243, 243
+239, 239, 239
+239, 239, 239
+239, 239, 239
+241, 241, 241
+241, 241, 241
+241, 241, 241
+241, 241, 241
+235, 235, 235
+235, 235, 235
+236, 236, 236
+234, 234, 234
+235, 235, 235
+236, 235, 237
+235, 234, 236
+237, 236, 238
+239, 238, 240
+237, 236, 238
+244, 243, 245
+239, 238, 240
+237, 236, 238
+237, 236, 238
+237, 236, 238
+237, 236, 238
+237, 236, 238
+237, 237, 237
+237, 237, 237
+237, 237, 237
+237, 237, 237
+237, 237, 237
+237, 237, 237
+236, 236, 236
+234, 234, 234
+234, 234, 234
+235, 235, 235
+235, 235, 235
+235, 235, 235
+235, 235, 235
+235, 235, 235
+235, 235, 235
+235, 235, 235
+235, 235, 235
+235, 235, 235
+236, 236, 236
+237, 237, 237
+235, 235, 235
+235, 235, 235
+235, 235, 235
+235, 235, 235
+235, 235, 235
+234, 234, 234
+234, 234, 234
+235, 235, 235
+235, 235, 235
+234, 234, 234
+234, 234, 234
+234, 234, 234
+234, 234, 234
+237, 237, 237
+237, 237, 237
+237, 237, 237
+239, 239, 239
+239, 239, 239
+239, 239, 239
+242, 242, 242
+242, 242, 242
+242, 242, 242
+242, 242, 242
+242, 242, 242
+242, 242, 242
+239, 239, 239
+242, 242, 242
+242, 242, 242
+239, 239, 239
+239, 239, 239
+236, 236, 236
+238, 238, 238
+235, 235, 235
+238, 238, 238
+248, 248, 248
+241, 241, 241
+248, 248, 248
+242, 242, 242
+237, 237, 237
+237, 237, 237
+237, 237, 237
+236, 236, 236
+237, 237, 237
+237, 237, 237
+237, 237, 237
+237, 237, 237
+237, 237, 237
+236, 236, 236
+234, 234, 234
+235, 235, 235
+234, 234, 234
+234, 234, 234
+238, 238, 238
+238, 238, 238
+238, 238, 238
+242, 242, 242
+237, 237, 237
+237, 237, 237
+237, 237, 237
+237, 237, 237
+237, 237, 237
+235, 235, 235
+237, 237, 237
+237, 237, 237
+237, 237, 237
+238, 238, 238
+237, 237, 237
+237, 237, 237
+239, 239, 239
+250, 250, 250
+248, 248, 248
+239, 239, 239
+239, 239, 239
+243, 243, 243
+243, 243, 243
+245, 245, 245
+248, 248, 248
+255, 255, 255
+251, 251, 251
+251, 251, 251
+251, 251, 251
+251, 251, 251
+248, 248, 248
+248, 248, 248
+248, 248, 248
+248, 248, 248
+252, 252, 252
+252, 252, 252
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+252, 252, 252
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+251, 251, 251
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+252, 252, 252
+252, 252, 252
+252, 252, 252
+252, 252, 252
+251, 251, 251
+251, 251, 251
+253, 253, 253
+255, 255, 255
+250, 250, 250
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 253, 253
+253, 253, 253
+255, 255, 255
+255, 255, 255
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+250, 250, 250
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+252, 252, 252
+252, 252, 252
+255, 255, 255
+255, 255, 255
+253, 253, 253
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+251, 251, 251
+252, 252, 252
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+253, 253, 253
+255, 255, 255
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+252, 252, 252
+250, 250, 250
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+251, 251, 251
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 253, 253
+255, 255, 255
+255, 255, 255
+253, 253, 253
+243, 243, 243
+239, 239, 239
+249, 249, 249
+253, 253, 253
+248, 248, 248
+250, 250, 250
+242, 242, 242
+250, 250, 250
+252, 252, 252
+252, 252, 252
+252, 252, 252
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+252, 252, 252
+252, 252, 252
+250, 250, 250
+251, 251, 251
+251, 251, 251
+244, 244, 244
+248, 248, 248
+242, 242, 242
+242, 242, 242
+245, 245, 245
+242, 242, 242
+255, 255, 255
+249, 249, 249
+251, 251, 251
+250, 250, 250
+241, 241, 241
+244, 244, 244
+245, 245, 245
+245, 245, 245
+245, 245, 245
+246, 246, 246
+250, 250, 250
+250, 250, 250
+249, 249, 249
+250, 250, 250
+244, 244, 244
+248, 248, 248
+249, 249, 249
+249, 249, 249
+250, 250, 250
+250, 250, 250
+250, 250, 250
+250, 250, 250
+250, 250, 250
+250, 250, 250
+245, 245, 245
+245, 245, 245
+245, 245, 245
+243, 243, 243
+245, 245, 245
+245, 245, 245
+244, 244, 244
+239, 239, 239
+244, 244, 244
+244, 244, 244
+238, 238, 238
+237, 237, 237
+234, 234, 234
+246, 246, 246
+246, 246, 246
+243, 243, 243
+244, 244, 244
+252, 252, 252
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+252, 252, 252
+252, 252, 252
+252, 252, 252
+252, 252, 252
+253, 253, 253
+253, 253, 253
+255, 255, 255
+252, 252, 252
+246, 246, 246
+246, 246, 246
+253, 253, 253
+253, 253, 253
+251, 251, 251
+251, 251, 251
+251, 251, 251
+251, 251, 251
+249, 249, 249
+244, 244, 244
+249, 249, 249
+249, 249, 249
+248, 248, 248
+252, 252, 252
+252, 252, 252
+252, 252, 252
+248, 248, 248
+252, 252, 252
+255, 255, 255
+255, 255, 255
+255, 255, 255
+251, 251, 251
+251, 251, 251
+252, 252, 252
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 255, 255
+255, 255, 255
+254, 255, 255
+254, 255, 255
+254, 255, 255
+253, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+252, 252, 252
+255, 255, 255
+255, 255, 255
+252, 252, 252
+252, 252, 252
+252, 252, 252
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 254, 255
+255, 254, 255
+255, 254, 255
+255, 254, 255
+253, 252, 254
+255, 255, 255
+255, 255, 255
+250, 249, 251
+250, 249, 251
+248, 247, 249
+251, 251, 251
+255, 255, 255
+250, 250, 250
+252, 252, 252
+250, 250, 250
+253, 253, 253
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 253, 253
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+252, 252, 252
+243, 243, 243
+255, 255, 255
+255, 255, 255
+248, 248, 248
+255, 255, 255
+255, 255, 255
+255, 255, 255
+251, 251, 251
+252, 252, 252
+252, 252, 252
+255, 255, 255
+252, 252, 252
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+250, 250, 250
+250, 250, 250
+251, 251, 251
+251, 251, 251
+251, 251, 251
+251, 251, 251
+251, 251, 251
+251, 251, 251
+251, 251, 251
+251, 251, 251
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+244, 244, 244
+245, 245, 245
+249, 249, 249
+249, 249, 249
+249, 249, 249
+249, 249, 249
+250, 250, 250
+250, 250, 250
+250, 250, 250
+250, 250, 250
+249, 249, 249
+250, 250, 250
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+249, 249, 249
+248, 248, 248
+251, 251, 251
+243, 243, 243
+250, 250, 250
+250, 250, 250
+250, 250, 250
+251, 251, 251
+255, 255, 255
+255, 255, 255
+248, 248, 248
+252, 252, 252
+250, 250, 250
+249, 249, 249
+249, 249, 249
+249, 249, 249
+253, 253, 253
+250, 250, 250
+255, 255, 255
+255, 255, 255
+251, 251, 251
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+252, 252, 252
+252, 252, 252
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 253, 253
+253, 253, 253
+253, 253, 253
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 253, 253
+253, 253, 253
+252, 252, 252
+246, 246, 246
+252, 252, 252
+242, 242, 242
+249, 249, 249
+253, 253, 253
+250, 250, 250
+246, 246, 246
+248, 248, 248
+248, 248, 248
+249, 249, 249
+249, 249, 249
+255, 255, 255
+250, 250, 250
+250, 250, 250
+243, 243, 243
+250, 250, 250
+248, 248, 248
+255, 255, 255
+250, 250, 250
+246, 246, 246
+246, 246, 246
+248, 248, 248
+248, 248, 248
+249, 249, 249
+253, 253, 253
+253, 253, 253
+250, 250, 250
+250, 250, 250
+250, 250, 250
+250, 250, 250
+246, 246, 246
+245, 245, 245
+250, 250, 250
+250, 250, 250
+250, 250, 250
+249, 249, 249
+250, 250, 250
+248, 248, 248
+249, 249, 249
+249, 249, 249
+250, 250, 250
+248, 248, 248
+249, 249, 249
+248, 248, 248
+244, 244, 244
+244, 244, 244
+249, 249, 249
+255, 255, 255
+252, 252, 252
+252, 252, 252
+252, 252, 252
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 253, 253
+253, 253, 253
+253, 253, 253
+250, 250, 250
+251, 251, 251
+255, 254, 255
+255, 255, 255
+255, 255, 255
+251, 250, 252
+251, 250, 252
+251, 250, 252
+251, 250, 252
+253, 252, 254
+250, 249, 251
+243, 242, 244
+239, 238, 240
+252, 251, 253
+249, 249, 249
+249, 249, 249
+246, 246, 246
+248, 248, 248
+248, 248, 248
+248, 248, 248
+248, 248, 248
+246, 246, 246
+248, 248, 248
+248, 248, 248
+248, 248, 248
+250, 250, 250
+255, 255, 255
+255, 255, 255
+248, 248, 248
+248, 248, 248
+248, 248, 248
+248, 248, 248
+248, 248, 248
+248, 248, 248
+248, 248, 248
+248, 248, 248
+248, 248, 248
+248, 248, 248
+255, 255, 255
+255, 255, 255
+255, 255, 255
+252, 252, 252
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+250, 250, 250
+250, 250, 250
+250, 250, 250
+250, 250, 250
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+253, 253, 253
+244, 244, 244
+246, 246, 246
+246, 246, 246
+246, 246, 246
+246, 246, 246
+249, 249, 249
+251, 251, 251
+235, 235, 235
+231, 231, 231
+231, 231, 231
+231, 231, 231
+231, 231, 231
+231, 231, 231
+232, 232, 232
+234, 234, 234
+234, 234, 234
+232, 232, 232
+234, 234, 234
+234, 234, 234
+249, 249, 249
+249, 249, 249
+250, 250, 250
+245, 245, 245
+245, 245, 245
+245, 245, 245
+246, 246, 246
+246, 246, 246
+250, 250, 250
+245, 245, 245
+243, 243, 243
+243, 243, 243
+248, 248, 248
+244, 244, 244
+244, 244, 244
+244, 244, 244
+244, 244, 244
+244, 244, 244
+244, 244, 244
+244, 244, 244
+239, 239, 239
+239, 239, 239
+239, 239, 239
+243, 243, 243
+248, 248, 248
+248, 248, 248
+249, 249, 249
+245, 245, 245
+249, 249, 249
+245, 245, 245
+249, 249, 249
+245, 245, 245
+245, 245, 245
+244, 244, 244
+241, 241, 241
+241, 241, 241
+244, 244, 244
+245, 245, 245
+244, 244, 244
+246, 246, 246
+249, 249, 249
+248, 248, 248
+248, 248, 248
+248, 248, 248
+248, 248, 248
+248, 248, 248
+244, 244, 244
+244, 244, 244
+245, 245, 245
+244, 244, 244
+243, 243, 243
+243, 243, 243
+243, 243, 243
+243, 243, 243
+242, 242, 242
+246, 246, 246
+246, 246, 246
+246, 246, 246
+248, 248, 248
+245, 245, 245
+246, 246, 246
+245, 245, 245
+242, 242, 242
+241, 241, 241
+246, 246, 246
+241, 241, 241
+242, 242, 242
+242, 242, 242
+242, 242, 242
+241, 241, 241
+241, 241, 241
+242, 242, 242
+252, 252, 252
+251, 251, 251
+253, 253, 253
+251, 251, 251
+251, 251, 251
+251, 251, 251
+251, 251, 251
+251, 251, 251
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+248, 248, 248
+250, 250, 250
+243, 243, 243
+245, 245, 245
+245, 245, 245
+245, 245, 245
+245, 245, 245
+246, 246, 246
+253, 253, 253
+246, 246, 246
+255, 255, 255
+249, 249, 249
+241, 241, 241
+241, 241, 241
+241, 241, 241
+241, 241, 241
+241, 241, 241
+245, 245, 245
+251, 251, 251
+244, 244, 244
+250, 250, 250
+250, 250, 250
+242, 242, 242
+237, 237, 237
+246, 246, 246
+244, 244, 244
+246, 246, 246
+249, 249, 249
+253, 253, 253
+249, 249, 249
+245, 245, 245
+249, 249, 249
+246, 246, 246
+243, 243, 243
+245, 245, 245
+243, 243, 243
+249, 249, 249
+246, 246, 246
+255, 255, 255
+252, 252, 252
+252, 252, 252
+255, 255, 255
+255, 255, 255
+252, 252, 252
+255, 255, 255
+255, 255, 255
+252, 252, 252
+250, 250, 250
+255, 255, 255
+255, 255, 255
+255, 255, 255
+252, 252, 252
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+246, 246, 246
+252, 252, 252
+248, 248, 248
+246, 246, 246
+249, 249, 249
+249, 249, 249
+249, 249, 249
+241, 241, 241
+246, 246, 246
+248, 248, 248
+244, 244, 244
+255, 255, 255
+255, 255, 255
+242, 242, 242
+246, 246, 246
+255, 255, 255
+252, 252, 252
+252, 252, 252
+252, 252, 252
+252, 252, 252
+252, 252, 252
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+255, 255, 255
+251, 251, 251