Tried compiling my own PREEMPT kernel, but it had many issues and ran worse than the generic kernel. I only enabled PREEMPT and did not change any other options. I assume the RT kernel they are packaging is tweaked for better real time. I noticed the CPU wasn't scaling down with the CERN RT kernel.
NOTE: To change eth0 if you move drives, simply change HWADDRESS to match ifconfig of eth0 and leave the generated UUID as the OS created it. This UUID is random and means nothing, but it might appear in other scripts and have to stay the same.
NOTE!! This is where I got the idea to run our thread at priority 99, which is directly contradicted by the following page which makes clear there are some things that need to run at higher priority than our program https://rt.wiki.kernel.org/index.php/HOWTO:_Build_an_RT-application which states:
Do not configure your application to run with priority 99. There are a few management threads which need to run with higher priority then your application, e.g. watchdogs threads.
Ran this in a second login to create disk load:
time sudo sh -c "dd if=/dev/zero of=/mnt/data/ddfile bs=8k count=2000000 && sync" # writes 16GB
SUCCESS! (rt kernel)
[lvis@lvisf-centos65 rt-tests]$ uname -a Linux lvisf-centos65 2.6.33.9-rt31.79.el6rt.x86_64 #1 SMP PREEMPT RT Wed Jan 11 13:54:22 CET 2012 x86_64 x86_64 x86_64 GNU/Linux [lvis@lvisf-centos65 rt-tests]$ sudo ./cyclictest -a -t -n -p99 -f -b100 [sudo] password for lvis: # /dev/cpu_dma_latency set to 0us INFO: debugfs mountpoint: /sys/kernel/debug/tracing/ policy: fifo: loadavg: 1.81 1.79 1.12 2/220 11904 T: 0 (11851) P:99 I:1000 C: 231860 Min: 20 Act: 27 Avg: 26 Max: 85 T: 1 (11852) P:99 I:1500 C: 154572 Min: 22 Act: 28 Avg: 28 Max: 72 T: 2 (11853) P:99 I:2000 C: 115929 Min: 22 Act: 26 Avg: 27 Max: 65 T: 3 (11854) P:99 I:2500 C: 92743 Min: 22 Act: 28 Avg: 28 Max: 58
FAIL! (Spectrum Default Kernel)
^C[lvis@lvisf rt-tests-1.0]$ uname -a Linux lvisf 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux [lvis@lvisf rt-tests-1.0]$ sudo ./cyclictest -a -t -n -p99 # /dev/cpu_dma_latency set to 0us policy: fifo: loadavg: 0.28 0.35 0.15 1/133 2044 T: 0 ( 1897) P:99 I:1000 C: 288733 Min: 1 Act: 3 Avg: 7 Max: 66553 T: 1 ( 1898) P:99 I:1500 C: 192622 Min: 1 Act: 3 Avg: 2 Max: 543 T: 2 ( 1899) P:99 I:2000 C: 144466 Min: 2 Act: 3 Avg: 3 Max: 7 T: 3 ( 1900) P:99 I:2500 C: 115573 Min: 2 Act: 3 Avg: 3 Max: 8 ^C[lvis@lvisf rt-tests-1.0]$ sudo ./cyclictest -a -t -n -p99 # /dev/cpu_dma_latency set to 0us policy: fifo: loadavg: 0.08 0.35 0.20 1/132 2083 T: 0 ( 2061) P:99 I:1000 C: 226186 Min: 1 Act: 2 Avg: 7 Max: 270059 T: 1 ( 2062) P:99 I:1500 C: 150977 Min: 1 Act: 3 Avg: 2 Max: 603 T: 2 ( 2063) P:99 I:2000 C: 113232 Min: 2 Act: 3 Avg: 3 Max: 8 T: 3 ( 2064) P:99 I:2500 C: 90586 Min: 2 Act: 3 Avg: 3 Max: 10
kboardconfig PciCfgDelay 5s
kboardconfig PciCfgDelay # will see [5s] highlighted in green (and that is the longest delay available)
kboardconfig IntelVT disabled kboardconfig IntelHT disabled
exit
YES, the igb driver is a part of the CentOS minimal package, so no need for GH Ethernet CPCI card.
ONBOOT=yes
service network restart
useradd lvis
passwd lvis
visudo
lvis ALL=(ALL) ALL
yum update reboot
yum groupinstall 'Development Tools'
yum install wget -y
mkdir ~/download cd ~/download wget https://downloadmirror.intel.com/13663/eng/igb-5.3.5.3.tar.gz
cd /etc/yum.repos.d/ sudo wget http://glitesoft.cern.ch/cern/mrg/slc6-mrg.repo cd /etc/pki/rpm-gpg/ sudo wget http://ftp.scientificlinux.org/linux/scientific/5x/x86_64/RPM-GPG-KEYs/RPM-GPG-KEY-cern
sudo yum groupinstall "MRG Realtime"
sudo yum install kernel-rt-devel
Went to run the Latency Test and just as bad as ever.
cd ~/download wget http://glitesoft.cern.ch/cern/mrg/slc6X/x86_64/RPMS/kernel-rt-2.6.33.9-rt31.79.el6rt.x86_64.rpm
wget http://glitesoft.cern.ch/cern/mrg/slc6X/x86_64/RPMS/kernel-rt-devel-2.6.33.9-rt31.79.el6rt.x86_64.rpm
sudo rpm -i --force kernel-rt-2.6.33.9-rt31.79.el6rt.x86_64.rpm sudo rpm -i --force kernel-rt-devel-2.6.33.9-rt31.79.el6rt.x86_64.rpm
SKIP THIS, NOT NECESSARY
sudo yum install rpm-build redhat-rpm-config asciidoc bison hmaccalc patchutils perl-ExtUtils-Embed xmlto sudo yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel sudo yum install newt-devel python-devel zlib-devel
cd ~/download wget http://glitesoft.cern.ch/cern/mrg/slc6X/x86_64/SRPMS/kernel-rt-2.6.33.9-rt31.79.el6rt.src.rpm
rpm -i ~/download/kernel-rt-2.6.33.9-rt31.79.el6rt.src.rpm
cd ~/rpmbuild/SPECS rpmbuild -bp --target=$(uname -m) kernel-rt.spec
cd ~/rpmbuild/BUILD/kernel-2.6.33/linux-2.6.33.x86_64 make -j4 # build with 4 cores
TRY THIS!
mkdir ~/code cd ~/code tar xvf igb-5.3.4.4.tar.gz
cd ~/code/igb-5.3.4.4/src/ nano kcompat.h # see below the section to remove (this define does not appear to work) ## DELETE THIS SECTION OF THE SOURCE CODE ### #if (!(RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(5,7)) || \ (RHEL_RELEASE_CODE == RHEL_RELEASE_VERSION(6,0))) static inline __be16 vlan_get_protocol(const struct sk_buff *skb) { if (vlan_tx_tag_present(skb) || skb->protocol != cpu_to_be16(ETH_P_8021Q)) return skb->protocol; if (skb_headlen(skb) < sizeof(struct vlan_ethhdr)) return 0; return ((struct vlan_ethhdr*)skb->data)->h_vlan_encapsulated_proto; } #endif /* !RHEL5.7+ || RHEL6.0 */
make sudo make install
sudo nano /etc/sysconfig/modules/lvisf.modules
#!/bin/sh # start intel network driver /sbin/modprobe igb
sudo chmod 755 /etc/sysconfig/modules/lvisf.modules
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 HWADDR=00:80:82:1B:E7:04 TYPE=Ethernet UUID=98bd88d8-8fe8-4b8e-bca0-a58bd3306717 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static NAME="System eth0" IPADDR=10.4.1.2 NETMASK=255.255.255.0 DNS1=128.183.10.134 DNS2=128.183.50.17 DOMAIN="gsfc.nasa.gov ndc.nasa.gov" GATEWAY="10.4.1.254" # GATEWAY="10.4.1.1"
vi /etc/sysconfig/network
NETWORKING=yes HOSTNAME=lvisf NETWORKING_IPV6=no IPV6INIT=no GATEWAY=10.4.1.254 # GATEWAY=10.4.1.1
vi /etc/resolv.conf
search gsfc.nasa.gov nameserver 128.183.10.134 nameserver 128.183.50.17
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1 sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1 HWADDR=00:80:82:1B:E7:05 TYPE=Ethernet UUID=5eb0ea0f-b1e8-43ab-a64d-83d3d9e1dc95 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static NAME="System eth1" IPADDR=192.168.0.2 NETMASK=255.255.255.0
vi /etc/sysconfig/network-scripts/ifcfg-eth1:1
DEVICE=eth1:1 HWADDR=00:80:82:1B:E7:05 TYPE=Ethernet UUID=5eb0ea0f-b1e8-43ab-a64d-83d3d9e1dc95 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static NAME="System eth1:1" IPADDR=129.100.0.2 NETMASK=255.255.255.0
sudo yum install epel-release
sudo yum install fuse fuse-ntfs-3g
sudo yum install epel-release sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
sudo yum install exfat-utils fuse-exfat
An example mounting an Exfat system is
sudo mount -t exfat /dev/sdc1 /mnt/tmp
sudo yum install cmake
sudo yum install htop
sudo yum install ftp://ftp.pbone.net/mirror/centos.karan.org/el5/extras/testing/i386/RPMS/jed-0.99.18-5.el5.kb.i386.rpm
sudo yum install nano
sudo yum install p7zip
sudo yum install pciutils
sudo yum install telnet
sudo yum install wget
sudo yum groupinstall "Development Tools"
sudo yum install openssl-devel
sudo yum install screen
sudo yum install md5deep
sudo yum install man sudo yum install man-pages
# core X11 sudo yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-utils xterm # required for tuna sudo yum install xauth pygtk2-libglade
Let's remove EVERYTHING on this system we don't care about.
sudo yum remove postfix
sudo service iptables stop sudo service ip6tables stop
sudo chkconfig iptables off sudo chkconfig ip6tables off
sudo vi /etc/selinux/config
SELINUX=enforcing
SELINUX=disabled
sudo service auditd stop # now sudo chkconfig auditd off # after reboot
# lvisf - ipv4 only AddressFamily inet ListenAddress 0.0.0.0
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1 sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo mkdir /opt/lvisf
sudo chown -R lvis:lvis /opt/lvisf
cd / tar jxvf /media/LVIS-GH-2TB_WD209/lvisf_build/lvisf_sourcesnapshot_20160816_svn439.tar.bz2
cd /opt/lvisf svn co https://svn.yancich.com:8443/svn/NASA/LVIS/trunk/ src
cd /opt/lvisf/src svn update
cd /home/lvis mkdir src ln -s /opt/lvisf/src/* /home/lvis/src/
nano /home/lvis/.bash_profile
# For the Innovative digitizer export WD_BASEDIR=/home/lvis/src/Innovative/WinDriver # For the SyncClock timer card export PLX_SDK_DIR=/home/lvis/src/PLX/PlxSdk # For the spectrum digitizer export SSP_INSTALL_ROOT=/home/lvis/src/spectrum # SVN editor export SVN_EDITOR=nano
sudo nano /etc/ld.so.conf.d/lvisf.conf
/home/lvis/src/spectrum/shared/linux/pc64/lib /home/lvis/src/MIC3753/linux_driver_source_3.2.7.0_64bit/libs
sudo ldconfig
mkdir ~/bin
ln -s /opt/lvisf/src/lvisF/scripts/run* ~/bin/
cd /home/lvis/src/PLX/PlxSdk/Driver
./buildalldrivers
cd /home/lvis/src/PLX/PlxSdk
make
cd /home/lvis/src/PLX/PlxSdk/Bin
sudo ./Plx_load 9030 # to just see what boards are supported, run the script with no argument ./Plx_load
NOT REQUIRED
We have reverted to the original factory drivers
; compile and insert the kernel module
cd /opt/lvisf/src/lvisF/ko make sudo insmod /opt/lvisf/src/lvisF/ko/lvisf_mic3753.ko sudo mknod /dev/lvisf_mic3753 c 100 0
NOTE These drivers NEED to be built as root, you cannot sudo to build these drivers
sudo bash
cd /home/lvis/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/driver_base/src/lnx_ko
make
cd /home/lvis/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/pci1753_mic3753_pcm3753i/src/lnx_ko
make
cd /home/lvis/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/bin insmod biokernbase.ko insmod bio1753.ko
exit
sudo ln -s /opt/lvisf/src/spectrum /spectrum
cd /home/lvis/src/spectrum/shared/linux/pc64/bin
cp -a /home/lvis/src/spectrum/shared/linux/pc64/bin/`uname -r`/*.ko /home/lvis/src/spectrum/shared/linux/pc64/bin/
chmod 755 *.sh # not sure why these were not already executable sudo bash ./setup_xmc1151_dvt.sh
sudo ln -s /opt/lvisf/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/bin/*.ko /lib/modules/2.6.33.9-rt31.79.el6rt.x86_64/kernel/drivers/misc/
sudo nano /etc/sysconfig/modules/lvisf.modules
# start the MIC-3753 drivers /sbin/modprobe biokernbase /sbin/modprobe bio1753
NOTE: (in lieu of step 2 below) I had this not work when I manually edited it the first time. A copy of the file is in the repository, you could just copy that file in:
sudo cp /opt/lvisf/src/lvisF/scripts/lvisf.modules /etc/sysconfig/modules/lvisf.modules
sudo ln -s /opt/lvisf/src/PLX/PlxSdk/Driver/Source.Plx9000/Output/Plx9030.ko /lib/modules/2.6.33.9-rt31.79.el6rt.x86_64/kernel/drivers/misc/
sudo nano /etc/sysconfig/modules/lvisf.modules
# start the Plx9030 syncclock32 driver /sbin/modprobe Plx9030
# remove the symlink sudo rm /etc/rc.local # move the original to something else sudo mv /etc/rc.d/rc.local /etc/rc.d/rc.local_orig
sudo ln -s /opt/lvisf/src/lvisF/scripts/rc.local /etc/rc.d/rc.local sudo ln -s /etc/rc.d/rc.local /etc/rc.local
The boost C++ library is required for the data system. The tarball of the 1.6.2 version is in the repository.
cd /opt sudo tar -jxvf /opt/lvisf/src/tars/boost_1_62_0.tar.bz2
sudo ln -s /opt/boost_1_62_0 /opt/boost
sudo chown -R lvis:lvis /opt/boost_1_62_0
nano /home/lvis/.bash_profile
# Add the boost root directory export BOOST_ROOT=/opt/boost
cd /opt/boost ./bootstrap.sh ./b2
Follow the instructions below to compile the USB temperature monitoring device libraries required.
Described in LinuxNotes.pdf (might be this /usr/Innovative/MalibuRed-1.3/KerPlug/LinuxNotes.pdf)
sudo ln -s /opt/lvisf/src/Innovative /usr/Innovative
tar -zxvf /opt/lvisf/src/tars/64WinDriver-12.3-0.X86_64.tgz.tar.gz --directory=/usr/Innovative/
cd /usr/Innovative rm /usr/Innovative/WinDriver ln -s WinDriver-12.3 WinDriver
cd /usr/Innovative/WinDriver/redist
./configure make sudo make install # they say do not do this, we live on the edge
cd /usr/Innovative/KerPlug/linux ./configure make
nano Makefile
MOD_CSRCS = $(WD_BASEDIR)/redist/linux_wrappers.c
MOD_CSRCS = ../../../../../../../$(WD_BASEDIR)/redist/linux_wrappers.c
make
sudo insmod LINUX.2.6.33.9-rt31.79.el6rt.x86_64.x86_64/kp_malibu_module.ko
cd /usr/Innovative/KerPlug sudo ./quicklink wdapi 1230
Raw code from /etc/rc.local from the primary machine to load this
sudo bash cd /usr/Innovative/WinDriver-12.3/redist && ./wdreg LINUX.2.6.33.9-rt31.79.el6rt.x86_64.x86_64/windrvr1230 auto #/usr/Innovative/winCloudDrvr/winclouddrvr_installation/redist/wdreg winCloudDrvr auto #chmod 666 /dev/winCloudDrvr insmod /usr/Innovative/KerPlug/linux/LINUX.2.6.33.9-rt31.79.el6rt.x86_64.x86_64/kp_malibu_module.ko exit
In the field we noticed that the driver was saying unregistered, and would only run for 60 minutes (sometimes it ran longer, but this was an issue). Dave found these instructions from an email:
FIRST! Make sure this folder exists: /usr/Innovative/Lib/Dll (and it is linked to the Innovative folder in src) Make sure LicenseLoader.so exists in that folder. (I have attached that file and a tar of the 3 others needed to rebuild) Hopefully its just that the .so did not make it to that system disk. If is does exist: Copy all the files in the tar to: /home/lvis/src/Innovative/Malibu Cd to /home/lvis/src/Innovative/Malibu/Qt/Os_Mb “qmake-qt4” “make” This will make the Os library and copy it to the correct folder. “That is all I got” 😊 Dave
rhgb quiet
nosoftlockup mce=ignore_ce audit=0 maxcpus=2
kernel /vmlinuz-2.6.33.9-rt31.79.el6rt.x86_64 ro root=/dev/mapper/vg_lvisf-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_lvisf/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_lvisf/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet nosoftlockup mce=ignore_ce audit=0 maxcpus=2
cd /home/lvis/src/lvisF/build
cmake ../
make
sudo fdisk -H 224 -S 56 /dev/sdb
sudo mkfs.ext2 /dev/sdb1 -L LVISF_INTERNAL
ls -l /dev/disk/by-label
sudo mkdir /mnt/internal
sudo nano /etc/fstab
LABEL=LVISF_INTERNAL /mnt/internal ext2 defaults 0 0
sudo ln -s /mnt/internal /mnt/data
sudo yum install nfs-utils nfs-utils-lib
sudo chkconfig nfs on sudo service rpcbind start sudo service nfs start
sudo nano /etc/exports
/mnt/internal 10.4.1.4(ro,sync,no_root_squash,no_subtree_check)
sudo exportfs -a
Interrupts are BACK! timing03 test by isolating cpu3, and then putting the IRQ for the timer card on that CPU appears to have worked. I think I was using the wrong value in the smp_affinity for /proc/irq/17/ entry. I was putting the actual CPU, but it appears to be a mask of some kind. The tuna program put the correct value in there (7 = 0-2 and 8 = 3 ?) I think.
KEYTABLE=us rd_NO_DM rhgb quiet noht isolcpus=3 nosoftlockup mce=ignore_ce audit=0 intel_idle.max_cstate=0 processor.max_cstate=0 idle=poll
# isolate CPU 1 and 3 (which are physical CPU 1 leaving the primary for regular OS) /usr/bin/tuna --cpus=1,3 --isolate
# move the timer card IRQ (17 for 0x9030 syncclock32 card) /usr/bin/tuna --irqs=17 --cpus=1 --move
FYI, you can save the configuration with this command line
sudo /usr/bin/tuna --save=/tmp/tuna.config
run1 # does the full 40 second Spectrum XMC-1151 calibration or run1nocal # if you want to skip the 40 second Spectrum XMC-1151 calibration
run2
run3
Timing considerations
163,840 bytes is two channels of 4k samples for 10 shots (4096 * 2 * 2 * 10) /2*1024*1024*1024 = 76 microseconds
76 microseconds every 2.5 milliseconds is NOT A LOT!
or all of it (for 30,000 feet) (32768*2*2) / 2*1024*1024*1024 = 61 microseconds per shots (or everyon 250 microseconds
Resurrected timing03 to investigate interrupts — David Lloyd Rabine 2017/02/09 11:55
To run timing03 (as of 2017.02.09) it can use the same receiver (aka lvisf)
Short instructions
run1nocal
runtiming03
tuna might have saved the day!
sudo insmod /home/lvis/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/bin/biokernbase.ko sudo insmod /home/lvis/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/bin/bio1753.ko cd /home/lvis/src/PLX/PlxSdk/Bin sudo ./Plx_load 9030
cd /opt/lvisf/src/lvisF/build/ sudo chrt --fifo 99 ./bin/tests/timing04/timing04
SVN Revision 378 timing04 Total interrupts = 214748056 00 11 (0.000005) 01 10 (0.000005) 02 6 (0.000003) 03 8 (0.000004) 04 8439881 (3.930279) 05 9181555 (4.275661) 06 8656159 (4.030995) 07 14232072 (6.627583) 08 166745360 (77.649887) 09 7277561 (3.389011) 10 191284 (0.089077) 11 6471 (0.003013) 12 4103 (0.001911) 13 5352 (0.002492) 14 34 (0.000016) 15 18 (0.000008) 16 15 (0.000007) 17 18 (0.000008) 18 19 (0.000009) 19 6 (0.000003) 20 6 (0.000003) 21 17 (0.000008) 22 9 (0.000004) 23 13 (0.000006) 24 2 (0.000001) 25 0 (0.000000) 26 0 (0.000000) 27 0 (0.000000) 28 0 (0.000000) 29 0 (0.000000)
SVN Revision 379 timing03 (added stats to PLX interrupt test) FYI, thread priority wasn't even HIGH! galvThread: Scheduler settings of DoWork thread policy=SCHED_FIFO, priority=5 00 0 (0.000000) 01 0 (0.000000) 02 0 (0.000000) 03 0 (0.000000) 04 0 (0.000000) 05 0 (0.000000) 06 0 (0.000000) 07 2 (0.000014) 08 2033 (0.014115) 09 2967 (0.020599) 10 1384397 (9.611487) 11 12906360 (89.605298) 12 106019 (0.736061) 13 372 (0.002583) 14 280 (0.001944) 15 184 (0.001277) 16 375 (0.002604) 17 358 (0.002485) 18 206 (0.001430) 19 15 (0.000104) 20 0 (0.000000) 21 0 (0.000000) 22 0 (0.000000) 23 0 (0.000000) 24 0 (0.000000) 25 0 (0.000000) 26 0 (0.000000) 27 0 (0.000000) 28 0 (0.000000) 29 0 (0.000000) 30 0 (0.000000) 31 0 (0.000000)
Says ZERO missed shots, but there are a couple of times that are suspect… BUT, overall, looking great. Acceptable lost shots in my opinion for a non hard real time OS.
SVN Revision 380 and timing03 Total Shots = 14404168 (and 14404170) Total Missed Shots = 0 00 2 (0.000014) 01 0 (0.000000) 02 2 (0.000014) 03 3 (0.000021) 04 3 (0.000021) 05 5 (0.000035) 06 1 (0.000007) 07 4 (0.000028) 08 1935 (0.013434) 09 2676 (0.018578) 10 1980021 (13.746167) 11 12304306 (85.421845) 12 113162 (0.785620) 13 542 (0.003763) 14 293 (0.002034) 15 210 (0.001458) 16 396 (0.002749) 17 362 (0.002513) 18 216 (0.001500) 19 20 (0.000139) 20 3 (0.000021) 21 1 (0.000007) 22 2 (0.000014) 23 1 (0.000007) 24 2 (0.000014) 25 0 (0.000000) 26 0 (0.000000) 27 0 (0.000000) 28 0 (0.000000) 29 0 (0.000000) 30 0 (0.000000) 31 0 (0.000000)
00 13 (0.000007) 01 4 (0.000002) 02 6 (0.000003) 03 6 (0.000003) 04 7959297 (4.079181) 05 8363128 (4.286146) 06 7973271 (4.086342) 07 12581677 (6.448174) 08 151407385 (77.597063) 09 6616644 (3.391064) 10 203955 (0.104528) 11 5439 (0.002788) 12 3784 (0.001939) 13 5238 (0.002685) 14 45 (0.000023) 15 14 (0.000007) 16 12 (0.000006) 17 13 (0.000007) 18 6 (0.000003) 19 12 (0.000006) 20 6 (0.000003) 21 14 (0.000007) 22 12 (0.000006) 23 11 (0.000006) 24 2 (0.000001) 25 0 (0.000000) 26 0 (0.000000) 27 0 (0.000000) 28 0 (0.000000) 29 0 (0.000000)