tag:blogger.com,1999:blog-57517433337281600122024-03-12T23:20:57.817-06:00CIAduck's Tech SpotNotes on TechnologyUnknownnoreply@blogger.comBlogger33125tag:blogger.com,1999:blog-5751743333728160012.post-42668453881424339982021-06-26T13:37:00.006-06:002021-06-26T13:46:27.834-06:00ZFS Diagnose and Replace Bad Disk<h1 style="text-align: left;"> Discovering a Bad Disk</h1><h3 style="text-align: left;">zpool status <br /></h3><p style="text-align: left;">I check my ZFS pools regularly. Proxmox is nice, because it will send you emails, but other systems might not. Still, I make it a curiosity once a week to manually check the size and health of my storage pools.</p><blockquote><code><p style="text-align: left;">~$ zfs list<br />NAME USED AVAIL REFER MOUNTPOINT<br />tank 8.74T 1.81T 8.53T /tank<br />~$ zpool status<br /> pool: tank<br /> state: ONLINE<br />status: One or more devices has experienced an unrecoverable error. An<br /> attempt was made to correct the error. Applications are unaffected.<br />action: Determine if the device needs to be replaced, and clear the errors<br /> using 'zpool clear' or replace the device with 'zpool replace'.<br /> see: http://zfsonlinux.org/msg/ZFS-8000-9P<br /> scan: resilvered 2.20M in 0 days 00:00:10 with 0 errors on Sat Jun 26 04:06:30 2021<br />config:<br /><br /> NAME STATE READ WRITE CKSUM<br /> tank ONLINE 0 0 0<br /> raidz1-0 ONLINE 0 0 0<br /> wwn-0x5000c50079975b01 ONLINE 0 0 3<br /> wwn-0x5000039fe3cf4293 ONLINE 0 0 0<br /> wwn-0x5000039fe3cfcb2f ONLINE 0 0 0<br /> wwn-0x5000039fe3cf3491 ONLINE 0 0 0<br /> wwn-0x5000039fe3cfbe45 ONLINE 0 0 0<br /><br />errors: No known data errors<br /></p></code></blockquote><h3 style="text-align: left;">smartctl <br /></h3><p>We can see from the zpool status that one of our disks has a problem. The pool status is reporting an error, and we can see one disk has failed checksums 3 times. But is this disk bad? I can check it with smartctl.</p><p>I've allocated my pool disks by ID, so zpool status will report the disks using that ID. To check a disk with smartctl, simply pass the command the path using the same disk ID.</p><p>Note: Some OSes, need to have smartctl installed. In Ubuntu, it can be installed using "sudo apt install smartmontools"</p><blockquote><code><p>~$ sudo smartctl -x /dev/disk/by-id/wwn-0x5000c50079975b01<br />smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-77-generic] (local build)<br />Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org<br /><br />=== START OF INFORMATION SECTION ===<br />Model Family: Seagate Barracuda 7200.14 (AF)<br />Device Model: ST3000DM001-1ER166<br />Serial Number: Z500JERL<br />LU WWN Device Id: 5 000c50 079975b01<br />Firmware Version: CC25<br />User Capacity: 3,000,592,982,016 bytes [3.00 TB]<br />Sector Sizes: 512 bytes logical, 4096 bytes physical<br />Rotation Rate: 7200 rpm<br />Form Factor: 3.5 inches<br />Device is: In smartctl database [for details use: -P show]<br />ATA Version is: ACS-2, ACS-3 T13/2161-D revision 3b<br />SATA Version is: SATA 3.1, 6.0 Gb/s (current: 3.0 Gb/s)<br />Local Time is: Sat Jun 26 18:15:07 2021 UTC<br />SMART support is: Available - device has SMART capability.<br />SMART support is: Enabled<br />AAM feature is: Unavailable<br />APM level is: 128 (minimum power consumption without standby)<br />Rd look-ahead is: Enabled<br />Write cache is: Enabled<br />DSN feature is: Unavailable<br />ATA Security is: Disabled, frozen [SEC2]<br />Wt Cache Reorder: Unavailable<br /><br />=== START OF READ SMART DATA SECTION ===<br />SMART overall-health self-assessment test result: PASSED<br /><br />General SMART Values:<br />Offline data collection status: (0x00) Offline data collection activity<br /> was never started.<br /> Auto Offline Data Collection: Disabled.<br />Self-test execution status: ( 0) The previous self-test routine completed<br /> without error or no self-test has ever<br /> been run.<br />Total time to complete Offline<br />data collection: ( 89) seconds.<br />Offline data collection<br />capabilities: (0x73) SMART execute Offline immediate.<br /> Auto Offline data collection on/off support.<br /> Suspend Offline collection upon new<br /> command.<br /> No Offline surface scan supported.<br /> Self-test supported.<br /> Conveyance Self-test supported.<br /> Selective Self-test supported.<br />SMART capabilities: (0x0003) Saves SMART data before entering<br /> power-saving mode.<br /> Supports SMART auto save timer.<br />Error logging capability: (0x01) Error logging supported.<br /> General Purpose Logging supported.<br />Short self-test routine<br />recommended polling time: ( 1) minutes.<br />Extended self-test routine<br />recommended polling time: ( 330) minutes.<br />Conveyance self-test routine<br />recommended polling time: ( 2) minutes.<br />SCT capabilities: (0x1085) SCT Status supported.<br /><br />SMART Attributes Data Structure revision number: 10<br />Vendor Specific SMART Attributes with Thresholds:<br />ID# ATTRIBUTE_NAME FLAGS VALUE WORST THRESH FAIL RAW_VALUE<br /> 1 Raw_Read_Error_Rate POSR-- 106 099 006 - 29690410<br /> 3 Spin_Up_Time PO---- 094 093 000 - 0<br /> 4 Start_Stop_Count -O--CK 100 100 020 - 77<br /> 5 Reallocated_Sector_Ct PO--CK 100 100 010 - 0<br /> 7 Seek_Error_Rate POSR-- 083 060 030 - 214055033<br /> 9 Power_On_Hours -O--CK 046 046 000 - 47624<br /> 10 Spin_Retry_Count PO--C- 100 100 097 - 0<br /> 12 Power_Cycle_Count -O--CK 100 100 020 - 76<br />183 Runtime_Bad_Block -O--CK 100 100 000 - 0<br />184 End-to-End_Error -O--CK 100 100 099 - 0<br />187 Reported_Uncorrect -O--CK 098 098 000 - 2<br />188 Command_Timeout -O--CK 100 100 000 - 0 0 0<br />189 High_Fly_Writes -O-RCK 084 084 000 - 16<br />190 Airflow_Temperature_Cel -O---K 070 057 045 - 30 (Min/Max 27/33)<br />191 G-Sense_Error_Rate -O--CK 100 100 000 - 0<br />192 Power-Off_Retract_Count -O--CK 100 100 000 - 37<br />193 Load_Cycle_Count -O--CK 098 098 000 - 5695<br />194 Temperature_Celsius -O---K 030 043 000 - 30 (0 15 0 0 0)<br />197 Current_Pending_Sector -O--C- 100 100 000 - 0<br />198 Offline_Uncorrectable ----C- 100 100 000 - 0<br />199 UDMA_CRC_Error_Count -OSRCK 200 200 000 - 0<br />240 Head_Flying_Hours ------ 100 253 000 - 46235h+43m+57.716s<br />241 Total_LBAs_Written ------ 100 253 000 - 16226994503<br />242 Total_LBAs_Read ------ 100 253 000 - 11227817981448<br /> ||||||_ K auto-keep<br /> |||||__ C event count<br /> ||||___ R error rate<br /> |||____ S speed/performance<br /> ||_____ O updated online<br /> |______ P prefailure warning<br /><br /></p></code></blockquote><p>The part of the smartctl output we are interested in is the Attributes Table. We can see that some attibutes are "P - prefailure" (which is generally OK, and herolds the age of this disk) and some have an "R - error rate". The "error rate" attributes in particular communicate a failure.</p><blockquote><code><p>ID# ATTRIBUTE_NAME FLAGS VALUE WORST THRESH FAIL RAW_VALUE<br /> 1 Raw_Read_Error_Rate POSR-- 106 099 006 - 29690410<br /> 7 Seek_Error_Rate POSR-- 083 060 030 - 214055033<br />189 High_Fly_Writes -O-RCK 084 084 000 - 16<br />199 UDMA_CRC_Error_Count -OSRCK 200 200 000 - 0<br /></p></code></blockquote><p>These four rows help explain what is going on with this disk. We can see that these values are above the manufacturers thresholds for this drive. Read errors are at 106/6, seek errors are at 83/30, high fly writes are at 84/0, and CRC errors are at 200/0. Seems like ZFS was right, and this drive is starting to fail.<br /></p><h1 style="text-align: left;">Replacing the Disk</h1><h3 style="text-align: left;">zpool offline & shutdown<br /></h3><p style="text-align: left;">I'm out of SATA ports in this system, so we will offline the disk, physically replace it, then run the "zpool replace" command. </p><blockquote><code><p>~$ sudo zpool offline tank wwn-0x5000c50079975b01<br />~$ sudo zpool status<br /> pool: tank<br /> state: DEGRADED<br />status: One or more devices has experienced an unrecoverable error. An<br /> attempt was made to correct the error. Applications are unaffected.<br />action: Determine if the device needs to be replaced, and clear the errors<br /> using 'zpool clear' or replace the device with 'zpool replace'.<br /> see: http://zfsonlinux.org/msg/ZFS-8000-9P<br /> scan: resilvered 2.20M in 0 days 00:00:10 with 0 errors on Sat Jun 26 04:06:30 2021<br />config:<br /><br /> NAME STATE READ WRITE CKSUM<br /> tank DEGRADED 0 0 0<br /> raidz1-0 DEGRADED 0 0 0<br /> wwn-0x5000c50079975b01 OFFLINE 0 0 3<br /> wwn-0x5000039fe3cf4293 ONLINE 0 0 0<br /> wwn-0x5000039fe3cfcb2f ONLINE 0 0 0<br /> wwn-0x5000039fe3cf3491 ONLINE 0 0 0<br /> wwn-0x5000039fe3cfbe45 ONLINE 0 0 0<br /><br />errors: No known data errors<br />~$ sudo shutdown now<br /></p></code></blockquote><h3 style="text-align: left;">Replace the disk <br /></h3><p>Now turn off the system and physically replace the disk. It's a good idea to write down the disk ID, to make sure the correct drive was pulled. This will make it easier to identify the disk in the future, should another failure happen. At this point I write "BAD" in red sharpie on the label of the bad disk. Also take a good look at the new drive and write down or take a picture
of any identifying numbers. We can pick a disk ID that uses these when
the drive is replaced.</p><p>My replacement disk for this 3TB Seagate is going to be a new 4TB Toshiba. The Toshiba doesn't have a wnn number printed on it, so I take note of the other hardware IDs. In this case we will use the ata-HWID for zfs.</p><h3 style="text-align: left;">zpool replace</h3><p style="text-align: left;">Booting the system, and another "zpool status" shows the correct drive was pulled. Now look for the new disk and using the disk ID, run zpool replace.</p><blockquote><code><p> ~$ ll /dev/disk/by-id/ata-*<br />lrwxrwxrwx 1 root root 9 Jun 26 19:06 /dev/disk/by-id/ata-CT240BX200SSD1_1625F01DF837 -> ../../sda<br />lrwxrwxrwx 1 root root 10 Jun 26 19:06 /dev/disk/by-id/ata-CT240BX200SSD1_1625F01DF837-part1 -> ../../sda1<br />lrwxrwxrwx 1 root root 10 Jun 26 19:06 /dev/disk/by-id/ata-CT240BX200SSD1_1625F01DF837-part2 -> ../../sda2<br />lrwxrwxrwx 1 root root 10 Jun 26 19:06 /dev/disk/by-id/ata-CT240BX200SSD1_1625F01DF837-part3 -> ../../sda3<br />lrwxrwxrwx 1 root root 9 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_46H2EY2GS -> ../../sde<br />lrwxrwxrwx 1 root root 10 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_46H2EY2GS-part1 -> ../../sde1<br />lrwxrwxrwx 1 root root 10 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_46H2EY2GS-part9 -> ../../sde9<br />lrwxrwxrwx 1 root root 9 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_46H2KNSGS -> ../../sdc<br />lrwxrwxrwx 1 root root 10 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_46H2KNSGS-part1 -> ../../sdc1<br />lrwxrwxrwx 1 root root 10 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_46H2KNSGS-part9 -> ../../sdc9<br />lrwxrwxrwx 1 root root 9 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_46M3MM7AS -> ../../sdf<br />lrwxrwxrwx 1 root root 10 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_46M3MM7AS-part1 -> ../../sdf1<br />lrwxrwxrwx 1 root root 10 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_46M3MM7AS-part9 -> ../../sdf9<br />lrwxrwxrwx 1 root root 9 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_46M3S1WAS -> ../../sdd<br />lrwxrwxrwx 1 root root 10 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_46M3S1WAS-part1 -> ../../sdd1<br />lrwxrwxrwx 1 root root 10 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_46M3S1WAS-part9 -> ../../sdd9<br />lrwxrwxrwx 1 root root 9 Jun 26 19:06 /dev/disk/by-id/ata-TOSHIBA_HDWQ140_Y026K4H8FBJG -> ../../sdb<br /></p></code></blockquote><p>The disk in sdb matches the new Toshiba drive. The hardware ID matches the picture of the label that was taken. Another "hint" is that it doesn't have partitions "part1" or "part9" like the other disks.<br /></p><blockquote><code><p>~$ sudo zpool replace tank wwn-0x5000c50079975b01 /dev/disk/by-id/ata-TOSHIBA_HDWQ140_Y026K4H8FBJG<br />~$ zpool status<br /> pool: tank<br /> state: DEGRADED<br />status: One or more devices is currently being resilvered. The pool will<br /> continue to function, possibly in a degraded state.<br />action: Wait for the resilver to complete.<br /> scan: resilver in progress since Sat Jun 26 19:16:51 2021<br /> 787G scanned at 615M/s, 364G issued at 285M/s, 10.9T total<br /> 72.3G resilvered, 3.25% done, 0 days 10:49:28 to go<br />config:<br /><br /> NAME STATE READ WRITE CKSUM<br /> tank DEGRADED 0 0 0<br /> raidz1-0 DEGRADED 0 0 0<br /> replacing-0 DEGRADED 0 0 0<br /> wwn-0x5000c50079975b01 OFFLINE 0 0 0<br /> ata-TOSHIBA_HDWQ140_Y026K4H8FBJG ONLINE 0 0 0 (resilvering)<br /> wwn-0x5000039fe3cf4293 ONLINE 0 0 0<br /> wwn-0x5000039fe3cfcb2f ONLINE 0 0 0<br /> wwn-0x5000039fe3cf3491 ONLINE 0 0 0<br /> wwn-0x5000039fe3cfbe45 ONLINE 0 0 0<br /><br />errors: No known data errors</p></code></blockquote><h3 style="text-align: left;">Resilvering</h3><p style="text-align: left;">The pool is now in a "resilvering" state. This can take hours to days depending on the pool. Data is copied from the other disks in the pool onto the new disk. This will bring the pool back into compliance with the raidz1 redundancy strategy.</p><p style="text-align: left;">It is important not to do anything to the zpool while resilvering is taking place. If something should happen to another disk in the pool during this process (there is only 1 disk parity), then data will be lost. This is less fragile if running raidz2 (can lose 2 disks before data is lost). With only 5 disks in this pool, and a backup policy that has already copied the data off of this pool, I feel confident recovering from a failure during resilvering.</p><h1 style="text-align: left;">Resources</h1><p style="text-align: left;"><a href="https://help.ubuntu.com/community/Smartmontools">https://help.ubuntu.com/community/Smartmontools</a></p><p style="text-align: left;"><a href="https://docs.oracle.com/cd/E19253-01/819-5461/gazgd/index.html">https://docs.oracle.com/cd/E19253-01/819-5461/gazgd/index.html</a><br /></p><p style="text-align: left;"><br /></p><p style="text-align: left;"><br /></p><p style="text-align: left;"><br /></p><p style="text-align: left;"><br /></p><p style="text-align: left;"><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-38411522354586820512021-06-05T20:29:00.006-06:002021-06-05T22:21:23.122-06:00Creating a Proxmox Container for Plex<p style="text-align: left;"> This is a long and involved process. Some of the steps may not be neccessary. For my particular application I decided I needed 2 things.</p><ol style="text-align: left;"><li>GPU Passthrough <br /></li><li>CIFS mounts in the container</li></ol><p>The GPU Passthrough may not be necessary on a privileged container, but I tackled this first before I realized I needed to upgrade the container to privileged.</p><h3 style="text-align: left;">GPU Passthrough</h3><p style="text-align: left;">This is an excellent writeup on the plex forums for GPU Passthrough in Proxmox. <br /></p><p style="text-align: left;"><a href="https://forums.plex.tv/t/plex-hw-acceleration-in-lxc-container-anyone-with-success/219289/35">https://forums.plex.tv/t/plex-hw-acceleration-in-lxc-container-anyone-with-success/219289/35</a></p><p style="text-align: left;">Again note this may not be completely necessary in a privileged container. My container does have cgroups and nvidia devices listed in the conf file.</p><blockquote><code class="prettyprint lang-bash"><p style="text-align: left;">lxc.cgroup.devices.allow: c 195:* rwm<br />lxc.cgroup.devices.allow: c 236:* rwm<br />lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file<br />lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file<br />lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file<br />lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file<br />lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file<br /></p></code></blockquote><p>In the container double check that all the nvidia devices exist after installing drivers.</p><blockquote><code class="prettyprint lang-bash"><p>ll /dev/nv* <br /></p></code></blockquote><h3 style="text-align: left;">CIFS Mounts</h3><p style="text-align: left;">Because fuser is a kernel level process, containers need to be privileged to execute "mount" commands. I decided that this was an acceptable trade off for a plex server that is internal to my network.</p><p style="text-align: left;">The container needs to be privileged, and Nesting and CIFS enabled in the "Options" -> "Features" menu.</p><p style="text-align: left;"></p><p style="text-align: left;"></p><p style="text-align: left;"></p><p style="text-align: left;"></p><p style="text-align: left;"></p><p style="text-align: left;"></p><p style="text-align: left;"></p><p style="text-align: left;"></p><p style="text-align: left;"><img alt="" src="data:image/png;base64,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" /></p><p style="text-align: left;">After the container is set up, we can create automount rules in the usual way.<br /></p><blockquote><code class="prettyprint lang-bash"><p>apt install cifs-utils<br />apt install autofs<br />echo "/mnt/hostname /etc/auto.hostname --timeout 0" >> /etc/auto.master<br />echo "mountname -fstype=cifs,rw,guest ://192.168.1.X/mountname" >> /etc/auto.hostname<br />automount -v<br /></p></code></blockquote><h3 style="text-align: left;">Plex Install</h3><p style="text-align: left;">It may be a good idea to create a non-root user for our plex container.</p><blockquote><code class="prettyprint lang-bash"><p style="text-align: left;">useradd -G sudo -m plex -s /bin/bash<br />passwd plex<br /></p></code></blockquote><p>Now we can use the unprivileged user to SSH to the container if needed.<br /></p><p style="text-align: left;">At this point we can continue with the plex install, which is fairly well documented.<br /><a href="https://support.plex.tv/articles/200288586-installation/">https://support.plex.tv/articles/200288586-installation/</a></p><p style="text-align: left;">On ubuntu this involves downloading the .deb installer and running apt on that file</p><blockquote><p style="text-align: left;">apt install /home/user/Downloads/plexmediaserver_1.20....._amd64.deb</p></blockquote>If migrating plex, there is a guide here:<br /><a href="https://support.plex.tv/articles/201370363-move-an-install-to-another-system/">https://support.plex.tv/articles/201370363-move-an-install-to-another-system/</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-82312311491949411672021-02-20T17:10:00.001-07:002021-02-20T17:10:30.118-07:00Building a Nextcloud Container in Proxmox<br /><h3 style="text-align: left;">Create Container</h3><h3 style="text-align: left;">Create and Mount Data Directory</h3>
<blockquote><code class="prettyprint lang-bash">mkdir /tank/nextcloud<br />pct set 107 -mp0 /tank/nextcloud,mp=/data</code></blockquote>
<h3 style="text-align: left;">Install Prerequisites</h3>
<blockquote><code class="prettyprint lang-bash">apt install apache2 mariadb-server libapache2-mod-php7.4<br />apt install php7.4-gd php7.4-mysql php7.4-curl php7.4-mbstring php7.4-intl<br />apt install php7.4-gmp php7.4-bcmath php-imagick php7.4-xml php7.4-zip</code></blockquote>
<h3 style="text-align: left;">Move System Dirs to Data Directory</h3>
<blockquote><code class="prettyprint lang-bash"><p style="text-align: left;">systemctl stop mariadb<br />mv /var/lib/mysql /data/<br />ln -s /data/mysql /var/lib/mysql<br />systemctl start mariadb<br /></p><p style="text-align: left;">systemctl stop apache2<br />mv /etc/apache2 /data/<br />ln -s /data/apache2 /etc/apache2<br />mv /var/www /data/<br />ln -s /data/www /var/www<br />systemctl start apache2</p></code></blockquote>
<h3 style="text-align: left;">Continue with Nextcloud Installation</h3><div style="text-align: left;"><a href="https://docs.nextcloud.com/server/20/admin_manual/installation/example_ubuntu.html">https://docs.nextcloud.com/server/20/admin_manual/installation/example_ubuntu.html</a><br /></div>
<p>Note: Because the install is done as root, there may be some directory permissions that need to change. <br /></p>
<p style="text-align: left;"></p>
<blockquote><code class="prettyprint lang-bash">chown www-data:www-data /var/www/nextcloud/ -R<br /></code></blockquote>
<h3 style="text-align: left;">Apache Config File<br /></h3><p style="text-align: left;"></p>
<blockquote><code class="prettyprint lang-xml"><VirtualHost *:80><br /> DocumentRoot "/var/www/nextcloud"<br /><br /> ErrorLog ${APACHE_LOG_DIR}/nextcloud.error<br /> CustomLog ${APACHE_LOG_DIR}/nextcloud.access combined<br /><br /> <Directory /var/www/nextcloud/><br /> Require all granted<br /> Options FollowSymlinks MultiViews<br /> AllowOverride All<br /><br /> <IfModule mod_dav.c><br /> Dav off<br /> </IfModule><br /><br /> SetEnv HOME /var/www/nextcloud<br /> SetEnv HTTP_HOME /var/www/nextcloud<br /> Satisfy Any<br /><br /> </Directory><br /><br /></VirtualHost></code></blockquote><br /><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-5506945565600543882020-12-04T09:40:00.006-07:002020-12-04T09:57:52.483-07:00Correcting umask/file permissions for Unix CIFS mount points.<p>Today I had a very interesting issue, where a file created from a Proxmox container had incorrect permissions on the host server.</p>
<p>The typical umask in linux is 0002, but for the Proxmox root user it's 0022. This means files created with this user will have it's group permissions restricted to read only.</p>
<p>We could fix this by setting the umask on the Proxmox root user, but that could have severe and unintended consiquences (messing with root user perms never ends well). Instead, we look to smb.conf</p>
<h3>Samba Config</h3>
<p>I'm running Ubuntu to share the CIFS, and using "net usershare" to share the mount. We can set a global config, so that any files written to the mount will have the same default permissions that files created from the host have.</p>
<p>I simply uncommented and tweaked these lines in /etc/samba/smb.conf</p>
<blockquote><code class="prettyprint lang-bash"># File creation mask is set to 0700 for security reasons. If you want to<br /># create files with group=rw permissions, set next parameter to 0775.<br /> create mask = 0664<br /><br /># Directory creation mask is set to 0700 for security reasons. If you want to<br /># create dirs. with group=rw permissions, set next parameter to 0775.<br /> directory mask = 0775<br /></code></blockquote>
<p> And finally don't forget to reload.</p>
<blockquote><code class="prettyprint lang-bash">sudo systemctl reload smbd<br /></code></blockquote>
<p>Now files have the correct permissions (664) instead of user only read (744).</p>
<blockquote><code><p>-rwxr--r-- 1 nobody nogroup 0 Dec 3 20:24 test4.txt*<br />-rw-rw-r-- 1 nobody nogroup 0 Dec 3 21:07 test5.txt<br /></p></code></blockquote>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-5751743333728160012.post-55760477429700152482020-07-18T13:35:00.006-06:002021-02-20T21:30:43.656-07:00Creating Bind Mounts in Proxmox and CIFS<h3>UPDATE</h3><br />
Do NOT do this. If a CIFS Mount is unavailable, the container will fail to start on boot/reboot. Instead, I would recommend creating the CIFS mount in the container. It's not as efficient, but at least the container will boot if the mount is unavailable.<br />
<h3> Original Post Follows</h3><br />
Bind mounts allow us to mount arbitrary host directories in containers. This is useful if we need an container to have access to files on a host filesystem.<br />
<br />
If you need the container to have WRITE privilege, create it as a privileged container. The default setting is unprivileged, so make sure you plan ahead. There are ways to allow unprivileged containers to write bind mounts, but I've spent too much time trying to figure it out, and this was much easier.<br />
<br />
In my case I'm interested in using CIFS shares from inside a container. We can do this in two steps.<br />
1) Set up the CIFS on the proxmox host<br />
2) Set up the bind mount on the container<br />
<br />
<h3>
Setting up CIFS</h3>
I like to use autofs for network mounts.<br />
<blockquote class="tr_bq">
<code class="prettyprint lang-bash">
# Install CIFS and autofs<br />apt install cifs-utils<br />apt install autofs<br /><br /># Configure autofs<br />echo "/mnt/servername /etc/auto.servername --timeout 0" >> /etc/auto.master<br />echo "mountpoint -fstype=cifs,rw,guest ://servername/mountpoint" >> /etc/auto.servername</code></blockquote>
The above will add lines to autofs config in order to mount our mountpoint. This assumes you already have CIFS running and allows "guest" users. Replace the mountpoint and servername parts as appropriate.<br />
<br />
<h3>
Setting up Bind Mounts</h3>
<blockquote class="tr_bq">
<code class="prettyprint lang-bash">
# Create Container Bind Mount<br />pct set 106 -mp0 /mnt/servername/mountpoint,mp=/mnt/containerfolder</code></blockquote>
We must use the CLI in order to create proxmox bind mounts. Bind mounts are not currently supported in the GUI. The above creates mount point 0 "mp0" for container 106 (change the number to match your container), maps the host directory (/mnt/servername/mountpoint) autofs CIFS share we just set up to a directory in the container (/mnt/containerfolder).<br />
<br />
Now if we launch the container, we can list /mnt/containerfolder and see the contents of our CIFS share.<br />
<br />
Bind mounts will work with any directory, and can be mapped to any directory on the container. So be careful because there are security and data integrity implications when you do this. The safest practice would be to only mount directories that are in /mnt on the host and map them to /mnt in the container.<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-63157571917697054272020-04-23T21:07:00.001-06:002020-04-23T21:10:54.185-06:00Proxmox Postfix Gmail Setuphttps://www.reddit.com/r/homelab/comments/5nzmm3/setting_up_the_proxmox_email_alerts/dcfihdw/<br />
<br />
https://www.linode.com/docs/email/postfix/configure-postfix-to-send-mail-using-gmail-and-google-apps-on-debian-or-ubuntu/ Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-8826056596084705622020-04-18T17:50:00.001-06:002020-04-18T18:13:37.480-06:00Proxmox Firewall and Isolating VMsIt's pretty common to want to isolate VMs. In applications like virtualbox, VMs are only able to interface with the host in a very limited manor. You must intentionally create interfaces with the host or other computers on the network.<br />
<br />
In Proxmox, everything is wide open by default. It uses a model of most trust, instead of the model of least trust.<br />
<br />
In order to lock down a VM in Proxmox, we need to limit how it can interface with other components on the network. This is where a firewall comes in. There are a lot of "solutions" to this problem that say, "just install a pfsense VM". This can be useful and informative, but also overkill. Especially when Proxmox comes with the needed capability, and at an arguably less steep learning curve.<br />
<br />
<h3>
Quick Overview</h3>
The firewall must be enabled at all three levels in order to function. That's Datacenter, Node, and VM.<br />
<br />
The default policy is inbound drop, outbound accept. You may want to tune these at a given level as appropriate for your environment.<br />
<br />
We can create rule templates to help us configure policy on individual nodes or VMs using the Datacenter -> Firewall -> Security Group feature.<br />
<br />
This is enough info for someone who knows about firewalls to get started. What follows is more detailed instructions.<br />
<h3>
Enable Proxmox Firewall</h3>
First we need to enable the firewall in Proxmox. In order to have a VMs use it's own defined set of rules, the firewall needs to be enabled at every level. That would be Datacenter, Node, and VM.<br />
<h4>
Datacenter</h4>
Under "Datacenter"<br />
Click on "Firewall" -> "Options"<br />
Select "Firewall" in the list<br />
Click the "Edit" button<br />
Check the box<br />
Click "OK"<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAApMAAAIaCAYAAAB8qcbtAAAgAElEQVR4nO3dfWwd52Hv+ad5O224VYWAzQvX4TpCDUQwWKxGjOPkIjK8zmZTqHbXreuauEWmLJ27FbLRpkWUGysB4rshMo5uaG+V4Ma5F2pyXSlZNvG4qkKtDa/tNLaDqmH36CQOQ1GbEMqCiENBx3WikwD6w7/947zNmTMzZ87heXke8vsBfrDJmTMzpObw/Pg8M4dGAAAAQI/MqA8AAAAA7qJMAgAAoGeUSQAAAPSMMgkAAICeUSYBAADQM8okAAAAekaZBAAAQM8okwAAAOgZZRIAAAA9o0wCAACgZ8llcm1B08bIxDK9sDbkwwMAAIDNMsrknJZaPrmkubyFMvHxQzTq/QMAAOwQXZRJSUtzMnlK2qjL3Kj3DwAAsEN0Vya1pDkzrcbg5NJc61T43JLqI5jVz3VaN7q/5rK5pfg+68six1Q7xoWF6dg0fMr+s7YzPae5aZOvKAMAAKChyzK5poXpetmrlrNG8Vuaa5a3tsdnrBtf1vLY6P6ktYVpmekFrTXWi0y7R0dN2/bfeTtztEgAAICubaFMxkVGLTtOM0fWXZprFruOxxHfR2TkMbpu/HHdbAcAAAC5bW2au+2u74wymbJuyyhh4nHE7ypP2UfHMplzOwAAAMit9xtw2kb0MkYms9btamQyY1lXI5M59wEAAIBMvb81UOzO7qW5+Ghf/OablHUTr5msL4tNq+ctjG3ltYvtAAAAILeu3rS89VrJakFr3km9FClszWXxj9vXbd9f+t3cKddItn0c338X2wEAAEBu/DlFAAAA9IwyCQAAgJ5RJgEAANAzyiQAAAB6RpkEAABAzyiTAAAA6BllEgAAAD2jTAIAAKBnlEkAAAD0jDIJAACAnlEmAQAA0DPKJAAAAHpGmQQAAEDPTLFYFCGEEEIIIb3EVCoVEWJLisXiqH/BAgAAXaBMEqtCmQQAwC2USWJVKJMAALiFMkmsCmUSAAC3UCaJVaFMAgDgFsoksSqUSQAA3EKZJFYlT5l85ZVXdPXqVV25ckWXL18eea5cuaKrV6/qlVdeGcJTFgAAu1AmiVXJUyavXr2qcrmsX/7yl7p27drI88tf/lIvvfSSrl69OoSnLAAAdqFMEquSp0xeuXLFmiJZz69+9StduXJlCE9ZAADsQpkkViVPmbx8+fLIy2NSLl++PISnLAAAdqFMEqtCmQQAwC1dlMlNXVpd1erqRW2UR186yPYMZRIAALd0LpPlNT0+f7uuHzMyppbCLu279xEVN3stDSUFXmR7xsj44XCLSymQZ3yFFhQo0gxlEgAAt3Qok+tanBlvFMjfueVuzd59S6NYFm44rLMb3ReG0I+Xx1q5HGahpExamb6VyRef1cOf+pQ+1ZaH9eyLSY95Uc8+/Ck9tlJ/7GNauRb7f8okAABtMsvk+omDKhijgndEj6+Vm8vKJZ24o1oyxw+dVbmrwhDKN56C0ojLHWXSyvS3TOYrgW1lssftUCYBADtRRpm8oOMHjIyZ0vxywvLyGX1wt5EpzGixq2so845ChvIb0+Cx0hf6yVPkpUCe58v3Io8pBfIi6/phpbmu8RVGttVYRkaW4ZbJFT1WH7F8+DE91jYyGVmeo1BSJgEAO1FGmVzUjDEye+/XuZR1FmcyymbuophULKuFs17uSoEn4wUqRR7bKH6hL1Mf6awVx2YpjK0bHY2sl8z6vkO/vbSSoWeYZXLlsU/p4WdfrH688pg+9SmmuQEA6FZGmQzlF4zMdUf0TOLysk7d1WuZjO0naYSxpdilTI3Hl5UCedH1Qj9SQmOJr8u0txUZ+DWTDz+rFxujktGSyDWTAAD0IqNMbujEQSNjxnXobLl9+foJHSwYmd2HdLYfRSJa7mJT09XEi1/CslghbB3RTNpfpDxSJq3I0EYmE5avPEaZBACgW5k34JTPHtK4MTJjN+vo42uNG202V76uQzcUZIzR3vvPdVcYUqeTI1PbWcUuPqLYNjIZeVzHkUnKpG0Z3jQ3I5MAAPRDh7cGKuvcAzdrrDYCWNg1ocnxsdYRw/EZnVpLGLlMTe0GnFjJax1FbL1msqXoxcpo6KePTCZfM5myLmXSinDNJAAAbsnxF3DKWnv8Qd1z04R2FYyMKWjX79yiw488ra8fukGFngplvQRG0jaCGL1JJzoS2fqG514QZo9odrqbmzJpVQb/PpPRt/+pjkam380dXYe7uQEASLLFv829rjONQnlYT1hQRojb4S/gAADgli2WyYoqlXWdOXyTJm9d0LIFZYS4HcokAABu6UOZJKR/oUwCAOAWyiSxKpRJAADcQpkkVoUyCQCAWyiTxKrkKZNXrlzRL3/5y5GXx2h+9atf6cqVK0N4ygIAYBfKJLEqecrk1atX9dJLL+lXv/rVyEtkvUi+9NJLunr16hCesgAA2IUySaxKnjL5yiuv6OrVq7py5YouX7488ly5ckVXr17VK6+8MoSnLAAAdqFMEquSp0wCAAB7UCaJVaFMAgDgFsoksSqUSQAA3EKZJFaFMgkAgFsok8SqUCYBAHALZZJYFcokAABuoUwSq1IsFgkhhBDiUCiTxKoUi4xMAgDgEsoksSrFYlHvOU4ISQsA2IYySaxKvUwCaMdzA4CNcpfJzUurWl1NzsWN8shLCNkeoUwC6XhuALBRvjK5saiZ3UbGpGTPUT3XVWkoKfBi2/DDkRcZMvpQJoF0PDcA2ChXmTz/gCdjjMZvuluzs7OR3Kl9u43MgeO60EVhCP14eayVSwrljg9lEkjHcwOAjXKUyQ2dOGhkzBt1Z3BSJ09G8zEdKBi968EXdPaTn9QTuQpDKN94Ckqxz5cCecZXaEGhIaMLZRJIx3MDgI06l8knDmvcGJk9t8ZGJWf1b99znYyZ0vzyMzoydUhncxWGHKOQ8WLZ8nH18X4QyItOkZdiH3e9bkWV0E+eei8F8jxfvmdkjC+/bWS1olLgMbJKmQQGiucGABt1LJMvPPguGWP039x4e1uZfN8Nher1ks8c0dQHz6icuzSE8rOul8xRJo0XqBTdVv3jUiCvMfLZzbrVZX4YLZa1ZbXy2VjWNopaK61h3q+f9KVMri1oOuU63rml+vI5LQ30KZR2XLX9juoYsC3lL5NrWpg2MtMLWmtbtqQ5YzS90L4EAHqRXSZ/9g+6dzzjxhtjdN2RZ7Q872lmsdc7uiPFMjoS2GlkslHcsj7uZt2k44qWyejUfOxxTNGPsExaWNQokxiQ7kYmk0vj2sJ0SskEgN5kl8nnjmpPRpE0ZrcOnV3WvHeHvrKxxSIRLWyjKpPR6W9jYiOTrWUxOq1dCjx5QWnkRWw7hDIJpOt6mntpTiZ6/q0taNpMi0FJAP2UUSbXdequ3Zmjkmb3IZ29cFwHDp7QRt7CEPoyiaN4kWI3ijLZNvoYH5mMH3Mo3/gKKyUFXsINRWT0ZTJe6qbnNDdtIi+u1ZGb6vlc/1x1enBuKbqNyMdLc81RnaW51udDfSXKJAakl2sml+bq52b13G4dqUx6DjQeGDm/KaAA0mWUyWd05LrsKe7xQ2f1wvEDOnD8QheFIX4dYzWlwGu7trFe+kqBFymgAyqTsZIb+tkjk/V1/CCQF/tayDDLZMK5mVrqIqUwVhqjU39rC9PNbSzNaXp6uvECvLZQ///qi3BLyay/4FImMSC93YBTm+6ejk9vpz8Hqo+JFMjoL1EAEJNRJs/q0N6/0NJm1ov/uh5+77v04Avdl4ZqWYskqVzWlnlBUBsFHGCZjL2RuheE6SOl9dTu/ubGm1GWyS5GJqMvjm2Pjbx4ri1ouvbCuTQ3rYWlBU1HRnbmEncYezxlEgPQ893c0V926rKeA/FflgAgQ+Y1k+tPHtWt42Ppo5OFXdp3+IzWLSghIwk33vQ9gy2T8WvH4ud09IV0Wgtra1qYntOSljRnov9N2wZlEoPVc5lMOg8znwNS6xQ4xRJAutx/m5u0h/eW7H+GWybTH7s0ZzS3EBuhXJiLTaHHX3gpkxis/pfJnOdm/EYeAIigTPaSxl3fjEr2O0Mrk4k32kSWJ10rGfk4/uK6NMfIJAavr2Uy6zkQ/2WJMgkgA2WSWJXhlUmpdRov6XqylBtsqitU3xS69vjphaXmCzNlEgPS3zIpZT4HuJsbQE6USWJV+HOKQDqeGwBsRJkkVoUyCaTjuQHARpRJYlUok0A6nhsAbESZJFaFMgmk47kBwEaUSWJVKJNAOp4bAGxEmSRWhTIJpOO5AcBGlEliVeplkhCSHACwDWWSWJVisUgIIYQQh0KZJFalWCzq2rVrhBBCCHEklEliVSiThBBCiFuhTBKrQpkkhBBC3AplklgVyiQhhBDiViiTxKpQJgkhhBC3QpkkVoUySQghhLiV1DJZ3rio1dXVrnJxozzyMkLcDmWSEEIIcSupZXJ5fkqFXROanJxMzsQuFYyRMUaFG3zdN7NHU/PL+YtDKZBXe7wxRsYPY8t8hRaUGzLc9K9MrujYfqPZ0wPczsox7TezOm3BE5mQ1lTPW7P/mFbalp3WrDHaf2zFguMkhGyHZJbJ6+7+nE6ePJmcz92t62pFcOoTT6n4N3fpQN4yGfoyLWWxpMCLFMp+lEkKqZMZSpnsqgRSJomrSS6NK8f2p5RMQgjpLall8sKjn9Ts7GxX+eSjF3IUhlC+MfLDpPLnKSj1qQhSJp0MZZKQPub0rEz0HF05pv1mv46tWHBshJBtk+GXybZRyQ5FMF4K4x+HfnOqvF5Ga4W19XPxz8e26fnyPdP52IhlZbI6+lL9N40Wu1oJnJ1tnB/VEZro+pEX1dOzkfPIyMye7rCdawllMu1Y4tvnxZwML6dn6+dz9VxuHanknCWEbD19mebe85Gl/NPcoS/jBSr1pUyG8qNlMbrttpHJ6lR6fUS0FHixdRNGS4nlZbJ11LB1+i5+zVj1RXP29LXUEtgYfTw9G3nxzLudrGM5rdl4cWWakQwttenu/fHpbc5ZQkh/klkmd++7M30k8s592l0rk7sP/gd96X/15I2kTKaUwE4jmtEiGp1it6BQ7eR0VSYTS2FrCYxOTzdGaDpOT/ewncxjiZVVQoadll+QauGcJYT0KcN/a6B+T3O3TF1HimXi40zrVGY/r9EkIyqT8X/T9BK4cmx/epls21aX28k8lmtqnU7kRZoMObnOec5ZQkhvSS2T5//6felvC5SS9/31+RyFIW00MfL5rspkJNGi2s3jKJPWZGsjk9EkjyjuP7bS/ri2mxI6j0y2baebm3HiN0UQMuiklknOWULI1pM5zb33Y0+kj0Q+8THtrf3GessX1lR58iN6b863BioFXuzGmNpbAyVe79haPquPjRbG2DWTacti10xmFlbiRpmMF72Eaxgb13nVRmGa1zrGb75pvlCenm0fmUzfTvI1k+1FM31/hAw8icWRc5YQ0p9klknTNgWSkrFxTY6Pdfem5S13YWe/aXm1QFbX84JAfse7uZvlsWXqO+0ub8qkNdna3dzR0cWMu7DrBbExddf8uLre6ciLbK93c8euT+POWDLKpI5Ccs4SQrYe/jY3sSr8OUVCCCHErVAmiVWhTBJCCCFuhTJJrAplkhBCCHErlEliVSiThBBCiFuhTBKrQpkkhBBC3AplklgVyiQhhBDiViiTxKpQJgkhhBC3QpkkVqVYLBJCCCHEoVAmiVUpFosCAADuoEwSq0KZBADALZRJYlUokwAAuIUySawKZRIAALdQJolVoUwCAOAWyiSxKpRJAADcQpkkVoUyCQCAWyiTxKp0VSbXFjRt5rQ0uOfH8ES/ll6/ru30/cDWrS1o2hiZWKYX1nJvYmmu9rjpBeV/VPwYujsn1xamuzrGLg9IC9NGc0kHNIjnjw3PybRjWFvQdK//rkOzpDkzreTTIePfcpTiz7v693htQdPWHWz/5CqTGxsbuv/++zU1NaXXvva1Ghsb0zvf+U59/vOf1+XLl0deQMj2idNlcivH0++vxbbvDYYv8RxY0lzuQpn1Qt7DMeQ6J5c0N9Dzdphlsvq9Nv3aZk/Hl34Mgy3t/TLiMtnL93xpTibloJbmLCy/fdKxTP7d3/2dXvWqV8kYo7e97W16z3veo3e/+91685vfLGOM3vKWt+gf//EfValUdPXq1ZGXEeJ2KJMWHAu2h7RzYGkuX8HpxznUZZkcfMEZTplcW5iujgLPzfXvedjl8WUfw5oWprf4i8JQuFcml+Yyfllbmut9lN9ymWXy0UcflTFGb3zjG/WVr3xFa2trOn/+vM6fP68LFy7ooYce0qtf/Wq9+tWv1j//8z/rF7/4xcjLCHE7fS2TLdMNsR9I0WVzC9kvMNNzmpuO/Ha/NNc6dTi3pOYIQHxf0c93OtakF93aD8yF6PEuxY5/KbaNtGPBjpL6/Ii/QCeco7GpuuopnnTeJ+wn8VzOc04mFZyU509tuwu1wtQ2fZ92rPXn09xc++Pavl8p+45vO/59krS2tNSc2uz0vB/Qz5fsY1jSXLTUtOwz579BY9vtX3/7ssg2u/m3m5vrXCbz/FvGz8nM73l9fwnf847/9p1Keh9G+y2VWiZ/+tOfamxsTLt379b3v/99Pfroo3rHO96hN7zhDXrTm96k2267Tc8995wef/xxveY1r9Hb3va27opDKZAX/cfww62XkVIgz/gKLShFpLf0r0xWfxA0fri1jMa0Lqv/Bp8+WhFdlrTd2g+HtuNp/c15bWE6/bfSDmWy+bjaD7jodThJ+2dkEqnnQPS8zDhHWx7fxXmfdh7m+uUv5/On9rxslIeM53fLsaY8n+aW4vvv4rmbJecvvAP9+ZJ0DC1TsbGC0zJ6lrWP2LF2PF9af1HJ829X/dmcXSY7/1sq4TyMf89Tvv6uf45WtzU9nVbMLb3Osw9Sy+TnPvc5GWN06tQpLS4u6jWveY2MMfr93/993XrrrY0Ry3/5l3/RRz/6URlj9Ld/+7f5SkPoy7SUvpICrw+FkjLpfPpWJhNHGSK/Xbb80I394GvbTs7fNLN+gMXXzTrejBe1zI8pk4jKUyazztGOv6z1uUzGp987Hlv7aFfHY014MV+ai472px1rjyNKucrkgH++JBxD67V7nX7+5f05mvNxWf92iT+b809zJ/5bxvfR9j3v5uvvIHHb7d97+69V7V5qmXzHO96h66+/Xj/+8Y91ww036PWvf72++93v6qWXXtLLL7+sb37zmzLG6E/+5E9ULBY1Njam22+/PUdhCOUbIz9MKoKegtIWyghl0vn0rUy2/VBq/uBp/w2+y+uo2u6SzfphH58OoUxiSPJMc2edox3P5wGUyejzsutjy3GsCc/1tYXplDKZsu8c09yd/w0ylvf750tisUu+Mavt68jYR+ZobcbP36x/u/ZtdlcmE/8t49+DtGn/1K+/u0sc1Lbd1uPfcWXy9a9/vd73vvfp+eef12/+5m/qT//0T/XDH/6w8Y3b3NzUu9/9bk1MTOgnP/mJfvu3f1t79uzpXBjaRiXTUi2d1f3FRzE9BYHfPkVeL5Nhc1lbaSVWx86RyfgPpfhvnnlHDnJ+LZRJ9EPaOdA25ZjjOdTreb+Vae5unt95jzVlNGu62o76//zp6Wvu88+XpEKUNc+a9/zY0shkytfRh5HJtn/L+D66GSHf8nlAmdTrXvc6HTx4UM8995x+/dd/XR/96Ef1+OOPN0raysqK/vAP/1C7d+/WT3/6U73xjW/U9ddf37kwhL6MF6iUuV512rteBEuBF3lMbUq8UTCrpdMLSs3rMOvlMndxJbbEzmsm47+ZNj+uvg9fyvRN/IddVy/c/SiT2/NCb+SUMQLTfDHLOEfjL/Jp533i8ymtTGack23Hm/PYujrW2HV2tZG3TtdM9lwqui2Tg/j5Evv82sJ0wo0ysWsGc30fkq6ZTD4nMgtaxja7umYy+m+Z95zs9PV3+3M06VKNvLNgjkstk29/+9v1u7/7u7p48aLe8pa36K1vfatefPFFffazn9UXvvAF/eQnP5ExRrfeeqsuXLig3/qt39KBAwc6F4Y8ZbJtujqU35gCby2alUqtbPph+1Q5097Opfsy2T7d0HpHX8r0T3RZ1h2DKS9wzX0ttd3M0FpMc95Z3e8ymXgs2FFSnh/t50PKOZpyPrWf981fyKrLFprTqF2dk0kvtHmOrZtj7fVu7h5/MUsoeC0jU8P4+dL2vUlYL/fd3Bk/R+P/rmk/f7u4RKF6LjUf2zqql/FvqbznZKevv/ufo9H9tr+Dxw68m/vjH/+4jDF69tln9clPflLGGN1zzz2N5VNTU3rVq16lRx99VJ///OdljNHnPve5zoUhz2hh/E5vY2QyymSjoMbLI2XSuYzmzylu3yc44BI33kh7i9YWNLfdv8ZBcf17txPfZ7J+feQ73/lOVSoV7d27V29605tUKpX0+OOP69WvfrX++I//WD/72c90/fXX6zWveY1efvnlHIUh5Qac6OczS2CnkUnKpMsZSpnMnNYBMDqD/gs4o7e2MMcvrj1y/Xu3I/8CztWrVxUEgYwx+ta3vqWFhQUZY/T000/r+PHj+rVf+zV985vf1IMPPihjjL72ta/lLgylwIuMNDYLYvy6yEZhbCmF8XUzSihl0rkMa2SydSqCUUnAFjtidBI7T9v1k9tL5l/Aeemll/TZz35Wa2treuc736nf+I3faIxMGmPk+77+6Z/+SV/60pdUqVT085//PH9xiNxxnfym5dG7uduLp+83H+8FpeoyyqTzGc00NwAA6FXHv81dqVR0+fJl/d7v/Z4+/OEPNz73B3/wB5qdnW18PLy/y51wzSTZNqFMAgDgllxl0q5QJrdzKJMAALiFMkmsCmUSAAC3OFgmyXZOsVgkhBBCiEOhTBKrUiwWde3aNUIIIYQ4EsoksSqUSUIIIcStUCaJVaFMEkIIIW6FMkmsCmWSEEIIcSuUSWJVKJOEEEKIW6FMEqtCmSSEEELcCmWSWBXKJCGEEOJWKJPEqnRVJleOab+Z1elRPYFWjml/9O/LN7Jfx1a6PP5Rfy1ke+f0bPZ5GT+XZ093t07qc8HItJzjGc+XzG3kfE4RQkYSyiSxKlaVyU7bT1ve6YV7WMdPyLVrunZtRcf2G83OziaXxNOzzcIXWb9l3U7r5DmXu3m+8NwgxKlQJolV2RZlsv7ifXrEx0/ItWvN8yzxfDutWZNwrq4c0/5GwcuxzlbKZNLzhecGIU6FMkmsSs9lsvb/x47tb0yN7T+2Ult3Rcf279exY7PtU3TxF63Gx9UX0Mwptrwvji3Td5FtZU1zx6b86ts6Pds+BblybH/yiBMh11rPj9Oz0efFtYQRx4TkWYcySciODmWSWJWtlcnIC2XLC2BtSq7xcbUo7j+2klEmr21xmrt1X40Xyuiy1H3FHpN5TDlHQckOzWnNRn+BOT0rs/+YVq6lfJyUPOtkXe/YaSo8qaxSJglxKpRJYlW2ViZTRv0SCldjtGbLZbLDzQJt24i8uKftK/PFO2nUkxddkpK2cynhl5u+lck8I5M5b67hvCbEqVAmiVXZ6jR3YilMGr2rv0AOYmTyWsJ+Gp+LHEvKvlaO7c988Y5OW64c2986bUlII/UR+YzRQiumube4LiFk5OmyTG7q0uqqVlcvaqM8+uJBtl+GVSb7NzLZ7QvoVkcm69uY1en6taC8ZQpJStr5mefmmpbP51iHMknIjk6+Mrm5US2PF47rgDEyZq/uP1dRpbKpjY1yb8WhFMhr+W3ZV9hrCSkF8rbyeGJNBlkmmwUt/YVy5dj+2DWNnd6br9MLXr+umWw9jtOzRrPHjml/p+lHsmOTdLNWdFl9RLt6zkfPr/jzJcc6lElCdnQ6l8n1RfkTBRVu8HXfoX3aXSt/e+64T/fePCYzfodOlLoslKEvY4z8MP45T0Epx+Mpj9s2Ax2ZnG3ezR2dGl5puQP8WG3Ur/k4kzgqk7DPzOPsz93cjZyeTT8uQuI33sQTn7o+PZs8Dd72mF7etLyL0cuW7VEmCXElHcvkRuhrPOOHhDEFeQ8sd1EYSgq8WJGspRR4Ml6gUqdtUCa3bQbz5xS34R3PvNgSQgixJDmmudf18HvrxXFcN909q9nZ9+mGQu1zb/yInuymMGQVwVIgrzE6WVLgeQoCv1lc/VCVSii/UWRr68a32TKFHhntrK0XBF5jm15Qau4/jOwr7ygpoUyOILy3JCGEEFuSWSYv/Oc7NTmxS4VawXrXgy80lpXPfLA25V3QrolJ3fS/P5uvMIR+xuhjtShWRy2rI5jNaymry7yglFIeW9drjHyGfnMbtZLZKJDRZZVQfrRAZh4noUyOKI3pREYlCSGE2JHMMrk8PxUZqavfdFPL+sN6b3S6e2ZxIGUyOh1eCrzq6GRWmWwb+YyUxJaRz/i6sRJKtlGZJIQQQsigklkmN86d1kP3Nae0x2cWtV6pqFIp69y8Vxux3KNbZ+/TQ0/9IF9hyLzeMTo6mHBtZb2IZpXJtrIa2U7miGZ9/82CTLGkTBJCCCEkO52vmSw/r0/sbRassfFJTY6PNUckd9+lU+vdFIa8N+AMamQyq0xG0jIFTiiThBBCCElKxzL505N/1LhmMi0Tf/V0d6Uh11sD1a6ZbJTLyDR0N9PVbddMZpXQ2DWTlEnKJCGEEEIyk+tu7kX/et146Ov6zv85q+tqBfK9DxX11IO36fqbH9C5nv4aTuuUcntxq41M+s07rJt3Xtdvzsmavk6/mzt1ZJK7uUeeYrFICCGEEIfS3Z9TLC9qpmBkzJTmlwddLNKnw8n2TbFYFAAAcEeXf5t7mKFM7sRQJgEAcAtlklgVyiQAAG6xuEySnRjKJAAAbqFMEqtCmQQAwC2USWJVKJMAALiFMkmsCmUSAAC3UCaJVempTK4taLrlPUvntNT/58rWtB1jPdNaWMv7+NrXFf1/II+luexzLX5+ziWcXVnrpJ7fkedjp8A4YXwAACAASURBVOdA5jZyPk8AjARlkliVrsvk0pyMMWp57ev0whnVr2LWaTtpy/MeKwUSPVvTwrTR3Nxccklcmov9AlZdv2XdTuvkOT+7eQ5wvgNOoUwSq9Jdmay9SCYOokzLTC+oY58cdZnM+BoGcpzYeernTuI5tKS5+C9jjcfUC16OdbZSJpOeA5zvgFMok8SqdFUms15wsl7oGh9XXyRbp9HWtDA9rYWFufbpvK62k/dYYy+kLVN9kW1lTXPHpgfr21qaa5+uXFuYTh6dwrYV/TdfmjOajp6gbSOOCfKsQ5kEdjTKJLEqXZXJpbmM0cfIaEpqCUxYVp++a3yuup3phbUutxOTOcXXuq/Gi2p0Weq+Yo/J8bXRJXeSJc1FfymJP2cyn0NdrJN1vWOnqfCkskqZBJxCmSRWxZYy2XpvQW1kZ8tlssONBW3biBSBtH1lfg+SRj15gd5R2s6PhF9Y+lYm84xM5ry5hnMVcAplkliVvk1zpxWx+OPyjN7VX0wHMTLZcsjxF+3IsaTsq9O1odEpzrWF6dYpTmxz9VH2jNFCK6a5t7gugJGjTBKrMpAbcKwZmez2xXarI5P1bcxpqX4tKF1y50g75/LcXNPy+RzrUCaBHY0ySazKYN4aqPXFcG1hOnYtYnTd2mhOo6Clv6hmbycm14tjv66ZbD2OpTmjuYUFTee5ux3bRtINWNFl9VHq6nmc9RzIsQ5lEtjRKJPEqvT2F3Cid1Mnv2l59cWwunx6YaE2WidFpwKrr7uR9+RrrL/Ww3baDiDfi2Mf7+ZufnsSCje2udiNN22LY1PXS3PJ0+Btj+nlTcu7GL1s2R5lEnBFd2WyvKGLq6taXV3Vpc3RFw+y/TL6P6e4De945oUZADBAHcrkporfmNef37JX42MJv3EWdmnipoO675GiNi0oIsT9UCb7j/eWBAAMUmaZvPDF21TImLqIZvzwE12UhpICL7YNPxx5kSGjD2WyjxpTj4xKAgAGJ7NMLs9P5SqSxhiZmcXchSH04+WxVi7rnysF8oyv0IJyQ4ab0ZdJAADQjexp7vUnNX/79RrLLJIF7dp3r06VyjkLQyjfeApKsc9HCyRlcseGMgkAgFsyy+T5kw/o4adXtLl5ScWnH9XJkyd18ktf0pdOnqz+/9nv6OLGpja++w0d/WLeae7YKGRbQvmNohopnaVAXtrnPV++Z2TqBTT006fQo9vxAwWekR8m7ZsyS5kEAACdZJfJB7zmjTaTN+ng7KxmG7lbt+ydbNyYs/vQ2S5KQ7S0JRTLtpHJ6vqN0hf6zbJXK4fxQti6br18ti4rBdWvr/pxqaVYlgJPxgtUsqBg7aRQJgEAcEv2NHd5TY8/eI9uGh9LneYu7Pod3XL4ERV7fqugSLFMu2YysVzWCmIpkJc0bZ60bujHCmKkXGbtw4KStVNSLBYJIYQQ4lCyb8BZuEf3zH9D37m4ofLmJa3W3mOynosbZW1eKurphw/r3/zVFu/GjpbCeLFrK4GRUcSk6ytbpsSb0+Lto43x7cTLMmVyFGUSAAC4o4u3BhrT+OSkJhuZ0K5Cs3jtOfpcvsIQnaJuSUZB7DgyGV83WgJ7HZkklEkAANBJZpkslze19u2Hdd/BmzSZMNVd2DWhvbf8uea/UdRGOe/d3LUbcGLXI7aMGiYWwqxrJmOjmJGPQ9/0dM0k5ZIyCQAAOuvwPpM36/pb/lzzXzqr76xe1EY5unxTl1aLevrRh3TfwRs11sX7TDZLXiQJ08/GxMtd2l3e0dLX+oboXhAmlMT6NZp+7LrIlDvJCWUSAAAkyiyTG+G9mijEryNMyrju+PILIy8i3YebbGwLZRIAALd0+NvcFVU2V/T0387rw3ffor0t10xO6qaDs7rvobP67kbeKe4RJz59nnr9JhlVKJMAALilc5ncZqlfJ8lUtp2hTAIA4JYdVyaJ3aFMAgDgFsoksSqUSQAA3EKZJFaFMgkAgFsok8SqUCYBAHALZZJYFcokAABuoUwSq0KZBADALZRJYlUokwAAuIUySawKZRIAALdQJolVoUwCAOAWyiSxKpRJAADcQpkkVoUyCQCAWyiTxKpQJgEAcAtlklgVyiQAAG6hTBKrQpkEAMAtlEliVSiTAAC4JbtMljd0cXVVqym5uFEeefkg2yuUSQAA3JJZJs8/4Kmwa0LjY0bGGBlT0K6JSU1OjmvMjGls14T8xfXuCkMpkGfq24vGU1DaahkpKfCM/HD0pYj0FsokAABuySyTy/NTmppf1uJMvfBNaX65okplUTNmRovri/InJjTTTaEsBfKMrzD++dCXSfp8V6FMuh7KJAAAbtlamaxUVKkVSj/cyFcY0spkJZS/5dFJyqTroUwCAOCWLsvkbu27c1azs7dqT6FZCMun7lLBD/MVhqyRyeg2Qr91Gjy6LDZV3iyPsTJZ24YXlNr32/JxSYHnKQj85P0RyiQAAEiUq0yWS0/o5MmTrXmipHJ93cUZmZnFLspk0jWTtdJXqag6ShkvhfVRy9iytlJYW9bymPh6yY9rTrNX99E8HkKZBAAASXKVyY4loOsymTAyWQrkpU5zR6bAQ1/GC1RK3H6tTAYJ28pRJqPT46XAY3RyBKFMAgDgllxlcvmLt2vv5KQmE3LTJ59RuR9lMnHEsf1u71LgdSyTxgsUxstgl2Uyu7QSyiQAAJC6uGbyzi8lvNfkEx/T3ql5LfetTNZGE9tGKbscmQxjj+mhTDIySZkEAACd5S6TM4sJ6yzPa6pPZbJlxDH2NkGhbzpcM1lflnADTqN4tj6uFHiRfTRHNJPWJZRJAACQbERlMukGnGjBrN8QU78xJ2wtiXnv5q5vpzbCWC2Q9W0G8uMjk76fcDMQoUwCAIA0mWXywn9+v8ZS7rxuTUETf/XEyItI7+H9KW0JZRIAALdk/23uHRPKpC2hTAIA4BbKZKUiyqQ9oUwCAOAWyiSxKpRJAADcQpkkVoUyCQCAWyiTxKpQJgEAcAtlklgVyiQAAG6hTBKrQpkEAMAtlEliVSiTAAC4hTJJrAplEgAAt1AmiVWhTAIA4BbKJLEqlEkAANxCmSRWhTIJAIBbKJPEqlAmAQBwC2WSWBXKJAAAbqFMEqtCmQQAwC2USWJVKJMAALiFMkmsCmUSAAC3UCaJVaFMAgDgluGXyVIgzxiZtvgK+7Lt2nai/9/XY+/zNklLKJMAALilY5lcf/7bKpUrqvzgKZ08eTIlT+kHWyxkoW9kvEAlm8oe5XHooUwCAOCWzDJZPjcvr2A0PrOo9fI5zXuFhBFFI2NmtLjVgtaP4kaZdD6USQAA3JJeJtcXNTNeL4sFefPnVF4/o0/Pzmq2kTu1b/egymQoP3EKvKTA8xQEfrPM+mH7NuLbi02v+2Fk36HfWo79MLZ/T0Gp0zZr60T2HQReY5teUBp5UXMhlEkAANySUiaX9UDbKOS4/HCjbb35qf6UydCPlMJKSYHXLHylwItMgVeXNQtmtfR5QSmjTFbXaRTIrGWh36E8Zj0uuu9IgYwuI5RJAAC2kZQyua7nHz2pk5+7W9cZI/Ouv9TJkyf1RKncpzLZPlXeMnKXOEpZH/lrLZqNsumH6WUy9Lu4HjOyr6wymXWMpUBewkglZZIyCQDAdpN9A87yvKaMkZlZbFu2vHCrJicntKtgZMyYxicnNfm+v9b5XGWyfaq4Zdo5sXCml8lGWUwpe60jm2nHlLCvrDLZVlAjx5U5okkokwAAbB89l8n6zTnNAla7rrLbMlkvZrlH8vo8MhkfRezbyCRlkjIJAMD2l69Mjo1rcnIykr26d3Fd64szGq+VyfGZRa3nKQy53hooVhhbHlO7ZrKxbuTaxa6umawVv9j1jKEfH5lMK7mdrpmkTFImAQDY/vKVyaQUbtbC+bLOzXsa8+Z1rpyzMKQWq9rd042bcBLupo4WTd9vv96yp7u56zf01LcVRopsc1n69HX63dyUScokAADbnYN/TjHhmkmybUKZBADALZRJYlUokwAAuIUySawKZRIAALc4WCbJdg5lEgAAt1AmiVWhTAIA4BbKJLEqlEkAANxCmSRWhTIJAIBbKJPEqlAmAQBwC2WSWBXKJAAAbqFMEqtCmQQAwC2USWJVKJMAALiFMkmsCmUSAAC3UCaJVaFMAgDgFsoksSqUSQAA3EKZJFaFMgkAgFsok8SqUCYBAHALZZJYFcokAABuoUwSq0KZBADALVsok5u6tLqq1UubIy8gZPuEMgkAgFt6KpPrTx7VzWNGxhgZU9Cu98zr+c2cjy8F8kz9sdF4CkoDLiulQJ7xFY56GyQ1lEkAANzSfZnc+IruKBiN3zavpeKqikvzum3caPfMoja2UsZCfziFklgdyiQAAG7pukyWT90lYw7qxEbzcxsnDsqYGS3m2UbqyF5JgWfkh6MvNGR0oUwCAOCWrsvk8vxUe3FcnBlAmQzlN6bAI+uXAnmeL9+rf772uCAyfe6HrdPpfpi879BPn2ZPWxbfRsu0fft6QeA1tuMFpc7btzxX1ld0vlhUMSPfu/giZRIAgB0io0yu68ynZzU725o79+2WMXt06+yndWa9j2Uy9COlsbVYlgJPxgtUipS3ZumsrttYXi+hLevXylrLvkP50RIX+rFtpCxr20bkWKJfQ+04GwWy5evL2rflubqpH//gfGqRPP/9NW38a+/bp0wCAOCWjDK5qJnEG2WamVmsrbtZ1NlHn9d67jLZ4QactsIZKV/RcphQPDM/ziqCLclYFt1GN8eZe98OJKVQbrVIUiYBAHBPf8pkN8lzN3Ri4UwaXdxKmWyWuvo+WstdyrLoNtpGFDP21dW+HUisUPajSFImAQBwj8VlMmWdvpbJSFqmoTOWdTUymVUmc+7b5tQKZb+KJGUSAAD32Fkm44Uws8D1WCbj09BthTFrWd5rJlPKZNb2XcvVl/XyL/q3PcokAABuySiTT+jweFaZHNfhJwZVJptFrfP1lFsYmRzC3dypI5OO3s096FAmAQBwC3+bm1gVyiQAAG6hTBKrQpkEAMAtlEliVSiTAAC4hTJJrAplEgAAt1AmiVWhTAIA4BbKJLEqlEkAANxCmSRWhTIJAIBbKJPEqlAmAQBwC2WSWBXKJAAAbqFMEqtCmQQAwC2USWJVKJMAALiFMkmsCmUSAAC3UCaJVaFMAgDgFsoksSqUSQAA3EKZJFaFMgkAgFsok8SqUCYBAHALZZJYFcokAABuoUwSq0KZBADALUMuk2VtXFzV6sUNlS0oLsS+UCYBAHDL8Mrk+pM6evOYjDEyxmjs5gd0rtzDdkqBPOMrzPt54lQokwAAuGVoZfKJw+ONIlnPnqPPdb8tyuS2DmUSAAC3DKlMLmt+yrSVSXPbF/WjbrdFmdzWoUwCAOCWIZXJss58cHdbmdx96Gz328pbJkM/si9PQSm6fii/sSzymFIgz/Ple5HPZ26H9DuUSQAA3DK0ae7y2in5E4VGMStMzOiRlXL328pVJkP50eIX+jJeoFKlokqlpMAz8sPqslLgNZeVAnmmuSx7O2QQoUwCAOCWIZTJdS36EyqYcd125Mt65G/+o77wN4/oc/6NGjMFTfiLWu9me7nLZLQUZj0+UhhLgbyW0ceM7ZCBhDIJAIBbBl4my2c+qN3xayVbskdHn+tim7mvmYxOZUcKYW30sfUYomUyvu2U7ZCBhDIJAIBbBl4mnzlyXUaRrGZqfrmLbcamnuvJmoIO/eY1kFk36nS6iSe6HTKQUCYBAHDLwMvk4kx2kTTGqOCHXW0z9E2sOFZHD72gFCmFsWsdGyWw9ZrJlgIZL5OZ2yGUSQAAMPAyefZQ+13c8Vx35Jmutxv6rdtoFMl6ct/NHVmWNDLJ3dxDDWUSAAC3DP4GnOUv6vbrx1KL5Nj192pxffQlhtgRyiQAAG4Z8t/mJiQ7lEkAANxCmSRWhTIJAIBbKJPEqlAmAQBwC2WSWBXKJAAAbqFMEqtCmQQAwC2USWJVKJMAALiFMkmsCmUSAAC3UCaJVaFMAgDgFsoksSqUSQAA3EKZJFaFMgkAgFsok8SqUCYBAHALZZJYFcokAABuoUwSq0KZBADALZRJYlUokwAAuIUySawKZRIAALdQJolVoUwCAOCWgZfJzUsXtVHOWGfzki5ulEdeYogdoUwCAOCWAZbJDYX3TqhgjMzYzXrgXHth3Dh7WDcUjIwZ080PnFPZgjJDRhvKJAAAbhlgmVzUjDEytRT8UJXKpi6trmp19ZI2KxUtzjSXm4KvsKvth/Ij2zfGyAtKIy9DZGuhTAIA4JYBlsnndHRPvegVdOD+h3XohkKj+I3dfFQP/bs9zbJ54LheyLvtUiDPGPlh9PPVckmhdDuUSQAA3DKwMrn+/Fk9/Z0lPfjhWd338Lf1yAd3t4wiGmO058jf69sP36fZ+x7W0995Wt8u5bl2sqTASymNpUCe6XaEk9gUyiQAAG4ZUJlc1vxUdURy18SkJu6d1/1Tpq1Mmjvu0yffM6HJiV3VaysPHNeFTtvOWxhLgTzPl+8Zmfr6tRHN6v49BaWUbbZ8XFLgeQoCv3ncftjcTxj5fHSbhDIJAMAOMKAy2Xq9pLnuI7o/cWRyXh/cHfnc3vt1rtO2Q1/GC1TKUyZbpsKr0+CNj0M/VjKzymSkkLZMp4fyowUy77ERyiQAANvEgMrkEzo8Xr+x5gb90f1/rX94+rG2ayaXngj110fer4lCbd2peS33UCZD37SPDpYCeVmjj9EimKNMRq/PLAVebXQyVlAJZRIAgB1mcDfgbF7S6uqqVp+a181jRqYwofcfPanHv/Utfevxx/TQ4Zs0XnvboPufeEGrq6u6tJlju5nT3BkFsa2ERkpil2WydVutd5VTLCmTAADsJAN+0/ILOn4g4VrJWAp3fEUbubeZcQNO7tHGbtbNGpmM7T86dU4okwAA7ACDLZPlU7qrQ5Hs6T0ma9dDthbK+rWNKQUx65rJ2LJS4EWW1bYbG4lsjmjGrpmkTFImAQDYQQZbJpfnNZWnTJoZLXa9/Xp5jCQ6Wpg0HZ52N3ejQNbf/DyQHx+Z9P3I8kiJ5W5uyiQAADvYYMvkheM6MIiRyaEm4ZpJMrBQJgEAcMuAr5ks69x/uUc3TU5qMjU36d5TJYv/LjdlcpihTAIA4JYBl8ntEMrkMEOZBADALZRJYlUokwAAuIUySawKZRIAALdQJolVoUwCAOAWyiSxKpRJAADcQpkkVoUyCQCAWyiTxKpQJgEAcAtlklgVyiQAAG6hTBKrQpkEAMAtlEliVSiTAAC4hTJJrAplEgAAt1AmiVWhTAIA4BbKJLEqlEkAANxCmSRWhTIJAIBbKJPEqlAmAQBwC2WSWBXKJAAAbhlYmSxvXNTq6mozlza0cbH6/5c2R19aiJ2hTAIA4JYBlcmzOrTbyJhoxnTz0cf13cePyBubkH9qTeVetl0K5Jn4to2M8RSUtnjcpUCe8RVaUKp2aiiTAAC4ZUBlclEzxmh85hEVi3+juxrFsiDvyJMqPnlEXmFcM70UyrTCF/pbL5SUyZGHMgkAgFsGWian7j+ncvlJfeS66AhiQTccOtN7oUwtfCUFnpEfbuG4KZMjD2USAAC3DLRMtk9FJxfKO06U8hfKvGWyZTo8NmKZtiy+7dDv7zQ6oUwCALDNDKhMLmt+KqtMbqFQZk5z1z8fyjeRYpl3Wcu2Q/nRAhn6Ml6gkgWFazuHMgkAgFsGdzf3uXl5hRyF8vBZlZ78iKbMuGYW13OWyQ434LQVzkgxzL0sVjoJZRIAALQZ6PtM5iqUuw/pbOUZHbnOqHDbF3UhV5nscF1j2yhiZAo8a1li0WweK8Vy8KFMAgDgloG/aXlmoSx4mj+3psWZcRUmfC2u59hmnjLZl5HJWFqmysmgQpkEAMAtQ/kLOImFspciWelQ+BrpwzWTpUBe/JpJyuTAQ5kEAMAtQ/tzii2FsuBp/vkVneq2SMYLX8f1uJvbtVAmAQBwy1D/Nnf53HHdftPtOn6urJ/9w4e196bDOtNNkSTbPpRJAADcMtQySUinUCYBAHALZZJYFcokAABuoUwSq0KZBADALZRJYlUokwAAuIUySawKZRIAALdQJolVoUwCAOAWyiSxKpRJAADcQpkkVoUyCQCAWyiTxKpQJgEAcAtlklgVyiQAAG6hTBKrQpkEAMAtlEliVSiTAAC4hTJJrAplEgAAt1AmiVWhTAIA4BbKJLEqlEkAANxCmSRWhTIJAIBbKJPEqlAmAQBwy3DL5PoZHd43rvHfuV3Hz5VHXlyIfaFMAgDglqGWyeX5KRljZIxRwQ97204pkFfbRmt8hbkfn3NdMvRQJgEAcMtQy+RG6GvcGBlT0IHjL/S2nZQyGPpGxgtU6vHxxI5QJgEAcMtwymR5Td9+9KROnvyyHv7ErO7+yIP68smTOnnyrIqbXW4rrQzmLYmUSatDmQQAwC1DKZNPHB5PmJauTXfPLKrczfbylsmW6XBPQSnt8aH8tKny0I8ca2QbZGChTAIA4JahlMnFGSPzrrt193WRInnd3br7XUZmal7L3Wwva5q7cR1mtSD6YSVSCmuPaXl8SYHXXK8UeJGp8lB+tECGfr5pdLKlUCYBAHDL8MrkzLzmpyJlcmpe8zO9lsn2EU4vKMXWiY8+1ophdFnWevFCSoYSyiQAAG5xtEy2T2e3lL62UcTICGRbmYwX0+h0dnQKnGJJmQQAAHFDKZPLX/6wPvzlxWqZ3L1P+/ZUS+STZz6tD395ubvtJU1zh36O6yLzjExmJDpVTgYWyiQAAG4Z4lsDLVfLZK8jkvXkemug3q6ZbC+asWsmKZMDD2USAAC3bJsy2ZiSrt+E09Pd3LE7trmbe+ihTAIA4Bb3yiTZ1qFMAgDgliGWyQ2Ff7FXe/8i1DMLt2rvvz2pCxaUF2JXKJMAALhlqH9OkZBOoUwCAOAWyiSxKpRJAADcQpkkVoUyCQCAWyiTxKpQJgEAcAtlklgVyiQAAG6hTBKrQpkEAMAtlEliVSiTAAC4hTJJrAplEgAAt1AmiVWhTAIA4BbKJLEqlEkAANxCmSRWhTIJAIBbKJPEqlAmAQBwC2WSWBXKJAAAbqFMEqtCmQQAwC2USWJVKJMAALiFMkmsCmUSAAC3DK1Mbl5a1erqRW2UR19YiL2hTAIA4JaBl8nN4iO698YxGWOqGbtZD5wr92f7oS9jPAWlLWyjFMgzvsJBfh8GsY9hHPcIQpkEAMAtAy2T5XPz8gpGpuDpyFJRq995WHeMG5kDx3Vhy9svKfCMfN+X8cPeS5grRW+blsd4KJMAALhlcGWyfFaHxmujkVPzWq59fnl+Smb8sJ7oV7nqtmRRJq0OZRIAALcMrEyWF2dUMHv07/5+TeVyWZvlsiqbz+t+r9CXkclS4DVGJEPfyAtK6cWr8XEovz7dXp8ery8L/cZUvB9G9xV9TPs2g8BrPK56DBn7aHmsSd5f5DiMMbWvsdttRqb+U49z9MWRMgkAgPsGViaX56dkfucTer7+ucWZWpkp6I6vbGxx+6H8aGEKfRkvUKljmcwoYfWp8tCPlMbaVHoYKbD1/dQe1yhm0cdljn5Wi2GjQGYti14T2s02244l5TgtDGUSAAC3DHhkclx3PPwdrRaXdMQr1MrkuGZOralcqah87gHdfu+i1rvdfrw8Zha0PGWyfSQvcd1oie3mcdGP2449K/H95fya8h6nhaFMAgDglgHegPMDfeWuCRUad3Ffr9uPHtVdE4VGoVw/e1g3FIzGZ7oplNXRwpap4JYp4V7KZNa68f30UO4iH7eMbialbZ859tdWUCMjqsO4RpQyCQDAjjX4twaKv7/k+hkduqFaKO847OuGXbu0q2A08VdP59tmWhmKjsD1tUymFK9e95E1MhkfRezbyCRlEgAADMZo/gJOo1Aa3fLQitae/IaeXM/32NA3qW8F1LwRp3XauxR4sWsIM6Z9Wz5uvWYyd2HM3EfSlHxt3dj1jKEfH5nMuc3c12/aF8okAABuGd2fU4yMUNavoez8uNiNN/FESlSp5e7lQH6sIDbuou5YthLupM5ZQrP3kXQ3d+sUvheEkTLbzTbzHqd9oUwCAOCW0f5t7nqhLNhbbshwQ5kEAMAtoy2TlYoqm0V9p7g58hJD7AhlEgAAt4y+TBISCWUSAAC3UCaJVaFMAgDgFsoksSqUSQAA3EKZJFaFMgkAgFsok8SqUCYBAHALZZJYFcokAABuoUwSq0KZBADALZRJYlUokwAAuIUySawKZRIAALdQJolVoUwCAOAWyiSxKpRJAADcQpkkVoUyCQCAWyiTxKpQJgEAcAtlklgVyiQAAG6hTBKrQpkEAMAtlEliVSiTAAC4pXOZLG/o4uqqVi9uqNyyrKyNi6taXb2ojfLoSwjZHqFMAgDglowyWVbpxD26fszImGrGbjysx9bKKq89psM3jjU+b8au1z0nSrGymZJSIM/4CvN+PvRljKegNPqiQ5r5xb++pJev9n+7lEkAANySXiZfeFDvMs0iaUxBN/ybmzQ+Nq7xsejn63mXHnwhR2HoqkyWFHhGvu/L+OHICxSp57J+9EJR3/vhJV3pc6GkTAIA4JbUMnn+AS9WFu/SqfIFHT+QVCSr8R4437kwdFMm659LewwZUaplsljsf6GkTAIA4Jb8ZfLAcV2oVLQ8PyVjjMZvu0e3jQ+2TJYCrzEiGfpGXlCyoEiRaJnsd6GkTAIA4Jb0ae7njmpPpCjuvf+czp06peVnjug6c52OPFPRxlfuUKGxzh4dfS5HYSgF8lJGNk1LmQzlR6+VDH0ZL1Bp5EWKxMtkPwslZRIAALdk3ICzoXOnT+rkyWqe+sEFHT9wQMcvnNWhPYd09vxZnX3hB3qqtvzk6XPayFMY8o5MtpXHUL4x8sNRFymSVCaLxe/p4k+3vm3KJAAAbunw1kAv6Ku+cpb7bgAACAFJREFUp8nJSU1OjmvMGB08sa4zZ87qwvEDGhuf1OTkpDz/q3ohb2HIVSarN94kjl5yI44FiZfJ7+nC//evfdk2ZRIAALfkeJ/Jkk7cMd4oc4WZRZUrGzpxsPrx+B0nVOrmfSbzlMnMdXiboNEnWib7VyQrFcokAACuyfcXcMprOjVTK5S7P6gz61/RHQWj8ZlTWuv2DctzlMnQTx+B5EYcG1Ivk/0tkpUKZRIAANd08ecU17XoT9RuuClowl/Uei+FoWOZjN14E0/ox27UIcNPWZdWX9Ban4tkpUKZBADANV3+be51nTl0o248dKa3IklIh1AmAQBwS5dlkpDBhjIJAIBbKJPEqlAmAQBwC2WSWBXKJAAAbqFMEqtCmQQAwC2USWJVKJMAALiFMkmsCmUSAAC3UCaJVaFMAgDgFsoksSqUSQAA3EKZJFaFMgkAgFsok8SqUCYBAHALZZJYFcokAABuoUwSq0KZBADALZRJYlUokwAAuIUySawKZRIAALdQJolVoUwCAOAWyiSxKpRJAADcQpkkVoUyCQCAWzqWyfLGRa2urmbm4kZ55CWEbI9QJgEAcEvHMrk4Y2RMh8ws5i8MpUBeynb8sL7cVzjsIhPd76iOgVAmAQBwTA9l8k59qTEq+YQ+treXMmlhUaNMWhHKJAAAbumhTM5osbF8WfNTlEnSv1AmAQBwi31lMl7qPF++Z2QajwnlN46l/rmSAq82Td7YRuTj0JfxApXq/x/9evyQMtlFrqyv6HyxqGJGvnfxRcokAAA7xIjKZMI1k6mlLlIKY6WxFHiNklgKvOY2Ql+e58kLSo31qv9fLaItJdN4CkqUydy5uqkf/+B8apE8//01bfxr79unTAIA4Bb7RybrZS/xsaH8aBmsFcvQ9xSEgTw/bCugrYk9njK5pUK51SJJmQQAwD0dy+TZQ7szyuQzOnKd0d77zw2wTEbWTRzVrJfNejEsKfB8hZVQvon+N20blMl+FMp+FEnKJAAA7un8puXPHdWexDJZ1rl5TwUzpfnlLgrDlstk+mND38gPYiOUgR+bQo+MdDIy2ZdC2a8iSZkEAMA9Of4CTr00RspkeU2PH71ZY6Ygb/6cyt0Uhq2UycQbbSLLk66VjHxcvUayuX7oMzK59UL5sl7+Rf+2R5kEAMAtOf+c4qaef/D9migYGTOuiYmCTGFC7z/eZZHMU9Q6lrro3dzRUcZKYwo78QabSqVRRuujrF4QNsspZdKKUCYBAHBLV3+be7P4iO7dN67r339Uf1/iTyiS/ocyCQCAW7oqk4QMOpRJAADcQpkkVoUyCQCAWyiTxKpQJgEAcAtlklgVyiQAAG6hTBKrQpkEAMAtlEliVSiTAAC4hTJJrAplEgAAt1AmiVWhTAIA4BbKJLEqlEkAANxCmSRWhTIJAIBbKJPEqlAmAQBwi/n2j34uQmwJZRIAALdQJolVoUwCAOAWyiSxKpRJAADcQpkkVoUyCQCAWyiTxKpQJgEAcAtlklgVyiQAAG4Zcpl8Uf/w7Iq+/uyqln44+uJC7AtlEgAAtwynTH7/J9Xy+Nz/oX3GyJi9+uDSz/XtH72opf/ncm/bfOozersxMo18QMd6Pb6nPqO3b+XxpG+hTAIA4JbBl8lzX9PBNxX02j0f0J994L/Xb9bK33/7vo/rD7zXy7zhdn3yqS4L5YkPyBijgyfin9unDz2V4/GUR2tDmQQAwC0DL5NLJz6g3S0jiPEU9PZPnOtim0V9aCpWJGv56tF9MlOf0Vc7bYMyaW0okwAAuGUI09z/rz5+oF4cx3Xj7X+m2+/5HzX5utrnxv83faGb7WUVwac+o7c3RieL+tDUPn3o6AeaxfXub+jbP/qGDjaKbG3d+DZbptAjo5219T50dF9jm28/Wmzu/0RkX3lHSQllEgAAhw20TH7jP/7PevObdum1tYI1df/3Gsue+q/31qa8Cxp701t145F/zLfdEx/IGH2sFsXqqGV1BLN5LWV12duPFlPKY+t6jZHPEx9obqNWMhsFMrrsR9/QwWiBzDxOQpkEAGB7GGiZ/K//fioyUle/6aaWc/9JN0Wnu+/82kDKZHQ6/KtH91VHJ7PKZNvIZ6Qktox8xteNlVBCmQQAYAcYaJlcWnpMf/nh5pT27ju/ptM/+rm+/aPL+vK/31cbsXybpu/5uP7y69/Pt93M6x2jo4MJ11bWi2hWmWwrq5HtZI5o1vffLMgUS8okAADb3eCvmfzhs5q9oVmwfv0Nb9Wb3/D65ojkb/2RPn2um23mvQFnUCOTWWUykpYpcEKZBABgexp4mfy/vvCHjWsm0/Lb/8v/3d12c701UO2ayUa5jExDdzNd3XbNZFYJjV0zSZmkTAIAsM0N5W7uz9z932nPBxZ14uE/0xtrBfKm/7Cs/3T//6C3eIG+3NNfw2mdUm4vbrWRybubd1g377yu35yTNX2dfjd36sgkd3NTJgEA2GGG++cUf/g1/U+vMzJmSn/x+KD3lz4dTuwNZRIAALcM+W9zDzOUSRdDmQQAwC2USWJVKJMAALhlG5dJ4mIokwAAuIUySawKZRIAALdQJolVoUwCAOAWyiSxKpRJAADcYiqVigixJZRJAADcQpkkVoUyCQCAWyiTxKpQJgEAcAtlklgVyiQAAG6hTBKrQpkEAMAtlEliVSiTAAC4hTJJrAplEgAAt1AmiVWhTAIA4BbKJLEqlEkAANxCmSRWhTIJAIBb/n997etMXUuVVgAAAABJRU5ErkJggg==" />Here I've also changed the Input Policy (Default: "DROP") to "ACCEPT", allowing access from anywhere on my network. This ensures that other services I'm already using don't break. Ideally I would create a FW rule to allow each specifically. <br />
<h4>
Node</h4>
Under <hostname></hostname><br />
Select "Firewall" -> "Options"<br />
Select "Firewall" in the list<br />
Click on "Edit"<br />
Check the box<br />
Click "OK"<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAh8AAAIHCAYAAAA/2D4nAAAgAElEQVR4nO29b4wc532g+X7Z7cMyxyOCuWRvTsvTERZWgjG4Y82AsBCsBB9zXgOEdadbQ9AggCqdcXhhHPGiIHQS2kHkeE7ljDVSzLPXzBoMGS3laDZ0hWNiuOIq9DgkJe+sB2l1JI2aPSeNdfbA4shuSrYaASaAfvehq7vfqq6qrrerq/8+D/BAYnd1dU1PV9XTb1X1KAEAAADoIarfCwAAAADjBfEBAAAAPYX4AICu8sEHH8itW7dkc3NTSqUSam5ubsqtW7fkgw8+4HXkdzDStnudiQ8A6Cq3bt2SN998UyqVilSrVdSsVCqytbUlb7/9Nq8jv4ORtt3rTHwk4J133pHNzU1ZXV2V1dVVee655+TcuXOxXrhwoTF93e9+97uytbUlW1tbcv36dVldXZXvfe978qMf/ajfPyJA19jc3GRjHePt27dlc3OT15Hfwcgb9zqPfXy88847srW1Jd/97ndldXVVLly40AiIJ598Uh5//PHMPXfuXL9fBoCuUSqV+r7RG3RLpRKvI7+DsTDqdR7p+Lh9+7ZsbW01Rh76ERbEB4wbbLA73yB3/DpWfig/3On/zzVMEh9N/+Ef/kFu3rzZ09d5aOOjHhb9HLEgPgBaSb7B3pHvv/66vP56WX5Y6f8GuJd2d8dXkqUvHJOjx78qVwfgZxsWiY+mxEcI9cMi9RGMixcvyp/+6Z/2PRi66enTp2Vra4tzP2AkiNpgly6eki9fKEpl5+/kr7/6R/LYsaNy9Gjd35Q/ePK8rL7Z/w1xL+zKjm/n+/J6+YdSqa7L2T84KkePPimXqlXZ+f7r8n1GQXrzOxgRByM+yosyo5TMLJZDbp+Tlba/riArMqdmJDi7to+aqy3DxWf+777HASMgAMmJ2mCvn/0DOXr0uDz22LFacPzmcfnDJ56Wp5/4Q3nst7zbjn9BvrGW4AS/oiOWUqJatMVNuFF0bSW228UNbdERK+Hzp97xvXlF/p/PHJOjRz8rf1HQ4+OyPHXM4HWsVqVadcWOeg0Nfqbkr0VRHKvLr30Xd4qJfwddNePfQZt5DFR8qGBo9DA+3nnnHXnuN++Uf71wXc7/2Xzfo4D4AEhOfHx4Ix1/+OfyX/RP55WbcvX0Z+XY0aNy9A/OynqHO7eiY4myHCkm2CgOb3y8KReeqMXaceeCFCt6fLwpqyavo7fT018H32tIfIQ89ody+WtflgvFbl0F04PfwfDEx5wsLs74Rz96GB8XL17sewgQHwCdkSg+jh4Xx301Yqf6qHz5SpsNe9TGtOV2/ROlf3rXVmLbduPTpn9nGP248Pvipu/mjq8q1Re/Lr979Kgc/d3T8reVqlQDh12ar+MxefJSJ6+jK7ayxCk277dt1fo6BR/b+Heb18eyxfbFR9j0gUApOmLVl6lalapr13bORUcsyxEnbPky/B28eekpeewxk9GljH4Hce+9YY2PFSnL4owWG8H4aIyQKFHBuFiZaw4fzc0F4mNF5hqPC48Z4gNgeInaYFeKV+XixYsNV156s3WaS0/KsaNH5XdO/21H8REc+XBtJZZTbN5nu774iPp0qT+usaNrd1+PRj5K33hcjh49Kp/9i4J3W0H+4rNH5eixp+Sy6evo7eQjR4u8w1uJft6YnV3La6btQKNez6Jj+X932mMa98UtX4a/g+4GSIrfQdx7vEvxce3aNXnvvfdabn/vvffk2rVrWcSH1CJibqX1di8g6nfVYiP8vvLijBYnZVmcCdw3syjBQRHiA2B4SXWcfO3P5feOHpWjT16Kny7qnA/fBlz79Nj4t3+HqH+CbP7bP51/PjH39Sg+6iNIT15q3lYpXpUX/m7H/HWs69ra66i9ZgaBEX1f8DXTRzXavJ7e79O1LXEc29uxFsWxIl7zXp53U63Km5eelOPHvyBL6x2+39P+DuLe412Kj0KhIN/5znfkZz/7WeO2n/3sZ/Kd73xHCoVC25+rs/iQsizOeOGg395yCEY7tLIyFwgK7b64x2kQHwDDS5r4+OGFJ+To0aPye3++liA+tI2pa/s32I0NcTBQmtO4tn/6Rny0bKhjdnax92Wz46u/RnGjGolfx8jXNsHOPel9Ia9Lote6sSP1/us7rJNgGTL8HdR8Uy49edw776az93vq30Hce7yLh13W19fl+vXrjX9fv35d1tfXE/0sHcaH9++5ldYREV9gNEc0WkczgvERfKGID+IDRol28VEp3pCXwi6prfytnP7do3L06O/K119MsnH2b0xrQ/PBT9HRG1z/yEfCT+MDMPJR/aErzrGjcvTRP5HltK+ja/sORbWNg16OfNSXw3HE0kc8HDv80EKCnWz34qOL4ZHmdxD3Hu/yOR9ra2vy0ksvyUsvvSRra8mjtvP4kNplr3OLWYx8hDNu8fH000/L6uqqFAqFtisDwKATGx+F/yDzx4/Kscfm5ex/ek12qlWpVivyw//y1/LUZ7wrOJ68JG+226iFbky9Y+eB8zrijpVH7cQG+ZyParUia2drV7Skfh1DrrSIDaqYIX9f/HXhnA992qhzP/oTHz+Uy091c8Qjze8g4fuxC/Hx/vvvy40bN+TGjRvy/vvv9yY+Wi+/7c45H1ExMsrx8fnPf17OnDkjZ8+elbNnz8qzzz5LdMBI0Xao+qnHapeChnj8C9+QtSQb9NirXbSNsW9YOuQwS+Nql7hDNkmudqlKI36yvtqlm69jy89jcr5BMwZqgeBon8KDr0X930mvdtGfL3CVS1xs9CgA33zphj88Lj8V+btoXoWUze8g8j0+vFe7BG+e8V+dEne1i3bfzOJizNUu4Zfgvv7667K6uiqnT5/ueyx0Ww6twKjT/pyPity8sSRf/fzvyWO/dUyO/dZj8jt/+KScXfk77xP86NudL7jidez/72A0HIz4GCBGcQTkb/7mb/r9sgJkyrhssLPYIPM68jvoh8RHgFGKj+eff15u377d75cUIHPGZYOdxQaZ15HfQT8kPgIMc3w8+eSTcu7cOVldXZXXX3+93y8lQM8Ylw12FhtkXkd+B/2Q+AgwLPHxla98Rc6dOyfPPfecrK6uyg9+8IN+v3QAfWNcNthZbJB5HfkdjJpDGR+vvPKKPPnkk5lFwxe/+EU5d+6cXLx4UVZXV2Vzc1O2trb6/WMDDDWbm5tSqXTrj26Nnrdv35bNzU1eR34HI2/c6zzQ8VHnBz/4gayurspzzz0n586d60pg/OM//mO/fyyAkeTWrVuytbUlt2/f7vvGb9C8ffu2fP/735dbt261fR3ffvttXkd+B0Nru9d5KOIDAIaHDz74QG7duiWbm5tSKpVQc3NzU27duiUffPABryO/g5G23etMfAAAAEBPIT4AAACgpxAfAAAA0FOIDwAAAOgpxAcAAAD0FOIDAAAAeooqFAqCiIiI2CtVv7+IBIfPQqHQ72gGAIAhhvhAY4kPAABIA/GBxhIfAACQBuIDjSU+AAAgDcQHGkt8AABAGogPNJb4AACANBAfaGyS+Bi0vwZp8pcsAQAgW4gPNDZJfNy6dUvefPNNqVQqfV/earUqlUpFtra25NatWz1YrQAAIA7iI+Dbb78tr7zyirz99tt9X5ZBNUl8bG5uDkx41L19+7Zsbm72YLUCAIA4iA/NW7duSblclkqlIuVyWW7dutX3ZRpEk8RHqVTq+3KGWSqVerBaAQBAHMSH5zvvvCM3b96Ud999V6rVqrz77rty8+ZNeeedd/q+bIMm8QEAAGkgPqpV+clPfiKlUqkRHnXfffddKZVK8pOf/KTvyzhIEh8AAJCGsY+PH//4x1IqlSLPT6hUKlIqleTHP/5x35d1UCQ+AAAgDWMdH/WwaDeyUR8ZGbQTKPtl1+Kj6IillKgWLXGKYY8pimMpsd36Y21xq4H/byPxAQDQf8Y2Pm7fvi03b95MPKLx4x//WG7evCm3b9/u+7L32+7GR7JoqKnFR4fzIT4AAPrP2MZH/UunTB5T/9Ksfi97v+1tfLhi10dELFvslpEP7f4EAUJ8AAD0n7GND+zcXsaHayuxnGLt364tSnHYBQBg2CE+0NjMz/mwHClWq1Ib9dCjgnM+AABGAeIDje3ZyEfI/a5NfAAADDvEBxrbu8MujHwAAIwixAcayzkfAACQBuIDjc3+ez70y2lrox3RV7vo03C1CwDAMEB8oLF8wykAAKSB+EBjiQ8AAEgD8YHGEh8AAJAG4gONJT4AACANxAcaS3wAAEAaiA80Nkl8bG5uDtxfAb59+7Zsbm72YLUCAIA4iA80Nkl83Lp1S7a2tgbmrwDfvn1bvv/978utW7d6sFoBAEAcCeNjR94qlaRU2pTtSv93JNhfk8THBx980PgrwKVSqe/W/4rxBx980IPVCgAA4oiPj0pZnp//hNy5R/sCqNxeOfipZ6Sw0+nOS/vSqLq229sdqME3YmJn8QEAABBFTHxsydLsRCM4PnT/Q5J/6P5GiOTuOi6Xt813XK4djA0vRnoZIMQH8QEAAH0jMj62zhyRnFKSs07I82XtxMFKUc48UIuSiWOXpWK043LFVpY4xT7HAPFBfAAAQN+IiI+bcuo+JUpNyfx6yP2VS/Lr+5So3KwsGZ0DknSUwxW7cVgmEAneHxdrOWRTdMTy/vaH8v3BsZC/F1KPD21ezb8lgsQHAABkSUR8LMmsUqLueVzWInZAS7MxcZI4LMJCRPuz6dWqFB1LlOVIUXtsIxRcW1R9JMULjWZEBKZt+Suo2nO7dqI/SobEBwAApCciPlyxc0rUHSdkNfT+ijz7yU7jIyJE9BEMXwhEHKoJ3ld0xNKnc20tWgIGp+UwDPEBAAA9IyI+tuXMESVKTcixyyFfFLV1Ro7klKh9x+RyN3ZoegyE/pn1YCiE3BcICP+ISdjzabFBfBjHByIiYqdGnnBauXxMJpQStecjcvL5cuPE0p2Nv5Jjd+VEKSX3PL5mtuOKPLyhHWqJC4HgiEXLyIf2uLYjH8RHmvi49sZPEREROzLmUtuKrH3xI7LHG2HI7Z2U/RN7/CMSE7PybNnkK7S9E04DUeAfpfCf8+ELg0C8uHb0yEf4OR8R0xIfxvHxr04h4qjb7x0Ujq5tvuG0IuXnn5KHD03K3pwSpXKy90P3y/Fnvi1/dewuyXUUIPVo0GwZodBPStVHOvxfUGY5bvyISburXYiPVPHR7zcvImYn6zhmaYq/7bIllxoBclyuDMBOEXsj8YE4+rKOY5am/MNyW3Lp+CHZ/9FFWR+AnSL2RuIDcfRlHccs5a/aorHEB+LoyzqOWUp8oLHEB+LoyzqOWUp8oLHEB+LoyzqOWUp8oLFG8XH1Cbm75Uvjah45U7//EVno9Ztff95+LQPiAJs8Pgry6SklauoJ+UbLfRfkiFJy90lCBv0SH2iseXwM4I6d+ECM1WzkIzwyvnHyYESU4LhLfKCxxAfi6Gt82OXMI6L09ejqE3K3Oiifvtr/nwUHT+IDje1qfAQjYOoROTKltI1Y7RNV7VBN/bbaMO+RM/o8tH+feaT5aevMI/7DPQ9dCH9e4gPRZyfnfCw8VF/HauuofyQkbF329K2nBMs4SHygsV055yMyArSICESGPoT7jZMHm/M484jcPXWwsaH7xsn6/9c2dr4oqW/YiA/EWDs74dQ7/DIVPNwSvS7XHqMFh/7hAUdW4gONzXTkQ98ItTxW20hdfULu9jZQCw8dlE+feULu1j5xNQNGN/B44gMx0o6vdtEjv35b3Loc/JCAYyHxgcZmGx/BY8bBURN9g3VQPn21IJ+eekQW3rggR5T+36h5EB+ISew4PsLWp9h1+afiPyRDiIyDxAca29v4iH7swkNKjpwMjICcfCRwSCe4gSM+EJPY/fhIuI4FT1zFkZT4QGN7Fh+hJ5Zq94ed66H9O7gRW3iIkQ/EpHY1PuLW5eCHBOJjLCQ+0NjexcdPxT8cG3YcOeKE0jd+Ko0vP/Ief/fJC80NIPGBGGt34+OnErsuc7XL2El8oLF8vTri6Ms6jllKfKCxxAfi6Ms6jllKfKCxxAfi6Ms6jlmaKD523ipJqRTu5nal7ztD7K3EB+LoyzqOWdo+PraXZHZf+F8lVUqJOnBSbhjtvIriWIF52G7fd6hIfCBiU9ZxzNK28fHyFy1RSsnEoYckn89rPigH9ylR952SmwY7LtcOxoYXIwTI0Eh8II6+rOOYpW3iY1vOHFGi1C/Ig855OX9e9zNyX07JvU+9Kpc/9zm5kmjH5YqtLHGKgduLjljKFncAdqyYPD4QcbTt9w4KR9f4+LhyXCaUEnXgo4FRj7z8yr+6Q5Sakvn1VTkxdUwuJ9pxJRjlCIaI79+1x9uOI5Z+yKYY+LfxtFWpunb4oaCiI5Zli20pUcoWu2XkpipFxxqrkZtCgY0SIiJ2bmx8vPrUvaKUkp/78Cda4uNjd+Vq53usnpCpX78klcQ7L1fsuPM9EsSHshwp6vOq/7voiNUYWTGZtnaf7eoh4t3nxUrjvpZRGi9y3KQ///BbKBRkd3cXERGxI6Pj49a35FMTMSeaKiV3nFiV9XlLZpc6veJFCxF9pKHdyEdjRx/3b5Npw5ZLjw/9UFHgcWN4yIj4QETENEbHx42TciAmPJTaJ8cur8u89YCc2065Q9N38P2KD/1wjFKBkQ9/XOiHWYqOJZZT7HsQEB+IiDgsRsTHljz7yX2xox5q3zG5fPOU3HfkjGwn3XG5tqjQUQItBPoRHy2jG8GRj+Ayu2IrW9xqURwr5ATaEZf4QETENEbEx6qcuCP+kMvEscvy6qn75L5TNw12XMHzMGoWHavl3Ix6JBQdSwuWjOIjEEWuHT/yUZ/GdhyxAj/LOEh8ICJiGiPi47Icu+c3ZGUnbie0Jad/+V556lXznVdt564ZFiPefZbjeKMMGcZH4IvPLMeNHomp610dM04nmhIfiIjYDSPP+dh64aR8dGJP9OhHbq8cPH5JtgZgZ9gXx/BEU+IDERG7IX9YrkPH7bs9dM3jY0MWpgPxml9u3r+xINNKiVJ5WW557LLk9fs2FmQ6bDr99sb8gmqPi5xGSX454XKHuJwPeb6oZUYcCb31ZHpBNlruq62/0wsbA7CcOEgSH6Y2rooZz1GPatU8PpbzwZ22t7Gq37axINNqWqan9R2/53Je1PR0ICySxEfrNMt5bQOZIAjaLneLy5JX07KwYb5siMNteGRsLExHRAmOu8QHGmsWH8l3yAsL0y0br+W8kvxCgp13kh28UQQkWO64+Xf8vIhD6nI+ZHQxZB1C3CU+sAPN4qPdaMFuc4e8sSDTvk9Jy5Kv397z+Eiw3C3z1g7dhAZT/RCSEuXbKOu3Bzbe03nJT0cdkkIcLJujhbX1x/9hIuJ9vrvrhUvYuoGjKvGBxpqf86FvdEJ26I2d84YsTGsbnuV8bdouhYXvMErUOR++ZWuz3EmXIXbZahvp+uEm3zC1t4wth6IQB1bv8Mt08HBLzPs8OMq4nOdQzRhIfKCx6a520XbovhCo7ZA3tEMvy3lvY9VRfLSGhe9TmPHhj5DlbrsMCeKjZTm0DTHD1jiMLudbRy/i3ufeukVkj5fEBxrblUtt9R1rcOc8vSAb9UMuuyH3m458hI0gdHruRVwQdBwfwVAKeV0Qh8Ww923c+3x3V4KjjITI6Et8oLFG8RE8Ca2hNgzr21h5n4iWtfM/wu4P7vz1odqwjV/w01i7HXuS5Q7e15WRj4j5IQ6LkfGR8L0cue7hKEl8oLEdnXAaOIbbem5Dc2NT/66MxmGSsPtbTkyNnn437HFJTziNW+6gieNDj6dAzHBlDA67oe/bdu/zwDkfvO9HXuIDje3ksIv/y7cCO/XgxirBKEVwfsnO5/CGdoMnsXa63EETjXY0v7isOXoScRUM8YHDaLv1L+yKFq52GTuJDzSWr1dHRMQ0Eh9oLPGBiIhpJD7QWOIDERHTSHygscQHIiKmkfhAY4kPRERMI/GBxhIfiIiYRuIDjSU+EBExjdHxUdmWzVJJSgl8a6f/O0TsnYVCARERsWMj4+PlL1qS2zsp+/fvj3dij+RsN9mOq+iIpZRYTjHkdlvcAdixYrL4AAAA6JTI+Fifn5Kp+fX2O6OlWVGzS8l2XF58qGBoJI0PImUgJD4AACANfYgPWxzH8o9+EB9DJfEBAABp6Et8uNWiOJYWEcGoaIyQKFHKEqdYlWrVFbvltuDtgTBxbe3vBeiPQeIDAAD6RZ/iwwuD+rkivvioxYTt6gHh3dcy8lEUx2pOW3QsUZYjxcZ8tOBwbe0+JD4AAKBf9C8+qkVxLC8O9NtbAkOLiNARkohpgxGDxAcAAAwEfYwP79+22zoi4huh0EY3Yg/PtDskQ4gQHwAAMAh0GB/X5Y8PNS+17Tg+qlVxbSW2062Rjxj1wzfYm/goL8pMSxzWnZHFcsR0cysJ5qE9PoSVOX3aOVmJnrTrhD53eVFmerwcAD3DW09ngisl73uIoMP4WJLZez4jV0r/WZ595ENy4OSNjuOj9fLbdud86CMb/nM+Wg/fBM75ID56Gx86URuhlblAHJRlcUYLkNjHRQXIiszV7+v5xk97bh19Odggw6jR+JAQeF/zXocIOo+Pqd+W0ycsmTx8StYqCXdcESMVRcfyh0Ho1S7N2PAfQom6CqbK1S4DHx8rMqeUzAW3TOVFmWkbD7VIaXls8Ll6vfGLej7iA0YZ7z29uDjjH/3gvQ4RRMbHzX/3cdkTOWSuROX2yocePiPFpOGBI2PX4qNl1CPh42p3hMdH4DDN3GLg8Stz/vdx1CGeuUX//H2PixhxiXvuxs9RC67W+ei3a8tbXpSZmTmZm+n94SOAxDTe32VZnAm8f4Pv54SHTmG04Q/LobFdjY+ZRYnd/iQ+XBPxGN/jAyMtvkM3/vvKizO1gFip36dtKOOWO+q5Y0c+/CFVXpxpzt/bWIeO8AAMCvp7emUu4rBp2PpHUI8rxAca2/v4MDzhNPEhDi0qWpZF31BGHB4yee64ZWpZxuA5K3xChAHH9x4uy+JMyGHTuPc5jB3EBxo7GIddEj4mdti3GTG+0YbahIHDOvphkZgQ6Tg+IuKKY+YwDIS9p+dWWkdEYtcxGCeIDzQ28xNO9du7GR8towhJRz6Ci9fBIR+jkY+I+QEMKiHv05W5qPOeGlMw8jHGEB9obDcvta2dW6FvgLxLbX3nPHQpPgLRUPs+jgTnfASjpSvx0fozN0KHK2Ng2Ah7n7Zcfss5H9CE+EBju/o9HyIJrkDp1mEXL2y855lZXAnZ6deXYa71JNM055tELEf4YZ3gF7CxgYYBJ/bDBVe7QCvEBxo7Hl+vzpAwAEBWEB9o7EjGh8mhFQAASAXxgcaOZHxI8zwPhoQBALKF+EBjRzU+AACgNxAfaCzxAQAAaSA+0FjiAwAA0kB8oLHEBwAApIH4QGMLhQIiImLHEh9obKFQkN3dXURExI4kPtBY4gMREdNIfKCxxAciIqaR+EBjiQ9ERExjH+KjKI6l/H9IzHab9xcdsZQtrul89cd1Og8kPhARMXN7Hh+uHYiNeozUbyM+Bl7iAxER0xgRH9vi/s6n5Eyx0uUdlyu2ssQpZhAOxAfxgYiIQ2HkyMfWki2Tk4fl1Fo3AyQwyhEXEa7dOCxju/o0rtiNQzZaYBAfgxkfGwsyrZRML2yE3J6XZW0aFdD3mIhplJqWhY3+r0iI4+uGLEwrUdMLstFy37Lkw9Z/HHtjD7tkEyB6PISESNERS7/dtbXIqMVLPUaKjiXKcqRIfAx8fKh6aPhu1+MjcH9woxU6za7sLucJEMS+Gx4ZGwvTEVGC427bcz62lmZlYuKwfG09ix2ZFiK+cz60QzOxUaEdxiE+Bjg+8rKwMB0ykhEXH7teWLSZxvvUlV/u/8qEONbq6+vurrfO8sEAw20TH1uyNDshEw+ckWIlwx2aHhzBcGiJiuCwO/ExDPGxvLshC9PBDVO7sFiWfH3jRXwgDrzLeSUqvyz19dI/ElIbHVFhI6HLeQ6ljpkx8ZFBePgOoehqh1PaxkdEVBAfAx4fu7UNTH659fYkYZFkdAQR+6x3+GU6eLjF/yHBfzhG+5Cxu1tbpzlUM/JGX+1iZzHi4Z1wWj9PwzPy3I2Wf/vP+YgMDuJjMONjd0MWpkNGMhLHByecIg68YedhtazjenDUgoXRy/Ey+mqXF6/5w8O1JRe68Vei1KwsGey8XDvweD1GYuOjKv4TVpOeG4KDER/ev/PLXTzsgogDZdi6GvrhQQ8U/ZAMITIO8vXqaGyq+NitHRfOL3TrhFNEHCgj4yPh+suh1LGQ+EBj08ZHy+W3aS61RcTBMnRdDZwY3jLyGTjng3V95CU+0NjU8bHrnXDW5kvGfEOvxAficBh7GDXiXC2udhk7iQ80lq9XR0TENBIfaCzxgYiIaSQ+0FjiAxER00h8oLHEByIippH4QGOJD0RETCPxgcYSH4iImEbiA40lPhARMY3EBxpbKBQQERE7lvhAYwuFggAAAHQK8YHGEh8AAJAG4gONJT4AACANxAcaS3wAAEAaiA80lvgAAIA0EB9oLPEBAABpID7QWOIDAADS0HF8XP/jD8uds8/I1acOy8TBJ+SlAdgpYm/sZnyszClRSomaWZRy1+Y6qJRlcUbJ3Eq/lwOgy5QXZUZ567LmzGLytTr1tqC8KDNqTli9hoP28bHzlpRKJdncrvhuf+3pe0XtmZD9E3tEPfiM7CTeeRXFsQJvUtvt+w4V+xEfKzKnZsRg+9QbMtuIER8wooSuMysylzhAurAt0JeBEBl4IuOjUr4m3y7sSHVpVpRSkrNdqe4U5NsvbsnSrBKlfkF++4WqVCvPyieVEpWzxU2w43LtYGx4MZI2QIqOWCrZMuCAxMegbiCIDwAzotaZlTlRSdalbqxzxMdQER4f267YE0pUbq/s3VMfodgje/fmRKkJmT19Wf790Ury7D8AACAASURBVCmZOHxSnj55WCamjsq///ZGgtEPV2xliVPMIByIj8GMD28jsLg44x+KDQzTtt0hx03vu0/79BT13LH31T6t+eZVXpSZmTmZm1HNDenKnH/0Tl+gyGUNxIc3j/afDL3HLWrznVvxP4/+/BHLVl6cCXl9zIbGAUKJ3NkHRzT09UsPhcD6ErV+BZ8nNDhC1mEYOCJGPrbk2U/uq414TP6SPJTPy0O/NCk5pUTt+3W5VKnKleMTog48IJ86PCFq4rhcSbTjaj/K0ToyUpWiYzVvc23tTVkPGVfsltuCt+thUlsO23HE0g/9FAP/HoAdfSf+ZGtDXm7zvfp/v/l2D+ND28Hpn4QSfzqpbUwa+1ff4wL3tcw/7rkTLpc3bXP/Hvac9Y1c3LJq8eF7TNsXURZn9GPh3sa1/u/yosxEPX/geVbmmhvylTnCA7pE5LqsB7c/vsuLM4H3cNw6rX0QaBsfccsDg0JIfKzL2UcfkkMTStS+T8qzW80gOXMkJ0odkI/mH5Wza2XZKFekWvH+m3jnpQdByE6+ZQTDCwW3/lgtLlxblOVIse3jvICpT1uPoMa/vWXyzStkhGZYfH9H3nzt5cjwePmVsmy/2/n8zeOjdTTCaAOxMhd9ElrLPLRPWm2fO+FyBadtXcDmc8Ytq28Ew+QTWfBwTbt/RyybPu1c3HICGJIkPtquq1HbgpjpiI+hJSQ+lmS2HgZT87Ku3bc+P9WIhtmlbuwotRBpRIg/GvxRUZu+cV9ctLTEiB4ugedo++8hNCJA0oZHZ/GRYGMRO4uZ6B1ly84+ZmPXNjAS3Oe7TT9xurZxjF1WbQRjZXHGf6gk/hUwi4+IZfO9ZkkOdQEkJclhl9ArYuKiIul0xMcwEhIfO/LWS5flM/flRKkp+eyLO7Xbd16Q3z6gRO07Ip//5rel8NIzcvrSllS3LsnpZwoGV7tEhUNzpEE/zFJ0LLGcYniwqKhIqfoPobQckhmD+AgJkG6ERz/iI93IRwbx0TISYjjysRJ4TFsM4iNu2fR/r7Bxhi6S5ITTuPU9blSSkY+RJPycj8qazFu5xommE/v3y0T9xNOcJfNrFblx8oCo3F6Z2JsTde9T8mqSHZdrB869iNrZu2IrW9xqURwr5vCHPr+2Ix9xzzei8aEFSLfCoy/xEXoeRdw5DikDI+6QTPA5pP79BHHnfNTvCznhNNGhD4P4iF222nT18zziR2kADEh0qW3YCF3I+miwftVOoo6KD042HWQi4+PU4QnJTf6SHDk0UYuOAw/Ir318UnITs/L4n/yGPHhwQu770ktSuvpZmZo4JA89etZ3iCbc4LkWNf3nY9R0be+EUP324LkYLfGhh0rc4Zsxio9qVarvvyfv/ax78+t9fNSn7exqF/PRDe/wiIo6Vt28v3a1ykrsYY920dD+8IvJYZfoZVuZC36Bk3fiKsdfIC0RXzLW+taKuBIlYv0LW7/KvivUFmUudJ0OrMMwcER/yVhlR3YqtR18TinZd+yyVKs7sr1dket/fEgm907IJ5/dkkr5K/LLub0yeeiP5XrCnZdrB96kgfBohkVIAIRe7aKFjQqOoERPOzbx0WX5enUAAEhDx1+v/upT9zYjIOlhFxP53o6BlfgAAIA0dBwfWy/My/FTa7KzdkqOz78gW13ewfm+2wMHyq7HR8SQ7dh8SdC4//wAMHYM3l+1bVylwqjHoMrIBwAApGHw4gMHXuIDAADSQHygscQHAACkgfhAY4kPAABIA/GBxsb9wTpERMR2Eh9obKFQkN3dXURExI4kPtBY4gMREdNIfKCxxAciIqaR+EBjiQ9EREwj8YHGEh+IiJhG4gONJT4QETGNxAcaS3wgImIaiQ80tpvxsZz3/oDa9IJsDMAKka0bsjCtJL/c7+VI4MaCTKu8LPd7OQbSmN+j/rolfQ279lovS15Ny8JGv94vrX8YcXphI/E8Um8LeM8OlcQHGtu9+OjjxjLOzDZiHcZHLzaqg7zhHrifP2F89Pzn63d8BH+GZcknDpAuLHsn4Yd9k/hAY7sWH4O6gSA+BsuB+/mJj8Q/w3JeVK9Gf4iPoZL4QGON4sPbCCwsTPuHYgPDtG13yHHT++7TNr5Rzx17X+3Tmm9eGwsyPZ2X/LRqbkiX8/4h5vxygmUN7LS8ecR/MgxZnrbPMS0LC/nwZUv6HL6Nt7fcC9pz5pf9y+B7Dn1+gR1Am9/V8m7w3xE/f+KfJ/D8vt9bfX4RzxH5O/Zej3zz/uD7KnQHGPrc2nTa/f71IeHPk88PXny0BFHIzxL2Xo567SPfJ2nfM9hriQ801jw+tI2z/kko8aeT2saksUH2PS5wX8v845474XJ50zZ3CGHP6d+RhS+rFh++xyR5DfXXqf1zqMDr03boO26jXp9n41i8t3Gv/3tjQaYbP4s/sDYWplseF/27ardTSfKea/f8gbjw/Qwxr7Hv9xX+euSX45a73XNrO1jfaEHy13NjYbp/O9vI35G+/DE/S9t1OiyKY15vRj4G3uGKj6IjllJiOcWQ221x+7181aI4lhLb7fdyZKt5fER8wk26gdA31KHzD+409A1V3HMnXK7gtC1qzxm3rL4RBIOdRNgn6HbPoX1y3liYbj/6kSA+Ikdw9H+3/X0kvK/THUnccwR3arGPi/kdh7zGy3l9NCgqPuKeO+k6EvdeG8DDLh2/NyJee+JjZOxvfCzZctexS7KVdHovPlQwNJLGR+aRQny03Sh1sIHwf9oL2LIBjtnYtQ2MBPf5blMtw+ixy6p9Yl5OEgQRz5/kOXw7udhYSfB7Mo6P4FUPUTvLDn9XbX+OiOff3RX/sH/U6FH87zg28NqGQ4LnbplH+M/T+j4YxPgIhkPE7yZitDHZdMTHMJpJfGyvLcv58+fb+9i9olQueYB48eA4ln/0g/gY6fhIN/KRQXy0jIQYjnwsBx5j+hoO1chHBr8rk5+j3fsq8WhX+5GP5rlMCZa7G4echmHkI+lh1rhRSUY+RtJM4mN9fqrleu9498jDz/0ocXy41aI4lhYRLVHhit2Yd/12/TZLnGIgFLxRlca/XVuU5UhRu6/5WO0xli22VX+ewDxdW1TYYaIht+fxEXqOQ8RQeqcb9aSHZILPsVv/foK4cz4idlpJRiTClifBc0SeZ5H0OTqNj+B9bY/lh99XO38hamcUZ8zzB+fT8l6JuK/ldxx4jb1P6bHnfLR97oThF/N6Dt45H8Hzjdr9brz/N1i/Wt8nnbxnsB8O5ciHW9+x225IfPgDoOhYgYhoRkrRsZrzcG2xrOaISrExulKLFn9QePMIBov+3K7tD5URsvfxsdvYwHdytYv56Eb9pM2oT/PN+2tXOiyHbFQTXO1Sn0/bwy+B5UnyHGFXYpg8R8fxsSuRV4/E/a526zuS+jIvSD7q99H2Z4l5/qgrTlqeI+53nNHVLlHrTMLXs/aaDdaXjLX+vuKu3mr9fYetX5Hvk7h1uNevB7Y123M+tgpS2Iq5v6NzPvTI8Hbu+u2hoyAh09Wn9cLEtS1xXEcs2/VHRNv56YHhPc4J3j5a8vXqg+wQfYsqIo6t2cXH1pLYkzmZXeriPMPiwXZD4iNY4BHx0QiJ+mEcV2yl/7fqP/yiB0ZomNTuU5Yjrj6qMmISH4Ms8YGIg2828eGFh1JK9kzsl/372/uxL79sHh/Vqrh2faQhauQj4eP1ERAn6pCOHizR8VE7DKNNNwDBMNDxETFkOzZfEtTVnz8iPkblNR6VnwNxzM3mnI/Vk2LlTE44VTI1v95RfLRefht2IqkeJoEgCDvXw9Kvpml3zkdUfFRDRk1GQ0Y+EBExjZkddtl64YRYOZXtYRfPomOJirzapfWcDKXaXOUSDJS4q13i4qP+fCN2+IX4QETENGZ6wunWC/PytSv931lidyU+EBExjcP19eo4EBIfiIiYRuIDjS0UCoiIiB1LfKCxhUJBAAAAOoX4QGOJDwAASAPxgcYSHwAAkAbiA40lPgAAIA3EBxpLfAAAQBqIDzSW+AAAgDQQH2gs8QEAAGkgPtBYo/goL8qMmpOVrN7BWc0/6Xyz/vkARhnWn7GF+EBjiQ8A6AqsZ2ML8YHGEh8A0BVYz8YW4gONTRUf5UWZafyF4BlZLAen9e6bW5TFGSVz7bZKLRuvFZlrzN+7vWWasjbvkOlDH5Pg+b3/X1yc8eanZMb3AwKMKO3e+1HrfdbbBxhYiA80tvP4qO3oGxuMlTlth++/r+xtxMzio+zbIJUXZ0TNLEo5cLuUF2Um5Pbm9MH5Jnx+b+PY2Oj6fj6AESb2vR+z3me9fYCBhfhAYzuOj9BRCu/Tzcpcc8ffuM8wPmLmX16cEeXNrLw4U9tIxi1Px/ER86kOYFSJe+8nXc+y2D7AwEJ8oLEdx0fLBqQ58uAbdQjcl3j+viHbwNCtb7RD3/DFTN/hYRfjQzcAw07cez9mvc98+wADC/GBxg7PyIeflbkZWVypR0ib6YkPgOTEvfcZ+YAQehYfO2+9JTvVqlSrFdl+a1sqA7ATxc4clnM+WjZmK3OBE+Fipic+AJIT+97nnA9opUfxsSon7lAyMfusPD9vSS43K0uVFPMrOmLpQ+W2253lLDpiKVtc79+urQ/HN28fd3tztctc81OPyfx9V68EH78icy0xEDE98QGQnHbv/a5f7ZJw+wADS7bxcfPfyYP7D8mRRx+QKd9x9X1y3yO/Jvff8z/J575tOE/XDoRAURyrwwAJxIZfV2xliVPs0msR+1zDZW++Xn2FjQsARMD2YdjJeOTjshzbFzyhT/eInNk2mZ8rtlJiu2E79g5CIS4Iuh0LxEc8wbPluUwVAOqwfRg5MouPytrX5dEjB2VvLiY+cnvlQ/c/JF+4tJVsvi2jHvGR0nK4pOiIZdliW8Fl8cKlHgiBwzq2EwiH4P1ucBmDh4T05dEjKWI5W+bTxRGYQY0PaR7Hbb3qJOo91INPPv1+fgAQkYjtAwwtGcbHvFhx4dFwQmaXDOLDcqQYO13tMEw9CIqO1XyMFw2NWAiORuj/jvr/4OhL3H2u3Ro2SZYzeMgn0c89/PEBAADjQYaHXSrync98qG18/NyDz8hW0nkm2Qm37OS1HXnw8Ewn8WEUAsHnjniuluCIOLw0IBIfAACQhszi4+bXDkuu7aiHEqVyMvk7V5LHR7vDLsErYcIOq0QFQIL48I9QJHn+uOeOWM5GjEQc2iE+AABgiMlu5GNnQ779zc/LkdgTTqfk6J9dlu9tVxLON2pEQLvd5CTSbo98tJz4ajLykTK6iA8AABgSsr3apbIks7HnfUzJ/LrZPIuOFRgh8C61bQSB/1yK6HM3QmKh43M+vHkEIqH2PSERh3zaLmfgnI8Biw9ERMROzTY+tlfl1PzT8s3LT8gve4dYcjklSt0jn3nusjz9B1+QS1sdzDf0ihJ9moirSyJO+lRhoyZtoyXskEhzfkopsRxXC4zAc8UtZ8vPOHhXu+zu7iIiInZkj77h9KZ87eN3ir20JTsvzstH7jwuVwZgJ4qdSXwgImIa+cNyaCzxgYiIaSQ+0FjiAxER00h8oLHEByIippH4QGOJD0RETCPxgcYSH4iImEbiA401io+NBZlWeVnO6k2c1fyzXm5EZD0bY4kPNJb4GIL5Iw6DrAdjK/GBxhIfQzB/xGGQ9WBsJT7Q2FTxsbEg041vbp2WhY3gtN59+QVZmFaSXzac/+6y5Bvz925vmWZDm3fI9KGPabcMIT9T6M+el2XfcwZeA8Rh1HtvLyxMN76ZeXphI3B/0nWki9sHHFiJDzS28/io7XQbG4zlvLbD99+34W3EzOJjw7dB2liYFjW9IBuB23c3FmQ65Pbm9MH5xhnzM0XGh8n8EYdALwwawRGzbkevIxlsH3BgJT7Q2I7jI3SUwvt0s5xv7vjDNkQp57+xMC0qvyy7u7X/n17YiF+epHFgMg/iA0fVjQWZjhrRSLqOZLF9wIGV+EBjO46Plg1Ic+TBN+oQuC/x/H1DtoGhW99oh77hi5k+SRzE/EzEB46Nce/1pOtIFtsHHFiJDzR2eEY+/C7np2VhuR4hbaZn5AMxuUbvdUY+kPjADhyWcz5aNmbL+cCJcDHTd+Ocj9CfSZ8/J5viiBgXH5zzgSESH2hsb652yTc/9ZjMP/ZKkmXJtwRFxPTduNplt7mRrEXPgvb8tfBhA4ojYWx87EavI1lvH3BgJT7Q2N58vfoyGxdEjJDtw7BLfKCxmcRH8DCEb8gVEcdatg8jZ+/io7Itm6WSlEqbsl3p/w4UOzerkQ/9EIX/qpPgFSk9/IKufj8/IsrubsT2YQCWCzsz+/jYKcgznzooe3NK9uzZ471x9sidn5iX58sVs3kVHbFCdgKWU2yZxndb43Zb3MZtRXGswLxst+879mGQv2qLiIhpzDY+ti7Jsbsm5fD8RXnxxWty8fnn5KsP/Uv5ufrOfuKwnFozCJCWgKhKteqKrcdGI1AC0wUe69rB2PBihAAhPhARMVMzjI8tOXNkjxw5XZaKd9uPrnxJjnz4oPzRjaJce9qWyZwSNTUv66nioypV127GhjeN41ghIyL1x7piK0ucYsL5I/GBiIhdM7v4uHFSDiglEw8/J2/ot1d2ZKf8Pfnzx4/Ih/coUSons0sJRz8i40CLicY0RXEsbVrfYxnlID4QEbFfZhYfN0/dVzu08slnGyMfNSuyduqwTGjnWtxxYjVlfNRiwnYD07h2MzBaHls7XMP5Hp3FByIiYqdmFh/r81ONk0s/8sU1qVSrsvPWS/LSC2fl4YnAiZ6zS9nER7UojhUcEQmbtxYiREii+AAAAOiUzOJj+8yRZlzsu0uOu6/K1x/YK3v35iQXuFrlnsfXUsZH2GEX7TG2m+x8jqIjVti5IEh8AABA18junI/tc/JATouMPXfK/ce/JF//jUOS27NHC5ADcvJGwnkanHCqT+PaSmwncDim3QjKAOzkB1XiAwAA0pDh1S4VWZu3WkY5cvvulT95sSI721fksQ8pmZhdkq2k80x8qW3YZbb65bfeCaeWI0VtuqJjtdyGxAcAAHSXjL9kbEuW7El/gNzxW3LxpQty8uOTMnn4lKyZfNtpxJeM+UYqIkZHio7VMtrh2oF5ER7EBwAAZE4Pvl69IuVrp+X4/ffI5N6c5PZOyv5DD8v8hYLsDMCOFM0lPgAAIA38YTk0lvgAAIA0EB9o7CDGx8qcfghtTlb6sRDlRZnJ8rmzmn/Wyw0QBe+9sYX4QGON4qMnG5cVmVMzslju1fNFQHwAmMF7b2whPtDYgYsP/TmIj8GZL0A7eO+NLcQHGps8PlZkrnEoxBuZEPE2OM3DJHONLU9ZFmdmZHFxrnkIZa7NZik4r8XAxmxlzn9Fkz4//bFzi7I4oy2L73HasrddFu25fcsWmEfccyedv+/1jYqvsjbvkOlDHwNgiPceWlycaaw3M/obPmpdyHqdgYGF+EBj04181HaAjY2G7/7ajrK5Y6xNO9Nuzx858hF4rpU5bYPmv6/sbTSbO2ltw7cyJ2pmUdr2R9vnDr/P/9xJ51/2bXzLizPeMvpvl/KizITc3pw+OF+ADvDCoLGuxrzfffdlvc7AwEJ8oLGp4iN2R15u+TRTXpxJOPqR5LCLFhUty6Fv3AIbwaTELkfS504/f/01Ky/O1HYIcctDfEBayosyEzWikfS9l8U6AwML8YHGpokP3yfu1olbh1KTjDrEbcACh2WUvoP2zTf43PohioQbOf25W5a7Of/2z5305wx+4Z62QW+Mdugb+ZjpiQ9IQ+h6135dyHydgYGF+EBjh2bkI/hprNNPUr7h3w6WI81zJ55/cJFnZHGlHiFtpic+IC1x8cHIB4RAfKCx5vERDIDgOR/1+71zPhobmZQ75UA01L4LJME5H8Fl7iQ+enzOR2jk+c6XiZme+IC0xMUH53xACMQHGmv2JWP1k0iDO76oq12UzM01rzRpe7JpY35hG7Pmc9fmtRKyA66fPT/XepJpz652CTx30vlHXU3UuC8YFHFXHxEfkILY+JDodSHrdQYGFuIDjc3uG077eRx3pY8bs34+N8Awwjoz7BAfaOxIxEenh1aG/bkBhhHWmZGD+EBjex4foVdqGB4SCXs27QuREs2ni8sR+twZ/ZwAo4Dx+goDDfGBxg7iH5YDAIDhgfhAY4kPAABIA/GBxhIfAACQht7FR2VbNkslKZU2ZbvS/x0odi7xAQAAacg+PnYK8synDsrenJI9e/Z4JwvtkTs/MS/Plytm8yo6Yilb3KS3Y2bxgYiI2KnZxsfWJTl216Qcnr8oL754TS4+/5x89aF/KT9XP2N54rCcWjMIkCzjg4Axio/d3V1ERMSOzDA+tuTMkT1y5HRZKt5tP7ryJTny4YPyRzeKcu1pWyZzStTUvKwTH0Ml8YGIiGnMLj5unJQDSsnEw8/JG/rtlR3ZKX9P/vzxI/LhPUqUysnsUsLRj6TxUXTEalwPbolT1KZ1be1a8fp9rthh04dOi8QHIiKmMbP4uHnqvtpO+5PPNkY+alZk7dRhmdC+QOmOE6sG8RH1JUz1+KiFhO3qAaHfF4gLy5FiaNjETDvmEh+IiJjGzOJjfX6qcXLpR764JpVqVXbeekleeuGsPDwRCIfZJYP4aDPyERsRgTCJnXfMtGMu8YGIiGnMLD62zxxpxsW+u+S4+6p8/YG9sndvTnKBUYt7Hl/rXny0jFAUxbH0iNAPsWi3h847Ytoxl/hARMQ0ZnfOx/Y5eSCnRcaeO+X+41+Sr//GIcnt2aMFyAE5eSPhPFOPfATUD8m0O+HUd/hmvCU+EBExjRle7VKRtXmrZZQjt+9e+ZMXK7KzfUUe+5CSidkl2Uo6z0QnnMac81F0xGo5oTTivrhpx9xhiI/lvPeem16QjajpNhZkWuVlOavlyGr+WS83Yq/kvTy2ZvwlY1uyZE/6A+SO35KLL12Qkx+flMnDp2TN5NtOM7vapSr1wzOqJVy42mX44mNZ8mpaFjbaTEd8IPZX3stjaw++Xr0i5Wun5fj998jk3pzk9k7K/kMPy/yFguwMwI4UzR34+Ei6QSM+EPsr7+WxlT8sh8Yax8dyXhtB0kckNmRhWkl+YUGm6/fnl70Nkvbv3d3WjZT+740FmZ7OS3669RLs/HLMcoXOM2w5A/flF2rLHTfvsPnvLku+MX9t2X3TbGjzDpk+9DGIfdZ7Ty4sTDfWvemFjcD9IetW1usgDqzEBxprFh+BQyDLee08jNqOtvlvb2db//fGgkzXH9suPvTQ6Gjko/bcjXks57Udvv++DW8DaxYfG76N5cbCtPdz+m+vhVTr7c3pDX4+xF7prYON4IhZf3z3Zb0O4sBKfKCx5vERtZEI7Hjj/t02PmI+TUXZMo/gKIU3T18wtfuZzOe/sTDdGOHZWJiubcDjlof4wEEzbh1M+l7OYh3EgZX4QGPNz/nQDx8kjI3gv9vGRweHJfTpWjZuzef2jTqELmeC+fuGkwPDyr7RDn2jHDM98YGDZNw6GLNuZb4O4sBKfKCxqU449Q2lDlB89Hzkw+9yfloWlusR0mZ64gMHTZP1k5EP3CU+sAON4iM4HNtpfIQe8+1ifPT4nI+WZfROym2epBczPfGBg2bsOsg5H9gq8YHGdv1ql4SHYTZ8Z9IvSL6r8VH/d5Iz7fMdfo+Ifvgp+Pjl5s/TbnriAwfNdutg1692SbgO4sBKfKCxA/89H5mb8EvMEDEjWQeHXeIDjR27+Ig9dISImcs6OHISH2js0MRH6BUjUYc94tUP+fivOunO/BEx3tB1cACWCzuT+EBjhyY+EBFxICU+0FjiAxER00h8oLHEByIippH4QGOJD0RETCPxgcYWCgVERMSOJT7Q2EKhIAAAAJ1CfKCxxAcAAKShd/FR2ZbNUklKpU3ZrvR/B4qdS3wAAEAaso+PnYI886mDsjenfwHTHrnzE/PyfLmSfD5FR6zIL3SyxLnkiKVscQdg5zzqEh8AAJCGbONj65IcuysnSuVk8pd+Teb/7LycP/+0HL//TtmjlKiJw3JqzSBAfCFCaBAfAAAwjGQYH1ty5khOlJqQ2WfLUvFue/GbV+W1alW2XjghVk6JmpqXddN5Ex/EBwAADC3ZxceNk3JAKZk4dtkLj6pUq0syq2Zlyfv3q0/dK0rlZHbJcPQjLD58txXFsZTYjnaoxnb9h25sV5unK3bjEA5RQ3wAAECWZBYfN0/dJ0rdISdW9dv98VHdPiNHlJI7TqxmEh/KcqSox0X930VHLGWJU9RCxa3Np+hY2uOQ+AAAgG6TWXysz0+JUlMyv16VavWmfPNzecnnPyoH9PioLsmsUqJmlzKJj3pQxP67ZV6u2I0wQeIDAAC6TWbxsX3miCi1T379UkWq1Ypsb5akVCpJqfSW7NSnW5+XKaXknsfX+hwfIVfPEB/EBwAAZEJ253xsn5MHckpy952SV0OnqcjlYxOi1AE5ecNw3pmOfCDxAQAAWZLh1S4VWZu3JKdyMvnJ01LY0e6rlOX5E5bklJKJ2SXZMp13N+MjeB8xQnwAAECmZPwlY1uyZE9KTilRub0yuX+/7N+/Xyb21A5vTBw+JWudfNtpV+OjKv6rXTjkQnwAAECW9ODr1StSvnZajt9/j0zuzUlu76TsP/SwzF8oNM/9wKGS+AAAgDTwh+XQWOIDAADSQHygscQHAACkgfhAY4kPAABIA/GBxhIfAACQBuIDjSU+AAAgDcQHGkt8AABAGogPNJb4AACANBAfaCzxAQAAaSA+0FjiAwAA0kB8oLHEBwAApIH4QGOJDwAASAPxgcYSHwAAkAbiA40lPgAAIA3EBxpLfAAAQBqIDzSW+AAAgDQQH2gs8QEAAGkgPtBY4gMAANKQSXxUtjelVCrJWztV2XmrJKVSeze3K33fqSLxAQAA2ZNJfKzPT4lShF7eVAAAEGdJREFUSmaXqrI0q0Sp9k7Nryecf1EcK/B4202/3EVHLGWLOwA790GX+AAAgDRkEh83v/k5yefz8tXrVbn+1bzk8+393DdvJpq3awdjw4uRtAFCfBAfAADQEzKJj+21ZTl//rxcfa0qr109L+fPt3d5bTvBvF2xlSVOMYNwID6IDwAA6AlDdtil/ShH68hIVYqO1bzNtbXn1UImGB9FR6yw6YL32Y44lhLb7X8UEB8AADAMDNnIR1Vqox8x53u0jGAUtTgIjJy4tijLkWLL42rP0QgK1xYVcV/RsUQp4gMAACApQ3fOR2SINCKk6B+JiIuKqGhpCRgtWvRgaTfPEZX4AACANAzZYZcIi45Y2oiGfpil6FhiOcXwYFERkdISGM2gKTpW5H39jgLiAwAAhoHh+p4P3+EP3WAAuGIrW9xqURwr5ATVsPkx8kF8AABAT8gkPl7+8sdk//798ui3qvKtR/fL/v3t/diXX04wb++EU9/OP2w0onbiqe04Yum3B0ZIIuODcz6IDwAAyIyhPOzi2oHHB8KjGQwhUdD1q13s8Mt/R1jiAwAA0jC6f9ulZ9/bEfHdIyMs8QEAAGkY2fjwfbdHN407dDMmEh8AAJCG0YuPxiGR7IKgfp5H6CGZMZD4AACANIxefGDmEh8AAJAG4gONJT4AACANxAcaS3wAAEAaiA80lvgAAIA0EB9oLPEBAABpID7QWOIDAADSQHygscQHAACkgfhAY4kPAABIA/GBxhIfAACQBuIDjSU+AAAgDcQHGkt8AABAGogPNJb4AACANBAfaCzxAQAAaSA+0FjiAwAA0kB8oLHEBwAApCF5fFS2ZbNUklJpU7Yr/d8BYv8kPgAAIA3t42OnIM986qDszSlRyjO3Vw4+/JS8sFWVrUvH5cgfX0+24yo6Yilb3KS3t9UVW1niFPu/Qx4niQ8AAEhDfHxsLYk9masFx54JOXQkL/mH7pcP7fVum5iUyZwSNbs02PHR8fyR+AAAgG4TEx9bcuZILTImHjgthR3tvkpZnvuVX2iOhBAfYyXxAQAAaYiOj/V5mVJK1IETsho4x2P78nG5Sz8M09X4KIpjWeI4dnP+ttuc1tVvt/3xod/XeJwrduM2PVT02wPL5JsPh3WIDwAA6CbR8fHaVTl//rx888WtlvsqxSty/vz5hmHTpIsPPQhqkWA5xcb/227tcUXH0uLAf18tILz7Wp639hy++ViOFBvPFwiaxn1IfAAAQFp6e6mtQXw0IqIeB7YbEgJxh120+4LP27Ic+nwCEYPEBwAAdJXI+Lh5/lfknv37Zb/noZArWraffUT2798vD519I9P4qEfHJd8IRUh8FB2x9MMusfGh/IdoIg/JECLEBwAAdJPI+Fifn2rumCcOy6m1in+ayqqcOKBEqXvlqVeT7rgiRip8IxodjnwUHbFaAiLpyEeMrt16TsiYS3wAAEAaEsfH/MqG7FSrUq1WZPt7z4h9l3clzLHLUjHYcbm2CgmI+jkdzfjwn4NRj5GYcz4CkeDawZEPPUwCgaPHSHBa4oP4AACArhIfH3s+Ig//m7sk13KIoubE4VOy1sG3ndbCoGkzPLQwsO3w+7VDJpbjaCMp9RNV6/e5WmA072uOqERdBVPlahfiAwAAMiQyPirFK3KlWJFqtSLla6fl+P33yOTenKg9E7L/0MMyf6HgjYR025BzPnCgJD4AACANA/iH5YiPQZf4AACANBAfaCzxAQAAaRjA+MBBl/gAAIA0EB9oLPEBAABpID7QWOIDAADSQHygscQHAACkgfhAY4kPAABIA/GBxhIfAACQBuIDjSU+AAAgDcQHGkt8AABAGogPNJb4AACANBAfaCzxAQAAaSA+0FjiAwAA0kB8oLHEBwAApIH4QGOJDwAASAPxgcYSHwAAkAbiA40lPgAAIA2x8VHZ3pRSqRTr5nal7ztD7K3EBwAApCE2PpZmlSjVxtml5DuuoiNWxHxst36/LW6vd6j68/ZrGYZI4gMAANJgGB8Pyp81Rj2uyGfu6SQ+BnDHTnwQHwAA0DMM42NWlhr3r8v8FPExjhIfAACQhsGKj2AEWLbYlhLVeIwrdmNZ6rcVxbG8wzaNeWj/dm1RliPF+v/rP4/tjmR8/GRrQ14uFKQQ499vvk18AABAX+hDfISc8xEZAVpEBCKj6FiNqCg6VnMeri2WZYnlFBvT1f6/Fi6+KFGWOMXRi4/q+zvy5msvR4bHy6+UZfvdzudPfAAAQBoGe+SjHgehj3XF1uPBCxHXtsRxHbFstyVY/AYeP0rxERMgacOD+AAAgLTExsflY/ti4mNVTtyh5J7H1zKMD23a0FGTepzUQ6IojmWLW3XFVvp/o+YxwvEREiDdCA/iAwAA0hL/JWM3TsqB0PioyNq8JTk1JfPrBjuu1PER/VjXVmI7gREQxw4c0tFGUkZ95CMQIN0KD+IDAADS0uYbTuuRocVHpSzPn/yI7FE5sebXpGKy40oTH6Enlmr3h53rof27do5Hc3rXHoORj0aAvCfv/ax78yM+AAAgDQm+Xn1HXnzq4zKZU6LUhExO5kTlJuXjpwzDI3V8VMV/tYs+ilFtHFIJPaFUi5f6KI7luM2YGfX46LLEBwAApCHx33bZKTwjnzo4IXd+/KRcLPKV6uMs8QEAAGngD8uhscQHAACkgfhAY4kPAABIA/GBxhIfAACQBuIDjSU+AAAgDcQHGkt8AABAGogPNJb4AACANBAfaCzxAQAAaSA+0FjiAwAA0kB8oLHEBwAApIH4QGOJDwAASAPxgcYSHwAAkAZ17Y2fCqKJxAcAAKSB+EBjiQ8AAEgD8YHGEh8AAJAG4gONJT4AACANxAcaS3wAAEAaiA80lvgAAIA09DA+3pZvXd+Qv7pekpXX+78Dxc4lPgAAIA3Zx8cr/18tNm78qRxUSpS6R3595ady7Y23ZeXv3ulsnlefkLuVEtXwEVnodPmuPiF3p3n8GEp8AABAGrKNj7W/lCO/mJN/cuAR+dVH/mf5r71Y+O8/9vvyv1n/TNTPf0I+d9UwQM48IkopOXImeNtB+fRVYoP4AACAQSfT+Fg584js841QBM3J3Z9dM5hnQT49FQgPz2+cPChq6gn5BvFBfAAAwECT8WGX/1d+/756aEzIhz/xq/KJh/9X2f9Pvdsm/i/5isn84sLh6hNyd2P0oyCfnjoonz75SDN0Hrog1964IEca4eNNG5yn75CONpriTffpkwcb87z7ZKH5/Ge050o6CjOkEh8AAJCGzOLjwpf+d/nnv7hX/om3Q556/O8b9139i095h2BysucX/4V8+MTfJpvvmUdiRjdqYVEbFamNkDTPBandd/fJQkRs+KdrjKyceaQ5Dy9KGsGh3/fGBTmiB0fscg6/xAcAAKQhs/j4i9+b0kYC6ieZeq79WzmkH3558C8ziQ/98Mw3Th6sjX7ExUfLyIoWFb6RlTbRMuISHwAAkIbM4mNl5a/lsUebh1j2PfiXsvzGT+XaG+/I2d876I2I/I8y8/Dvy2N/9Uqy+caer6GPPoScG1IPl7j4aIkbbT6xIybNAKkH1SiHCPEBAABpyPacj9evS/6u5g75v/r5fyH//Of/WXPE47/5N/KFNZN5Jj3hNKuRj7j4CITOCJ/USnwAAEAaMo2P//iV/6NxzkeU/+3/+Tdm8010qa13zkcjRrTDIiaHT1rO+YiLlsA5H8QHAABAKJlf7fLEQ/+DHHhkSc6c/lX5BS84Dn1+Xf7t4/+L/HeWI2c7+rZT/yGO1h29N/LxUPMKlOaVKfWTUeMOp0Rf7RI58sHVLgAAAIno3derv/6X8q//qRKlpuQ3ns/6+aIPz2B6iQ8AAEjDiP5hOeIjS4kPAABIA/GBxhIfAACQhhGND8xS4gMAANJAfKCxxAcAAKSB+EBjiQ8AAEgD8YHGEh8AAJAGVa1WBdFE4gMAANJAfKCxxAcAAKSB+EBjiQ8AAEgD8YHGEh8AAJAG4gONJT4AACANxAcaS3wAAEAaiA80lvgAAIA0EB9oLPEBAABpID7QWOIDAADSQHygscQHAACkgfhAY4kPAABIQybxUdnelFKpJG/tVGXnrZKUSu3d3K70faeKxAcAAGRPJvGxPj8lSimZXarK0qwSpdo7Nb/eft5FRyxlizsAO+BxlvgAAIA0ZBIfN7/5Ocnn8/LV61W5/tW85PPt/dw3bxIfQyLxAQAAacgkPrbXluX8+fNy9bWqvHb1vJw/397ltW3iY0gkPgAAIA2jddil6IjVmKclTjHiPtsRx1Jiu/3fkQ+jxAcAAKRhhEY+XLGVFhSuLaoxrf++omOJUsQH8QEAAP1gdM75aLnPFbs++uHaoixHilGhgsQHAAD0jNE57NISGMXGoZWiY0Xe1+8d+TBKfAAAQBqG63s+GPkYCIkPAABIQybx8fKXPyb79++XR79VlW89ul/272/vx778crr44JwP4gMAAIaCITzs0vpYyymG3B93tYvdHBUZgJ35sEl8AABAGsb0b7u4xEcKiQ8AAEjDeMRH0RFLjw3fIRk0lfgAAIA0jEd8VJvneYQekkEjiQ8AAEjD2MQHdk/iAwAA0kB8oLHEBwAApIH4QGOJDwAASAPxgcYSHwAAkAbiA40lPgAAIA3EBxpLfAAAQBqIDzSW+AAAgDQQH2gs8QEAAGkgPtBY4gMAANJAfKCxxAcAAKSB+EBjiQ8AAEgD8YHGEh8AAJAG4gONJT4AACANxAcaS3wAAEAaiA80lvgAAIA0EB9oLPEBAABpaB8fO29JqVQKdXO7YrbjKjpiKSUqoOUUA9PY4radX1EcS4nt9n9nPG4SHwAAkIY28XFFjk8ckI/m85Jv8UE5OPGAnNs2jY9gWLhiBwMkkcQH8QEAAMNIfHxcPib7jpyR7Yj7V0/cIUfObKeMj6pUXVtUotEOXeKD+AAAgGEkNj7axsXqCbkjJk4Sx0fVFVtZ4hRDpnFt7RCNN01YfHjTNUZQIh83+v5ka0NeLhSkEOPfb75NfAAAQF+IiY9VOXHHETkTe1jlshzb126aJPGhhYRvGi1K6kFhOVIMPsa1A4ER97gx8P0defO1lyPD4+VXyrL9bufzJz4AACAN0fGxekLu2HdQHgw936PpRw/k5IFzCQ+9dBQfUYdWvMc4jlgtIxtxjxsTIwIkbXgQHwAAkJbI+Fifn5J7PnMl8kqXuoWnf1lytpsyPmIOu3ghUT+E0gyKWnwoyxHXsUS1LEPU48bIQIB0IzyIDwAASEtsfEzNr7fe98ZZefBDvyNX/vMX5NBHvywvL82Kml1KFx/6Cadxl9r6TkzVz/kIHGaJfdyY6QVIt8KD+AAAgLSYx0d1R97a3JZKZVs239qRaur4CFxqq09TDBxSiYyPqv+8jtjHjaHvvyfv/ax78yM+AAAgDZHxUbl8XCZzrV8I1uoeOfy1Vw3io3UevkMinV7tUj8MUz/8MsZXu2Qt8QEAAGng69XRWOIDAADSQHygscQHAACkgfhAY4kPAABIA/GBxhIfAACQBuIDjSU+AAAgDcQHGkt8AABAGogPNJb4AACANBAfaCzxAQAAaSA+0FjiAwAA0kB8oLHEBwAApOH/B6NdqCoO80roAAAAAElFTkSuQmCC" />
<br />
<h4>
VM</h4>
Under the VM<br />
Select "Firewall" -> "Options"<br />
Select "Firewall" from the list<br />
Click on "Edit"<br />
Check the box<br />
Click "OK"<img alt="" src="data:image/png;base64,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" />
<br />
<h3>
Using a Security Group Firewall Policy</h3>
I want to make sure this VM is unable to communicate with anything on the host, or network, but still needs access to my DNS server, DHCP, and the internet.<br />
<br />
We can set up these rules under "Datacenter" -> "Firewall" -> "Security Groups"<br />
First we create a group for our rules, then we can add rules.<br />
<br />
Under "Create" we simply give the group a name. I called mine "fw-vm-isolate".<br />
<br />
When you "Add" rules, the interface is a familiar form with all the firewall address and port options. Fields may be left blank, enabling rules to match a broad definition of traffic.<br />
<br />
Rules may be reordered. They are effective from top to bottom. First match wins.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS5Dsk5130cTvyKScQ8GfzKzgNEPwIgb2dSTkAHinqirHL-wykp5Vs8jqXaQrW8Wq28Jc4KgyjUHQ4yFOwCTVDTuMcxC7Ky2dCCcS42ijrxPexTN3jyej4zxb0fW29hBMlHmP9cPpH6ow/s1600/index.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="565" data-original-width="1531" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS5Dsk5130cTvyKScQ8GfzKzgNEPwIgb2dSTkAHinqirHL-wykp5Vs8jqXaQrW8Wq28Jc4KgyjUHQ4yFOwCTVDTuMcxC7Ky2dCCcS42ijrxPexTN3jyej4zxb0fW29hBMlHmP9cPpH6ow/s640/index.png" width="640" /></a></div>
<br />
Here is my config, it allows NFS connections to the Proxmox Host. It Allows DNS to my DNS server. Finally, it denies all other traffic to any other LAN IP. This means it can still connect to the internet, but can not reach any local computer.<br />
<br />
DHCP is still allowed because the VM can still send broadcast messages, and will get a reply from the DHCP server.<br />
<br />
Finally, we apply the security group to our VM. Using "Insert: Security Group" in the VM Firewall settings.<br />
<img alt="" src="data:image/png;base64,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" />Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-5751743333728160012.post-70626673205014364722020-04-18T15:12:00.000-06:002020-04-18T15:12:31.752-06:00Creating an NFS share on Proxmox host to share in VMsThe goal is to create a folder on the Proxmox host that we can share on a guest. An NFS share seems to be the recommended way, because a kernel level share folder breaks the high availability paradigm. An advanced user can navigate the command line and force a kernel share, but this causes other problems.<br />
<br />
The current setup uses<br />
Proxmox VE 6.1<br />
Ubuntu 18.04<br />
<br />
<blockquote>
<code class="prettyprint lang-bash">
# Install NFS Service on Proxmox<br />
apt install nfs-kernel-server<br />
# Create share folder<br />
mkdir /tank/vmshare<br />
# Share the folder<br />
echo "/tank/vmshare 192.168.1.0/255.255.255.0 (rw,no_root_squash,subtree_check)" >> /etc/exports<br />
exportfs -a<br />
systemctl reload nfs-kernel-server<br /></code></blockquote>
<br />
Now we can mount the NFS share from the guest VM.<br />
<br />
<blockquote>
<code class="prettyprint lang-bash">
# Install the NFS client<br />
sudo apt install nfs-common<br />
# Mount the share<br />
sudo mkdir /mnt/vmshare<br />
sudo chmod 777 /mnt/vmshare<br />
sudo mount 192.168.1.100:/tank/vmshare /mnt/vmshare<br /></code></blockquote>
<br />
TODO: Instructions for autofs to mount the NFSUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-16039482682378806082020-04-11T01:04:00.001-06:002020-04-11T01:06:23.679-06:00Using Linux autofs To Automatically Mount CIFS SharesAutoFS can be configured to automatically mount shares on directory access.<br />
To do this we will create a config file for the mount, and direct autofs to use this file.<br />
<br />
In auto.servername we define how to mount the share .<br />
<blockquote class="tr_bq">
<code class="prettyprint lang-bash">
$ cat /etc/auto.servername<br />
sharename -fstype=cifs,rw,uid=1000,gid=1000,password=Password1 ://servername/sharename</code></blockquote>
<br />
We define the mount location and the auto.servername file to use, appending to the existing /etc/auto.master file.<br />
<blockquote class="tr_bq">
<code class="prettyprint lang-bash">
/mnt/servername /etc/auto.servername</code></blockquote>
<br />
After these are defined, we can reload autofs<br />
<blockquote class="tr_bq">
<code class="prettyprint lang-bash">
sudo systemctl reload autofs</code></blockquote>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-64713650559722078962020-04-11T00:48:00.003-06:002020-04-11T00:51:23.427-06:00Creating A Samba Share in Debian/Ubuntu (The Right Way)Because I can never remember how to do this when I need it.<br />
<blockquote>
<code class="prettyprint lang-bash">
sudo apt-get update<br />
sudo apt-get install samba<br />
net usershare add sharename /path '' Everyone:F guest_ok=y
</code></blockquote>
<br />
This is done this way because the Ubuntu GUI will use the usershare capability in nautilus to check for shares. Usershare files are located in:<br />
<blockquote class="tr_bq">
<code class="prettyprint lang-bash">
/var/lib/samba/usershare/sharename</code></blockquote>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-42821669977369389442015-07-31T21:07:00.003-06:002015-07-31T21:07:38.184-06:00VLC Command Line Change Container MKV to MP4I wanted to change a bunch of MKVs to MP4, while doing a direct stream copy. VLC can do this with the GUI, but there was a lot of stuff to remux, so I decided to do it with the VLC CLI instead. Here is the bash one-liner I used:<br />
<br />
<blockquote>
<code class="prettyprint lang-bash">
for f in *.mkv; do vlc "$f" --sout="#std{access=file,mux=mp4,dst='${f/%mkv/mp4}'}" vlc://quit; done;</code></blockquote>
<br />
I used the following sites for reference:<br />
<a href="https://www.videolan.org/doc/streaming-howto/en/ch03.html">https://www.videolan.org/doc/streaming-howto/en/ch03.html</a><br />
<a href="https://wiki.videolan.org/Transcode">https://wiki.videolan.org/Transcode</a>Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-5751743333728160012.post-59744262860771087912015-03-09T10:59:00.001-06:002015-03-09T10:59:12.520-06:00Ubuntu Reinstall nVidia DriversThis is here just to remind myself.<br /><br />Every time there is a linux kernel update, it will clobber the nVidia drivers and they will need to be recompiled and reinstalled.<br />
<br />
After kernel update do:<br />
<blockquote><code>sudo apt-get install nvidia-331-updates --reinstall<br /></code></blockquote>
<br />
This should blow away and reinstall everything, and redo the kernel mod for the nvidia drivers.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-21998864101864503212014-12-09T22:12:00.005-07:002014-12-09T22:12:46.645-07:00MPL3115A2 sensor with Raspberry PiHere is a short write up on using the MPL3115A2 with the Raspberry Pi.<br />
<br />
The MPL3115A2 is a precision pressure and temperature sensor. I bought mine from SparkFun.<br />
MPL3115A2: <a href="https://www.sparkfun.com/products/11084">https://www.sparkfun.com/products/11084</a><br />
<br />
<h2>
<span style="font-size: large;">
Installing I2C for Pi </span></h2>
Getting started you'll have to install the I2C packages for Raspberry Pi, and enable them.<br />
From a Raspberry Pi terminal use the following commands:<br />
<blockquote class="tr_bq">
<code>
sudo apt-get install python-smbus<br />
sudo apt-get install i2c-tools</code></blockquote>
<br />
Enable the modules by adding them to /etc/modules<br />
<blockquote class="tr_bq">
<code>
sudo nano /etc/modules</code></blockquote>
and add the following two lines:<br />
<blockquote class="tr_bq">
<code>
i2c-bcm2708<br />i2c-dev</code></blockquote>
<br />
Remove the modules from the blacklist by commenting them out "add # to the front"<br />
<blockquote class="tr_bq">
<code>
sudo nano /etc/modprobe.d/raspi-blacklist.conf</code></blockquote>
Make sure the spi and i2c lines are commented out: <br />
<blockquote class="tr_bq">
<code>
#blacklist spi-bcm2708<br />#blacklist i2c-bcm2708</code></blockquote>
<br />
Lastly, the MPL3115A2 requires a proper repeated start command in it's I2C communication. Raspberry Pi doesn't do this out of the box, but there is a kernel module that can be <span style="color: red;"><b>enabled to make it perform repeated start correctly</b></span>. Run the following commands to enable repeated start on the Pi:<br />
<blockquote class="tr_bq">
<code class="prettyprint lang-bash">
sudo su -<br />
echo -n 1 > /sys/module/i2c_bcm2708/parameters/combined<br />
exit</code></blockquote>
More details about the repeated start problem can be found here:<br />
<a href="http://www.raspberrypi.org/forums/viewtopic.php?f=44&t=15840&start=25">http://www.raspberrypi.org/forums/viewtopic.php?f=44&t=15840&start=25</a><br />
<br />
<h2>
<span style="font-size: large;">Connecting the Sensor</span></h2>
Next solder some headers to the breakout and connect it to the Raspberry Pi. You'll want to use the following Raspberry Pi GPIO pinout:<br />
<table>
<tbody>
<tr><th>pin</th><th>sensor</th></tr>
<tr><td>1</td><td>VCC</td></tr>
<tr><td>3</td><td>SDA</td></tr>
<tr><td>5</td><td>SCL</td></tr>
<tr><td>6</td><td>Ground</td></tr>
</tbody></table>
<br />
<br />
<h2>
<span style="font-size: large;">Python I2C Code</span></h2>
Finally, we need to write some code to read data from the sensor. The following is an example Python program to use smbus to read data from the sensor.<br />
<br />
<b>
MPL3115A2.py </b><br />
<blockquote class="tr_bq">
<code class="prettyprint lang-python">
from smbus import SMBus<br />import time<br /><br /># Special Chars<br />deg = u'\N{DEGREE SIGN}'<br /><br /># I2C Constants<br />ADDR = 0x60<br />CTRL_REG1 = 0x26<br />PT_DATA_CFG = 0x13<br />bus = SMBus(1)<br /><br />who_am_i = bus.read_byte_data(ADDR, 0x0C)<br />print hex(who_am_i)<br />if who_am_i != 0xc4:<br /> print "Device not active."<br /> exit(1)<br /><br /># Set oversample rate to 128<br />setting = bus.read_byte_data(ADDR, CTRL_REG1)<br />newSetting = setting | 0x38<br />bus.write_byte_data(ADDR, CTRL_REG1, newSetting)<br /><br /># Enable event flags<br />bus.write_byte_data(ADDR, PT_DATA_CFG, 0x07)<br /><br /># Toggel One Shot<br />setting = bus.read_byte_data(ADDR, CTRL_REG1)<br />if (setting & 0x02) == 0:<br /> bus.write_byte_data(ADDR, CTRL_REG1, (setting | 0x02))<br /><br /># Read sensor data<br />print "Waiting for data..."<br />status = bus.read_byte_data(ADDR,0x00)<br />while (status & 0x08) == 0:<br /> #print bin(status)<br /> status = bus.read_byte_data(ADDR,0x00)<br /> time.sleep(0.5)<br /><br />print "Reading sensor data..."<br />p_data = bus.read_i2c_block_data(ADDR,0x01,3)<br />t_data = bus.read_i2c_block_data(ADDR,0x04,2)<br />status = bus.read_byte_data(ADDR,0x00)<br />print "status: "+bin(status)<br /><br />p_msb = p_data[0]<br />p_csb = p_data[1]<br />p_lsb = p_data[2]<br />t_msb = t_data[0]<br />t_lsb = t_data[1]<br /><br />pressure = (p_msb << 10) | (p_csb << 2) | (p_lsb >> 6)<br />p_decimal = ((p_lsb & 0x30) >> 4)/4.0<br /><br />celsius = t_msb + (t_lsb >> 4)/16.0<br />fahrenheit = (celsius * 9)/5 + 32<br /><br />print "Pressure and Temperature at "+time.strftime('%m/%d/%Y %H:%M:%S%z')<br />print str(pressure+p_decimal)+" Pa"<br />print str(celsius)+deg+"C"<br />print str(fahrenheit)+deg+"F"</code></blockquote>
<br />
Sample Output:<br />
<blockquote class="tr_bq">
<code>
pi@raspberrypi ~ $ sudo python MPL3115A2.py <br />0xc4<br />Waiting for data...<br />Reading sensor data...<br />status: 0b0<br />Pressure and Temperature at 12/10/2014 04:51:56+0000<br />99838.75 Pa<br />20.375°C<br />68.675°F</code></blockquote>
<br />
<h2>
<span style="font-size: large;">
More Resources </span></h2>
MPL3115A2 Datasheet:<br />
<a href="http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Pressure/MPL3115A2.pdf">http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Pressure/MPL3115A2.pdf</a><br />
<br />
Arduino code for reference:<br />
<a href="https://github.com/sparkfun/MPL3115A2_Breakout/blob/master/firmware/MPL3115A2/MPL3115A2.ino">https://github.com/sparkfun/MPL3115A2_Breakout/blob/master/firmware/MPL3115A2/MPL3115A2.ino</a>Unknownnoreply@blogger.com17tag:blogger.com,1999:blog-5751743333728160012.post-17558325770155782302013-06-27T12:47:00.001-06:002014-12-04T22:05:20.776-07:00Making room on your SSDHere is a quick and dirty method for making more room on your Solid State Drive (SSD). Most people have a SSD for the OS and a Hard Disk Drive (HDD) for data. Since the "Program Files" folders in Windows have a big footprint, and not every program needs the extra speed of running on SSD, we can move the files to the HDD and link them from the SSD. This is transparent to the programs, but your SSD should see some space savings. Let's get started!<br />
<br />
First we need to "backup" the data from our "Program Files" folders. We can use xcopy to do this:<br />
<br />
<blockquote class="tr_bq">
<code>
xcopy /S /H "C:\Program Files" "E:\Program Files"</code></blockquote>
It will ask you if "Program Files" is a file or a directory. Press 'D' to select directory.<br />
If you have a 64-bit system, then do the same thing for "Program Files (x86)".<br />
<br />
Now all we need to do is set up hard links on the folders in "Program Files" to point to the folder on the HDD instead. You can pick what programs you want to do this to. I leave my games on the SSD (because I like the performance), and other programs like Skype get moved to the HDD.<br />
<br />
To link a folder all you have to do is delete the current one (<span style="color: #cc0000;">be certain you've backed it up properly!</span>) and create a hard link with the same name:<br />
<br />
<blockquote class="tr_bq">
<code>
rmdir /S /Q "C:\Program Files\Adobe"<br />
mklink /J "C:\Program Files\Adobe" "E:\Program Files\Adobe"</code></blockquote>
<br />
Related reading: <a href="http://lifehacker.com/5467758/move-the-users-directory-in-windows-7">LifeHacker - Move the Users Dir in Win 7</a>
<br />
<br />
Other copy options include windows robocopy:<br />
<blockquote class="tr_bq">
<code>
robocopy /S /Z /R:0 /W:2 /V /MT:4 "D:\Program Files" "E:\Program Files"<br />
</code>
</blockquote>
or a Linux Live CD:<br />
<blockquote class="tr_bq">
<code>
cp -ar <source> <dest><br />
</code>
</blockquote>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-5751743333728160012.post-58318644689356578922013-06-27T12:47:00.000-06:002013-07-02T10:34:41.488-06:00Set Linux Server screen resolution in VirtualBoxAfter a bit of headache, I came across the magic combination that finally worked.<br />
I'm using OSX as a host, and Ubuntu 10.04 as a guest.<br />
<br />
First install guest additions. Run<br />
<blockquote><code>sudo apt-get install virtualbox-guest-additions<br /></code></blockquote>
OR <br />
Click 'Devices'->'Install Guest Additions...', and mount the cdrom:<br />
<blockquote>
<code>sudo mkdir /media/cdrom<br />
sudo mount /dev/cdrom /media/cdrom<br />
sudo /media/cdrom/VBoxLinuxAdditions.run<br />
</code></blockquote>
<br />
Add the following to /etc/default/grub<br />
<blockquote>
<code class="prettyprint lang-sh">GRUB_GFXMODE=1024x768<br />
GRUB_GFXPAYLOAD_LINUX=keep</code></blockquote>
<br />
After editing the /etc/default/grub run:<br />
<blockquote>
<code>sudo update-grub<br />
sudo reboot</code></blockquote>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-1995796000496170182011-05-17T17:10:00.012-06:002011-05-17T19:21:01.082-06:00Windows Shutdown VBScriptA friend of mine asked me to help figure out why her <a href="http://ciaduck.blogspot.com/2010/02/how-to-timed-shutdown.html">shutdown script</a> was not working. For those who don't care to read that whole article, it looked something like this:<div><br /><div><div><div><blockquote><code>@echo off<br />echo Scheduling shutdown in 1.5 hours.<br />shutdown.exe /h /t 5400</code></blockquote></div><div><br /></div><div>As it turns out, you can't actually use /h with /t. (Although /s works fine with /t) My solution was to learn some VBScript and kill the problem with excessive firepower! All you need to do is type the following code into an editor and save it as a *.vbs file. (I called mine Hibernate.vbs) I placed it right on the desktop for quick access.</div></div></div><div><br /></div><div><blockquote><code class="prettyprint lang-vb">hours = 0.001 'Specify the # of hours to sleep here<br />seconds = hours * 60 * 60<br />ms = seconds * 1000<br /><br />Set wshShell = WScript.CreateObject("WScript.Shell")<br />WScript.Echo("Hibernate in " & seconds & " seconds")<br />WScript.Sleep(ms)<br />cancel = wshShell.Popup("Cancel Hibernate?", 10, "System Shutdown!", VbYesNo + VbExclamation)<br />If cancel = VbYes Then<br />  WScript.Quit(0)<br />End If<br />wshShell.Run("shutdown.exe /h")<br /></code></blockquote><div><br /></div>This script will inform the user that hibernation will occur. Once the user presses OK then it will wait the specified number of hours before re-informing the user that hibernation is happening. If the user doesn't respond or opt to cancel, then the script continues and the computer is sent into hibernation.</div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-91814860288665069722011-04-20T16:53:00.010-06:002011-05-17T17:41:31.186-06:00Testing Google Code PrettifierStumbled across a code prettifier that can be used for blogger from google code.<br /><br />You can set it up for yourself. Here is a link to the stackoverflow page that outlines the setup.<br /><br /><div><a href="http://stackoverflow.com/questions/1852537/how-to-use-prettify-with-blogger-blogspot">http://stackoverflow.com/questions/1852537/how-to-use-prettify-with-blogger-blogspot</a></div><div><a href="http://stackoverflow.com/questions/1852537/how-to-use-prettify-with-blogger-blogspot"></a><br /><blockquote><code class="prettyprint">#!/bin/perl<br />#simple test code<br /><br />$variable = "Test stuff";<br />$another = 100;<br />$decimal = 99.9;<br />$special = 1x01;<br /><br />print("Prettify me! %s", $variable);<br /></code></blockquote><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-86536376860054856502011-03-06T22:29:00.020-07:002011-04-24T01:08:56.424-06:00VM - Speeding Up A Linux Guest<div style="text-align: left;">Recently I was having an issue with a my CentOS guest running slowly in VirtualBox. Evidently this has something to do with the interrupt checking interval of the Linux system being at 1GHz.</div><div style="text-align: center;"><br /></div><div>To force the guest to use an interrupt check at only 100Hz, the divider=10 kernel option should be set. </div><div><br /></div><div>Follow these steps:</div><div><ul><li>Use the root account (su)</li><li>Edit the /boot/grub/grub.conf file</li><li>add "divider=10" to the end of the kernel line</li></ul><div>Here is a sample of the modified grub.conf.</div></div><div><blockquote><code><div># grub.conf generated by anaconda</div><div>#</div><div># Note that you do not have to rerun grub after making changes to this file</div><div># NOTICE: You have a /boot partition. This means that</div><div># all kernel and initrd paths are relative to /boot/, eg.</div><div># root (hd0,0)</div><div># kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00</div><div># initrd /initrd-version.img</div><div>#boot=/dev/sda</div><div>default=0</div><div>timeout=5</div><div>splashimage=(hd0,0)/grub/splash.xpm.gz</div><div>hiddenmenu</div><div>title CentOS (2.6.18-194.32.1.el5)</div><div> root (hd0,0)</div><div> kernel /vmlinuz-2.6.18-194.32.1.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet divider=10</div><div> initrd /initrd-2.6.18-194.32.1.el5.img</div><div>title CentOS (2.6.18-194.el5)</div><div> root (hd0,0)</div><div><span class="Apple-style-span"> kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet divider=10</span></div><div> initrd /initrd-2.6.18-194.el5.img</div></code></blockquote></div><div><br /></div><div>You can use cat /proc/cmdline in order to check if it took.</div><div></div><blockquote><code><div>~ $ cat /proc/cmdline</div><div>ro root=/dev/VolGroup00/LogVol00 rhgb quiet divider=10</div></code></blockquote><div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-26022767264207210332010-07-24T00:21:00.007-06:002010-07-24T00:53:40.009-06:00How to: 2 (or more) Router NetworkingThere are a lot of great places online to read about subnets and routing. It's worth a quick read, and the information is consistently repeated everywhere. There isn't however a whole lot on how to set up a network with two routers or on using subnets.<br /><br />Here is what I figured out after a long night of toying with things:<div><ul><li> If you want to use two routers in a network, just connect the WAN port of the second router into a LAN port on the first one. </li></ul><div>Simple right? I can't believe it took me so long to figure this simple concept out. But<span class="Apple-style-span" style="color:#CC0000;"> before you go just plugging routers into one another</span>, you have to take some initial steps to ensure they play nicely. Here they are:</div><div><ul><li>Make sure your routers are using different subnets/assigning different (unique) IP ranges.<br /><span class="Apple-tab-span" style="white-space:pre"> </span>(Mine use 192.168.1.1 and 192.168.0.1 with subnet mask 255.255.255.0)</li><li>Make sure you understand <a href="http://uw714doc.sco.com/en/NET_tcpip/SetUpSubnetsRouters.html">subnet masking</a> to some small extent.</li><li>Draw up how you want your network to behave/look before you get started. This is often a good idea for larger more complex networks.<br /></li><li>Make sure there is no contention between wireless and other network settings. (i.e. turn off or reconfigure wireless to be different across the hardware.)</li><li>Assign all secondary hardware with static IP's in the range of the primary. (Obviously don't use an IP already in use like 192.168.1.1)</li></ul><div>Once you've set up two routers to map hosts on two different subnets, it's time to link them together. Plug the WAN port of your secondary router (Mine was subnet 0) into a LAN port of your primary (subnet 1). The network on your secondary router should now be able to reach the internet and also network hosts on your primary router.<br /><br /></div><div>However, if you want the hosts on subnet 1 to see subnet 0 then you need to set up a small and simple routing rule on the primary router. The routing rule looks something like this:<br /><br /><table border="1"><tbody><tr><th>Destination</th><th>Subnet Mask</th><th>Gateway</th></tr><tr><td>192.168.0.1</td><td>255.255.255.0</td><td>192.168.1.2</td></tr></tbody></table><br /></div><div>Where 192.168.1.2 is the external (static) IP of subnet 0, the secondary router. The internal IP of subnet 0 is still 192.168.0.1. And with this new routing rule you can now access it from the primary network.</div><div><br /></div><div>Happy Routing!<br /><br /></div></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-18794922577731692422010-05-17T20:49:00.002-06:002010-05-17T20:57:29.122-06:00JavaScript PingAfter doing mountains of research and testing on the subject, I've come to the unfortunate conclusion that a Client-Side JavaScript Ping program is impossible to do. <div><br /></div><div>I thought that maybe I'd be able to monkey around in some clever way of using page-loads and time measuring, but it doesn't work. Unfortunately the event handler for onLoad doesn't work exactly how you would expect thus the getTime() function doesn't actually time the page load.</div><div><br /></div><div>I thought I could work around this by opening new windows, and time it with the window.onLoad event, but this didn't work out either.</div><div><br /></div><div>Curse you JavaScript! This is something that would be very beneficial for better web software! I suppose I may be able to implement this in VBScript instead. There will be news if I have any success.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-9098220284317623422010-05-02T22:48:00.003-06:002010-05-02T22:55:57.013-06:00DNS IssueI recently solved a problem with my ISP's DNS lookup. Google Chrome was waiting forever on loading pages that weren't already DNS cached. I could tell this because they spent a long time on the "Resolving Host" phase, then they would report back with "Page Unavailable".<br /><br />Further diagnosis included using cmd tools. I used `nslookup` in order to force responses from my local ISP's DNS. While the responses didn't usually take more than a few seconds, there was definitely a problem somewhere. I then changed my DNS in windows to use the Google Public DNS. This seems to have solved my issue.<div><br /></div><div>While I'm aware that DNS lookup on the Google servers would probably take slightly longer than my ISP's, Google doesn't have the problem of timing out on ever uncached request. I've been using Google Public DNS for 4 days now, and everything is just awesome.</div><div><br /></div><div>Google Public DNS Servers are:</div><div><ul><li>8.8.8.8</li><li>8.8.4.4</li></ul></div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-5751743333728160012.post-88627152222051985632010-02-12T14:26:00.004-07:002010-02-12T15:04:03.628-07:00Removing Old Windows Boot on Windows 7Something that started to get on my nerves was the fact that every time I booted my machine, it would ask me if I wanted to boot my older version of windows. I did some searching and came up with a quick and painless solution.<div><br /></div><div>In Windows 7 you have to use a configuration tool for the boot menu. You can no longer just edit the boot.ini file. To do this you need to run "cmd" as administrator.</div><div><br /></div><div>Use bcdedit /enum to look at the boot list.</div><div><div></div><blockquote><code><div>C:\Windows\system32>bcdedit /enum</div><div><br /></div><div>Windows Boot Manager</div><div>--------------------</div><div>identifier {bootmgr}</div><div>device partition=C:</div><div>description Windows Boot Manager</div><div>locale en-US</div><div>inherit {globalsettings}</div><div>default {current}</div><div>resumeobject {7a4f5321-daf0-11de-a4b9-b9516570860e}</div><div>displayorder {current}</div><div>toolsdisplayorder {memdiag}</div><div>timeout 30</div><div><br /></div><div>Windows Boot Loader</div><div>-------------------</div><div>identifier {current}</div><div>device partition=C:</div><div>path \Windows\system32\winload.exe</div><div>description Windows 7</div><div>locale en-US</div><div>inherit {bootloadersettings}</div><div>recoverysequence {7a4f5323-daf0-11de-a4b9-b9516570860e}</div><div>recoveryenabled Yes</div><div>osdevice partition=C:</div><div>systemroot \Windows</div><div>resumeobject {7a4f5321-daf0-11de-a4b9-b9516570860e}</div><div>nx OptIn</div><div>numproc 2</div><div>usefirmwarepcisettings No</div></code></blockquote><code></code><div></div><div><b><span class="Apple-style-span" style="color:#CC0000;">Warning! You can seriously mess up your system if you don't know what you are doing here. Do NOT delete {current} or {bootmgr}</span></b></div><div><b><span class="Apple-style-span" style="color:#CC0000;"><br /></span></b></div><div>Use the identifier property to delete unwanted boot options. In my case I had one that was {ntldr} for my old windows. So I used:</div><div><br /></div><div><blockquote><code>bcdedit /f /delete {ntldr}</code></blockquote></div><div><br /></div><div>Thats all there is to it! Happy booting.</div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-57926852718821036592010-02-10T21:17:00.004-07:002011-04-24T01:09:50.905-06:00How To: Timed Shutdown<div>I've decided I need to reduce my electrical bill, but I often like to have my computer on while I'm trying to sleep. After some researching I figured out how to write a batch script to shutdown my computer after some time. Here is how:</div><div><br /></div><div>When Windows shuts down it actually executes a program to do all the "dirty" work. Turns out this program is called "shutdown" and is accessible through the run box and in command prompt. If you open a command prompt window and type "shutdown" the following help text is displayed:</div><div><blockquote><code><div>Usage: shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e] [/f]</div><div> [/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]]</div><div><br /></div><div> No args Display help. This is the same as typing /?.</div><div> /? Display help. This is the same as not typing any options.</div><div> /i Display the graphical user interface (GUI).</div><div> This must be the first option.</div><div> /l Log off. This cannot be used with /m or /d options.</div><div> /s Shutdown the computer.</div><div> /r Shutdown and restart the computer.</div><div> /g Shutdown and restart the computer. After the system is</div><div> rebooted, restart any registered applications.</div><div> /a Abort a system shutdown.</div><div> This can only be used during the time-out period.</div><div> /p Turn off the local computer with no time-out or warning.</div><div> Can be used with /d and /f options.</div><div> /h Hibernate the local computer.</div><div> Can be used with the /f option.</div><div> /e Document the reason for an unexpected shutdown of a computer.</div><div> /m \\computer Specify the target computer.</div><div> /t xxx Set the time-out period before shutdown to xxx seconds.</div><div> The valid range is 0-315360000 (10 years), with a default of 30.</div><div> If the timeout period is greater than 0, the /f parameter is</div><div> implied.</div><div> /c "comment" Comment on the reason for the restart or shutdown.</div><div> Maximum of 512 characters allowed.</div><div> /f Force running applications to close without forewarning users.</div><div> The /f parameter is implied when a value greater than 0 is</div><div> specified for the /t parameter.</div><div> /d [p|u:]xx:yy Provide the reason for the restart or shutdown.</div><div> p indicates that the restart or shutdown is planned.</div><div> u indicates that the reason is user defined.</div><div> If neither p nor u is specified the restart or shutdown is</div><div> unplanned.</div><div> xx is the major reason number (positive integer less than 256).</div><div> yy is the minor reason number (positive integer less than 65536).</div></code></blockquote><div>The important thing to take from this is that we can use /t and an alloted time in seconds to schedule a shutdown. Using this switch, I wrote a simple little batch script (called shutdown.bat) that now resides on my desktop. Here is what it looks like:</div><div><br /></div><div><div></div><blockquote><code class="prettyprint"><div>@echo off</div><div>echo Scheduling shutdown in one hour.</div><div>shutdown.exe /s /t 3600</div></code></blockquote><code></code><div></div><div><br /></div><div>All I need to do is double click the icon when I want to turn off my computer in the next hour. You could modify this line to suit your needs with a longer time in seconds, or maybe /h for hibernate instead of /s for shutdown.</div><div><br /></div><div>Feel free to email me with questions.</div></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-78812122443026506112009-12-07T04:17:00.006-07:002009-12-07T05:15:18.142-07:00Leveling Out Audio in a Single Track<object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/E_0zdUazK1o&hl=en_US&fs=1&"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/E_0zdUazK1o&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object><br /><br /><div>Tragic things can happen when mixing audio or video clips from multiple sources. Sound levels (read: volume) can fluctuate erratically, causing the resulting splice of tracks to be inaudible. To stop your viewers from having to play games with their volume nobs while watching your videos we will cover some techniques here to remedy the problem.</div><br />Tools you will need: <div><ul><li>Software to process audio tracks (I use Audacity.) </li><li>And something to mux/demux Video (I use VirtualDub.)</li></ul><div>Audacity - <a href="http://audacity.sourceforge.net/download/">http://audacity.sourceforge.net/download/</a></div><div>VirtualDub - <a href="http://virtualdub.sourceforge.net/">http://virtualdub.sourceforge.net/</a></div><div><br /></div><div>Some points I would like to make: </div><div><ol><li>If you can run a filter called "Normalize" on all the tracks you are mixing. This will make it so that everything has the same maximum volume. If you do this you avoid having to do...</li><li><a href="http://en.wikipedia.org/wiki/Dynamic_range_compression">Dynamic Range Compression</a> should not be confused with plain Compression. Compression refers to making a file smaller. (We will be doing Dynamic Range Compression)</li></ol><div>If you can find other software to do these things then good for you! (There is more than one way to skin a moose.)<br /></div></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5751743333728160012.post-72676240589848887762009-12-04T00:25:00.003-07:002009-12-04T00:40:18.182-07:00Virtual CloneDriveThis is the best Optical Drive emulation in existence right now (in my opinion). I used to use Alcohol, but they started wanting money. I used Daemon Tools, but they added spy/mal/adware. So now I turn back to ElaborateBytes and SlySoft. These developers really know how to please.<br /><br />Virtual CloneDrive has a lot going for it. From great emulation to a humble price tag (i.e. free), you can expect the unexpected. The main selling point for this is that it is from a company I trust, and it is free (cause I'm poor). This thing is easy to install, and easy to use. It isn't very complex or bloated with features you probably wont use. It has a little tray icon that starts up when windows does and hides out in your task bar. You can turn this off, but I've stopped caring about programs that hide down there since Windows 7.<br /><br />A potential downside, it does install its own drivers on your computer. While this isn't a big deal, it does bother some people.<br /><br />I'm just waiting for Microsoft to figure out that people really do want to emulate CD Drives so they don't have to burn a disk image every time! It was kind of them to include the ability to burn ISO files natively in Windows 7. But seriously. Why waste a disk unless you are giving it to a friend or loading a new OS?<br /><br />Virtual CloneDrive can be found here: <a href="http://www.slysoft.com/en/download.html">http://www.slysoft.com/en/download.html</a>Unknownnoreply@blogger.com0